/*!
 * DevExtreme (dx.web.debug.js)
 * Version: 20.1.4
 * Build date: Tue Jun 02 2020
 *
 * Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
"use strict";
! function(modules) {
    var installedModules = {};

    function __webpack_require__(moduleId) {
        if (installedModules[moduleId]) {
            return installedModules[moduleId].exports
        }
        var module = installedModules[moduleId] = {
            i: moduleId,
            l: false,
            exports: {}
        };
        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
        module.l = true;
        return module.exports
    }
    __webpack_require__.m = modules;
    __webpack_require__.c = installedModules;
    __webpack_require__.d = function(exports, name, getter) {
        if (!__webpack_require__.o(exports, name)) {
            Object.defineProperty(exports, name, {
                configurable: false,
                enumerable: true,
                get: getter
            })
        }
    };
    __webpack_require__.n = function(module) {
        var getter = module && module.__esModule ? function() {
            return module.default
        } : function() {
            return module
        };
        __webpack_require__.d(getter, "a", getter);
        return getter
    };
    __webpack_require__.o = function(object, property) {
        return Object.prototype.hasOwnProperty.call(object, property)
    };
    __webpack_require__.p = "";
    return __webpack_require__(__webpack_require__.s = 913)
}([
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/extend.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isPlainObject = __webpack_require__( /*! ./type */ 1).isPlainObject;
        var extendFromObject = function(target, source, overrideExistingValues) {
            target = target || {};
            for (var prop in source) {
                if (Object.prototype.hasOwnProperty.call(source, prop)) {
                    var value = source[prop];
                    if (!(prop in target) || overrideExistingValues) {
                        target[prop] = value
                    }
                }
            }
            return target
        };
        var extend = function extend(target) {
            target = target || {};
            var i = 1;
            var deep = false;
            if ("boolean" === typeof target) {
                deep = target;
                target = arguments[1] || {};
                i++
            }
            for (; i < arguments.length; i++) {
                var source = arguments[i];
                if (null == source) {
                    continue
                }
                for (var key in source) {
                    var targetValue = target[key];
                    var sourceValue = source[key];
                    var sourceValueIsArray = false;
                    var clone = void 0;
                    if ("__proto__" === key || target === sourceValue) {
                        continue
                    }
                    if (deep && sourceValue && (isPlainObject(sourceValue) || (sourceValueIsArray = Array.isArray(sourceValue)))) {
                        if (sourceValueIsArray) {
                            clone = targetValue && Array.isArray(targetValue) ? targetValue : []
                        } else {
                            clone = targetValue && isPlainObject(targetValue) ? targetValue : {}
                        }
                        target[key] = extend(deep, clone, sourceValue)
                    } else {
                        if (void 0 !== sourceValue) {
                            target[key] = sourceValue
                        }
                    }
                }
            }
            return target
        };
        exports.extend = extend;
        exports.extendFromObject = extendFromObject
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/type.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var types = {
            "[object Array]": "array",
            "[object Date]": "date",
            "[object Object]": "object",
            "[object String]": "string",
            "[object Null]": "null"
        };
        var type = function(object) {
            var typeOfObject = Object.prototype.toString.call(object);
            return "object" === _typeof(object) ? types[typeOfObject] || "object" : _typeof(object)
        };
        var isBoolean = function(object) {
            return "boolean" === typeof object
        };
        var isExponential = function(value) {
            return isNumeric(value) && value.toString().indexOf("e") !== -1
        };
        var isDate = function(object) {
            return "date" === type(object)
        };
        var isDefined = function(object) {
            return null !== object && void 0 !== object
        };
        var isFunction = function(object) {
            return "function" === typeof object
        };
        var isString = function(object) {
            return "string" === typeof object
        };
        var isNumeric = function(object) {
            return "number" === typeof object && isFinite(object) || !isNaN(object - parseFloat(object))
        };
        var isObject = function(object) {
            return "object" === type(object)
        };
        var isEmptyObject = function(object) {
            var property;
            for (property in object) {
                return false
            }
            return true
        };
        var isPlainObject = function(object) {
            if (!object || "[object Object]" !== Object.prototype.toString.call(object)) {
                return false
            }
            var proto = Object.getPrototypeOf(object);
            var ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
            return "function" === typeof ctor && Object.toString.call(ctor) === Object.toString.call(Object)
        };
        var isPrimitive = function(value) {
            return ["object", "array", "function"].indexOf(type(value)) === -1
        };
        var isWindow = function(object) {
            return null != object && object === object.window
        };
        var isRenderer = function(object) {
            return !!(object.jquery || object.dxRenderer)
        };
        var isPromise = function(object) {
            return object && isFunction(object.then)
        };
        var isDeferred = function(object) {
            return object && isFunction(object.done) && isFunction(object.fail)
        };
        exports.isBoolean = isBoolean;
        exports.isExponential = isExponential;
        exports.isDate = isDate;
        exports.isDefined = isDefined;
        exports.isFunction = isFunction;
        exports.isString = isString;
        exports.isNumeric = isNumeric;
        exports.isObject = isObject;
        exports.isEmptyObject = isEmptyObject;
        exports.isPlainObject = isPlainObject;
        exports.isPrimitive = isPrimitive;
        exports.isWindow = isWindow;
        exports.isRenderer = isRenderer;
        exports.isPromise = isPromise;
        exports.isDeferred = isDeferred;
        exports.type = type
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/core/renderer.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var rendererBase = __webpack_require__( /*! ./renderer_base */ 268);
        module.exports = rendererBase.get()
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/common.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _config = __webpack_require__( /*! ../config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _guid = __webpack_require__( /*! ../guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _deferred = __webpack_require__( /*! ../utils/deferred */ 6);
        var _data = __webpack_require__( /*! ./data */ 20);
        var _iterator = __webpack_require__( /*! ./iterator */ 4);
        var _type = __webpack_require__( /*! ./type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var ensureDefined = function(value, defaultValue) {
            return (0, _type.isDefined)(value) ? value : defaultValue
        };
        var executeAsync = function(action, context) {
            var deferred = new _deferred.Deferred;
            var normalizedContext = context || this;
            var task = {
                promise: deferred.promise(),
                abort: function() {
                    clearTimeout(timerId);
                    deferred.rejectWith(normalizedContext)
                }
            };
            var callback = function() {
                var result = action.call(normalizedContext);
                if (result && result.done && (0, _type.isFunction)(result.done)) {
                    result.done(function() {
                        deferred.resolveWith(normalizedContext)
                    })
                } else {
                    deferred.resolveWith(normalizedContext)
                }
            };
            var timerId = (arguments[2] || setTimeout)(callback, "number" === typeof context ? context : 0);
            return task
        };
        var delayedFuncs = [];
        var delayedNames = [];
        var delayedDeferreds = [];
        var executingName;
        var deferExecute = function(name, func, deferred) {
            if (executingName && executingName !== name) {
                delayedFuncs.push(func);
                delayedNames.push(name);
                deferred = deferred || new _deferred.Deferred;
                delayedDeferreds.push(deferred);
                return deferred
            } else {
                var oldExecutingName = executingName;
                var currentDelayedCount = delayedDeferreds.length;
                executingName = name;
                var result = func();
                if (!result) {
                    if (delayedDeferreds.length > currentDelayedCount) {
                        result = _deferred.when.apply(this, delayedDeferreds.slice(currentDelayedCount))
                    } else {
                        if (deferred) {
                            deferred.resolve()
                        }
                    }
                }
                executingName = oldExecutingName;
                if (deferred && result && result.done) {
                    result.done(deferred.resolve).fail(deferred.reject)
                }
                if (!executingName && delayedFuncs.length) {
                    ("render" === delayedNames.shift() ? deferRender : deferUpdate)(delayedFuncs.shift(), delayedDeferreds.shift())
                }
                return result || (0, _deferred.when)()
            }
        };
        var deferRender = function(func, deferred) {
            return deferExecute("render", func, deferred)
        };
        var deferUpdate = function(func, deferred) {
            return deferExecute("update", func, deferred)
        };
        var deferRenderer = function(func) {
            return function() {
                var that = this;
                return deferExecute("render", function() {
                    return func.call(that)
                })
            }
        };
        var deferUpdater = function(func) {
            return function() {
                var that = this;
                return deferExecute("update", function() {
                    return func.call(that)
                })
            }
        };
        var findBestMatches = function(targetFilter, items, mapFn) {
            var bestMatches = [];
            var maxMatchCount = 0;
            (0, _iterator.each)(items, function(index, itemSrc) {
                var matchCount = 0;
                var item = mapFn ? mapFn(itemSrc) : itemSrc;
                (0, _iterator.each)(targetFilter, function(paramName, targetValue) {
                    var value = item[paramName];
                    if (void 0 === value) {
                        return
                    }
                    if (match(value, targetValue)) {
                        matchCount++;
                        return
                    }
                    matchCount = -1;
                    return false
                });
                if (matchCount < maxMatchCount) {
                    return
                }
                if (matchCount > maxMatchCount) {
                    bestMatches.length = 0;
                    maxMatchCount = matchCount
                }
                bestMatches.push(itemSrc)
            });
            return bestMatches
        };
        var match = function(value, targetValue) {
            if (Array.isArray(value) && Array.isArray(targetValue)) {
                var mismatch = false;
                (0, _iterator.each)(value, function(index, valueItem) {
                    if (valueItem !== targetValue[index]) {
                        mismatch = true;
                        return false
                    }
                });
                if (mismatch) {
                    return false
                }
                return true
            }
            if (value === targetValue) {
                return true
            }
            return false
        };
        var splitPair = function(raw) {
            switch (_typeof(raw)) {
                case "string":
                    return raw.split(/\s+/, 2);
                case "object":
                    return [raw.x || raw.h, raw.y || raw.v];
                case "number":
                    return [raw];
                default:
                    return raw
            }
        };
        var normalizeKey = function(id) {
            var key = (0, _type.isString)(id) ? id : id.toString();
            var arr = key.match(/[^a-zA-Z0-9_]/g);
            arr && (0, _iterator.each)(arr, function(_, sign) {
                key = key.replace(sign, "__" + sign.charCodeAt() + "__")
            });
            return key
        };
        var denormalizeKey = function(key) {
            var arr = key.match(/__\d+__/g);
            arr && arr.forEach(function(char) {
                var charCode = parseInt(char.replace("__", ""));
                key = key.replace(char, String.fromCharCode(charCode))
            });
            return key
        };
        var pairToObject = function(raw, preventRound) {
            var pair = splitPair(raw);
            var h = preventRound ? parseFloat(pair && pair[0]) : parseInt(pair && pair[0], 10);
            var v = preventRound ? parseFloat(pair && pair[1]) : parseInt(pair && pair[1], 10);
            if (!isFinite(h)) {
                h = 0
            }
            if (!isFinite(v)) {
                v = h
            }
            return {
                h: h,
                v: v
            }
        };
        var getKeyHash = function(key) {
            if (key instanceof _guid2.default) {
                return key.toString()
            } else {
                if ((0, _type.isObject)(key) || Array.isArray(key)) {
                    try {
                        var keyHash = JSON.stringify(key);
                        return "{}" === keyHash ? key : keyHash
                    } catch (e) {
                        return key
                    }
                }
            }
            return key
        };
        var escapeRegExp = function(string) {
            return string.replace(/[[\]{}\-()*+?.\\^$|\s]/g, "\\$&")
        };
        var applyServerDecimalSeparator = function(value) {
            var separator = (0, _config2.default)().serverDecimalSeparator;
            if ((0, _type.isDefined)(value)) {
                value = value.toString().replace(".", separator)
            }
            return value
        };
        var noop = function() {};
        var asyncNoop = function() {
            return (new _deferred.Deferred).resolve().promise()
        };
        var grep = function(elements, checkFunction, invert) {
            var result = [];
            var check;
            var expectedCheck = !invert;
            for (var i = 0; i < elements.length; i++) {
                check = !!checkFunction(elements[i], i);
                if (check === expectedCheck) {
                    result.push(elements[i])
                }
            }
            return result
        };
        var arraysEqualByValue = function(array1, array2, depth) {
            if (array1.length !== array2.length) {
                return false
            }
            for (var i = 0; i < array1.length; i++) {
                if (!equalByValue(array1[i], array2[i], depth + 1)) {
                    return false
                }
            }
            return true
        };
        var objectsEqualByValue = function(object1, object2, depth, strict) {
            for (var propertyName in object1) {
                if (Object.prototype.hasOwnProperty.call(object1, propertyName) && !equalByValue(object1[propertyName], object2[propertyName], depth + 1, strict)) {
                    return false
                }
            }
            for (var _propertyName in object2) {
                if (!(_propertyName in object1)) {
                    return false
                }
            }
            return true
        };
        var maxEqualityDepth = 3;
        var equalByValue = function(object1, object2) {
            var depth = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
            var strict = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : true;
            object1 = (0, _data.toComparable)(object1, true);
            object2 = (0, _data.toComparable)(object2, true);
            var comparisonResult = strict ? object1 === object2 : object1 == object2;
            if (comparisonResult || depth >= maxEqualityDepth) {
                return true
            }
            if ((0, _type.isObject)(object1) && (0, _type.isObject)(object2)) {
                return objectsEqualByValue(object1, object2, depth, strict)
            } else {
                if (Array.isArray(object1) && Array.isArray(object2)) {
                    return arraysEqualByValue(object1, object2, depth)
                }
            }
            return false
        };
        exports.ensureDefined = ensureDefined;
        exports.executeAsync = executeAsync;
        exports.deferRender = deferRender;
        exports.deferRenderer = deferRenderer;
        exports.deferUpdate = deferUpdate;
        exports.deferUpdater = deferUpdater;
        exports.pairToObject = pairToObject;
        exports.splitPair = splitPair;
        exports.findBestMatches = findBestMatches;
        exports.normalizeKey = normalizeKey;
        exports.denormalizeKey = denormalizeKey;
        exports.getKeyHash = getKeyHash;
        exports.escapeRegExp = escapeRegExp;
        exports.applyServerDecimalSeparator = applyServerDecimalSeparator;
        exports.noop = noop;
        exports.asyncNoop = asyncNoop;
        exports.grep = grep;
        exports.equalByValue = equalByValue
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/iterator.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var map = function(values, callback) {
            if (Array.isArray(values)) {
                return values.map(callback)
            }
            var result = [];
            for (var key in values) {
                result.push(callback(values[key], key))
            }
            return result
        };
        var each = function(values, callback) {
            if (!values) {
                return
            }
            if ("length" in values) {
                for (var i = 0; i < values.length; i++) {
                    if (false === callback.call(values[i], i, values[i])) {
                        break
                    }
                }
            } else {
                for (var key in values) {
                    if (false === callback.call(values[key], key, values[key])) {
                        break
                    }
                }
            }
            return values
        };
        var reverseEach = function(array, callback) {
            if (!array || !("length" in array) || 0 === array.length) {
                return
            }
            for (var i = array.length - 1; i >= 0; i--) {
                if (false === callback.call(array[i], i, array[i])) {
                    break
                }
            }
        };
        exports.map = map;
        exports.each = each;
        exports.reverseEach = reverseEach
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/events/core/events_engine.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _event_registrator_callbacks = __webpack_require__( /*! ./event_registrator_callbacks */ 130);
        var _event_registrator_callbacks2 = _interopRequireDefault(_event_registrator_callbacks);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _dependency_injector = __webpack_require__( /*! ../../core/utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _weak_map = __webpack_require__( /*! ../../core/polyfills/weak_map */ 184);
        var _weak_map2 = _interopRequireDefault(_weak_map);
        var _hook_touch_props = __webpack_require__( /*! ../../events/core/hook_touch_props */ 269);
        var _hook_touch_props2 = _interopRequireDefault(_hook_touch_props);
        var _call_once = __webpack_require__( /*! ../../core/utils/call_once */ 80);
        var _call_once2 = _interopRequireDefault(_call_once);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var window = _window2.default.getWindow();
        var isWindow = _type2.default.isWindow;
        var isFunction = _type2.default.isFunction;
        var isString = _type2.default.isString;
        var EMPTY_EVENT_NAME = "dxEmptyEventType";
        var NATIVE_EVENTS_TO_SUBSCRIBE = {
            mouseenter: "mouseover",
            mouseleave: "mouseout",
            pointerenter: "pointerover",
            pointerleave: "pointerout"
        };
        var NATIVE_EVENTS_TO_TRIGGER = {
            focusin: "focus",
            focusout: "blur"
        };
        var NO_BUBBLE_EVENTS = ["blur", "focus", "load"];
        var forcePassiveFalseEventNames = ["touchmove", "wheel", "mousewheel", "touchstart"];

        function matchesSafe(target, selector) {
            return !isWindow(target) && "#document" !== target.nodeName && _dom_adapter2.default.elementMatches(target, selector)
        }
        var elementDataMap = new _weak_map2.default;
        var guid = 0;
        var skipEvent;
        var special = function() {
            var specialData = {};
            _event_registrator_callbacks2.default.add(function(eventName, eventObject) {
                specialData[eventName] = eventObject
            });
            return {
                getField: function(eventName, field) {
                    return specialData[eventName] && specialData[eventName][field]
                },
                callMethod: function(eventName, methodName, context, args) {
                    return specialData[eventName] && specialData[eventName][methodName] && specialData[eventName][methodName].apply(context, args)
                }
            }
        }();
        var eventsEngine = (0, _dependency_injector2.default)({
            on: getHandler(normalizeOnArguments(iterate(function(element, eventName, selector, data, handler) {
                var handlersController = getHandlersController(element, eventName);
                handlersController.addHandler(handler, selector, data)
            }))),
            one: getHandler(normalizeOnArguments(function(element, eventName, selector, data, handler) {
                var oneTimeHandler = function oneTimeHandler() {
                    eventsEngine.off(element, eventName, selector, oneTimeHandler);
                    handler.apply(this, arguments)
                };
                eventsEngine.on(element, eventName, selector, data, oneTimeHandler)
            })),
            off: getHandler(normalizeOffArguments(iterate(function(element, eventName, selector, handler) {
                var handlersController = getHandlersController(element, eventName);
                handlersController.removeHandler(handler, selector)
            }))),
            trigger: getHandler(normalizeTriggerArguments(function(element, event, extraParameters) {
                var eventName = event.type;
                var handlersController = getHandlersController(element, event.type);
                special.callMethod(eventName, "trigger", element, [event, extraParameters]);
                handlersController.callHandlers(event, extraParameters);
                var noBubble = special.getField(eventName, "noBubble") || event.isPropagationStopped() || NO_BUBBLE_EVENTS.indexOf(eventName) !== -1;
                if (!noBubble) {
                    var parents = [];
                    var getParents = function getParents(element) {
                        var parent = element.parentNode;
                        if (parent) {
                            parents.push(parent);
                            getParents(parent)
                        }
                    };
                    getParents(element);
                    parents.push(window);
                    var i = 0;
                    while (parents[i] && !event.isPropagationStopped()) {
                        var parentDataByEvent = getHandlersController(parents[i], event.type);
                        parentDataByEvent.callHandlers((0, _extend.extend)(event, {
                            currentTarget: parents[i]
                        }), extraParameters);
                        i++
                    }
                }
                if (element.nodeType || isWindow(element)) {
                    special.callMethod(eventName, "_default", element, [event, extraParameters]);
                    callNativeMethod(eventName, element)
                }
            })),
            triggerHandler: getHandler(normalizeTriggerArguments(function(element, event, extraParameters) {
                var handlersController = getHandlersController(element, event.type);
                handlersController.callHandlers(event, extraParameters)
            }))
        });

        function applyForEach(args, method) {
            var element = args[0];
            if (!element) {
                return
            }
            if (_dom_adapter2.default.isNode(element) || isWindow(element)) {
                method.apply(eventsEngine, args)
            } else {
                if (!isString(element) && "length" in element) {
                    var itemArgs = Array.prototype.slice.call(args, 0);
                    Array.prototype.forEach.call(element, function(itemElement) {
                        itemArgs[0] = itemElement;
                        applyForEach(itemArgs, method)
                    })
                } else {
                    throw _errors2.default.Error("E0025")
                }
            }
        }

        function getHandler(method) {
            return function() {
                applyForEach(arguments, method)
            }
        }

        function detectPassiveEventHandlersSupport() {
            var isSupported = false;
            try {
                var options = Object.defineProperty({}, "passive", {
                    get: function() {
                        isSupported = true;
                        return true
                    }
                });
                window.addEventListener("test", null, options)
            } catch (e) {}
            return isSupported
        }
        var passiveEventHandlersSupported = (0, _call_once2.default)(detectPassiveEventHandlersSupport);
        var contains = function(container, element) {
            return container.contains ? container.contains(element) : !!(element.compareDocumentPosition(container) & element.DOCUMENT_POSITION_CONTAINS)
        };

        function getHandlersController(element, eventName) {
            var elementData = elementDataMap.get(element);
            eventName = eventName || "";
            var eventNameParts = eventName.split(".");
            var namespaces = eventNameParts.slice(1);
            var eventNameIsDefined = !!eventNameParts[0];
            eventName = eventNameParts[0] || EMPTY_EVENT_NAME;
            if (!elementData) {
                elementData = {};
                elementDataMap.set(element, elementData)
            }
            if (!elementData[eventName]) {
                elementData[eventName] = {
                    handleObjects: [],
                    nativeHandler: null
                }
            }
            var eventData = elementData[eventName];
            return {
                addHandler: function(handler, selector, data) {
                    var callHandler = function(e, extraParameters) {
                        var handlerArgs = [e];
                        var target = e.currentTarget;
                        var relatedTarget = e.relatedTarget;
                        var secondaryTargetIsInside;
                        var result;
                        if (eventName in NATIVE_EVENTS_TO_SUBSCRIBE) {
                            secondaryTargetIsInside = relatedTarget && target && (relatedTarget === target || contains(target, relatedTarget))
                        }
                        if (void 0 !== extraParameters) {
                            handlerArgs.push(extraParameters)
                        }
                        special.callMethod(eventName, "handle", element, [e, data]);
                        if (!secondaryTargetIsInside) {
                            result = handler.apply(target, handlerArgs)
                        }
                        if (false === result) {
                            e.preventDefault();
                            e.stopPropagation()
                        }
                    };
                    var wrappedHandler = function(e, extraParameters) {
                        if (skipEvent && e.type === skipEvent) {
                            return
                        }
                        e.data = data;
                        e.delegateTarget = element;
                        if (selector) {
                            var currentTarget = e.target;
                            while (currentTarget && currentTarget !== element) {
                                if (matchesSafe(currentTarget, selector)) {
                                    e.currentTarget = currentTarget;
                                    callHandler(e, extraParameters)
                                }
                                currentTarget = currentTarget.parentNode
                            }
                        } else {
                            e.currentTarget = e.delegateTarget || e.target;
                            callHandler(e, extraParameters)
                        }
                    };
                    var handleObject = {
                        handler: handler,
                        wrappedHandler: wrappedHandler,
                        selector: selector,
                        type: eventName,
                        data: data,
                        namespace: namespaces.join("."),
                        namespaces: namespaces,
                        guid: ++guid
                    };
                    eventData.handleObjects.push(handleObject);
                    var firstHandlerForTheType = 1 === eventData.handleObjects.length;
                    var shouldAddNativeListener = firstHandlerForTheType && eventNameIsDefined;
                    var nativeListenerOptions;
                    if (shouldAddNativeListener) {
                        shouldAddNativeListener = !special.callMethod(eventName, "setup", element, [data, namespaces, handler])
                    }
                    if (shouldAddNativeListener) {
                        eventData.nativeHandler = getNativeHandler(eventName);
                        if (passiveEventHandlersSupported() && forcePassiveFalseEventNames.indexOf(eventName) > -1) {
                            nativeListenerOptions = {
                                passive: false
                            }
                        }
                        eventData.removeListener = _dom_adapter2.default.listen(element, NATIVE_EVENTS_TO_SUBSCRIBE[eventName] || eventName, eventData.nativeHandler, nativeListenerOptions)
                    }
                    special.callMethod(eventName, "add", element, [handleObject])
                },
                removeHandler: function(handler, selector) {
                    var removeByEventName = function(eventName) {
                        var eventData = elementData[eventName];
                        if (!eventData.handleObjects.length) {
                            delete elementData[eventName];
                            return
                        }
                        var removedHandler;
                        eventData.handleObjects = eventData.handleObjects.filter(function(handleObject) {
                            var skip = namespaces.length && !isSubset(handleObject.namespaces, namespaces) || handler && handleObject.handler !== handler || selector && handleObject.selector !== selector;
                            if (!skip) {
                                removedHandler = handleObject.handler;
                                special.callMethod(eventName, "remove", element, [handleObject])
                            }
                            return skip
                        });
                        var lastHandlerForTheType = !eventData.handleObjects.length;
                        var shouldRemoveNativeListener = lastHandlerForTheType && eventName !== EMPTY_EVENT_NAME;
                        if (shouldRemoveNativeListener) {
                            special.callMethod(eventName, "teardown", element, [namespaces, removedHandler]);
                            if (eventData.nativeHandler) {
                                eventData.removeListener()
                            }
                            delete elementData[eventName]
                        }
                    };
                    if (eventNameIsDefined) {
                        removeByEventName(eventName)
                    } else {
                        for (var name in elementData) {
                            removeByEventName(name)
                        }
                    }
                    var elementDataIsEmpty = 0 === Object.keys(elementData).length;
                    if (elementDataIsEmpty) {
                        elementDataMap.delete(element)
                    }
                },
                callHandlers: function(event, extraParameters) {
                    var forceStop = false;
                    var handleCallback = function(handleObject) {
                        if (forceStop) {
                            return
                        }
                        if (!namespaces.length || isSubset(handleObject.namespaces, namespaces)) {
                            handleObject.wrappedHandler(event, extraParameters);
                            forceStop = event.isImmediatePropagationStopped()
                        }
                    };
                    eventData.handleObjects.forEach(handleCallback);
                    if (namespaces.length && elementData[EMPTY_EVENT_NAME]) {
                        elementData[EMPTY_EVENT_NAME].handleObjects.forEach(handleCallback)
                    }
                }
            }
        }

        function getNativeHandler(subscribeName) {
            return function(event, extraParameters) {
                var handlersController = getHandlersController(this, subscribeName);
                event = eventsEngine.Event(event);
                handlersController.callHandlers(event, extraParameters)
            }
        }

        function isSubset(original, checked) {
            for (var i = 0; i < checked.length; i++) {
                if (original.indexOf(checked[i]) < 0) {
                    return false
                }
            }
            return true
        }

        function normalizeOnArguments(callback) {
            return function(element, eventName, selector, data, handler) {
                if (!handler) {
                    handler = data;
                    data = void 0
                }
                if ("string" !== typeof selector) {
                    data = selector;
                    selector = void 0
                }
                if (!handler && "string" === typeof eventName) {
                    handler = data || selector;
                    selector = void 0;
                    data = void 0
                }
                callback(element, eventName, selector, data, handler)
            }
        }

        function normalizeOffArguments(callback) {
            return function(element, eventName, selector, handler) {
                if ("function" === typeof selector) {
                    handler = selector;
                    selector = void 0
                }
                callback(element, eventName, selector, handler)
            }
        }

        function normalizeTriggerArguments(callback) {
            return function(element, src, extraParameters) {
                if ("string" === typeof src) {
                    src = {
                        type: src
                    }
                }
                if (!src.target) {
                    src.target = element
                }
                src.currentTarget = element;
                if (!src.delegateTarget) {
                    src.delegateTarget = element
                }
                if (!src.type && src.originalEvent) {
                    src.type = src.originalEvent.type
                }
                callback(element, src instanceof eventsEngine.Event ? src : eventsEngine.Event(src), extraParameters)
            }
        }

        function normalizeEventArguments(callback) {
            return function(src, config) {
                if (!(this instanceof eventsEngine.Event)) {
                    return new eventsEngine.Event(src, config)
                }
                if (!src) {
                    src = {}
                }
                if ("string" === typeof src) {
                    src = {
                        type: src
                    }
                }
                if (!config) {
                    config = {}
                }
                callback.call(this, src, config)
            }
        }

        function iterate(callback) {
            var iterateEventNames = function(element, eventName) {
                if (eventName && eventName.indexOf(" ") > -1) {
                    var args = Array.prototype.slice.call(arguments, 0);
                    eventName.split(" ").forEach(function(eventName) {
                        args[1] = eventName;
                        callback.apply(this, args)
                    })
                } else {
                    callback.apply(this, arguments)
                }
            };
            return function(element, eventName) {
                if ("object" === _typeof(eventName)) {
                    var args = Array.prototype.slice.call(arguments, 0);
                    for (var name in eventName) {
                        args[1] = name;
                        args[args.length - 1] = eventName[name];
                        iterateEventNames.apply(this, args)
                    }
                } else {
                    iterateEventNames.apply(this, arguments)
                }
            }
        }

        function callNativeMethod(eventName, element) {
            var nativeMethodName = NATIVE_EVENTS_TO_TRIGGER[eventName] || eventName;
            var isLinkClickEvent = function(eventName, element) {
                return "click" === eventName && "a" === element.localName
            };
            if (isLinkClickEvent(eventName, element)) {
                return
            }
            if (isFunction(element[nativeMethodName])) {
                skipEvent = eventName;
                element[nativeMethodName]();
                skipEvent = void 0
            }
        }

        function calculateWhich(event) {
            var setForMouseEvent = function(event) {
                var mouseEventRegex = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;
                return !event.which && void 0 !== event.button && mouseEventRegex.test(event.type)
            };
            var setForKeyEvent = function(event) {
                return null == event.which && 0 === event.type.indexOf("key")
            };
            if (setForKeyEvent(event)) {
                return null != event.charCode ? event.charCode : event.keyCode
            }
            if (setForMouseEvent(event)) {
                var whichByButton = {
                    1: 1,
                    2: 3,
                    3: 1,
                    4: 2
                };
                return whichByButton[event.button]
            }
            return event.which
        }

        function initEvent(EventClass) {
            if (EventClass) {
                eventsEngine.Event = EventClass;
                eventsEngine.Event.prototype = EventClass.prototype
            }
        }
        initEvent(normalizeEventArguments(function(src, config) {
            var that = this;
            var propagationStopped = false;
            var immediatePropagationStopped = false;
            var defaultPrevented = false;
            (0, _extend.extend)(that, src);
            if (src instanceof eventsEngine.Event || _window2.default.hasWindow() && src instanceof window.Event) {
                that.originalEvent = src;
                that.currentTarget = void 0
            }
            if (!(src instanceof eventsEngine.Event)) {
                (0, _extend.extend)(that, {
                    isPropagationStopped: function() {
                        return !!(propagationStopped || that.originalEvent && that.originalEvent.propagationStopped)
                    },
                    stopPropagation: function() {
                        propagationStopped = true;
                        that.originalEvent && that.originalEvent.stopPropagation()
                    },
                    isImmediatePropagationStopped: function() {
                        return immediatePropagationStopped
                    },
                    stopImmediatePropagation: function() {
                        this.stopPropagation();
                        immediatePropagationStopped = true;
                        that.originalEvent && that.originalEvent.stopImmediatePropagation()
                    },
                    isDefaultPrevented: function() {
                        return !!(defaultPrevented || that.originalEvent && that.originalEvent.defaultPrevented)
                    },
                    preventDefault: function() {
                        defaultPrevented = true;
                        that.originalEvent && that.originalEvent.preventDefault()
                    }
                })
            }
            addProperty("which", calculateWhich, that);
            if (0 === src.type.indexOf("touch")) {
                delete config.pageX;
                delete config.pageY
            }(0, _extend.extend)(that, config);
            that.guid = ++guid
        }));

        function addProperty(propName, hook, eventInstance) {
            Object.defineProperty(eventInstance || eventsEngine.Event.prototype, propName, {
                enumerable: true,
                configurable: true,
                get: function() {
                    return this.originalEvent && hook(this.originalEvent)
                },
                set: function(value) {
                    Object.defineProperty(this, propName, {
                        enumerable: true,
                        configurable: true,
                        writable: true,
                        value: value
                    })
                }
            })
        }(0, _hook_touch_props2.default)(addProperty);
        var beforeSetStrategy = (0, _callbacks2.default)();
        var afterSetStrategy = (0, _callbacks2.default)();
        eventsEngine.set = function(engine) {
            beforeSetStrategy.fire();
            eventsEngine.inject(engine);
            initEvent(engine.Event);
            afterSetStrategy.fire()
        };
        eventsEngine.subscribeGlobal = function() {
            applyForEach(arguments, normalizeOnArguments(function() {
                var args = arguments;
                eventsEngine.on.apply(this, args);
                beforeSetStrategy.add(function() {
                    var offArgs = Array.prototype.slice.call(args, 0);
                    offArgs.splice(3, 1);
                    eventsEngine.off.apply(this, offArgs)
                });
                afterSetStrategy.add(function() {
                    eventsEngine.on.apply(this, args)
                })
            }))
        };
        eventsEngine.forcePassiveFalseEventNames = forcePassiveFalseEventNames;
        eventsEngine.passiveEventHandlersSupported = passiveEventHandlersSupported;
        eventsEngine.elementDataMap = elementDataMap;
        eventsEngine.detectPassiveEventHandlersSupport = detectPassiveEventHandlersSupport;
        module.exports = eventsEngine
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/deferred.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ../utils/type */ 1);
        var isPromise = typeUtils.isPromise;
        var isDeferred = typeUtils.isDeferred;
        var extend = __webpack_require__( /*! ../utils/extend */ 0).extend;
        var Callbacks = __webpack_require__( /*! ../utils/callbacks */ 27);
        var deferredConfig = [{
            method: "resolve",
            handler: "done",
            state: "resolved"
        }, {
            method: "reject",
            handler: "fail",
            state: "rejected"
        }, {
            method: "notify",
            handler: "progress"
        }];
        var _Deferred = function() {
            var that = this;
            this._state = "pending";
            this._promise = {};
            deferredConfig.forEach(function(config) {
                var methodName = config.method;
                this[methodName + "Callbacks"] = new Callbacks;
                this[methodName] = function() {
                    return this[methodName + "With"](this._promise, arguments)
                }.bind(this);
                this._promise[config.handler] = function(handler) {
                    if (!handler) {
                        return this
                    }
                    var callbacks = that[methodName + "Callbacks"];
                    if (callbacks.fired()) {
                        handler.apply(that[methodName + "Context"], that[methodName + "Args"])
                    } else {
                        callbacks.add(function(context, args) {
                            handler.apply(context, args)
                        }.bind(this))
                    }
                    return this
                }
            }.bind(this));
            this._promise.always = function(handler) {
                return this.done(handler).fail(handler)
            };
            this._promise.catch = function(handler) {
                return this.then(null, handler)
            };
            this._promise.then = function(resolve, reject) {
                var result = new _Deferred;
                ["done", "fail"].forEach(function(method) {
                    var callback = "done" === method ? resolve : reject;
                    this[method](function() {
                        if (!callback) {
                            result["done" === method ? "resolve" : "reject"].apply(this, arguments);
                            return
                        }
                        var callbackResult = callback && callback.apply(this, arguments);
                        if (isDeferred(callbackResult)) {
                            callbackResult.done(result.resolve).fail(result.reject)
                        } else {
                            if (isPromise(callbackResult)) {
                                callbackResult.then(result.resolve, result.reject)
                            } else {
                                result.resolve.apply(this, typeUtils.isDefined(callbackResult) ? [callbackResult] : arguments)
                            }
                        }
                    })
                }.bind(this));
                return result.promise()
            };
            this._promise.state = function() {
                return that._state
            };
            this._promise.promise = function(args) {
                return args ? extend(args, that._promise) : that._promise
            };
            this._promise.promise(this)
        };
        deferredConfig.forEach(function(config) {
            var methodName = config.method;
            var state = config.state;
            _Deferred.prototype[methodName + "With"] = function(context, args) {
                var callbacks = this[methodName + "Callbacks"];
                if ("pending" === this.state()) {
                    this[methodName + "Args"] = args;
                    this[methodName + "Context"] = context;
                    if (state) {
                        this._state = state
                    }
                    callbacks.fire(context, args)
                }
                return this
            }
        });
        exports.fromPromise = function(promise, context) {
            if (isDeferred(promise)) {
                return promise
            } else {
                if (isPromise(promise)) {
                    var d = new _Deferred;
                    promise.then(function() {
                        d.resolveWith.apply(d, [context].concat([
                            [].slice.call(arguments)
                        ]))
                    }, function() {
                        d.rejectWith.apply(d, [context].concat([
                            [].slice.call(arguments)
                        ]))
                    });
                    return d
                }
            }
            return (new _Deferred).resolveWith(context, [promise])
        };
        var when = function() {
            if (1 === arguments.length) {
                return exports.fromPromise(arguments[0])
            }
            var values = [].slice.call(arguments);
            var contexts = [];
            var resolvedCount = 0;
            var deferred = new _Deferred;
            var updateState = function(i) {
                return function(value) {
                    contexts[i] = this;
                    values[i] = arguments.length > 1 ? [].slice.call(arguments) : value;
                    resolvedCount++;
                    if (resolvedCount === values.length) {
                        deferred.resolveWith(contexts, values)
                    }
                }
            };
            for (var i = 0; i < values.length; i++) {
                if (isDeferred(values[i])) {
                    values[i].promise().done(updateState(i)).fail(deferred.reject)
                } else {
                    resolvedCount++
                }
            }
            if (resolvedCount === values.length) {
                deferred.resolveWith(contexts, values)
            }
            return deferred.promise()
        };
        exports.setStrategy = function(value) {
            _Deferred = value.Deferred;
            when = value.when
        };
        exports.Deferred = function() {
            return new _Deferred
        };
        exports.when = function() {
            return when.apply(this, arguments)
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/window.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var hasWindow = function() {
            return "undefined" !== typeof window
        };
        var windowObject = hasWindow() && window;
        if (!windowObject) {
            windowObject = {};
            windowObject.window = windowObject
        }
        var getWindow = function() {
            return windowObject
        };
        var hasProperty = function(prop) {
            return hasWindow() && prop in windowObject
        };
        var defaultScreenFactorFunc = function(width) {
            if (width < 768) {
                return "xs"
            } else {
                if (width < 992) {
                    return "sm"
                } else {
                    if (width < 1200) {
                        return "md"
                    } else {
                        return "lg"
                    }
                }
            }
        };
        var getCurrentScreenFactor = function(screenFactorCallback) {
            var screenFactorFunc = screenFactorCallback || defaultScreenFactorFunc;
            var windowWidth = domAdapter.getDocumentElement().clientWidth;
            return screenFactorFunc(windowWidth)
        };
        var getNavigator = function() {
            return hasWindow() ? windowObject.navigator : {
                userAgent: ""
            }
        };
        module.exports = {
            hasWindow: hasWindow,
            getWindow: getWindow,
            hasProperty: hasProperty,
            defaultScreenFactorFunc: defaultScreenFactorFunc,
            getCurrentScreenFactor: getCurrentScreenFactor,
            getNavigator: getNavigator
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/events/utils/index.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.addNamespace = exports.getChar = exports.normalizeKeyName = exports.fireEvent = exports.createEvent = exports.setEventFixMethod = exports.needSkipEvent = exports.stopEventsSkipping = exports.forceSkipEvents = exports.hasTouches = exports.eventDelta = exports.eventData = exports.isFakeClickEvent = exports.isKeyboardEvent = exports.isTouchEvent = exports.isDxMouseWheelEvent = exports.isMouseEvent = exports.isPointerEvent = exports.eventSource = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _add_namespace = __webpack_require__( /*! ./add_namespace */ 476);
        var _add_namespace2 = _interopRequireDefault(_add_namespace);
        var _events_engine = __webpack_require__( /*! ../core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _selectors = __webpack_require__( /*! ../../ui/widget/selectors */ 66);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var KEY_MAP = {
            backspace: "backspace",
            tab: "tab",
            enter: "enter",
            escape: "escape",
            pageup: "pageUp",
            pagedown: "pageDown",
            end: "end",
            home: "home",
            arrowleft: "leftArrow",
            arrowup: "upArrow",
            arrowright: "rightArrow",
            arrowdown: "downArrow",
            "delete": "del",
            " ": "space",
            f: "F",
            a: "A",
            "*": "asterisk",
            "-": "minus",
            alt: "alt",
            control: "control",
            shift: "shift",
            left: "leftArrow",
            up: "upArrow",
            right: "rightArrow",
            down: "downArrow",
            multiply: "asterisk",
            spacebar: "space",
            del: "del",
            subtract: "minus",
            esc: "escape"
        };
        var LEGACY_KEY_CODES = {
            8: "backspace",
            9: "tab",
            13: "enter",
            27: "escape",
            33: "pageUp",
            34: "pageDown",
            35: "end",
            36: "home",
            37: "leftArrow",
            38: "upArrow",
            39: "rightArrow",
            40: "downArrow",
            46: "del",
            32: "space",
            70: "F",
            65: "A",
            106: "asterisk",
            109: "minus",
            189: "minus",
            173: "minus",
            16: "shift",
            17: "control",
            18: "alt"
        };
        var EVENT_SOURCES_REGEX = {
            dx: /^dx/i,
            mouse: /(mouse|wheel)/i,
            touch: /^touch/i,
            keyboard: /^key/i,
            pointer: /^(ms)?pointer/i
        };
        var fixMethod = function(e) {
            return e
        };
        var copyEvent = function(originalEvent) {
            return fixMethod((0, _events_engine.Event)(originalEvent, originalEvent), originalEvent)
        };
        var isDxEvent = function(e) {
            return "dx" === eventSource(e)
        };
        var isNativeMouseEvent = function(e) {
            return "mouse" === eventSource(e)
        };
        var isNativeTouchEvent = function(e) {
            return "touch" === eventSource(e)
        };
        var eventSource = exports.eventSource = function(_ref) {
            var type = _ref.type;
            var result = "other";
            (0, _iterator.each)(EVENT_SOURCES_REGEX, function(key) {
                if (this.test(type)) {
                    result = key;
                    return false
                }
            });
            return result
        };
        var isPointerEvent = exports.isPointerEvent = function(e) {
            return "pointer" === eventSource(e)
        };
        var isMouseEvent = exports.isMouseEvent = function(e) {
            return isNativeMouseEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "mouse" === e.pointerType
        };
        var isDxMouseWheelEvent = exports.isDxMouseWheelEvent = function(e) {
            return e && "dxmousewheel" === e.type
        };
        var isTouchEvent = exports.isTouchEvent = function(e) {
            return isNativeTouchEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "touch" === e.pointerType
        };
        exports.isKeyboardEvent = function(e) {
            return "keyboard" === eventSource(e)
        };
        exports.isFakeClickEvent = function(_ref2) {
            var screenX = _ref2.screenX,
                offsetX = _ref2.offsetX,
                pageX = _ref2.pageX;
            return 0 === screenX && !offsetX && 0 === pageX
        };
        exports.eventData = function(_ref3) {
            var pageX = _ref3.pageX,
                pageY = _ref3.pageY,
                timeStamp = _ref3.timeStamp;
            return {
                x: pageX,
                y: pageY,
                time: timeStamp
            }
        };
        exports.eventDelta = function(from, to) {
            return {
                x: to.x - from.x,
                y: to.y - from.y,
                time: to.time - from.time || 1
            }
        };
        exports.hasTouches = function(e) {
            var originalEvent = e.originalEvent,
                pointers = e.pointers;
            if (isNativeTouchEvent(e)) {
                return (originalEvent.touches || []).length
            }
            if (isDxEvent(e)) {
                return (pointers || []).length
            }
            return 0
        };
        var skipEvents = false;
        exports.forceSkipEvents = function() {
            return skipEvents = true
        };
        exports.stopEventsSkipping = function() {
            return skipEvents = false
        };
        exports.needSkipEvent = function(e) {
            if (skipEvents) {
                return true
            }
            var target = e.target;
            var $target = (0, _renderer2.default)(target);
            var touchInInput = $target.is("input, textarea, select");
            if ($target.is(".dx-skip-gesture-event *, .dx-skip-gesture-event")) {
                return true
            }
            if (isDxMouseWheelEvent(e)) {
                var isTextArea = $target.is("textarea") && $target.hasClass("dx-texteditor-input");
                if (isTextArea) {
                    return false
                }
                var isContentEditable = target.isContentEditable || target.hasAttribute("contenteditable");
                if (isContentEditable) {
                    return false
                }
                var isInputFocused = $target.is("input[type='number'], textarea, select") && $target.is(":focus");
                return isInputFocused
            }
            if (isMouseEvent(e)) {
                return touchInInput || e.which > 1
            }
            if (isTouchEvent(e)) {
                return touchInInput && (0, _selectors.focused)($target)
            }
        };
        exports.setEventFixMethod = function(func) {
            return fixMethod = func
        };
        var createEvent = exports.createEvent = function(originalEvent, args) {
            var event = copyEvent(originalEvent);
            args && (0, _extend.extend)(event, args);
            return event
        };
        exports.fireEvent = function(props) {
            var originalEvent = props.originalEvent,
                delegateTarget = props.delegateTarget;
            var event = createEvent(originalEvent, props);
            _events_engine2.default.trigger(delegateTarget || event.target, event);
            return event
        };
        exports.normalizeKeyName = function(_ref4) {
            var key = _ref4.key,
                which = _ref4.which;
            var isKeySupported = !!key;
            key = isKeySupported ? key : which;
            if (key) {
                if (isKeySupported) {
                    key = KEY_MAP[key.toLowerCase()] || key
                } else {
                    key = LEGACY_KEY_CODES[key] || String.fromCharCode(key)
                }
                return key
            }
        };
        exports.getChar = function(_ref5) {
            var key = _ref5.key,
                which = _ref5.which;
            return key || String.fromCharCode(which)
        };
        exports.addNamespace = _add_namespace2.default
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/core/component_registrator.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ./renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component_registrator_callbacks = __webpack_require__( /*! ./component_registrator_callbacks */ 159);
        var _component_registrator_callbacks2 = _interopRequireDefault(_component_registrator_callbacks);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _public_component = __webpack_require__( /*! ./utils/public_component */ 139);
        var _public_component2 = _interopRequireDefault(_public_component);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var registerComponent = function(name, namespace, componentClass) {
            if (!componentClass) {
                componentClass = namespace
            } else {
                namespace[name] = componentClass
            }
            _public_component2.default.name(componentClass, name);
            _component_registrator_callbacks2.default.fire(name, componentClass)
        };
        var registerRendererComponent = function(name, componentClass) {
            _renderer2.default.fn[name] = function(options) {
                var isMemberInvoke = "string" === typeof options;
                var result;
                if (isMemberInvoke) {
                    var memberName = options;
                    var memberArgs = [].slice.call(arguments).slice(1);
                    this.each(function() {
                        var instance = componentClass.getInstance(this);
                        if (!instance) {
                            throw _errors2.default.Error("E0009", name)
                        }
                        var member = instance[memberName];
                        var memberValue = member.apply(instance, memberArgs);
                        if (void 0 === result) {
                            result = memberValue
                        }
                    })
                } else {
                    this.each(function() {
                        var instance = componentClass.getInstance(this);
                        if (instance) {
                            instance.option(options)
                        } else {
                            new componentClass(this, options)
                        }
                    });
                    result = this
                }
                return result
            }
        };
        _component_registrator_callbacks2.default.add(registerRendererComponent);
        module.exports = registerComponent
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/localization/message.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dependency_injector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _string = __webpack_require__( /*! ../core/utils/string */ 43);
        var _inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var _core = __webpack_require__( /*! ./core */ 83);
        var _core2 = _interopRequireDefault(_core);
        var _default_messages = __webpack_require__( /*! ./default_messages */ 467);
        var _default_messages2 = _interopRequireDefault(_default_messages);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var baseDictionary = (0, _extend.extend)(true, {}, _default_messages2.default);
        var getDataByLocale = function(localeData, locale) {
            return localeData[locale] || {}
        };
        var newMessages = {};
        var messageLocalization = (0, _dependency_injector2.default)({
            engine: function() {
                return "base"
            },
            _dictionary: baseDictionary,
            load: function(messages) {
                (0, _extend.extend)(true, this._dictionary, messages)
            },
            _localizablePrefix: "@",
            setup: function(localizablePrefix) {
                this._localizablePrefix = localizablePrefix
            },
            localizeString: function(text) {
                var that = this;
                var regex = new RegExp("(^|[^a-zA-Z_0-9" + that._localizablePrefix + "-]+)(" + that._localizablePrefix + "{1,2})([a-zA-Z_0-9-]+)", "g");
                var escapeString = that._localizablePrefix + that._localizablePrefix;
                return text.replace(regex, function(str, prefix, escape, localizationKey) {
                    var defaultResult = that._localizablePrefix + localizationKey;
                    var result;
                    if (escape !== escapeString) {
                        result = that.format(localizationKey)
                    }
                    if (!result) {
                        newMessages[localizationKey] = (0, _inflector.humanize)(localizationKey)
                    }
                    return prefix + (result || defaultResult)
                })
            },
            localizeNode: function(node) {
                var that = this;
                (0, _renderer2.default)(node).each(function(index, nodeItem) {
                    if (!nodeItem.nodeType) {
                        return
                    }
                    if (3 === nodeItem.nodeType) {
                        nodeItem.nodeValue = that.localizeString(nodeItem.nodeValue)
                    } else {
                        if (!(0, _renderer2.default)(nodeItem).is("iframe")) {
                            (0, _iterator.each)(nodeItem.attributes || [], function(index, attr) {
                                if ("string" === typeof attr.value) {
                                    var localizedValue = that.localizeString(attr.value);
                                    if (attr.value !== localizedValue) {
                                        attr.value = localizedValue
                                    }
                                }
                            });
                            (0, _renderer2.default)(nodeItem).contents().each(function(index, node) {
                                that.localizeNode(node)
                            })
                        }
                    }
                })
            },
            getMessagesByLocales: function() {
                return this._dictionary
            },
            getDictionary: function(onlyNew) {
                if (onlyNew) {
                    return newMessages
                }
                return (0, _extend.extend)({}, newMessages, this.getMessagesByLocales()[_core2.default.locale()])
            },
            getFormatter: function(key) {
                return this._getFormatterBase(key) || this._getFormatterBase(key, "en")
            },
            _getFormatterBase: function(key, locale) {
                var _this = this;
                var message = _core2.default.getValueByClosestLocale(function(locale) {
                    return getDataByLocale(_this._dictionary, locale)[key]
                });
                if (message) {
                    return function() {
                        var args = 1 === arguments.length && Array.isArray(arguments[0]) ? arguments[0].slice(0) : Array.prototype.slice.call(arguments, 0);
                        args.unshift(message);
                        return _string.format.apply(this, args)
                    }
                }
            },
            format: function(key) {
                var formatter = this.getFormatter(key);
                var values = Array.prototype.slice.call(arguments, 1);
                return formatter && formatter.apply(this, values) || ""
            }
        });
        module.exports = messageLocalization
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/core/utils/dom.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var config = __webpack_require__( /*! ../../core/config */ 30);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ./window */ 7);
        var window = windowUtils.getWindow();
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var inArray = __webpack_require__( /*! ./array */ 14).inArray;
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var isDefined = typeUtils.isDefined;
        var isRenderer = typeUtils.isRenderer;
        var htmlParser = __webpack_require__( /*! ../../core/utils/html_parser */ 270);
        var elementStrategy;
        var resetActiveElement = function() {
            var activeElement = domAdapter.getActiveElement();
            var body = domAdapter.getBody();
            if (activeElement && activeElement !== body && activeElement.blur) {
                try {
                    activeElement.blur()
                } catch (e) {
                    body.blur()
                }
            }
        };
        var clearSelection = function() {
            var selection = window.getSelection();
            if (!selection) {
                return
            }
            if ("Caret" === selection.type) {
                return
            }
            if (selection.empty) {
                selection.empty()
            } else {
                if (selection.removeAllRanges) {
                    try {
                        selection.removeAllRanges()
                    } catch (e) {}
                }
            }
        };
        var closestCommonParent = function(startTarget, endTarget) {
            var $startTarget = $(startTarget);
            var $endTarget = $(endTarget);
            if ($startTarget[0] === $endTarget[0]) {
                return $startTarget[0]
            }
            var $startParents = $startTarget.parents();
            var $endParents = $endTarget.parents();
            var startingParent = Math.min($startParents.length, $endParents.length);
            for (var i = -startingParent; i < 0; i++) {
                if ($startParents.get(i) === $endParents.get(i)) {
                    return $startParents.get(i)
                }
            }
        };
        var triggerVisibilityChangeEvent = function(eventName) {
            var VISIBILITY_CHANGE_SELECTOR = ".dx-visibility-change-handler";
            return function(element) {
                var $element = $(element || "body");
                var changeHandlers = $element.filter(VISIBILITY_CHANGE_SELECTOR).add($element.find(VISIBILITY_CHANGE_SELECTOR));
                for (var i = 0; i < changeHandlers.length; i++) {
                    eventsEngine.triggerHandler(changeHandlers[i], eventName)
                }
            }
        };
        var uniqueId = function() {
            var counter = 0;
            return function(prefix) {
                return (prefix || "") + counter++
            }
        }();
        var dataOptionsAttributeName = "data-options";
        var getElementOptions = function(element) {
            var optionsString = $(element).attr(dataOptionsAttributeName) || "";
            return config().optionsParser(optionsString)
        };
        var createComponents = function(elements, componentTypes) {
            var result = [];
            var selector = "[" + dataOptionsAttributeName + "]";
            var $items = elements.find(selector).add(elements.filter(selector));
            $items.each(function(index, element) {
                var $element = $(element);
                var options = getElementOptions(element);
                for (var componentName in options) {
                    if (!componentTypes || inArray(componentName, componentTypes) > -1) {
                        if ($element[componentName]) {
                            $element[componentName](options[componentName]);
                            result.push($element[componentName]("instance"))
                        }
                    }
                }
            });
            return result
        };
        var createMarkupFromString = function(str) {
            if (!window.WinJS) {
                return $(htmlParser.parseHTML(str))
            }
            var tempElement = $("<div>");
            window.WinJS.Utilities.setInnerHTMLUnsafe(tempElement.get(0), str);
            return tempElement.contents()
        };
        var extractTemplateMarkup = function(element) {
            element = $(element);
            var templateTag = element.length && element.filter(function() {
                var $node = $(this);
                return $node.is("script[type]") && $node.attr("type").indexOf("script") < 0
            });
            if (templateTag.length) {
                return templateTag.eq(0).html()
            } else {
                element = $("<div>").append(element);
                return element.html()
            }
        };
        var normalizeTemplateElement = function normalizeTemplateElement(element) {
            var $element = isDefined(element) && (element.nodeType || isRenderer(element)) ? $(element) : $("<div>").html(element).contents();
            if (1 === $element.length) {
                if ($element.is("script")) {
                    $element = normalizeTemplateElement($element.html().trim())
                } else {
                    if ($element.is("table")) {
                        $element = $element.children("tbody").contents()
                    }
                }
            }
            return $element
        };
        var clipboardText = function(event, text) {
            var clipboard = event.originalEvent && event.originalEvent.clipboardData || window.clipboardData;
            if (1 === arguments.length) {
                return clipboard && clipboard.getData("Text")
            }
            clipboard && clipboard.setData("Text", text)
        };
        var contains = function(container, element) {
            if (!element) {
                return false
            }
            if (domAdapter.isTextNode(element)) {
                element = element.parentNode
            }
            if (domAdapter.isDocument(container)) {
                return container.documentElement.contains(element)
            }
            return container.contains ? container.contains(element) : !!(element.compareDocumentPosition(container) & element.DOCUMENT_POSITION_CONTAINS)
        };
        var getPublicElement = function($element) {
            return elementStrategy($element)
        };
        var setPublicElementWrapper = function(value) {
            elementStrategy = value
        };
        setPublicElementWrapper(function(element) {
            return element && element.get(0)
        });
        var createTextElementHiddenCopy = function(element, text, options) {
            var elementStyles = window.getComputedStyle($(element).get(0));
            var includePaddings = options && options.includePaddings;
            return $("<div>").text(text).css({
                fontStyle: elementStyles.fontStyle,
                fontVariant: elementStyles.fontVariant,
                fontWeight: elementStyles.fontWeight,
                fontSize: elementStyles.fontSize,
                fontFamily: elementStyles.fontFamily,
                letterSpacing: elementStyles.letterSpacing,
                border: elementStyles.border,
                paddingTop: includePaddings ? elementStyles.paddingTop : "",
                paddingRight: includePaddings ? elementStyles.paddingRight : "",
                paddingBottom: includePaddings ? elementStyles.paddingBottom : "",
                paddingLeft: includePaddings ? elementStyles.paddingLeft : "",
                visibility: "hidden",
                whiteSpace: "nowrap",
                position: "absolute",
                "float": "left"
            })
        };
        exports.setPublicElementWrapper = setPublicElementWrapper;
        exports.resetActiveElement = resetActiveElement;
        exports.createMarkupFromString = createMarkupFromString;
        exports.triggerShownEvent = triggerVisibilityChangeEvent("dxshown");
        exports.triggerHidingEvent = triggerVisibilityChangeEvent("dxhiding");
        exports.triggerResizeEvent = triggerVisibilityChangeEvent("dxresize");
        exports.getElementOptions = getElementOptions;
        exports.createComponents = createComponents;
        exports.extractTemplateMarkup = extractTemplateMarkup;
        exports.normalizeTemplateElement = normalizeTemplateElement;
        exports.clearSelection = clearSelection;
        exports.uniqueId = uniqueId;
        exports.closestCommonParent = closestCommonParent;
        exports.clipboardText = clipboardText;
        exports.contains = contains;
        exports.getPublicElement = getPublicElement;
        exports.createTextElementHiddenCopy = createTextElementHiddenCopy
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/dom_adapter.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dependency_injector = __webpack_require__( /*! ./utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _common = __webpack_require__( /*! ./utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var ELEMENT_NODE = 1;
        var TEXT_NODE = 3;
        var DOCUMENT_NODE = 9;
        var nativeDOMAdapterStrategy = {
            querySelectorAll: function(element, selector) {
                return element.querySelectorAll(selector)
            },
            elementMatches: function(element, selector) {
                var _this = this;
                var matches = element.matches || element.matchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector || function(selector) {
                    var doc = element.document || element.ownerDocument;
                    if (!doc) {
                        return false
                    }
                    var items = _this.querySelectorAll(doc, selector);
                    for (var i = 0; i < items.length; i++) {
                        if (items[i] === element) {
                            return true
                        }
                    }
                };
                return matches.call(element, selector)
            },
            createElement: function(tagName, context) {
                context = context || this._document;
                return context.createElement(tagName)
            },
            createElementNS: function(ns, tagName, context) {
                context = context || this._document;
                return context.createElementNS(ns, tagName)
            },
            createTextNode: function(text, context) {
                context = context || this._document;
                return context.createTextNode(text)
            },
            isNode: function(element) {
                return "object" === _typeof(element) && "nodeType" in element
            },
            isElementNode: function(element) {
                return element && element.nodeType === ELEMENT_NODE
            },
            isTextNode: function(element) {
                return element && element.nodeType === TEXT_NODE
            },
            isDocument: function(element) {
                return element && element.nodeType === DOCUMENT_NODE
            },
            removeElement: function(element) {
                var parentNode = element && element.parentNode;
                if (parentNode) {
                    parentNode.removeChild(element)
                }
            },
            insertElement: function(parentElement, newElement, nextSiblingElement) {
                if (parentElement && newElement && parentElement !== newElement) {
                    if (nextSiblingElement) {
                        parentElement.insertBefore(newElement, nextSiblingElement)
                    } else {
                        parentElement.appendChild(newElement)
                    }
                }
            },
            getAttribute: function(element, name) {
                return element.getAttribute(name)
            },
            setAttribute: function(element, name, value) {
                element.setAttribute(name, value)
            },
            removeAttribute: function(element, name) {
                element.removeAttribute(name)
            },
            setProperty: function(element, name, value) {
                element[name] = value
            },
            setText: function(element, text) {
                if (element) {
                    element.textContent = text
                }
            },
            setClass: function(element, className, isAdd) {
                if (1 === element.nodeType && className) {
                    if (element.classList) {
                        if (isAdd) {
                            element.classList.add(className)
                        } else {
                            element.classList.remove(className)
                        }
                    } else {
                        var classNameSupported = "string" === typeof element.className;
                        var elementClass = classNameSupported ? element.className : this.getAttribute(element, "class") || "";
                        var classNames = elementClass.split(" ");
                        var classIndex = classNames.indexOf(className);
                        var resultClassName;
                        if (isAdd && classIndex < 0) {
                            resultClassName = elementClass ? elementClass + " " + className : className
                        }
                        if (!isAdd && classIndex >= 0) {
                            classNames.splice(classIndex, 1);
                            resultClassName = classNames.join(" ")
                        }
                        if (void 0 !== resultClassName) {
                            if (classNameSupported) {
                                element.className = resultClassName
                            } else {
                                this.setAttribute(element, "class", resultClassName)
                            }
                        }
                    }
                }
            },
            setStyle: function(element, name, value) {
                element.style[name] = value || ""
            },
            _document: "undefined" === typeof document ? void 0 : document,
            getDocument: function() {
                return this._document
            },
            getActiveElement: function() {
                return this._document.activeElement
            },
            getBody: function() {
                return this._document.body
            },
            createDocumentFragment: function() {
                return this._document.createDocumentFragment()
            },
            getDocumentElement: function() {
                return this._document.documentElement
            },
            getLocation: function() {
                return this._document.location
            },
            getSelection: function() {
                return this._document.selection
            },
            getReadyState: function() {
                return this._document.readyState
            },
            getHead: function() {
                return this._document.head
            },
            hasDocumentProperty: function(property) {
                return property in this._document
            },
            listen: function(element, event, callback, options) {
                if (!element || !("addEventListener" in element)) {
                    return _common.noop
                }
                element.addEventListener(event, callback, options);
                return function() {
                    element.removeEventListener(event, callback)
                }
            }
        };
        module.exports = (0, _dependency_injector2.default)(nativeDOMAdapterStrategy)
    }, ,
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/array.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isDefined = __webpack_require__( /*! ./type */ 1).isDefined;
        var each = __webpack_require__( /*! ./iterator */ 4).each;
        var objectUtils = __webpack_require__( /*! ./object */ 47);
        var config = __webpack_require__( /*! ../config */ 30);
        var isEmpty = function(entity) {
            return Array.isArray(entity) && !entity.length
        };
        var wrapToArray = function(entity) {
            return Array.isArray(entity) ? entity : [entity]
        };
        var inArray = function(value, object) {
            if (!object) {
                return -1
            }
            var array = Array.isArray(object) ? object : object.toArray();
            return array.indexOf(value)
        };
        var intersection = function(a, b) {
            if (!Array.isArray(a) || 0 === a.length || !Array.isArray(b) || 0 === b.length) {
                return []
            }
            var result = [];
            each(a, function(_, value) {
                var index = inArray(value, b);
                if (index !== -1) {
                    result.push(value)
                }
            });
            return result
        };
        var removeDuplicates = function(from, what) {
            if (!Array.isArray(from) || 0 === from.length) {
                return []
            }
            if (!Array.isArray(what) || 0 === what.length) {
                return from.slice()
            }
            var result = [];
            each(from, function(_, value) {
                var index = inArray(value, what);
                if (index === -1) {
                    result.push(value)
                }
            });
            return result
        };
        var normalizeIndexes = function(items, indexParameterName, currentItem, needIndexCallback) {
            var indexedItems = {};
            var parameterIndex = 0;
            var useLegacyVisibleIndex = config().useLegacyVisibleIndex;
            each(items, function(index, item) {
                index = item[indexParameterName];
                if (index >= 0) {
                    indexedItems[index] = indexedItems[index] || [];
                    if (item === currentItem) {
                        indexedItems[index].unshift(item)
                    } else {
                        indexedItems[index].push(item)
                    }
                } else {
                    item[indexParameterName] = void 0
                }
            });
            if (!useLegacyVisibleIndex) {
                each(items, function() {
                    if (!isDefined(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                        while (indexedItems[parameterIndex]) {
                            parameterIndex++
                        }
                        indexedItems[parameterIndex] = [this];
                        parameterIndex++
                    }
                })
            }
            parameterIndex = 0;
            objectUtils.orderEach(indexedItems, function(index, items) {
                each(items, function() {
                    if (index >= 0) {
                        this[indexParameterName] = parameterIndex++
                    }
                })
            });
            if (useLegacyVisibleIndex) {
                each(items, function() {
                    if (!isDefined(this[indexParameterName]) && (!needIndexCallback || needIndexCallback(this))) {
                        this[indexParameterName] = parameterIndex++
                    }
                })
            }
            return parameterIndex
        };
        var merge = function(array1, array2) {
            for (var i = 0; i < array2.length; i++) {
                array1[array1.length] = array2[i]
            }
            return array1
        };
        var find = function(array, condition) {
            for (var i = 0; i < array.length; i++) {
                if (condition(array[i])) {
                    return array[i]
                }
            }
        };
        exports.isEmpty = isEmpty;
        exports.wrapToArray = wrapToArray;
        exports.intersection = intersection;
        exports.removeDuplicates = removeDuplicates;
        exports.normalizeIndexes = normalizeIndexes;
        exports.inArray = inArray;
        exports.merge = merge;
        exports.find = find
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/core/devices.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ./utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _extend = __webpack_require__( /*! ./utils/extend */ 0);
        var _type = __webpack_require__( /*! ./utils/type */ 1);
        var _iterator = __webpack_require__( /*! ./utils/iterator */ 4);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _callbacks = __webpack_require__( /*! ./utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _resize_callbacks = __webpack_require__( /*! ./utils/resize_callbacks */ 114);
        var _resize_callbacks2 = _interopRequireDefault(_resize_callbacks);
        var _events_strategy = __webpack_require__( /*! ./events_strategy */ 100);
        var _storage = __webpack_require__( /*! ./utils/storage */ 299);
        var _view_port = __webpack_require__( /*! ./utils/view_port */ 76);
        var _view_port2 = _interopRequireDefault(_view_port);
        var _config = __webpack_require__( /*! ./config */ 30);
        var _config2 = _interopRequireDefault(_config);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var navigator = _window2.default.getNavigator();
        var window = _window2.default.getWindow();
        var KNOWN_UA_TABLE = {
            iPhone: "iPhone",
            iPhone5: "iPhone",
            iPhone6: "iPhone",
            iPhone6plus: "iPhone",
            iPad: "iPad",
            iPadMini: "iPad Mini",
            androidPhone: "Android Mobile",
            androidTablet: "Android",
            msSurface: "Windows ARM Tablet PC",
            desktop: "desktop"
        };
        var DEFAULT_DEVICE = {
            deviceType: "desktop",
            platform: "generic",
            version: [],
            phone: false,
            tablet: false,
            android: false,
            ios: false,
            generic: true,
            grade: "A",
            mac: false
        };
        var uaParsers = {
            generic: function(userAgent) {
                var isPhone = /windows phone/i.test(userAgent) || userAgent.match(/WPDesktop/);
                var isTablet = !isPhone && /Windows(.*)arm(.*)Tablet PC/i.test(userAgent);
                var isDesktop = !isPhone && !isTablet && /msapphost/i.test(userAgent);
                var isMac = /((intel|ppc) mac os x)/.test(userAgent.toLowerCase());
                if (!(isPhone || isTablet || isDesktop || isMac)) {
                    return
                }
                return {
                    deviceType: isPhone ? "phone" : isTablet ? "tablet" : "desktop",
                    platform: "generic",
                    version: [],
                    grade: "A",
                    mac: isMac
                }
            },
            ios: function(userAgent) {
                if (!/ip(hone|od|ad)/i.test(userAgent)) {
                    return
                }
                var isPhone = /ip(hone|od)/i.test(userAgent);
                var matches = userAgent.match(/os (\d+)_(\d+)_?(\d+)?/i);
                var version = matches ? [parseInt(matches[1], 10), parseInt(matches[2], 10), parseInt(matches[3] || 0, 10)] : [];
                var isIPhone4 = 480 === window.screen.height;
                var grade = isIPhone4 ? "B" : "A";
                return {
                    deviceType: isPhone ? "phone" : "tablet",
                    platform: "ios",
                    version: version,
                    grade: grade
                }
            },
            android: function(userAgent) {
                if (!/android|htc_|silk/i.test(userAgent)) {
                    return
                }
                var isPhone = /mobile/i.test(userAgent);
                var matches = userAgent.match(/android (\d+)\.?(\d+)?\.?(\d+)?/i);
                var version = matches ? [parseInt(matches[1], 10), parseInt(matches[2] || 0, 10), parseInt(matches[3] || 0, 10)] : [];
                var worseThan4_4 = version.length > 1 && (version[0] < 4 || 4 === version[0] && version[1] < 4);
                var grade = worseThan4_4 ? "B" : "A";
                return {
                    deviceType: isPhone ? "phone" : "tablet",
                    platform: "android",
                    version: version,
                    grade: grade
                }
            }
        };
        var Devices = function() {
            function Devices(options) {
                _classCallCheck(this, Devices);
                this._window = (null === options || void 0 === options ? void 0 : options.window) || window;
                this._realDevice = this._getDevice();
                this._currentDevice = void 0;
                this._currentOrientation = void 0;
                this._eventsStrategy = new _events_strategy.EventsStrategy(this);
                this.changed = (0, _callbacks2.default)();
                if (_window2.default.hasWindow()) {
                    this._recalculateOrientation();
                    _resize_callbacks2.default.add(this._recalculateOrientation.bind(this))
                }
            }
            _createClass(Devices, [{
                key: "current",
                value: function(deviceOrName) {
                    if (deviceOrName) {
                        this._currentDevice = this._getDevice(deviceOrName);
                        this._forced = true;
                        this.changed.fire();
                        return
                    }
                    if (!this._currentDevice) {
                        deviceOrName = void 0;
                        try {
                            deviceOrName = this._getDeviceOrNameFromWindowScope()
                        } catch (e) {
                            deviceOrName = this._getDeviceNameFromSessionStorage()
                        } finally {
                            if (!deviceOrName) {
                                deviceOrName = this._getDeviceNameFromSessionStorage()
                            }
                            if (deviceOrName) {
                                this._forced = true
                            }
                        }
                        this._currentDevice = this._getDevice(deviceOrName)
                    }
                    return this._currentDevice
                }
            }, {
                key: "real",
                value: function(forceDevice) {
                    if ((0, _type.isPlainObject)(forceDevice)) {
                        (0, _extend.extend)(this._realDevice, forceDevice);
                        return
                    }
                    return (0, _extend.extend)({}, this._realDevice)
                }
            }, {
                key: "orientation",
                value: function() {
                    return this._currentOrientation
                }
            }, {
                key: "isForced",
                value: function() {
                    return this._forced
                }
            }, {
                key: "isRippleEmulator",
                value: function() {
                    return !!this._window.tinyHippos
                }
            }, {
                key: "_getCssClasses",
                value: function(device) {
                    var result = [];
                    var realDevice = this._realDevice;
                    device = device || this.current();
                    if (device.deviceType) {
                        result.push("dx-device-".concat(device.deviceType));
                        if ("desktop" !== device.deviceType) {
                            result.push("dx-device-mobile")
                        }
                    }
                    result.push("dx-device-".concat(realDevice.platform));
                    if (realDevice.version && realDevice.version.length) {
                        result.push("dx-device-".concat(realDevice.platform, "-").concat(realDevice.version[0]))
                    }
                    if (this.isSimulator()) {
                        result.push("dx-simulator")
                    }
                    if ((0, _config2.default)().rtlEnabled) {
                        result.push("dx-rtl")
                    }
                    return result
                }
            }, {
                key: "attachCssClasses",
                value: function(element, device) {
                    this._deviceClasses = this._getCssClasses(device).join(" ");
                    (0, _renderer2.default)(element).addClass(this._deviceClasses)
                }
            }, {
                key: "detachCssClasses",
                value: function(element) {
                    (0, _renderer2.default)(element).removeClass(this._deviceClasses)
                }
            }, {
                key: "isSimulator",
                value: function() {
                    try {
                        return this._isSimulator || _window2.default.hasWindow() && this._window.top !== this._window.self && this._window.top["dx-force-device"] || this.isRippleEmulator()
                    } catch (e) {
                        return false
                    }
                }
            }, {
                key: "forceSimulator",
                value: function() {
                    this._isSimulator = true
                }
            }, {
                key: "_getDevice",
                value: function(deviceName) {
                    if ("genericPhone" === deviceName) {
                        deviceName = {
                            deviceType: "phone",
                            platform: "generic",
                            generic: true
                        }
                    }
                    if ((0, _type.isPlainObject)(deviceName)) {
                        return this._fromConfig(deviceName)
                    } else {
                        var ua;
                        if (deviceName) {
                            ua = KNOWN_UA_TABLE[deviceName];
                            if (!ua) {
                                throw _errors2.default.Error("E0005")
                            }
                        } else {
                            ua = navigator.userAgent
                        }
                        return this._fromUA(ua)
                    }
                }
            }, {
                key: "_getDeviceOrNameFromWindowScope",
                value: function() {
                    var result;
                    if (_window2.default.hasWindow() && (this._window.top["dx-force-device-object"] || this._window.top["dx-force-device"])) {
                        result = this._window.top["dx-force-device-object"] || this._window.top["dx-force-device"]
                    }
                    return result
                }
            }, {
                key: "_getDeviceNameFromSessionStorage",
                value: function() {
                    var sessionStorage = (0, _storage.sessionStorage)();
                    if (!sessionStorage) {
                        return
                    }
                    var deviceOrName = sessionStorage.getItem("dx-force-device");
                    try {
                        return JSON.parse(deviceOrName)
                    } catch (ex) {
                        return deviceOrName
                    }
                }
            }, {
                key: "_fromConfig",
                value: function(config) {
                    var result = (0, _extend.extend)({}, DEFAULT_DEVICE, this._currentDevice, config);
                    var shortcuts = {
                        phone: "phone" === result.deviceType,
                        tablet: "tablet" === result.deviceType,
                        android: "android" === result.platform,
                        ios: "ios" === result.platform,
                        generic: "generic" === result.platform
                    };
                    return (0, _extend.extend)(result, shortcuts)
                }
            }, {
                key: "_fromUA",
                value: function(ua) {
                    var config;
                    (0, _iterator.each)(uaParsers, function(platform, parser) {
                        config = parser(ua);
                        return !config
                    });
                    if (config) {
                        return this._fromConfig(config)
                    }
                    return DEFAULT_DEVICE
                }
            }, {
                key: "_changeOrientation",
                value: function() {
                    var $window = (0, _renderer2.default)(this._window);
                    var orientation = $window.height() > $window.width() ? "portrait" : "landscape";
                    if (this._currentOrientation === orientation) {
                        return
                    }
                    this._currentOrientation = orientation;
                    this._eventsStrategy.fireEvent("orientationChanged", [{
                        orientation: orientation
                    }])
                }
            }, {
                key: "_recalculateOrientation",
                value: function() {
                    var windowWidth = (0, _renderer2.default)(this._window).width();
                    if (this._currentWidth === windowWidth) {
                        return
                    }
                    this._currentWidth = windowWidth;
                    this._changeOrientation()
                }
            }, {
                key: "on",
                value: function(eventName, eventHandler) {
                    this._eventsStrategy.on(eventName, eventHandler);
                    return this
                }
            }, {
                key: "off",
                value: function(eventName, eventHandler) {
                    this._eventsStrategy.off(eventName, eventHandler);
                    return this
                }
            }]);
            return Devices
        }();
        var devices = new Devices;
        _view_port2.default.changeCallback.add(function(viewPort, prevViewport) {
            devices.detachCssClasses(prevViewport);
            devices.attachCssClasses(viewPort)
        });
        module.exports = devices
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/core/class.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ./errors */ 22);
        var typeUtils = __webpack_require__( /*! ./utils/type */ 1);
        var wrapOverridden = function(baseProto, methodName, method) {
            return function() {
                var prevCallBase = this.callBase;
                this.callBase = baseProto[methodName];
                try {
                    return method.apply(this, arguments)
                } finally {
                    this.callBase = prevCallBase
                }
            }
        };
        var clonePrototype = function(obj) {
            var func = function() {};
            func.prototype = obj.prototype;
            return new func
        };
        var redefine = function(members) {
            var that = this;
            var overridden;
            var memberName;
            var member;
            if (!members) {
                return that
            }
            for (memberName in members) {
                member = members[memberName];
                overridden = "function" === typeof that.prototype[memberName] && "function" === typeof member;
                that.prototype[memberName] = overridden ? wrapOverridden(that.parent.prototype, memberName, member) : member
            }
            return that
        };
        var include = function() {
            var classObj = this;
            var argument;
            var name;
            var i;
            var hasClassObjOwnProperty = Object.prototype.hasOwnProperty.bind(classObj);
            var isES6Class = !hasClassObjOwnProperty("_includedCtors") && !hasClassObjOwnProperty("_includedPostCtors");
            if (isES6Class) {
                classObj._includedCtors = classObj._includedCtors.slice(0);
                classObj._includedPostCtors = classObj._includedPostCtors.slice(0)
            }
            for (i = 0; i < arguments.length; i++) {
                argument = arguments[i];
                if (argument.ctor) {
                    classObj._includedCtors.push(argument.ctor)
                }
                if (argument.postCtor) {
                    classObj._includedPostCtors.push(argument.postCtor)
                }
                for (name in argument) {
                    if ("ctor" === name || "postCtor" === name) {
                        continue
                    }
                    if (name in classObj.prototype) {
                        throw errors.Error("E0002", name)
                    }
                    classObj.prototype[name] = argument[name]
                }
            }
            return classObj
        };
        var subclassOf = function(parentClass) {
            var hasParentProperty = Object.prototype.hasOwnProperty.bind(this)("parent");
            var isES6Class = !hasParentProperty && this.parent;
            if (isES6Class) {
                var baseClass = Object.getPrototypeOf(this);
                return baseClass === parentClass || baseClass.subclassOf(parentClass)
            } else {
                if (this.parent === parentClass) {
                    return true
                }
                if (!this.parent || !this.parent.subclassOf) {
                    return false
                }
                return this.parent.subclassOf(parentClass)
            }
        };
        var abstract = function() {
            throw errors.Error("E0001")
        };
        var copyStatic = function() {
            var hasOwn = Object.prototype.hasOwnProperty;
            return function(source, destination) {
                for (var key in source) {
                    if (!hasOwn.call(source, key)) {
                        return
                    }
                    destination[key] = source[key]
                }
            }
        }();
        var classImpl = function() {};
        classImpl.inherit = function(members) {
            var inheritor = function() {
                if (!this || typeUtils.isWindow(this) || "function" !== typeof this.constructor) {
                    throw errors.Error("E0003")
                }
                var instance = this;
                var ctor = instance.ctor;
                var includedCtors = instance.constructor._includedCtors;
                var includedPostCtors = instance.constructor._includedPostCtors;
                var i;
                for (i = 0; i < includedCtors.length; i++) {
                    includedCtors[i].call(instance)
                }
                if (ctor) {
                    ctor.apply(instance, arguments)
                }
                for (i = 0; i < includedPostCtors.length; i++) {
                    includedPostCtors[i].call(instance)
                }
            };
            inheritor.prototype = clonePrototype(this);
            copyStatic(this, inheritor);
            inheritor.inherit = this.inherit;
            inheritor.abstract = abstract;
            inheritor.redefine = redefine;
            inheritor.include = include;
            inheritor.subclassOf = subclassOf;
            inheritor.parent = this;
            inheritor._includedCtors = this._includedCtors ? this._includedCtors.slice(0) : [];
            inheritor._includedPostCtors = this._includedPostCtors ? this._includedPostCtors.slice(0) : [];
            inheritor.prototype.constructor = inheritor;
            inheritor.redefine(members);
            return inheritor
        };
        classImpl.abstract = abstract;
        module.exports = classImpl
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.widget.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _action = __webpack_require__( /*! ../../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _dom_component = __webpack_require__( /*! ../../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _short = __webpack_require__( /*! ../../events/short */ 116);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend2 = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _selectors = __webpack_require__( /*! ./selectors */ 66);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        __webpack_require__( /*! ../../events/click */ 19);
        __webpack_require__( /*! ../../events/core/emitter.feedback */ 134);
        __webpack_require__( /*! ../../events/hover */ 156);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }

        function setAttribute(name, value, target) {
            name = "role" === name || "id" === name ? name : "aria-".concat(name);
            value = (0, _type.isDefined)(value) ? value.toString() : null;
            target.attr(name, value)
        }
        var Widget = _dom_component2.default.inherit({
            _feedbackHideTimeout: 400,
            _feedbackShowTimeout: 30,
            _supportedKeys: function() {
                return {}
            },
            _getDefaultOptions: function() {
                return (0, _extend2.extend)(this.callBase(), {
                    hoveredElement: null,
                    isActive: false,
                    disabled: false,
                    visible: true,
                    hint: void 0,
                    activeStateEnabled: false,
                    onContentReady: null,
                    hoverStateEnabled: false,
                    focusStateEnabled: false,
                    tabIndex: 0,
                    accessKey: null,
                    onFocusIn: null,
                    onFocusOut: null,
                    onKeyboardHandled: null
                })
            },
            _init: function() {
                this.callBase();
                this._initContentReadyAction()
            },
            _innerWidgetOptionChanged: function(innerWidget, args) {
                var options = Widget.getOptionsFromContainer(args);
                innerWidget && innerWidget.option(options);
                this._options.cache(args.name, options)
            },
            _bindInnerWidgetOptions: function(innerWidget, optionsContainer) {
                var _this = this;
                var syncOptions = function() {
                    return _this._options.silent(optionsContainer, (0, _extend2.extend)({}, innerWidget.option()))
                };
                syncOptions();
                innerWidget.on("optionChanged", syncOptions)
            },
            _getAriaTarget: function() {
                return this._focusTarget()
            },
            _initContentReadyAction: function() {
                this._contentReadyAction = this._createActionByOption("onContentReady", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _initMarkup: function() {
                var _this$option = this.option(),
                    disabled = _this$option.disabled,
                    visible = _this$option.visible;
                this.$element().addClass("dx-widget");
                this._toggleDisabledState(disabled);
                this._toggleVisibility(visible);
                this._renderHint();
                this._isFocusable() && this._renderFocusTarget();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._renderContent();
                this._renderFocusState();
                this._attachFeedbackEvents();
                this._attachHoverEvents()
            },
            _renderHint: function() {
                var _this$option2 = this.option(),
                    hint = _this$option2.hint;
                this.$element().attr("title", hint || null)
            },
            _renderContent: function() {
                var _this2 = this;
                (0, _common.deferRender)(function() {
                    return !_this2._disposed ? _this2._renderContentImpl() : void 0
                }).done(function() {
                    return !_this2._disposed ? _this2._fireContentReadyAction() : void 0
                })
            },
            _renderContentImpl: _common.noop,
            _fireContentReadyAction: (0, _common.deferRenderer)(function() {
                return this._contentReadyAction()
            }),
            _dispose: function() {
                this._contentReadyAction = null;
                this._detachKeyboardEvents();
                this.callBase()
            },
            _resetActiveState: function() {
                this._toggleActiveState(this._eventBindingTarget(), false)
            },
            _clean: function() {
                this._cleanFocusState();
                this._resetActiveState();
                this.callBase();
                this.$element().empty()
            },
            _toggleVisibility: function(visible) {
                this.$element().toggleClass("dx-state-invisible", !visible);
                this.setAria("hidden", !visible || void 0)
            },
            _renderFocusState: function() {
                this._attachKeyboardEvents();
                if (this._isFocusable()) {
                    this._renderFocusTarget();
                    this._attachFocusEvents();
                    this._renderAccessKey()
                }
            },
            _renderAccessKey: function() {
                var _this3 = this;
                var $el = this._focusTarget();
                var _this$option3 = this.option(),
                    accessKey = _this$option3.accessKey;
                var namespace = "UIFeedback";
                $el.attr("accesskey", accessKey);
                _short.dxClick.off($el, {
                    namespace: namespace
                });
                accessKey && _short.dxClick.on($el, function(e) {
                    if ((0, _utils.isFakeClickEvent)(e)) {
                        e.stopImmediatePropagation();
                        _this3.focus()
                    }
                }, {
                    namespace: namespace
                })
            },
            _isFocusable: function() {
                var _this$option4 = this.option(),
                    focusStateEnabled = _this$option4.focusStateEnabled,
                    disabled = _this$option4.disabled;
                return focusStateEnabled && !disabled
            },
            _eventBindingTarget: function() {
                return this.$element()
            },
            _focusTarget: function() {
                return this._getActiveElement()
            },
            _getActiveElement: function() {
                var activeElement = this._eventBindingTarget();
                if (this._activeStateUnit) {
                    return activeElement.find(this._activeStateUnit).not(".dx-state-disabled")
                }
                return activeElement
            },
            _renderFocusTarget: function() {
                var _this$option5 = this.option(),
                    tabIndex = _this$option5.tabIndex;
                this._focusTarget().attr("tabIndex", tabIndex)
            },
            _keyboardEventBindingTarget: function() {
                return this._eventBindingTarget()
            },
            _refreshFocusEvent: function() {
                this._detachFocusEvents();
                this._attachFocusEvents()
            },
            _focusEventTarget: function() {
                return this._focusTarget()
            },
            _focusInHandler: function(event) {
                var _this4 = this;
                if (!event.isDefaultPrevented()) {
                    this._createActionByOption("onFocusIn", {
                        beforeExecute: function() {
                            return _this4._updateFocusState(event, true)
                        },
                        excludeValidators: ["readOnly"]
                    })({
                        event: event
                    })
                }
            },
            _focusOutHandler: function(event) {
                var _this5 = this;
                if (!event.isDefaultPrevented()) {
                    this._createActionByOption("onFocusOut", {
                        beforeExecute: function() {
                            return _this5._updateFocusState(event, false)
                        },
                        excludeValidators: ["readOnly", "disabled"]
                    })({
                        event: event
                    })
                }
            },
            _updateFocusState: function(_ref, isFocused) {
                var target = _ref.target;
                if ((0, _array.inArray)(target, this._focusTarget()) !== -1) {
                    this._toggleFocusClass(isFocused, (0, _renderer2.default)(target))
                }
            },
            _toggleFocusClass: function(isFocused, $element) {
                var $focusTarget = $element && $element.length ? $element : this._focusTarget();
                $focusTarget.toggleClass("dx-state-focused", isFocused)
            },
            _hasFocusClass: function(element) {
                var $focusTarget = (0, _renderer2.default)(element || this._focusTarget());
                return $focusTarget.hasClass("dx-state-focused")
            },
            _isFocused: function() {
                return this._hasFocusClass()
            },
            _getKeyboardListeners: function() {
                return []
            },
            _attachKeyboardEvents: function() {
                var _this6 = this;
                this._detachKeyboardEvents();
                var _this$option6 = this.option(),
                    focusStateEnabled = _this$option6.focusStateEnabled,
                    onKeyboardHandled = _this$option6.onKeyboardHandled;
                var hasChildListeners = this._getKeyboardListeners().length;
                var hasKeyboardEventHandler = !!onKeyboardHandled;
                var shouldAttach = focusStateEnabled || hasChildListeners || hasKeyboardEventHandler;
                if (shouldAttach) {
                    this._keyboardListenerId = _short.keyboard.on(this._keyboardEventBindingTarget(), this._focusTarget(), function(opts) {
                        return _this6._keyboardHandler(opts)
                    })
                }
            },
            _keyboardHandler: function(options, onlyChildProcessing) {
                if (!onlyChildProcessing) {
                    var originalEvent = options.originalEvent,
                        keyName = options.keyName,
                        which = options.which;
                    var keys = this._supportedKeys(originalEvent);
                    var func = keys[keyName] || keys[which];
                    if (void 0 !== func) {
                        var handler = func.bind(this);
                        var result = handler(originalEvent, options);
                        if (!result) {
                            return false
                        }
                    }
                }
                var keyboardListeners = this._getKeyboardListeners();
                var _this$option7 = this.option(),
                    onKeyboardHandled = _this$option7.onKeyboardHandled;
                keyboardListeners.forEach(function(listener) {
                    return listener && listener._keyboardHandler(options)
                });
                onKeyboardHandled && onKeyboardHandled(options);
                return true
            },
            _refreshFocusState: function() {
                this._cleanFocusState();
                this._renderFocusState()
            },
            _cleanFocusState: function() {
                var $element = this._focusTarget();
                $element.removeAttr("tabIndex");
                this._toggleFocusClass(false);
                this._detachFocusEvents();
                this._detachKeyboardEvents()
            },
            _detachKeyboardEvents: function() {
                _short.keyboard.off(this._keyboardListenerId);
                this._keyboardListenerId = null
            },
            _attachHoverEvents: function() {
                var _this7 = this;
                var _this$option8 = this.option(),
                    hoverStateEnabled = _this$option8.hoverStateEnabled;
                var selector = this._activeStateUnit;
                var namespace = "UIFeedback";
                var $el = this._eventBindingTarget();
                _short.hover.off($el, {
                    selector: selector,
                    namespace: namespace
                });
                if (hoverStateEnabled) {
                    _short.hover.on($el, new _action2.default(function(_ref2) {
                        var event = _ref2.event,
                            element = _ref2.element;
                        _this7._hoverStartHandler(event);
                        _this7.option("hoveredElement", (0, _renderer2.default)(element))
                    }, {
                        excludeValidators: ["readOnly"]
                    }), function(event) {
                        _this7.option("hoveredElement", null);
                        _this7._hoverEndHandler(event)
                    }, {
                        selector: selector,
                        namespace: namespace
                    })
                }
            },
            _attachFeedbackEvents: function() {
                var _this8 = this;
                var _this$option9 = this.option(),
                    activeStateEnabled = _this$option9.activeStateEnabled;
                var selector = this._activeStateUnit;
                var namespace = "UIFeedback";
                var $el = this._eventBindingTarget();
                _short.active.off($el, {
                    namespace: namespace,
                    selector: selector
                });
                if (activeStateEnabled) {
                    _short.active.on($el, new _action2.default(function(_ref3) {
                        var event = _ref3.event,
                            element = _ref3.element;
                        return _this8._toggleActiveState((0, _renderer2.default)(element), true, event)
                    }), new _action2.default(function(_ref4) {
                        var event = _ref4.event,
                            element = _ref4.element;
                        return _this8._toggleActiveState((0, _renderer2.default)(element), false, event)
                    }, {
                        excludeValidators: ["disabled", "readOnly"]
                    }), {
                        showTimeout: this._feedbackShowTimeout,
                        hideTimeout: this._feedbackHideTimeout,
                        selector: selector,
                        namespace: namespace
                    })
                }
            },
            _detachFocusEvents: function() {
                var $el = this._focusEventTarget();
                _short.focus.off($el, {
                    namespace: "".concat(this.NAME, "Focus")
                })
            },
            _attachFocusEvents: function() {
                var _this9 = this;
                var $el = this._focusEventTarget();
                _short.focus.on($el, function(e) {
                    return _this9._focusInHandler(e)
                }, function(e) {
                    return _this9._focusOutHandler(e)
                }, {
                    namespace: "".concat(this.NAME, "Focus"),
                    isFocusable: function(el) {
                        return (0, _renderer2.default)(el).is(_selectors.focusable)
                    }
                })
            },
            _hoverStartHandler: _common.noop,
            _hoverEndHandler: _common.noop,
            _toggleActiveState: function($element, value) {
                this.option("isActive", value);
                $element.toggleClass("dx-state-active", value)
            },
            _updatedHover: function() {
                var hoveredElement = this._options.silent("hoveredElement");
                this._hover(hoveredElement, hoveredElement)
            },
            _findHoverTarget: function($el) {
                return $el && $el.closest(this._activeStateUnit || this._eventBindingTarget())
            },
            _hover: function($el, $previous) {
                var _this$option10 = this.option(),
                    hoverStateEnabled = _this$option10.hoverStateEnabled,
                    disabled = _this$option10.disabled,
                    isActive = _this$option10.isActive;
                $previous = this._findHoverTarget($previous);
                $previous && $previous.toggleClass("dx-state-hover", false);
                if ($el && hoverStateEnabled && !disabled && !isActive) {
                    var newHoveredElement = this._findHoverTarget($el);
                    newHoveredElement && newHoveredElement.toggleClass("dx-state-hover", true)
                }
            },
            _toggleDisabledState: function(value) {
                this.$element().toggleClass("dx-state-disabled", Boolean(value));
                this.setAria("disabled", value || void 0)
            },
            _setWidgetOption: function(widgetName, args) {
                var _this10 = this;
                if (!this[widgetName]) {
                    return
                }
                if ((0, _type.isPlainObject)(args[0])) {
                    (0, _iterator.each)(args[0], function(option, value) {
                        return _this10._setWidgetOption(widgetName, [option, value])
                    });
                    return
                }
                var optionName = args[0];
                var value = args[1];
                if (1 === args.length) {
                    value = this.option(optionName)
                }
                var widgetOptionMap = this["".concat(widgetName, "OptionMap")];
                this[widgetName].option(widgetOptionMap ? widgetOptionMap(optionName) : optionName, value)
            },
            _optionChanged: function(args) {
                var name = args.name,
                    value = args.value,
                    previousValue = args.previousValue;
                switch (name) {
                    case "disabled":
                        this._toggleDisabledState(value);
                        this._updatedHover();
                        this._refreshFocusState();
                        break;
                    case "hint":
                        this._renderHint();
                        break;
                    case "activeStateEnabled":
                        this._attachFeedbackEvents();
                        break;
                    case "hoverStateEnabled":
                        this._attachHoverEvents();
                        this._updatedHover();
                        break;
                    case "tabIndex":
                    case "focusStateEnabled":
                        this._refreshFocusState();
                        break;
                    case "onFocusIn":
                    case "onFocusOut":
                        break;
                    case "accessKey":
                        this._renderAccessKey();
                        break;
                    case "hoveredElement":
                        this._hover(value, previousValue);
                        break;
                    case "isActive":
                        this._updatedHover();
                        break;
                    case "visible":
                        this._toggleVisibility(value);
                        if (this._isVisibilityChangeSupported()) {
                            this._checkVisibilityChanged(value ? "shown" : "hiding")
                        }
                        break;
                    case "onKeyboardHandled":
                        this._attachKeyboardEvents();
                        break;
                    case "onContentReady":
                        this._initContentReadyAction();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _isVisible: function() {
                var _this$option11 = this.option(),
                    visible = _this$option11.visible;
                return this.callBase() && visible
            },
            beginUpdate: function() {
                this._ready(false);
                this.callBase()
            },
            endUpdate: function() {
                this.callBase();
                if (this._initialized) {
                    this._ready(true)
                }
            },
            _ready: function(value) {
                if (0 === arguments.length) {
                    return this._isReady
                }
                this._isReady = value
            },
            setAria: function() {
                if (!(0, _type.isPlainObject)(arguments.length <= 0 ? void 0 : arguments[0])) {
                    setAttribute(arguments.length <= 0 ? void 0 : arguments[0], arguments.length <= 1 ? void 0 : arguments[1], (arguments.length <= 2 ? void 0 : arguments[2]) || this._getAriaTarget())
                } else {
                    var target = (arguments.length <= 1 ? void 0 : arguments[1]) || this._getAriaTarget();
                    (0, _iterator.each)(arguments.length <= 0 ? void 0 : arguments[0], function(name, value) {
                        return setAttribute(name, value, target)
                    })
                }
            },
            isReady: function() {
                return this._ready()
            },
            repaint: function() {
                this._refresh()
            },
            focus: function() {
                _short.focus.trigger(this._focusTarget())
            },
            registerKeyHandler: function(key, handler) {
                var currentKeys = this._supportedKeys();
                this._supportedKeys = function() {
                    return (0, _extend2.extend)(currentKeys, _defineProperty({}, key, handler))
                }
            }
        });
        Widget.getOptionsFromContainer = function(_ref5) {
            var name = _ref5.name,
                fullName = _ref5.fullName,
                value = _ref5.value;
            var options = {};
            if (name === fullName) {
                options = value
            } else {
                var option = fullName.split(".").pop();
                options[option] = value
            }
            return options
        };
        module.exports = Widget
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.errors.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ../../core/utils/error */ 138);
        var errors = __webpack_require__( /*! ../../core/errors */ 22);
        module.exports = errorUtils(errors.ERROR_MESSAGES, {
            E1001: "Module '{0}'. Controller '{1}' is already registered",
            E1002: "Module '{0}'. Controller '{1}' does not inherit from DevExpress.ui.dxDataGrid.Controller",
            E1003: "Module '{0}'. View '{1}' is already registered",
            E1004: "Module '{0}'. View '{1}' does not inherit from DevExpress.ui.dxDataGrid.View",
            E1005: "Public method '{0}' is already registered",
            E1006: "Public method '{0}.{1}' does not exist",
            E1007: "State storing cannot be provided due to the restrictions of the browser",
            E1010: "The template does not contain the TextBox widget",
            E1011: 'Items cannot be deleted from the List. Implement the "remove" function in the data store',
            E1012: "Editing type '{0}' with the name '{1}' is unsupported",
            E1016: "Unexpected type of data source is provided for a lookup column",
            E1018: "The 'collapseAll' method cannot be called if you use a remote data source",
            E1019: "Search mode '{0}' is unavailable",
            E1020: "The type cannot be changed after initialization",
            E1021: "{0} '{1}' you are trying to remove does not exist",
            E1022: 'The "markers" option is given an invalid value. Assign an array instead',
            E1023: 'The "routes" option is given an invalid value. Assign an array instead',
            E1025: "This layout is too complex to render",
            E1026: 'The "calculateCustomSummary" function is missing from a field whose "summaryType" option is set to "custom"',
            E1030: "Unknown ScrollView refresh strategy: '{0}'",
            E1031: "Unknown subscription in the Scheduler widget: '{0}'",
            E1032: "Unknown start date in an appointment: '{0}'",
            E1033: "Unknown step in the date navigator: '{0}'",
            E1034: "The browser does not implement an API for saving files",
            E1035: "The editor cannot be created because of an internal error: {0}",
            E1037: "Invalid structure of grouped data",
            E1038: "The browser does not support local storages for local web pages",
            E1039: "A cell's position cannot be calculated",
            E1040: "The '{0}' key value is not unique within the data array",
            E1041: "The '{0}' script is referenced after the DevExtreme scripts or not referenced at all",
            E1042: "{0} requires the key field to be specified",
            E1043: "Changes cannot be processed due to the incorrectly set key",
            E1044: "The key field specified by the keyExpr option does not match the key field specified in the data store",
            E1045: "Editing requires the key field to be specified in the data store",
            E1046: "The '{0}' key field is not found in data objects",
            E1047: 'The "{0}" field is not found in the fields array',
            E1048: 'The "{0}" operation is not found in the filterOperations array',
            E1049: "Column '{0}': filtering is allowed but the 'dataField' or 'name' option is not specified",
            E1050: "The validationRules option does not apply to third-party editors defined in the editCellTemplate",
            E1051: 'HtmlEditor\'s valueType is "{0}", but the {0} converter was not imported.',
            E1052: '{0} should have the "dataSource" option specified',
            E1053: 'The "buttons" option accepts an array that contains only objects or string values',
            E1054: "All text editor buttons must have names",
            E1055: 'One or several text editor buttons have invalid or non-unique "name" values',
            E1056: 'The {0} widget does not support buttons of the "{1}" type',
            E1058: 'The "startDayHour" must be earlier than the "endDayHour"',
            W1001: 'The "key" option cannot be modified after initialization',
            W1002: "An item with the key '{0}' does not exist",
            W1003: "A group with the key '{0}' in which you are trying to select items does not exist",
            W1004: "The item '{0}' you are trying to select in the group '{1}' does not exist",
            W1005: "Due to column data types being unspecified, data has been loaded twice in order to apply initial filter settings. To resolve this issue, specify data types for all grid columns.",
            W1006: "The map service returned the following error: '{0}'",
            W1007: "No item with key {0} was found in the data source, but this key was used as the parent key for item {1}",
            W1008: "Cannot scroll to the '{0}' date because it does not exist on the current view",
            W1009: "Searching works only if data is specified using the dataSource option",
            W1010: "The capability to select all items works with source data of plain structure only",
            W1011: 'The "keyExpr" option is not applied when dataSource is not an array',
            W1012: "The '{0}' key field is not found in data objects",
            W1013: 'The "message" field in the dialog component was renamed to "messageHtml". Change your code correspondingly. In addition, if you used HTML code in the message, make sure that it is secure',
            W1014: "The Floating Action Button exceeds the recommended speed dial action count. If you need to display more speed dial actions, increase the maxSpeedDialActionCount option value in the global config.",
            W1015: 'The "cellDuration" should divide the range from the "startDayHour" to the "endDayHour" into even intervals'
        })
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/click.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var domUtils = __webpack_require__( /*! ../core/utils/dom */ 11);
        var animationFrame = __webpack_require__( /*! ../animation/frame */ 117);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var pointerEvents = __webpack_require__( /*! ./pointer */ 23);
        var Emitter = __webpack_require__( /*! ./core/emitter */ 132);
        var registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 101);
        var compareVersions = __webpack_require__( /*! ../core/utils/version */ 60).compare;
        var CLICK_EVENT_NAME = "dxclick";
        var TOUCH_BOUNDARY = 10;
        var abs = Math.abs;
        var isInput = function(element) {
            return $(element).is("input, textarea, select, button ,:focus, :focus *")
        };
        var misc = {
            requestAnimationFrame: animationFrame.requestAnimationFrame,
            cancelAnimationFrame: animationFrame.cancelAnimationFrame
        };
        var ClickEmitter = Emitter.inherit({
            ctor: function(element) {
                this.callBase(element);
                this._makeElementClickable($(element))
            },
            _makeElementClickable: function($element) {
                if (!$element.attr("onclick")) {
                    $element.attr("onclick", "void(0)")
                }
            },
            start: function(e) {
                this._blurPrevented = e.isDefaultPrevented();
                this._startTarget = e.target;
                this._startEventData = eventUtils.eventData(e)
            },
            end: function(e) {
                if (this._eventOutOfElement(e, this.getElement().get(0)) || e.type === pointerEvents.cancel) {
                    this._cancel(e);
                    return
                }
                if (!isInput(e.target) && !this._blurPrevented) {
                    domUtils.resetActiveElement()
                }
                this._accept(e);
                this._clickAnimationFrame = misc.requestAnimationFrame(function() {
                    this._fireClickEvent(e)
                }.bind(this))
            },
            _eventOutOfElement: function(e, element) {
                var target = e.target;
                var targetChanged = !domUtils.contains(element, target) && element !== target;
                var gestureDelta = eventUtils.eventDelta(eventUtils.eventData(e), this._startEventData);
                var boundsExceeded = abs(gestureDelta.x) > TOUCH_BOUNDARY || abs(gestureDelta.y) > TOUCH_BOUNDARY;
                return targetChanged || boundsExceeded
            },
            _fireClickEvent: function(e) {
                this._fireEvent(CLICK_EVENT_NAME, e, {
                    target: domUtils.closestCommonParent(this._startTarget, e.target)
                })
            },
            dispose: function() {
                misc.cancelAnimationFrame(this._clickAnimationFrame)
            }
        });
        ! function() {
            var NATIVE_CLICK_CLASS = "dx-native-click";
            var realDevice = devices.real();
            var useNativeClick = realDevice.generic || realDevice.ios && compareVersions(realDevice.version, [9, 3]) >= 0 || realDevice.android && compareVersions(realDevice.version, [5]) >= 0;
            var isNativeClickEvent = function(target) {
                return useNativeClick || $(target).closest("." + NATIVE_CLICK_CLASS).length
            };
            var prevented = null;
            var lastFiredEvent = null;
            var clickHandler = function(e) {
                var originalEvent = e.originalEvent;
                var eventAlreadyFired = lastFiredEvent === originalEvent || originalEvent && originalEvent.DXCLICK_FIRED;
                var leftButton = !e.which || 1 === e.which;
                if (leftButton && !prevented && isNativeClickEvent(e.target) && !eventAlreadyFired) {
                    if (originalEvent) {
                        originalEvent.DXCLICK_FIRED = true
                    }
                    lastFiredEvent = originalEvent;
                    eventUtils.fireEvent({
                        type: CLICK_EVENT_NAME,
                        originalEvent: e
                    })
                }
            };
            ClickEmitter = ClickEmitter.inherit({
                _makeElementClickable: function($element) {
                    if (!isNativeClickEvent($element)) {
                        this.callBase($element)
                    }
                    eventsEngine.on($element, "click", clickHandler)
                },
                configure: function(data) {
                    this.callBase(data);
                    if (data.useNative) {
                        this.getElement().addClass(NATIVE_CLICK_CLASS)
                    }
                },
                start: function(e) {
                    prevented = null;
                    if (!isNativeClickEvent(e.target)) {
                        this.callBase(e)
                    }
                },
                end: function(e) {
                    if (!isNativeClickEvent(e.target)) {
                        this.callBase(e)
                    }
                },
                cancel: function() {
                    prevented = true
                },
                dispose: function() {
                    this.callBase();
                    eventsEngine.off(this.getElement(), "click", clickHandler)
                }
            });
            exports.useNativeClick = useNativeClick
        }();
        ! function() {
            var desktopDevice = devices.real().generic;
            if (!desktopDevice) {
                var startTarget = null;
                var blurPrevented = false;
                var pointerDownHandler = function(e) {
                    startTarget = e.target;
                    blurPrevented = e.isDefaultPrevented()
                };
                var clickHandler = function(e) {
                    var $target = $(e.target);
                    if (!blurPrevented && startTarget && !$target.is(startTarget) && !$(startTarget).is("label") && isInput($target)) {
                        domUtils.resetActiveElement()
                    }
                    startTarget = null;
                    blurPrevented = false
                };
                var NATIVE_CLICK_FIXER_NAMESPACE = "NATIVE_CLICK_FIXER";
                var document = domAdapter.getDocument();
                eventsEngine.subscribeGlobal(document, eventUtils.addNamespace(pointerEvents.down, NATIVE_CLICK_FIXER_NAMESPACE), pointerDownHandler);
                eventsEngine.subscribeGlobal(document, eventUtils.addNamespace("click", NATIVE_CLICK_FIXER_NAMESPACE), clickHandler)
            }
        }();
        registerEmitter({
            emitter: ClickEmitter,
            bubble: true,
            events: [CLICK_EVENT_NAME]
        });
        exports.name = CLICK_EVENT_NAME;
        exports.misc = misc
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/data.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 22);
        var Class = __webpack_require__( /*! ../class */ 16);
        var objectUtils = __webpack_require__( /*! ./object */ 47);
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var each = __webpack_require__( /*! ./iterator */ 4).each;
        var variableWrapper = __webpack_require__( /*! ./variable_wrapper */ 94);
        var unwrapVariable = variableWrapper.unwrap;
        var isWrapped = variableWrapper.isWrapped;
        var assign = variableWrapper.assign;
        var bracketsToDots = function(expr) {
            return expr.replace(/\[/g, ".").replace(/\]/g, "")
        };
        var readPropValue = function(obj, propName, options) {
            options = options || {};
            if ("this" === propName) {
                return unwrap(obj, options)
            }
            return unwrap(obj[propName], options)
        };
        var assignPropValue = function(obj, propName, value, options) {
            if ("this" === propName) {
                throw new errors.Error("E4016")
            }
            var propValue = obj[propName];
            if (options.unwrapObservables && isWrapped(propValue)) {
                assign(propValue, value)
            } else {
                obj[propName] = value
            }
        };
        var prepareOptions = function(options) {
            options = options || {};
            options.unwrapObservables = void 0 !== options.unwrapObservables ? options.unwrapObservables : true;
            return options
        };

        function unwrap(value, options) {
            return options.unwrapObservables ? unwrapVariable(value) : value
        }
        var compileGetter = function(expr) {
            if (arguments.length > 1) {
                expr = [].slice.call(arguments)
            }
            if (!expr || "this" === expr) {
                return function(obj) {
                    return obj
                }
            }
            if ("string" === typeof expr) {
                expr = bracketsToDots(expr);
                var path = expr.split(".");
                return function(obj, options) {
                    options = prepareOptions(options);
                    var functionAsIs = options.functionsAsIs;
                    var hasDefaultValue = "defaultValue" in options;
                    var current = unwrap(obj, options);
                    for (var i = 0; i < path.length; i++) {
                        if (!current) {
                            if (null == current && hasDefaultValue) {
                                return options.defaultValue
                            }
                            break
                        }
                        var pathPart = path[i];
                        if (hasDefaultValue && typeUtils.isObject(current) && !(pathPart in current)) {
                            return options.defaultValue
                        }
                        var next = unwrap(current[pathPart], options);
                        if (!functionAsIs && typeUtils.isFunction(next)) {
                            next = next.call(current)
                        }
                        current = next
                    }
                    return current
                }
            }
            if (Array.isArray(expr)) {
                return combineGetters(expr)
            }
            if (typeUtils.isFunction(expr)) {
                return expr
            }
        };

        function combineGetters(getters) {
            var compiledGetters = {};
            for (var i = 0, l = getters.length; i < l; i++) {
                var getter = getters[i];
                compiledGetters[getter] = compileGetter(getter)
            }
            return function(obj, options) {
                var result;
                each(compiledGetters, function(name) {
                    var value = this(obj, options);
                    if (void 0 === value) {
                        return
                    }
                    var current = result || (result = {});
                    var path = name.split(".");
                    var last = path.length - 1;
                    for (var _i = 0; _i < last; _i++) {
                        var pathItem = path[_i];
                        if (!(pathItem in current)) {
                            current[pathItem] = {}
                        }
                        current = current[pathItem]
                    }
                    current[path[last]] = value
                });
                return result
            }
        }
        var ensurePropValueDefined = function(obj, propName, value, options) {
            if (typeUtils.isDefined(value)) {
                return value
            }
            var newValue = {};
            assignPropValue(obj, propName, newValue, options);
            return newValue
        };
        var compileSetter = function(expr) {
            expr = bracketsToDots(expr || "this").split(".");
            var lastLevelIndex = expr.length - 1;
            return function(obj, value, options) {
                options = prepareOptions(options);
                var currentValue = unwrap(obj, options);
                expr.forEach(function(propertyName, levelIndex) {
                    var propertyValue = readPropValue(currentValue, propertyName, options);
                    var isPropertyFunc = !options.functionsAsIs && typeUtils.isFunction(propertyValue) && !isWrapped(propertyValue);
                    if (levelIndex === lastLevelIndex) {
                        if (options.merge && typeUtils.isPlainObject(value) && (!typeUtils.isDefined(propertyValue) || typeUtils.isPlainObject(propertyValue))) {
                            propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                            objectUtils.deepExtendArraySafe(propertyValue, value, false, true)
                        } else {
                            if (isPropertyFunc) {
                                currentValue[propertyName](value)
                            } else {
                                assignPropValue(currentValue, propertyName, value, options)
                            }
                        }
                    } else {
                        propertyValue = ensurePropValueDefined(currentValue, propertyName, propertyValue, options);
                        if (isPropertyFunc) {
                            propertyValue = propertyValue.call(currentValue)
                        }
                        currentValue = propertyValue
                    }
                })
            }
        };
        var toComparable = function(value, caseSensitive) {
            if (value instanceof Date) {
                return value.getTime()
            }
            if (value && value instanceof Class && value.valueOf) {
                return value.valueOf()
            }
            if (!caseSensitive && "string" === typeof value) {
                return value.toLowerCase()
            }
            return value
        };
        exports.compileGetter = compileGetter;
        exports.compileSetter = compileSetter;
        exports.toComparable = toComparable
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/position.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _config = __webpack_require__( /*! ../config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _type = __webpack_require__( /*! ../utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var getDefaultAlignment = function(isRtlEnabled) {
            var rtlEnabled = null !== isRtlEnabled && void 0 !== isRtlEnabled ? isRtlEnabled : (0, _config2.default)().rtlEnabled;
            return rtlEnabled ? "right" : "left"
        };
        var getBoundingRect = function(element) {
            if (_type2.default.isWindow(element)) {
                return {
                    width: element.outerWidth,
                    height: element.outerHeight
                }
            }
            var rect;
            try {
                rect = element.getBoundingClientRect()
            } catch (e) {
                rect = {
                    width: 0,
                    height: 0,
                    bottom: 0,
                    top: 0,
                    left: 0,
                    right: 0
                }
            }
            return rect
        };
        exports.getDefaultAlignment = getDefaultAlignment;
        exports.getBoundingRect = getBoundingRect
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/errors.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ./utils/error */ 138);
        module.exports = errorUtils({
            E0001: "Method is not implemented",
            E0002: "Member name collision: {0}",
            E0003: "A class must be instantiated using the 'new' keyword",
            E0004: "The NAME property of the component is not specified",
            E0005: "Unknown device",
            E0006: "Unknown endpoint key is requested",
            E0007: "'Invalidate' method is called outside the update transaction",
            E0008: "Type of the option name is not appropriate to create an action",
            E0009: "Component '{0}' has not been initialized for an element",
            E0010: "Animation configuration with the '{0}' type requires '{1}' configuration as {2}",
            E0011: "Unknown animation type '{0}'",
            E0012: "jQuery version is too old. Please upgrade jQuery to 1.10.0 or later",
            E0013: "KnockoutJS version is too old. Please upgrade KnockoutJS to 2.3.0 or later",
            E0014: "The 'release' method shouldn't be called for an unlocked Lock object",
            E0015: "Queued task returned an unexpected result",
            E0017: "Event namespace is not defined",
            E0018: "DevExpress.ui.DevExpressPopup widget is required",
            E0020: "Template engine '{0}' is not supported",
            E0021: "Unknown theme is set: {0}",
            E0022: "LINK[rel=DevExpress-theme] tags must go before DevExpress included scripts",
            E0023: "Template name is not specified",
            E0024: "DevExtreme bundle already included",
            E0025: "Unexpected argument type",
            E0100: "Unknown validation type is detected",
            E0101: "Misconfigured range validation rule is detected",
            E0102: "Misconfigured comparison validation rule is detected",
            E0103: "validationCallback of an asynchronous rule should return a jQuery or a native promise",
            E0110: "Unknown validation group is detected",
            E0120: "Adapter for a DevExpressValidator component cannot be configured",
            E0121: "The 'customItem' field of the 'onCustomItemCreating' function's parameter should contain a custom item or Promise that is resolved after the item is created.",
            W0000: "'{0}' is deprecated in {1}. {2}",
            W0001: "{0} - '{1}' option is deprecated in {2}. {3}",
            W0002: "{0} - '{1}' method is deprecated in {2}. {3}",
            W0003: "{0} - '{1}' property is deprecated in {2}. {3}",
            W0004: "Timeout for theme loading is over: {0}",
            W0005: "'{0}' event is deprecated in {1}. {2}",
            W0006: "Invalid recurrence rule: '{0}'",
            W0007: "'{0}' Globalize culture is not defined",
            W0008: "Invalid view name: '{0}'",
            W0009: "Invalid time zone name: '{0}'",
            W0010: "{0} is deprecated in {1}. {2}",
            W0011: "Number parsing is invoked while the parser is not defined",
            W0012: "Date parsing is invoked while the parser is not defined",
            W0013: "'{0}' file is deprecated in {1}. {2}",
            W0014: "{0} - '{1}' type is deprecated in {2}. {3}",
            W0015: "Instead of returning a value from the '{0}' function, write it into the '{1}' field of the function's parameter.",
            W0016: 'The "{0}" option does not accept the "{1}" value since v.{2}. {3}.'
        })
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/events/pointer.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _support = __webpack_require__( /*! ../core/utils/support */ 46);
        var _support2 = _interopRequireDefault(_support);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _event_registrator = __webpack_require__( /*! ./core/event_registrator */ 77);
        var _event_registrator2 = _interopRequireDefault(_event_registrator);
        var _touch = __webpack_require__( /*! ./pointer/touch */ 282);
        var _touch2 = _interopRequireDefault(_touch);
        var _mspointer = __webpack_require__( /*! ./pointer/mspointer */ 479);
        var _mspointer2 = _interopRequireDefault(_mspointer);
        var _mouse = __webpack_require__( /*! ./pointer/mouse */ 284);
        var _mouse2 = _interopRequireDefault(_mouse);
        var _mouse_and_touch = __webpack_require__( /*! ./pointer/mouse_and_touch */ 480);
        var _mouse_and_touch2 = _interopRequireDefault(_mouse_and_touch);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var getStrategy = function(support, device, browser) {
            if (support.pointerEvents && browser.msie) {
                return _mspointer2.default
            }
            var tablet = device.tablet,
                phone = device.phone;
            if (support.touch && !(tablet || phone)) {
                return _mouse_and_touch2.default
            }
            if (support.touch) {
                return _touch2.default
            }
            return _mouse2.default
        };
        var EventStrategy = getStrategy(_support2.default, _devices2.default.real(), _browser2.default);
        (0, _iterator.each)(EventStrategy.map, function(pointerEvent, originalEvents) {
            (0, _event_registrator2.default)(pointerEvent, new EventStrategy(pointerEvent, originalEvents))
        });
        var pointer = {
            down: "dxpointerdown",
            up: "dxpointerup",
            move: "dxpointermove",
            cancel: "dxpointercancel",
            enter: "dxpointerenter",
            leave: "dxpointerleave",
            over: "dxpointerover",
            out: "dxpointerout"
        };
        pointer.getStrategy = getStrategy;
        module.exports = pointer
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/date.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var adjust = __webpack_require__( /*! ./math */ 31).adjust;
        var each = __webpack_require__( /*! ./iterator */ 4).each;
        var camelize = __webpack_require__( /*! ./inflector */ 34).camelize;
        var isObject = typeUtils.isObject;
        var isString = typeUtils.isString;
        var isDate = typeUtils.isDate;
        var isDefined = typeUtils.isDefined;
        var dateUnitIntervals = ["millisecond", "second", "minute", "hour", "day", "week", "month", "quarter", "year"];
        var toMilliseconds = function toMilliseconds(value) {
            switch (value) {
                case "millisecond":
                    return 1;
                case "second":
                    return 1e3 * toMilliseconds("millisecond");
                case "minute":
                    return 60 * toMilliseconds("second");
                case "hour":
                    return 60 * toMilliseconds("minute");
                case "day":
                    return 24 * toMilliseconds("hour");
                case "week":
                    return 7 * toMilliseconds("day");
                case "month":
                    return 30 * toMilliseconds("day");
                case "quarter":
                    return 3 * toMilliseconds("month");
                case "year":
                    return 365 * toMilliseconds("day");
                default:
                    return 0
            }
        };
        var getDatesInterval = function(startDate, endDate, intervalUnit) {
            var delta = endDate.getTime() - startDate.getTime();
            var millisecondCount = toMilliseconds(intervalUnit) || 1;
            return Math.floor(delta / millisecondCount)
        };
        var getNextDateUnit = function(unit, withWeeks) {
            var interval = getDateUnitInterval(unit);
            switch (interval) {
                case "millisecond":
                    return "second";
                case "second":
                    return "minute";
                case "minute":
                    return "hour";
                case "hour":
                    return "day";
                case "day":
                    return withWeeks ? "week" : "month";
                case "week":
                    return "month";
                case "month":
                    return "quarter";
                case "quarter":
                    return "year";
                case "year":
                    return "year";
                default:
                    return 0
            }
        };
        var convertMillisecondsToDateUnits = function(value) {
            var i;
            var dateUnitCount;
            var dateUnitInterval;
            var dateUnitIntervals = ["millisecond", "second", "minute", "hour", "day", "month", "year"];
            var result = {};
            for (i = dateUnitIntervals.length - 1; i >= 0; i--) {
                dateUnitInterval = dateUnitIntervals[i];
                dateUnitCount = Math.floor(value / toMilliseconds(dateUnitInterval));
                if (dateUnitCount > 0) {
                    result[dateUnitInterval + "s"] = dateUnitCount;
                    value -= convertDateUnitToMilliseconds(dateUnitInterval, dateUnitCount)
                }
            }
            return result
        };
        var dateToMilliseconds = function(tickInterval) {
            var milliseconds = 0;
            if (isObject(tickInterval)) {
                each(tickInterval, function(key, value) {
                    milliseconds += convertDateUnitToMilliseconds(key.substr(0, key.length - 1), value)
                })
            }
            if (isString(tickInterval)) {
                milliseconds = convertDateUnitToMilliseconds(tickInterval, 1)
            }
            return milliseconds
        };

        function convertDateUnitToMilliseconds(dateUnit, count) {
            return toMilliseconds(dateUnit) * count
        }

        function getDateUnitInterval(tickInterval) {
            var maxInterval = -1;
            var i;
            if (isString(tickInterval)) {
                return tickInterval
            }
            if (isObject(tickInterval)) {
                each(tickInterval, function(key, value) {
                    for (i = 0; i < dateUnitIntervals.length; i++) {
                        if (value && (key === dateUnitIntervals[i] + "s" || key === dateUnitIntervals[i]) && maxInterval < i) {
                            maxInterval = i
                        }
                    }
                });
                return dateUnitIntervals[maxInterval]
            }
            return ""
        }
        var tickIntervalToFormatMap = {
            millisecond: "millisecond",
            second: "longtime",
            minute: "shorttime",
            hour: "shorttime",
            day: "day",
            week: "day",
            month: "month",
            quarter: "quarter",
            year: "year"
        };

        function getDateFormatByTickInterval(tickInterval) {
            return tickIntervalToFormatMap[getDateUnitInterval(tickInterval)] || ""
        }
        var getQuarter = function(month) {
            return Math.floor(month / 3)
        };
        var getFirstQuarterMonth = function(month) {
            return 3 * getQuarter(month)
        };

        function correctDateWithUnitBeginning(date, dateInterval, withCorrection, firstDayOfWeek) {
            date = new Date(date.getTime());
            var oldDate = new Date(date.getTime());
            var firstQuarterMonth;
            var month;
            var dateUnitInterval = getDateUnitInterval(dateInterval);
            switch (dateUnitInterval) {
                case "second":
                    date = new Date(1e3 * Math.floor(oldDate.getTime() / 1e3));
                    break;
                case "minute":
                    date = new Date(6e4 * Math.floor(oldDate.getTime() / 6e4));
                    break;
                case "hour":
                    date = new Date(36e5 * Math.floor(oldDate.getTime() / 36e5));
                    break;
                case "year":
                    date.setMonth(0);
                case "month":
                    date.setDate(1);
                case "day":
                    date.setHours(0, 0, 0, 0);
                    break;
                case "week":
                    date = getFirstWeekDate(date, firstDayOfWeek || 0);
                    date.setHours(0, 0, 0, 0);
                    break;
                case "quarter":
                    firstQuarterMonth = getFirstQuarterMonth(date.getMonth());
                    month = date.getMonth();
                    date.setDate(1);
                    date.setHours(0, 0, 0, 0);
                    if (month !== firstQuarterMonth) {
                        date.setMonth(firstQuarterMonth)
                    }
            }
            if (withCorrection && "hour" !== dateUnitInterval && "minute" !== dateUnitInterval && "second" !== dateUnitInterval) {
                fixTimezoneGap(oldDate, date)
            }
            return date
        }

        function trimTime(date) {
            return correctDateWithUnitBeginning(date, "day")
        }
        var setToDayEnd = function(date) {
            var result = trimTime(date);
            result.setDate(result.getDate() + 1);
            return new Date(result.getTime() - 1)
        };
        var getDatesDifferences = function(date1, date2) {
            var counter = 0;
            var differences = {
                year: date1.getFullYear() !== date2.getFullYear(),
                month: date1.getMonth() !== date2.getMonth(),
                day: date1.getDate() !== date2.getDate(),
                hour: date1.getHours() !== date2.getHours(),
                minute: date1.getMinutes() !== date2.getMinutes(),
                second: date1.getSeconds() !== date2.getSeconds(),
                millisecond: date1.getMilliseconds() !== date2.getMilliseconds()
            };
            each(differences, function(key, value) {
                if (value) {
                    counter++
                }
            });
            if (0 === counter && 0 !== getTimezonesDifference(date1, date2)) {
                differences.hour = true;
                counter++
            }
            differences.count = counter;
            return differences
        };

        function addDateInterval(value, interval, dir) {
            var result = new Date(value.getTime());
            var intervalObject = isString(interval) ? getDateIntervalByString(interval.toLowerCase()) : typeUtils.isNumeric(interval) ? convertMillisecondsToDateUnits(interval) : interval;
            if (intervalObject.years) {
                result.setFullYear(result.getFullYear() + intervalObject.years * dir)
            }
            if (intervalObject.quarters) {
                result.setMonth(result.getMonth() + 3 * intervalObject.quarters * dir)
            }
            if (intervalObject.months) {
                result.setMonth(result.getMonth() + intervalObject.months * dir)
            }
            if (intervalObject.weeks) {
                result.setDate(result.getDate() + 7 * intervalObject.weeks * dir)
            }
            if (intervalObject.days) {
                result.setDate(result.getDate() + intervalObject.days * dir)
            }
            if (intervalObject.hours) {
                result.setTime(result.getTime() + 36e5 * intervalObject.hours * dir)
            }
            if (intervalObject.minutes) {
                result.setTime(result.getTime() + 6e4 * intervalObject.minutes * dir)
            }
            if (intervalObject.seconds) {
                result.setTime(result.getTime() + 1e3 * intervalObject.seconds * dir)
            }
            if (intervalObject.milliseconds) {
                result.setTime(result.getTime() + intervalObject.milliseconds * dir)
            }
            return result
        }
        var addInterval = function(value, interval, isNegative) {
            var dir = isNegative ? -1 : 1;
            return isDate(value) ? addDateInterval(value, interval, dir) : adjust(value + interval * dir, interval)
        };
        var getSequenceByInterval = function(min, max, interval) {
            var intervals = [];
            var cur;
            intervals.push(isDate(min) ? new Date(min.getTime()) : min);
            cur = min;
            while (cur < max) {
                cur = addInterval(cur, interval);
                intervals.push(cur)
            }
            return intervals
        };
        var getViewFirstCellDate = function(viewType, date) {
            if ("month" === viewType) {
                return new Date(date.getFullYear(), date.getMonth(), 1)
            }
            if ("year" === viewType) {
                return new Date(date.getFullYear(), 0, date.getDate())
            }
            if ("decade" === viewType) {
                return new Date(getFirstYearInDecade(date), date.getMonth(), date.getDate())
            }
            if ("century" === viewType) {
                return new Date(getFirstDecadeInCentury(date), date.getMonth(), date.getDate())
            }
        };
        var getViewLastCellDate = function(viewType, date) {
            if ("month" === viewType) {
                return new Date(date.getFullYear(), date.getMonth(), getLastMonthDay(date))
            }
            if ("year" === viewType) {
                return new Date(date.getFullYear(), 11, date.getDate())
            }
            if ("decade" === viewType) {
                return new Date(getFirstYearInDecade(date) + 9, date.getMonth(), date.getDate())
            }
            if ("century" === viewType) {
                return new Date(getFirstDecadeInCentury(date) + 90, date.getMonth(), date.getDate())
            }
        };
        var getViewMinBoundaryDate = function(viewType, date) {
            var resultDate = new Date(date.getFullYear(), date.getMonth(), 1);
            if ("month" === viewType) {
                return resultDate
            }
            resultDate.setMonth(0);
            if ("year" === viewType) {
                return resultDate
            }
            if ("decade" === viewType) {
                resultDate.setFullYear(getFirstYearInDecade(date))
            }
            if ("century" === viewType) {
                resultDate.setFullYear(getFirstDecadeInCentury(date))
            }
            return resultDate
        };
        var getViewMaxBoundaryDate = function(viewType, date) {
            var resultDate = new Date(date);
            resultDate.setDate(getLastMonthDay(date));
            if ("month" === viewType) {
                return resultDate
            }
            resultDate.setMonth(11);
            resultDate.setDate(getLastMonthDay(resultDate));
            if ("year" === viewType) {
                return resultDate
            }
            if ("decade" === viewType) {
                resultDate.setFullYear(getFirstYearInDecade(date) + 9)
            }
            if ("century" === viewType) {
                resultDate.setFullYear(getFirstDecadeInCentury(date) + 99)
            }
            return resultDate
        };

        function getLastMonthDay(date) {
            var resultDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);
            return resultDate.getDate()
        }
        var getViewUp = function(typeView) {
            switch (typeView) {
                case "month":
                    return "year";
                case "year":
                    return "decade";
                case "decade":
                    return "century"
            }
        };
        var getViewDown = function(typeView) {
            switch (typeView) {
                case "century":
                    return "decade";
                case "decade":
                    return "year";
                case "year":
                    return "month"
            }
        };
        var getDifferenceInMonth = function(typeView) {
            var difference = 1;
            if ("year" === typeView) {
                difference = 12
            }
            if ("decade" === typeView) {
                difference = 120
            }
            if ("century" === typeView) {
                difference = 1200
            }
            return difference
        };
        var getDifferenceInMonthForCells = function(typeView) {
            var difference = 1;
            if ("decade" === typeView) {
                difference = 12
            }
            if ("century" === typeView) {
                difference = 120
            }
            return difference
        };

        function getDateIntervalByString(intervalString) {
            var result = {};
            switch (intervalString) {
                case "year":
                    result.years = 1;
                    break;
                case "month":
                    result.months = 1;
                    break;
                case "quarter":
                    result.months = 3;
                    break;
                case "week":
                    result.weeks = 1;
                    break;
                case "day":
                    result.days = 1;
                    break;
                case "hour":
                    result.hours = 1;
                    break;
                case "minute":
                    result.minutes = 1;
                    break;
                case "second":
                    result.seconds = 1;
                    break;
                case "millisecond":
                    result.milliseconds = 1
            }
            return result
        }

        function sameDate(date1, date2) {
            return sameMonthAndYear(date1, date2) && date1.getDate() === date2.getDate()
        }

        function sameMonthAndYear(date1, date2) {
            return sameYear(date1, date2) && date1.getMonth() === date2.getMonth()
        }

        function sameYear(date1, date2) {
            return date1 && date2 && date1.getFullYear() === date2.getFullYear()
        }
        var sameDecade = function(date1, date2) {
            if (!isDefined(date1) || !isDefined(date2)) {
                return
            }
            var startDecadeDate1 = date1.getFullYear() - date1.getFullYear() % 10;
            var startDecadeDate2 = date2.getFullYear() - date2.getFullYear() % 10;
            return date1 && date2 && startDecadeDate1 === startDecadeDate2
        };
        var sameCentury = function(date1, date2) {
            if (!isDefined(date1) || !isDefined(date2)) {
                return
            }
            var startCenturyDate1 = date1.getFullYear() - date1.getFullYear() % 100;
            var startCenturyDate2 = date2.getFullYear() - date2.getFullYear() % 100;
            return date1 && date2 && startCenturyDate1 === startCenturyDate2
        };

        function getFirstDecadeInCentury(date) {
            return date && date.getFullYear() - date.getFullYear() % 100
        }

        function getFirstYearInDecade(date) {
            return date && date.getFullYear() - date.getFullYear() % 10
        }
        var getShortDateFormat = function() {
            return "yyyy/MM/dd"
        };
        var getFirstMonthDate = function(date) {
            if (!isDefined(date)) {
                return
            }
            var newDate = new Date(date.getFullYear(), date.getMonth(), 1);
            return newDate
        };
        var getLastMonthDate = function(date) {
            if (!isDefined(date)) {
                return
            }
            var newDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);
            return newDate
        };

        function getFirstWeekDate(date, firstDayOfWeek) {
            var delta = (date.getDay() - firstDayOfWeek + 7) % 7;
            var result = new Date(date);
            result.setDate(date.getDate() - delta);
            return result
        }
        var normalizeDateByWeek = function(date, currentDate) {
            var differenceInDays = dateUtils.getDatesInterval(date, currentDate, "day");
            var resultDate = new Date(date);
            if (differenceInDays >= 6) {
                resultDate = new Date(resultDate.setDate(resultDate.getDate() + 7))
            }
            return resultDate
        };
        var dateInRange = function(date, min, max, format) {
            if ("date" === format) {
                min = min && dateUtils.correctDateWithUnitBeginning(min, "day");
                max = max && dateUtils.correctDateWithUnitBeginning(max, "day");
                date = date && dateUtils.correctDateWithUnitBeginning(date, "day")
            }
            return normalizeDate(date, min, max) === date
        };
        var dateTimeFromDecimal = function(number) {
            var hours = Math.floor(number);
            var minutes = number % 1 * 60;
            return {
                hours: hours,
                minutes: minutes
            }
        };
        var roundDateByStartDayHour = function(date, startDayHour) {
            var startTime = this.dateTimeFromDecimal(startDayHour);
            var result = new Date(date);
            if (date.getHours() === startTime.hours && date.getMinutes() < startTime.minutes || date.getHours() < startTime.hours) {
                result.setHours(startTime.hours, startTime.minutes, 0, 0)
            }
            return result
        };

        function normalizeDate(date, min, max) {
            var normalizedDate = date;
            if (!isDefined(date)) {
                return date
            }
            if (isDefined(min) && date < min) {
                normalizedDate = min
            }
            if (isDefined(max) && date > max) {
                normalizedDate = max
            }
            return normalizedDate
        }

        function fixTimezoneGap(oldDate, newDate) {
            if (!isDefined(oldDate)) {
                return
            }
            var diff = newDate.getHours() - oldDate.getHours();
            if (0 === diff) {
                return
            }
            var sign = 1 === diff || diff === -23 ? -1 : 1;
            var trial = new Date(newDate.getTime() + 36e5 * sign);
            if (sign > 0 || trial.getDate() === newDate.getDate()) {
                newDate.setTime(trial.getTime())
            }
        }
        var roundToHour = function(date) {
            date.setHours(date.getHours() + 1);
            date.setMinutes(0);
            return date
        };

        function getTimezonesDifference(min, max) {
            return 60 * (max.getTimezoneOffset() - min.getTimezoneOffset()) * 1e3
        }
        var makeDate = function(date) {
            return new Date(date)
        };
        var getDatesOfInterval = function(startDate, endDate, step) {
            var result = [];
            var currentDate = new Date(startDate.getTime());
            if (startDate.getTime() === endDate.getTime()) {
                result.push(new Date(startDate.getTime()))
            }
            while (currentDate < endDate) {
                result.push(new Date(currentDate.getTime()));
                currentDate = this.addInterval(currentDate, step)
            }
            return result
        };
        var dateUtils = {
            dateUnitIntervals: dateUnitIntervals,
            convertMillisecondsToDateUnits: convertMillisecondsToDateUnits,
            dateToMilliseconds: dateToMilliseconds,
            getNextDateUnit: getNextDateUnit,
            convertDateUnitToMilliseconds: convertDateUnitToMilliseconds,
            getDateUnitInterval: getDateUnitInterval,
            getDateFormatByTickInterval: getDateFormatByTickInterval,
            getDatesDifferences: getDatesDifferences,
            correctDateWithUnitBeginning: correctDateWithUnitBeginning,
            trimTime: trimTime,
            setToDayEnd: setToDayEnd,
            roundDateByStartDayHour: roundDateByStartDayHour,
            dateTimeFromDecimal: dateTimeFromDecimal,
            addDateInterval: addDateInterval,
            addInterval: addInterval,
            getSequenceByInterval: getSequenceByInterval,
            getDateIntervalByString: getDateIntervalByString,
            sameDate: sameDate,
            sameMonthAndYear: sameMonthAndYear,
            sameMonth: sameMonthAndYear,
            sameYear: sameYear,
            sameDecade: sameDecade,
            sameCentury: sameCentury,
            getDifferenceInMonth: getDifferenceInMonth,
            getDifferenceInMonthForCells: getDifferenceInMonthForCells,
            getFirstYearInDecade: getFirstYearInDecade,
            getFirstDecadeInCentury: getFirstDecadeInCentury,
            getShortDateFormat: getShortDateFormat,
            getViewFirstCellDate: getViewFirstCellDate,
            getViewLastCellDate: getViewLastCellDate,
            getViewDown: getViewDown,
            getViewUp: getViewUp,
            getLastMonthDay: getLastMonthDay,
            getLastMonthDate: getLastMonthDate,
            getFirstMonthDate: getFirstMonthDate,
            getFirstWeekDate: getFirstWeekDate,
            normalizeDateByWeek: normalizeDateByWeek,
            getQuarter: getQuarter,
            getFirstQuarterMonth: getFirstQuarterMonth,
            dateInRange: dateInRange,
            roundToHour: roundToHour,
            normalizeDate: normalizeDate,
            getViewMinBoundaryDate: getViewMinBoundaryDate,
            getViewMaxBoundaryDate: getViewMaxBoundaryDate,
            fixTimezoneGap: fixTimezoneGap,
            getTimezonesDifference: getTimezonesDifference,
            makeDate: makeDate,
            getDatesInterval: getDatesInterval,
            getDatesOfInterval: getDatesOfInterval
        };
        dateUtils.sameView = function(view, date1, date2) {
            return dateUtils[camelize("same " + view)](date1, date2)
        };
        module.exports = dateUtils
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.core.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ../grid_core/ui.grid_core.modules */ 39);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }(0, _extend.extend)(exports, _uiGrid_core4.default, _uiGrid_core2.default, {
            modules: []
        })
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/browser.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ./extend */ 0).extend;
        var windowUtils = __webpack_require__( /*! ./window */ 7);
        var navigator = windowUtils.getNavigator();
        var webkitRegExp = /(webkit)[ \/]([\w.]+)/;
        var ieRegExp = /(msie) (\d{1,2}\.\d)/;
        var ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/;
        var msEdge = /(edge)\/((\d+)?[\w.]+)/;
        var mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/;
        var browserFromUA = function(ua) {
            ua = ua.toLowerCase();
            var result = {};
            var matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [];
            var browserName = matches[1];
            var browserVersion = matches[2];
            if ("webkit" === browserName) {
                result.webkit = true;
                if (ua.indexOf("chrome") >= 0 || ua.indexOf("crios") >= 0) {
                    browserName = "chrome";
                    browserVersion = /(?:chrome|crios)\/(\d+\.\d+)/.exec(ua);
                    browserVersion = browserVersion && browserVersion[1]
                } else {
                    if (ua.indexOf("fxios") >= 0) {
                        browserName = "mozilla";
                        browserVersion = /fxios\/(\d+\.\d+)/.exec(ua);
                        browserVersion = browserVersion && browserVersion[1]
                    } else {
                        if (ua.indexOf("safari") >= 0 && /version|phantomjs/.test(ua)) {
                            browserName = "safari";
                            browserVersion = /(?:version|phantomjs)\/([0-9.]+)/.exec(ua);
                            browserVersion = browserVersion && browserVersion[1]
                        } else {
                            browserName = "unknown";
                            browserVersion = /applewebkit\/([0-9.]+)/.exec(ua);
                            browserVersion = browserVersion && browserVersion[1]
                        }
                    }
                }
            }
            if ("trident" === browserName || "edge" === browserName) {
                browserName = "msie"
            }
            if (browserName) {
                result[browserName] = true;
                result.version = browserVersion
            }
            return result
        };
        module.exports = extend({
            _fromUA: browserFromUA
        }, browserFromUA(navigator.userAgent))
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/callbacks.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callback = function(options) {
            this._options = options || {};
            this._list = [];
            this._queue = [];
            this._firing = false;
            this._fired = false;
            this._firingIndexes = []
        };
        Callback.prototype._fireCore = function(context, args) {
            var firingIndexes = this._firingIndexes;
            var list = this._list;
            var stopOnFalse = this._options.stopOnFalse;
            var step = firingIndexes.length;
            for (firingIndexes[step] = 0; firingIndexes[step] < list.length; firingIndexes[step]++) {
                var result = list[firingIndexes[step]].apply(context, args);
                if (false === result && stopOnFalse) {
                    break
                }
            }
            firingIndexes.pop()
        };
        Callback.prototype.add = function(fn) {
            if ("function" === typeof fn && (!this._options.unique || !this.has(fn))) {
                this._list.push(fn)
            }
            return this
        };
        Callback.prototype.remove = function(fn) {
            var list = this._list;
            var firingIndexes = this._firingIndexes;
            var index = list.indexOf(fn);
            if (index > -1) {
                list.splice(index, 1);
                if (this._firing && firingIndexes.length) {
                    for (var step = 0; step < firingIndexes.length; step++) {
                        if (index <= firingIndexes[step]) {
                            firingIndexes[step]--
                        }
                    }
                }
            }
            return this
        };
        Callback.prototype.has = function(fn) {
            var list = this._list;
            return fn ? list.indexOf(fn) > -1 : !!list.length
        };
        Callback.prototype.empty = function(fn) {
            this._list = [];
            return this
        };
        Callback.prototype.fireWith = function(context, args) {
            var queue = this._queue;
            args = args || [];
            args = args.slice ? args.slice() : args;
            if (this._options.syncStrategy) {
                this._firing = true;
                this._fireCore(context, args)
            } else {
                queue.push([context, args]);
                if (this._firing) {
                    return
                }
                this._firing = true;
                while (queue.length) {
                    var memory = queue.shift();
                    this._fireCore(memory[0], memory[1])
                }
            }
            this._firing = false;
            this._fired = true;
            return this
        };
        Callback.prototype.fire = function() {
            this.fireWith(this, arguments)
        };
        Callback.prototype.fired = function() {
            return this._fired
        };
        var Callbacks = function(options) {
            return new Callback(options)
        };
        module.exports = Callbacks
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/animation/translator.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ../core/element_data */ 41);
        var type = __webpack_require__( /*! ../core/utils/type */ 1).type;
        var TRANSLATOR_DATA_KEY = "dxTranslator";
        var TRANSFORM_MATRIX_REGEX = /matrix(3d)?\((.+?)\)/;
        var TRANSLATE_REGEX = /translate(?:3d)?\((.+?)\)/;
        var locate = function($element) {
            var translate = getTranslate($element);
            return {
                left: translate.x,
                top: translate.y
            }
        };

        function isPercentValue(value) {
            return "string" === type(value) && "%" === value[value.length - 1]
        }

        function cacheTranslate($element, translate) {
            if ($element.length) {
                dataUtils.data($element.get(0), TRANSLATOR_DATA_KEY, translate)
            }
        }
        var clearCache = function($element) {
            if ($element.length) {
                dataUtils.removeData($element.get(0), TRANSLATOR_DATA_KEY)
            }
        };
        var getTranslateCss = function(translate) {
            translate.x = translate.x || 0;
            translate.y = translate.y || 0;
            var xValueString = isPercentValue(translate.x) ? translate.x : translate.x + "px";
            var yValueString = isPercentValue(translate.y) ? translate.y : translate.y + "px";
            return "translate(" + xValueString + ", " + yValueString + ")"
        };
        var getTranslate = function($element) {
            var result = $element.length ? dataUtils.data($element.get(0), TRANSLATOR_DATA_KEY) : null;
            if (!result) {
                var transformValue = $element.css("transform") || getTranslateCss({
                    x: 0,
                    y: 0
                });
                var matrix = transformValue.match(TRANSFORM_MATRIX_REGEX);
                var is3D = matrix && matrix[1];
                if (matrix) {
                    matrix = matrix[2].split(",");
                    if ("3d" === is3D) {
                        matrix = matrix.slice(12, 15)
                    } else {
                        matrix.push(0);
                        matrix = matrix.slice(4, 7)
                    }
                } else {
                    matrix = [0, 0, 0]
                }
                result = {
                    x: parseFloat(matrix[0]),
                    y: parseFloat(matrix[1]),
                    z: parseFloat(matrix[2])
                };
                cacheTranslate($element, result)
            }
            return result
        };
        var move = function($element, position) {
            var left = position.left;
            var top = position.top;
            var translate;
            if (void 0 === left) {
                translate = getTranslate($element);
                translate.y = top || 0
            } else {
                if (void 0 === top) {
                    translate = getTranslate($element);
                    translate.x = left || 0
                } else {
                    translate = {
                        x: left || 0,
                        y: top || 0,
                        z: 0
                    };
                    cacheTranslate($element, translate)
                }
            }
            $element.css({
                transform: getTranslateCss(translate)
            });
            if (isPercentValue(left) || isPercentValue(top)) {
                clearCache($element)
            }
        };
        var resetPosition = function($element, finishTransition) {
            var originalTransition;
            var stylesConfig = {
                left: 0,
                top: 0,
                transform: "none"
            };
            if (finishTransition) {
                originalTransition = $element.css("transition");
                stylesConfig.transition = "none"
            }
            $element.css(stylesConfig);
            clearCache($element);
            if (finishTransition) {
                $element.get(0).offsetHeight;
                $element.css("transition", originalTransition)
            }
        };
        var parseTranslate = function(translateString) {
            var result = translateString.match(TRANSLATE_REGEX);
            if (!result || !result[1]) {
                return
            }
            result = result[1].split(",");
            result = {
                x: parseFloat(result[0]),
                y: parseFloat(result[1]),
                z: parseFloat(result[2])
            };
            return result
        };
        exports.move = move;
        exports.locate = locate;
        exports.clearCache = clearCache;
        exports.parseTranslate = parseTranslate;
        exports.getTranslate = getTranslate;
        exports.getTranslateCss = getTranslateCss;
        exports.resetPosition = resetPosition
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.core.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }(0, _extend.extend)(exports, _uiGrid_core2.default, {
            modules: [],
            foreachNodes: function(nodes, callBack) {
                for (var i = 0; i < nodes.length; i++) {
                    if (false !== callBack(nodes[i]) && nodes[i].hasChildren && nodes[i].children.length) {
                        this.foreachNodes(nodes[i].children, callBack)
                    }
                }
            }
        })
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/config.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ./utils/extend */ 0);
        var _extend2 = _interopRequireDefault(_extend);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var config = {
            rtlEnabled: false,
            defaultCurrency: "USD",
            oDataFilterToLower: true,
            serverDecimalSeparator: ".",
            decimalSeparator: ".",
            thousandsSeparator: ",",
            forceIsoDateParsing: true,
            wrapActionsBeforeExecute: true,
            useLegacyStoreResult: false,
            useJQuery: void 0,
            editorStylingMode: void 0,
            useLegacyVisibleIndex: false,
            floatingActionButtonConfig: {
                icon: "add",
                closeIcon: "close",
                label: "",
                position: {
                    at: "right bottom",
                    my: "right bottom",
                    offset: {
                        x: -16,
                        y: -16
                    }
                },
                maxSpeedDialActionCount: 5,
                shading: false,
                direction: "auto"
            },
            optionsParser: function(optionsString) {
                if ("{" !== optionsString.trim().charAt(0)) {
                    optionsString = "{" + optionsString + "}"
                }
                try {
                    return new Function("return " + optionsString)()
                } catch (ex) {
                    throw _errors2.default.Error("E3018", ex, optionsString)
                }
            }
        };
        var deprecatedFields = ["decimalSeparator", "thousandsSeparator"];
        var configMethod = function() {
            if (!arguments.length) {
                return config
            }
            var newConfig = arguments.length <= 0 ? void 0 : arguments[0];
            deprecatedFields.forEach(function(deprecatedField) {
                if (newConfig[deprecatedField]) {
                    var message = "Now, the ".concat(deprecatedField, " is selected based on the specified locale.");
                    _errors2.default.log("W0003", "config", deprecatedField, "19.2", message)
                }
            });
            _extend2.default.extend(config, newConfig)
        };
        if ("undefined" !== typeof DevExpress && DevExpress.config) {
            configMethod(DevExpress.config)
        }
        module.exports = configMethod
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/math.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isExponential = __webpack_require__( /*! ./type */ 1).isExponential;
        var sign = function(value) {
            if (0 === value) {
                return 0
            }
            return value / Math.abs(value)
        };
        var fitIntoRange = function(value, minValue, maxValue) {
            var isMinValueUndefined = !minValue && 0 !== minValue;
            var isMaxValueUndefined = !maxValue && 0 !== maxValue;
            isMinValueUndefined && (minValue = !isMaxValueUndefined ? Math.min(value, maxValue) : value);
            isMaxValueUndefined && (maxValue = !isMinValueUndefined ? Math.max(value, minValue) : value);
            return Math.min(Math.max(value, minValue), maxValue)
        };
        var inRange = function(value, minValue, maxValue) {
            return value >= minValue && value <= maxValue
        };

        function getExponent(value) {
            return Math.abs(parseInt(value.toExponential().split("e")[1]))
        }

        function _isEdgeBug() {
            var value = 3e-4;
            var correctValue = "0.000300";
            var precisionValue = 3;
            return correctValue !== value.toPrecision(precisionValue)
        }

        function adjust(value, interval) {
            var precision = getPrecision(interval || 0) + 2;
            var separatedValue = value.toString().split(".");
            var sourceValue = value;
            var absValue = Math.abs(value);
            var separatedAdjustedValue;
            var isExponentValue = isExponential(value);
            var integerPart = absValue > 1 ? 10 : 0;
            if (1 === separatedValue.length) {
                return value
            }
            if (!isExponentValue) {
                if (isExponential(interval)) {
                    precision = separatedValue[0].length + getExponent(interval)
                }
                value = absValue;
                value = value - Math.floor(value) + integerPart
            }
            precision = _isEdgeBug() && getExponent(value) > 6 || precision > 7 ? 15 : 7;
            if (!isExponentValue) {
                separatedAdjustedValue = parseFloat(value.toPrecision(precision)).toString().split(".");
                if (separatedAdjustedValue[0] === integerPart.toString()) {
                    return parseFloat(separatedValue[0] + "." + separatedAdjustedValue[1])
                }
            }
            return parseFloat(sourceValue.toPrecision(precision))
        }

        function getPrecision(value) {
            var str = value.toString();
            if (str.indexOf(".") < 0) {
                return 0
            }
            var mantissa = str.split(".");
            var positionOfDelimiter = mantissa[1].indexOf("e");
            return positionOfDelimiter >= 0 ? positionOfDelimiter : mantissa[1].length
        }

        function getRoot(x, n) {
            if (x < 0 && n % 2 !== 1) {
                return NaN
            }
            var y = Math.pow(Math.abs(x), 1 / n);
            return n % 2 === 1 && x < 0 ? -y : y
        }

        function solveCubicEquation(a, b, c, d) {
            var min = 1e-8;
            if (Math.abs(a) < min) {
                a = b;
                b = c;
                c = d;
                if (Math.abs(a) < min) {
                    a = b;
                    b = c;
                    if (Math.abs(a) < min) {
                        return []
                    }
                    return [-b / a]
                }
                var D2 = b * b - 4 * a * c;
                if (Math.abs(D2) < min) {
                    return [-b / (2 * a)]
                } else {
                    if (D2 > 0) {
                        return [(-b + Math.sqrt(D2)) / (2 * a), (-b - Math.sqrt(D2)) / (2 * a)]
                    }
                }
                return []
            }
            var p = (3 * a * c - b * b) / (3 * a * a);
            var q = (2 * b * b * b - 9 * a * b * c + 27 * a * a * d) / (27 * a * a * a);
            var roots;
            var u;
            if (Math.abs(p) < min) {
                roots = [getRoot(-q, 3)]
            } else {
                if (Math.abs(q) < min) {
                    roots = [0].concat(p < 0 ? [Math.sqrt(-p), -Math.sqrt(-p)] : [])
                } else {
                    var D3 = q * q / 4 + p * p * p / 27;
                    if (Math.abs(D3) < min) {
                        roots = [-1.5 * q / p, 3 * q / p]
                    } else {
                        if (D3 > 0) {
                            u = getRoot(-q / 2 - Math.sqrt(D3), 3);
                            roots = [u - p / (3 * u)]
                        } else {
                            u = 2 * Math.sqrt(-p / 3);
                            var t = Math.acos(3 * q / p / u) / 3;
                            var k = 2 * Math.PI / 3;
                            roots = [u * Math.cos(t), u * Math.cos(t - k), u * Math.cos(t - 2 * k)]
                        }
                    }
                }
            }
            for (var i = 0; i < roots.length; i++) {
                roots[i] -= b / (3 * a)
            }
            return roots
        }

        function trunc(value) {
            return Math.trunc ? Math.trunc(value) : value > 0 ? Math.floor(value) : Math.ceil(value)
        }
        exports.sign = sign;
        exports.fitIntoRange = fitIntoRange;
        exports.inRange = inRange;
        exports.adjust = adjust;
        exports.getPrecision = getPrecision;
        exports.getExponent = getExponent;
        exports.getRoot = getRoot;
        exports.solveCubicEquation = solveCubicEquation;
        exports.trunc = trunc
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/themes.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var errors = __webpack_require__( /*! ./widget/ui.errors */ 18);
        var domUtils = __webpack_require__( /*! ../core/utils/dom */ 11);
        var readyCallbacks = __webpack_require__( /*! ../core/utils/ready_callbacks */ 51);
        var ready = readyCallbacks.add;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 76);
        var themeReadyCallback = __webpack_require__( /*! ./themes_callback */ 286);
        var viewPort = viewPortUtils.value;
        var Promise = __webpack_require__( /*! ../core/polyfills/promise */ 67);
        var viewPortChanged = viewPortUtils.changeCallback;
        var DX_LINK_SELECTOR = "link[rel=dx-theme]";
        var THEME_ATTR = "data-theme";
        var ACTIVE_ATTR = "data-active";
        var DX_HAIRLINES_CLASS = "dx-hairlines";
        var context;
        var $activeThemeLink;
        var knownThemes;
        var currentThemeName;
        var pendingThemeName;
        var timerId;
        var THEME_MARKER_PREFIX = "dx.";

        function readThemeMarker() {
            if (!windowUtils.hasWindow()) {
                return null
            }
            var element = $("<div>", context).addClass("dx-theme-marker").appendTo(context.documentElement);
            var result;
            try {
                result = element.css("fontFamily");
                if (!result) {
                    return null
                }
                result = result.replace(/["']/g, "");
                if (result.substr(0, THEME_MARKER_PREFIX.length) !== THEME_MARKER_PREFIX) {
                    return null
                }
                return result.substr(THEME_MARKER_PREFIX.length)
            } finally {
                element.remove()
            }
        }

        function waitForThemeLoad(themeName) {
            var waitStartTime;
            pendingThemeName = themeName;

            function handleLoaded() {
                pendingThemeName = null;
                themeReadyCallback.fire();
                themeReadyCallback.empty()
            }
            if (isPendingThemeLoaded()) {
                handleLoaded()
            } else {
                waitStartTime = Date.now();
                timerId = setInterval(function() {
                    var isLoaded = isPendingThemeLoaded();
                    var isTimeout = !isLoaded && Date.now() - waitStartTime > 15e3;
                    if (isTimeout) {
                        errors.log("W0004", pendingThemeName)
                    }
                    if (isLoaded || isTimeout) {
                        clearInterval(timerId);
                        timerId = void 0;
                        handleLoaded()
                    }
                }, 10)
            }
        }

        function isPendingThemeLoaded() {
            return !pendingThemeName || readThemeMarker() === pendingThemeName
        }

        function processMarkup() {
            var $allThemeLinks = $(DX_LINK_SELECTOR, context);
            if (!$allThemeLinks.length) {
                return
            }
            knownThemes = {};
            $activeThemeLink = $(domUtils.createMarkupFromString("<link rel=stylesheet>"), context);
            $allThemeLinks.each(function() {
                var link = $(this, context);
                var fullThemeName = link.attr(THEME_ATTR);
                var url = link.attr("href");
                var isActive = "true" === link.attr(ACTIVE_ATTR);
                knownThemes[fullThemeName] = {
                    url: url,
                    isActive: isActive
                }
            });
            $allThemeLinks.last().after($activeThemeLink);
            $allThemeLinks.remove()
        }

        function resolveFullThemeName(desiredThemeName) {
            var desiredThemeParts = desiredThemeName ? desiredThemeName.split(".") : [];
            var result = null;
            if (knownThemes) {
                if (desiredThemeName in knownThemes) {
                    return desiredThemeName
                }
                each(knownThemes, function(knownThemeName, themeData) {
                    var knownThemeParts = knownThemeName.split(".");
                    if (desiredThemeParts[0] && knownThemeParts[0] !== desiredThemeParts[0]) {
                        return
                    }
                    if (desiredThemeParts[1] && desiredThemeParts[1] !== knownThemeParts[1]) {
                        return
                    }
                    if (desiredThemeParts[2] && desiredThemeParts[2] !== knownThemeParts[2]) {
                        return
                    }
                    if (!result || themeData.isActive) {
                        result = knownThemeName
                    }
                    if (themeData.isActive) {
                        return false
                    }
                })
            }
            return result
        }

        function initContext(newContext) {
            try {
                if (newContext !== context) {
                    knownThemes = null
                }
            } catch (x) {
                knownThemes = null
            }
            context = newContext
        }

        function init(options) {
            options = options || {};
            initContext(options.context || domAdapter.getDocument());
            if (!context) {
                return
            }
            processMarkup();
            currentThemeName = void 0;
            current(options)
        }

        function current(options) {
            if (!arguments.length) {
                currentThemeName = currentThemeName || readThemeMarker();
                return currentThemeName
            }
            detachCssClasses(viewPort());
            options = options || {};
            if ("string" === typeof options) {
                options = {
                    theme: options
                }
            }
            var isAutoInit = options._autoInit;
            var loadCallback = options.loadCallback;
            var currentThemeData;
            currentThemeName = resolveFullThemeName(options.theme || currentThemeName);
            if (currentThemeName) {
                currentThemeData = knownThemes[currentThemeName]
            }
            if (loadCallback) {
                themeReadyCallback.add(loadCallback)
            }
            if (currentThemeData) {
                $activeThemeLink.attr("href", knownThemes[currentThemeName].url);
                if ((themeReadyCallback.has() || options._forceTimeout) && !timerId) {
                    waitForThemeLoad(currentThemeName)
                } else {
                    if (pendingThemeName) {
                        pendingThemeName = currentThemeName
                    }
                }
            } else {
                if (isAutoInit) {
                    themeReadyCallback.fire();
                    themeReadyCallback.empty()
                } else {
                    throw errors.Error("E0021", currentThemeName)
                }
            }
            checkThemeDeprecation();
            attachCssClasses(viewPortUtils.originalViewPort(), currentThemeName)
        }

        function getCssClasses(themeName) {
            themeName = themeName || current();
            var result = [];
            var themeNameParts = themeName && themeName.split(".");
            if (themeNameParts) {
                result.push("dx-theme-" + themeNameParts[0], "dx-theme-" + themeNameParts[0] + "-typography");
                if (themeNameParts.length > 1) {
                    result.push("dx-color-scheme-" + themeNameParts[1] + (isMaterial(themeName) ? "-" + themeNameParts[2] : ""))
                }
            }
            return result
        }
        var themeClasses;

        function attachCssClasses(element, themeName) {
            themeClasses = getCssClasses(themeName).join(" ");
            $(element).addClass(themeClasses);
            var activateHairlines = function() {
                var pixelRatio = windowUtils.hasWindow() && window.devicePixelRatio;
                if (!pixelRatio || pixelRatio < 2) {
                    return
                }
                var $tester = $("<div>");
                $tester.css("border", ".5px solid transparent");
                $("body").append($tester);
                if (1 === $tester.outerHeight()) {
                    $(element).addClass(DX_HAIRLINES_CLASS);
                    themeClasses += " " + DX_HAIRLINES_CLASS
                }
                $tester.remove()
            };
            activateHairlines()
        }

        function detachCssClasses(element) {
            $(element).removeClass(themeClasses)
        }

        function themeReady(callback) {
            themeReadyCallback.add(callback)
        }

        function isTheme(themeRegExp, themeName) {
            if (!themeName) {
                themeName = currentThemeName || readThemeMarker()
            }
            return new RegExp(themeRegExp).test(themeName)
        }

        function isMaterial(themeName) {
            return isTheme("material", themeName)
        }

        function isIos7(themeName) {
            return isTheme("ios7", themeName)
        }

        function isGeneric(themeName) {
            return isTheme("generic", themeName)
        }

        function isDark(themeName) {
            return isTheme("dark", themeName)
        }

        function checkThemeDeprecation() {
            if (isIos7()) {
                errors.log("W0010", "The 'ios7' theme", "19.1", "Use the 'generic' theme instead.")
            }
        }

        function isWebFontLoaded(text, fontWeight) {
            var testedFont = "Roboto, RobotoFallback, Arial";
            var etalonFont = "Arial";
            var document = domAdapter.getDocument();
            var testElement = document.createElement("span");
            testElement.style.position = "absolute";
            testElement.style.top = "-9999px";
            testElement.style.left = "-9999px";
            testElement.style.visibility = "hidden";
            testElement.style.fontFamily = etalonFont;
            testElement.style.fontSize = "250px";
            testElement.style.fontWeight = fontWeight;
            testElement.innerHTML = text;
            document.body.appendChild(testElement);
            var etalonFontWidth = testElement.offsetWidth;
            testElement.style.fontFamily = testedFont;
            var testedFontWidth = testElement.offsetWidth;
            testElement.parentNode.removeChild(testElement);
            return etalonFontWidth !== testedFontWidth
        }

        function waitWebFont(text, fontWeight) {
            var interval = 15;
            var timeout = 2e3;
            return new Promise(function(resolve) {
                var check = function() {
                    if (isWebFontLoaded(text, fontWeight)) {
                        clear()
                    }
                };
                var clear = function() {
                    clearInterval(intervalId);
                    clearTimeout(timeoutId);
                    resolve()
                };
                var intervalId = setInterval(check, interval);
                var timeoutId = setTimeout(clear, timeout)
            })
        }
        var initDeferred = new Deferred;

        function autoInit() {
            init({
                _autoInit: true,
                _forceTimeout: true
            });
            if ($(DX_LINK_SELECTOR, context).length) {
                throw errors.Error("E0022")
            }
            initDeferred.resolve()
        }
        if (windowUtils.hasWindow()) {
            autoInit()
        } else {
            ready(autoInit)
        }
        viewPortChanged.add(function(viewPort, prevViewPort) {
            initDeferred.done(function() {
                detachCssClasses(prevViewPort);
                attachCssClasses(viewPort)
            })
        });
        devices.changed.add(function() {
            init({
                _autoInit: true
            })
        });
        exports.current = current;
        exports.ready = themeReady;
        exports.init = init;
        exports.attachCssClasses = attachCssClasses;
        exports.detachCssClasses = detachCssClasses;
        exports.waitForThemeLoad = waitForThemeLoad;
        exports.isMaterial = isMaterial;
        exports.isIos7 = isIos7;
        exports.isGeneric = isGeneric;
        exports.isDark = isDark;
        exports.isWebFontLoaded = isWebFontLoaded;
        exports.waitWebFont = waitWebFont;
        exports.resetTheme = function() {
            $activeThemeLink && $activeThemeLink.attr("href", "about:blank");
            currentThemeName = null;
            pendingThemeName = null
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.utils.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _filtering = __webpack_require__( /*! ../shared/filtering */ 169);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _load_panel = __webpack_require__( /*! ../load_panel */ 167);
        var _load_panel2 = _interopRequireDefault(_load_panel);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);
        var _format_helper = __webpack_require__( /*! ../../format_helper */ 63);
        var _format_helper2 = _interopRequireDefault(_format_helper);
        var _object = __webpack_require__( /*! ../../core/utils/object */ 47);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATAGRID_SELECTION_DISABLED_CLASS = "dx-selection-disabled";
        var DATAGRID_GROUP_OPENED_CLASS = "dx-datagrid-group-opened";
        var DATAGRID_GROUP_CLOSED_CLASS = "dx-datagrid-group-closed";
        var DATAGRID_EXPAND_CLASS = "dx-datagrid-expand";
        var NO_DATA_CLASS = "nodata";
        var DATE_INTERVAL_SELECTORS = {
            year: function(value) {
                return value && value.getFullYear()
            },
            month: function(value) {
                return value && value.getMonth() + 1
            },
            day: function(value) {
                return value && value.getDate()
            },
            quarter: function(value) {
                return value && Math.floor(value.getMonth() / 3) + 1
            },
            hour: function(value) {
                return value && value.getHours()
            },
            minute: function(value) {
                return value && value.getMinutes()
            },
            second: function(value) {
                return value && value.getSeconds()
            }
        };
        module.exports = function() {
            var getIntervalSelector = function() {
                var data = arguments[1];
                var value = this.calculateCellValue(data);
                if (!(0, _type.isDefined)(value)) {
                    return null
                } else {
                    if (isDateType(this.dataType)) {
                        var nameIntervalSelector = arguments[0];
                        return DATE_INTERVAL_SELECTORS[nameIntervalSelector](value)
                    } else {
                        if ("number" === this.dataType) {
                            var groupInterval = arguments[0];
                            return Math.floor(Number(value) / groupInterval) * groupInterval
                        }
                    }
                }
            };
            var equalSelectors = function(selector1, selector2) {
                if ((0, _type.isFunction)(selector1) && (0, _type.isFunction)(selector2)) {
                    if (selector1.originalCallback && selector2.originalCallback) {
                        return selector1.originalCallback === selector2.originalCallback && selector1.columnIndex === selector2.columnIndex
                    }
                }
                return selector1 === selector2
            };

            function isDateType(dataType) {
                return "date" === dataType || "datetime" === dataType
            }
            var setEmptyText = function($container) {
                $container.get(0).textContent = "\xa0"
            };
            var getWidgetInstance = function($element) {
                var editorData = $element.data && $element.data();
                var dxComponents = editorData && editorData.dxComponents;
                var widgetName = dxComponents && dxComponents[0];
                return widgetName && editorData[widgetName]
            };
            return {
                renderNoDataText: function($element) {
                    var that = this;
                    $element = $element || this.element();
                    if (!$element) {
                        return
                    }
                    var noDataClass = that.addWidgetPrefix(NO_DATA_CLASS);
                    var noDataElement = $element.find("." + noDataClass).last();
                    var isVisible = this._dataController.isEmpty();
                    var isLoading = this._dataController.isLoading();
                    if (!noDataElement.length) {
                        noDataElement = (0, _renderer2.default)("<span>").addClass(noDataClass).appendTo($element)
                    }
                    if (isVisible && !isLoading) {
                        noDataElement.removeClass("dx-hidden").text(that._getNoDataText())
                    } else {
                        noDataElement.addClass("dx-hidden")
                    }
                },
                renderLoadPanel: function($element, $container, isLocalStore) {
                    var that = this;
                    var loadPanelOptions;
                    that._loadPanel && that._loadPanel.$element().remove();
                    loadPanelOptions = that.option("loadPanel");
                    if (loadPanelOptions && ("auto" === loadPanelOptions.enabled ? !isLocalStore : loadPanelOptions.enabled)) {
                        loadPanelOptions = (0, _extend.extend)({
                            shading: false,
                            message: loadPanelOptions.text,
                            position: function() {
                                var $window = (0, _renderer2.default)((0, _window.getWindow)());
                                if ($element.height() > $window.height()) {
                                    return {
                                        of: $window,
                                        boundary: $element,
                                        collision: "fit"
                                    }
                                }
                                return {
                                    of: $element
                                }
                            },
                            container: $container
                        }, loadPanelOptions);
                        that._loadPanel = that._createComponent((0, _renderer2.default)("<div>").appendTo($container), _load_panel2.default, loadPanelOptions)
                    } else {
                        that._loadPanel = null
                    }
                },
                getIndexByKey: function(key, items, keyName) {
                    var index = -1;
                    if (void 0 !== key && Array.isArray(items)) {
                        keyName = arguments.length <= 2 ? "key" : keyName;
                        for (var i = 0; i < items.length; i++) {
                            var item = (0, _type.isDefined)(keyName) ? items[i][keyName] : items[i];
                            if ((0, _common.equalByValue)(key, item)) {
                                index = i;
                                break
                            }
                        }
                    }
                    return index
                },
                combineFilters: function(filters, operation) {
                    var resultFilter = [];
                    operation = operation || "and";
                    for (var i = 0; i < filters.length; i++) {
                        if (!filters[i]) {
                            continue
                        }
                        if (resultFilter.length) {
                            resultFilter.push(operation)
                        }
                        resultFilter.push(filters[i])
                    }
                    if (1 === resultFilter.length) {
                        resultFilter = resultFilter[0]
                    }
                    if (resultFilter.length) {
                        return resultFilter
                    }
                },
                checkChanges: function(changes, changeNames) {
                    var changesWithChangeNamesCount = 0;
                    for (var i = 0; i < changeNames.length; i++) {
                        if (changes[changeNames[i]]) {
                            changesWithChangeNamesCount++
                        }
                    }
                    return changes.length && changes.length === changesWithChangeNamesCount
                },
                equalFilterParameters: function(filter1, filter2) {
                    if (Array.isArray(filter1) && Array.isArray(filter2)) {
                        if (filter1.length !== filter2.length) {
                            return false
                        } else {
                            for (var i = 0; i < filter1.length; i++) {
                                if (!module.exports.equalFilterParameters(filter1[i], filter2[i])) {
                                    return false
                                }
                            }
                        }
                        return true
                    } else {
                        if ((0, _type.isFunction)(filter1) && filter1.columnIndex >= 0 && (0, _type.isFunction)(filter2) && filter2.columnIndex >= 0) {
                            return filter1.columnIndex === filter2.columnIndex && (0, _data.toComparable)(filter1.filterValue) === (0, _data.toComparable)(filter2.filterValue)
                        } else {
                            return (0, _data.toComparable)(filter1) == (0, _data.toComparable)(filter2)
                        }
                    }
                },
                proxyMethod: function(instance, methodName, defaultResult) {
                    if (!instance[methodName]) {
                        instance[methodName] = function() {
                            var dataSource = this._dataSource;
                            return dataSource ? dataSource[methodName].apply(dataSource, arguments) : defaultResult
                        }
                    }
                },
                formatValue: function(value, options) {
                    var valueText = _format_helper2.default.format(value, options.format) || value && value.toString() || "";
                    var formatObject = {
                        value: value,
                        valueText: options.getDisplayFormat ? options.getDisplayFormat(valueText) : valueText,
                        target: options.target || "row",
                        groupInterval: options.groupInterval
                    };
                    return options.customizeText ? options.customizeText.call(options, formatObject) : formatObject.valueText
                },
                getFormatOptionsByColumn: function(column, target) {
                    return {
                        format: column.format,
                        getDisplayFormat: column.getDisplayFormat,
                        customizeText: column.customizeText,
                        target: target,
                        trueText: column.trueText,
                        falseText: column.falseText
                    }
                },
                getDisplayValue: function(column, value, data, rowType) {
                    if (column.displayValueMap && void 0 !== column.displayValueMap[value]) {
                        return column.displayValueMap[value]
                    } else {
                        if (column.calculateDisplayValue && data && "group" !== rowType) {
                            return column.calculateDisplayValue(data)
                        } else {
                            if (column.lookup && !("group" === rowType && (column.calculateGroupValue || column.calculateDisplayValue))) {
                                return column.lookup.calculateCellValue(value)
                            }
                        }
                    }
                    return value
                },
                getGroupRowSummaryText: function(summaryItems, summaryTexts) {
                    var result = "(";
                    for (var i = 0; i < summaryItems.length; i++) {
                        var summaryItem = summaryItems[i];
                        result += (i > 0 ? ", " : "") + module.exports.getSummaryText(summaryItem, summaryTexts)
                    }
                    return result += ")"
                },
                getSummaryText: function(summaryItem, summaryTexts) {
                    var displayFormat = summaryItem.displayFormat || summaryItem.columnCaption && summaryTexts[summaryItem.summaryType + "OtherColumn"] || summaryTexts[summaryItem.summaryType];
                    return this.formatValue(summaryItem.value, {
                        format: summaryItem.valueFormat,
                        getDisplayFormat: function(valueText) {
                            return displayFormat ? (0, _string.format)(displayFormat, valueText, summaryItem.columnCaption) : valueText
                        },
                        customizeText: summaryItem.customizeText
                    })
                },
                normalizeSortingInfo: function(sort) {
                    sort = sort || [];
                    var result = (0, _utils.normalizeSortingInfo)(sort);
                    for (var i = 0; i < sort.length; i++) {
                        if (sort && sort[i] && void 0 !== sort[i].isExpanded) {
                            result[i].isExpanded = sort[i].isExpanded
                        }
                        if (sort && sort[i] && void 0 !== sort[i].groupInterval) {
                            result[i].groupInterval = sort[i].groupInterval
                        }
                    }
                    return result
                },
                getFormatByDataType: function(dataType) {
                    switch (dataType) {
                        case "date":
                            return "shortDate";
                        case "datetime":
                            return "shortDateShortTime"
                    }
                },
                getHeaderFilterGroupParameters: function(column, remoteGrouping) {
                    var result = [];
                    var dataField = column.dataField || column.name;
                    var groupInterval = (0, _filtering.getGroupInterval)(column);
                    if (groupInterval) {
                        (0, _iterator.each)(groupInterval, function(index, interval) {
                            result.push(remoteGrouping ? {
                                selector: dataField,
                                groupInterval: interval,
                                isExpanded: index < groupInterval.length - 1
                            } : getIntervalSelector.bind(column, interval))
                        });
                        return result
                    }
                    if (remoteGrouping) {
                        result = [{
                            selector: dataField,
                            isExpanded: false
                        }]
                    } else {
                        result = function result(data) {
                            var result = column.calculateCellValue(data);
                            if (void 0 === result || "" === result) {
                                result = null
                            }
                            return result
                        };
                        if (column.sortingMethod) {
                            result = [{
                                selector: result,
                                compare: column.sortingMethod.bind(column)
                            }]
                        }
                    }
                    return result
                },
                equalSortParameters: function(sortParameters1, sortParameters2, ignoreIsExpanded) {
                    sortParameters1 = module.exports.normalizeSortingInfo(sortParameters1);
                    sortParameters2 = module.exports.normalizeSortingInfo(sortParameters2);
                    if (Array.isArray(sortParameters1) && Array.isArray(sortParameters2)) {
                        if (sortParameters1.length !== sortParameters2.length) {
                            return false
                        } else {
                            for (var i = 0; i < sortParameters1.length; i++) {
                                if (!equalSelectors(sortParameters1[i].selector, sortParameters2[i].selector) || sortParameters1[i].desc !== sortParameters2[i].desc || sortParameters1[i].groupInterval !== sortParameters2[i].groupInterval || !ignoreIsExpanded && Boolean(sortParameters1[i].isExpanded) !== Boolean(sortParameters2[i].isExpanded)) {
                                    return false
                                }
                            }
                        }
                        return true
                    } else {
                        return (!sortParameters1 || !sortParameters1.length) === (!sortParameters2 || !sortParameters2.length)
                    }
                },
                getPointsByColumns: function(items, pointCreated, isVertical, startColumnIndex) {
                    var cellsLength = items.length;
                    var notCreatePoint = false;
                    var item;
                    var offset;
                    var columnIndex = startColumnIndex || 0;
                    var result = [];
                    var rtlEnabled;
                    for (var i = 0; i <= cellsLength; i++) {
                        if (i < cellsLength) {
                            item = items.eq(i);
                            offset = item.offset();
                            rtlEnabled = "rtl" === item.css("direction")
                        }
                        var point = {
                            index: columnIndex,
                            x: offset ? offset.left + (!isVertical && rtlEnabled ^ i === cellsLength ? (0, _position.getBoundingRect)(item[0]).width : 0) : 0,
                            y: offset ? offset.top + (isVertical && i === cellsLength ? (0, _position.getBoundingRect)(item[0]).height : 0) : 0,
                            columnIndex: columnIndex
                        };
                        if (!isVertical && i > 0) {
                            var prevItemOffset = items.eq(i - 1).offset();
                            if (prevItemOffset.top < point.y) {
                                point.y = prevItemOffset.top
                            }
                        }
                        if (pointCreated) {
                            notCreatePoint = pointCreated(point)
                        }
                        if (!notCreatePoint) {
                            result.push(point)
                        }
                        columnIndex++
                    }
                    return result
                },
                createObjectWithChanges: function(target, changes) {
                    var result = target ? Object.create(Object.getPrototypeOf(target)) : {};
                    var targetWithoutPrototype = (0, _extend.extendFromObject)({}, target);
                    (0, _object.deepExtendArraySafe)(result, targetWithoutPrototype, true, true);
                    return (0, _object.deepExtendArraySafe)(result, changes, true, true)
                },
                getExpandCellTemplate: function() {
                    return {
                        allowRenderToDetachedContainer: true,
                        render: function(container, options) {
                            var $container = (0, _renderer2.default)(container);
                            if ((0, _type.isDefined)(options.value) && !(options.data && options.data.isContinuation) && !options.row.isNewRow) {
                                var rowsView = options.component.getView("rowsView");
                                $container.addClass(DATAGRID_EXPAND_CLASS).addClass(DATAGRID_SELECTION_DISABLED_CLASS);
                                (0, _renderer2.default)("<div>").addClass(options.value ? DATAGRID_GROUP_OPENED_CLASS : DATAGRID_GROUP_CLOSED_CLASS).appendTo($container);
                                rowsView.setAria("label", options.value ? rowsView.localize("dxDataGrid-ariaCollapse") : rowsView.localize("dxDataGrid-ariaExpand"), $container)
                            } else {
                                setEmptyText($container)
                            }
                        }
                    }
                },
                setEmptyText: setEmptyText,
                isDateType: isDateType,
                getSelectionRange: function(focusedElement) {
                    try {
                        if (focusedElement) {
                            return {
                                selectionStart: focusedElement.selectionStart,
                                selectionEnd: focusedElement.selectionEnd
                            }
                        }
                    } catch (e) {}
                    return {}
                },
                setSelectionRange: function(focusedElement, selectionRange) {
                    try {
                        if (focusedElement && focusedElement.setSelectionRange) {
                            focusedElement.setSelectionRange(selectionRange.selectionStart, selectionRange.selectionEnd)
                        }
                    } catch (e) {}
                },
                focusAndSelectElement: function(component, $element) {
                    _events_engine2.default.trigger($element, "focus");
                    var isSelectTextOnEditingStart = component.option("editing.selectTextOnEditStart");
                    var keyboardController = component.getController("keyboardNavigation");
                    var isEditingNavigationMode = keyboardController && keyboardController._isFastEditingStarted();
                    if (isSelectTextOnEditingStart && !isEditingNavigationMode && $element.is(".dx-texteditor-input")) {
                        var editor = getWidgetInstance($element.closest(".dx-texteditor"));
                        (0, _deferred.when)(editor && editor._loadItemDeferred).done(function() {
                            $element.get(0).select()
                        })
                    }
                },
                getWidgetInstance: getWidgetInstance,
                getLastResizableColumnIndex: function(columns, resultWidths) {
                    var hasResizableColumns = columns.some(function(column) {
                        return column && !column.command && !column.fixed && false !== column.allowResizing
                    });
                    var lastColumnIndex;
                    for (lastColumnIndex = columns.length - 1; columns[lastColumnIndex]; lastColumnIndex--) {
                        var column = columns[lastColumnIndex];
                        var width = resultWidths && resultWidths[lastColumnIndex];
                        var allowResizing = !hasResizableColumns || false !== column.allowResizing;
                        if (!column.command && !column.fixed && "adaptiveHidden" !== width && allowResizing) {
                            break
                        }
                    }
                    return lastColumnIndex
                },
                isElementInCurrentGrid: function(controller, $element) {
                    if ($element && $element.length) {
                        var $grid = $element.closest("." + controller.getWidgetContainerClass()).parent();
                        return $grid.is(controller.component.$element())
                    }
                    return false
                }
            }
        }()
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/inflector.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var map = __webpack_require__( /*! ./iterator */ 4).map;
        var _normalize = function(text) {
            if (void 0 === text || null === text) {
                return ""
            }
            return String(text)
        };
        var _upperCaseFirst = function(text) {
            return _normalize(text).charAt(0).toUpperCase() + text.substr(1)
        };
        var _chop = function(text) {
            return _normalize(text).replace(/([a-z\d])([A-Z])/g, "$1 $2").split(/[\s_-]+/)
        };
        var dasherize = function(text) {
            return map(_chop(text), function(p) {
                return p.toLowerCase()
            }).join("-")
        };
        var underscore = function(text) {
            return dasherize(text).replace(/-/g, "_")
        };
        var camelize = function(text, upperFirst) {
            return map(_chop(text), function(p, i) {
                p = p.toLowerCase();
                if (upperFirst || i > 0) {
                    p = _upperCaseFirst(p)
                }
                return p
            }).join("")
        };
        var humanize = function(text) {
            return _upperCaseFirst(dasherize(text).replace(/-/g, " "))
        };
        var titleize = function(text) {
            return map(_chop(text), function(p) {
                return _upperCaseFirst(p.toLowerCase())
            }).join(" ")
        };
        var DIGIT_CHARS = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
        var captionize = function(name) {
            var captionList = [];
            var i;
            var char;
            var isPrevCharNewWord = false;
            var isNewWord = false;
            for (i = 0; i < name.length; i++) {
                char = name.charAt(i);
                isNewWord = char === char.toUpperCase() && "-" !== char && ")" !== char && "/" !== char || char in DIGIT_CHARS;
                if ("_" === char || "." === char) {
                    char = " ";
                    isNewWord = true
                } else {
                    if (0 === i) {
                        char = char.toUpperCase();
                        isNewWord = true
                    } else {
                        if (!isPrevCharNewWord && isNewWord) {
                            if (captionList.length > 0) {
                                captionList.push(" ")
                            }
                        }
                    }
                }
                captionList.push(char);
                isPrevCharNewWord = isNewWord
            }
            return captionList.join("")
        };
        exports.dasherize = dasherize;
        exports.camelize = camelize;
        exports.humanize = humanize;
        exports.titleize = titleize;
        exports.underscore = underscore;
        exports.captionize = captionize
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/localization/date.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dependency_injector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _errors = __webpack_require__( /*! ../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _date = __webpack_require__( /*! ./ldml/date.formatter */ 273);
        var _date2 = __webpack_require__( /*! ./ldml/date.format */ 215);
        var _date3 = __webpack_require__( /*! ./ldml/date.parser */ 217);
        var _default_date_names = __webpack_require__( /*! ./default_date_names */ 274);
        var _default_date_names2 = _interopRequireDefault(_default_date_names);
        var _first_day_of_week_data = __webpack_require__( /*! ./cldr-data/first_day_of_week_data */ 455);
        var _first_day_of_week_data2 = _interopRequireDefault(_first_day_of_week_data);
        var _core = __webpack_require__( /*! ./core */ 83);
        var _number = __webpack_require__( /*! ./number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _date4 = __webpack_require__( /*! ./intl/date */ 456);
        var _date5 = _interopRequireDefault(_date4);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_DAY_OF_WEEK_INDEX = 0;
        var hasIntl = "undefined" !== typeof Intl;
        var FORMATS_TO_PATTERN_MAP = {
            shortdate: "M/d/y",
            shorttime: "h:mm a",
            longdate: "EEEE, MMMM d, y",
            longtime: "h:mm:ss a",
            monthandday: "MMMM d",
            monthandyear: "MMMM y",
            quarterandyear: "QQQ y",
            day: "d",
            year: "y",
            shortdateshorttime: "M/d/y, h:mm a",
            longdatelongtime: "EEEE, MMMM d, y, h:mm:ss a",
            month: "LLLL",
            shortyear: "yy",
            dayofweek: "EEEE",
            quarter: "QQQ",
            hour: "HH",
            minute: "mm",
            second: "ss",
            millisecond: "SSS",
            "datetime-local": "yyyy-MM-ddTHH':'mm':'ss"
        };
        var possiblePartPatterns = {
            year: ["y", "yy", "yyyy"],
            day: ["d", "dd"],
            month: ["M", "MM", "MMM", "MMMM"],
            hours: ["H", "HH", "h", "hh", "ah"],
            minutes: ["m", "mm"],
            seconds: ["s", "ss"],
            milliseconds: ["S", "SS", "SSS"]
        };
        var dateLocalization = (0, _dependency_injector2.default)({
            engine: function() {
                return "base"
            },
            _getPatternByFormat: function(format) {
                return FORMATS_TO_PATTERN_MAP[format.toLowerCase()]
            },
            _expandPattern: function(pattern) {
                return this._getPatternByFormat(pattern) || pattern
            },
            formatUsesMonthName: function(format) {
                return this._expandPattern(format).indexOf("MMMM") !== -1
            },
            formatUsesDayName: function(format) {
                return this._expandPattern(format).indexOf("EEEE") !== -1
            },
            getFormatParts: function(format) {
                var pattern = this._getPatternByFormat(format) || format;
                var result = [];
                _iterator2.default.each(pattern.split(/\W+/), function(_, formatPart) {
                    _iterator2.default.each(possiblePartPatterns, function(partName, possiblePatterns) {
                        if ((0, _array.inArray)(formatPart, possiblePatterns) > -1) {
                            result.push(partName)
                        }
                    })
                });
                return result
            },
            getMonthNames: function(format) {
                return _default_date_names2.default.getMonthNames(format)
            },
            getDayNames: function(format) {
                return _default_date_names2.default.getDayNames(format)
            },
            getQuarterNames: function(format) {
                return _default_date_names2.default.getQuarterNames(format)
            },
            getPeriodNames: function(format) {
                return _default_date_names2.default.getPeriodNames(format)
            },
            getTimeSeparator: function() {
                return ":"
            },
            is24HourFormat: function(format) {
                var amTime = new Date(2017, 0, 20, 11, 0, 0, 0);
                var pmTime = new Date(2017, 0, 20, 23, 0, 0, 0);
                var amTimeFormatted = this.format(amTime, format);
                var pmTimeFormatted = this.format(pmTime, format);
                for (var i = 0; i < amTimeFormatted.length; i++) {
                    if (amTimeFormatted[i] !== pmTimeFormatted[i]) {
                        return !isNaN(parseInt(amTimeFormatted[i]))
                    }
                }
            },
            format: function(date, _format) {
                if (!date) {
                    return
                }
                if (!_format) {
                    return date
                }
                var formatter;
                if ("function" === typeof _format) {
                    formatter = _format
                } else {
                    if (_format.formatter) {
                        formatter = _format.formatter
                    } else {
                        _format = _format.type || _format;
                        if ((0, _type.isString)(_format)) {
                            _format = FORMATS_TO_PATTERN_MAP[_format.toLowerCase()] || _format;
                            return _number2.default.convertDigits((0, _date.getFormatter)(_format, this)(date))
                        }
                    }
                }
                if (!formatter) {
                    return
                }
                return formatter(date)
            },
            parse: function(text, format) {
                var that = this;
                var ldmlFormat;
                var formatter;
                if (!text) {
                    return
                }
                if (!format) {
                    return this.parse(text, "shortdate")
                }
                if (format.parser) {
                    return format.parser(text)
                }
                if ("string" === typeof format && !FORMATS_TO_PATTERN_MAP[format.toLowerCase()]) {
                    ldmlFormat = format
                } else {
                    formatter = function(value) {
                        var text = that.format(value, format);
                        return _number2.default.convertDigits(text, true)
                    };
                    try {
                        ldmlFormat = (0, _date2.getFormat)(formatter)
                    } catch (e) {}
                }
                if (ldmlFormat) {
                    text = _number2.default.convertDigits(text, true);
                    return (0, _date3.getParser)(ldmlFormat, this)(text)
                }
                _errors2.default.log("W0012");
                var result = new Date(text);
                if (!result || isNaN(result.getTime())) {
                    return
                }
                return result
            },
            firstDayOfWeekIndex: function() {
                var index = (0, _core.getValueByClosestLocale)(function(locale) {
                    return _first_day_of_week_data2.default[locale]
                });
                return void 0 === index ? DEFAULT_DAY_OF_WEEK_INDEX : index
            }
        });
        if (hasIntl) {
            dateLocalization.inject(_date5.default)
        }
        module.exports = dateLocalization
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/core/guid.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ./class */ 16);
        var Guid = Class.inherit({
            ctor: function(value) {
                if (value) {
                    value = String(value)
                }
                this._value = this._normalize(value || this._generate())
            },
            _normalize: function(value) {
                value = value.replace(/[^a-f0-9]/gi, "").toLowerCase();
                while (value.length < 32) {
                    value += "0"
                }
                return [value.substr(0, 8), value.substr(8, 4), value.substr(12, 4), value.substr(16, 4), value.substr(20, 12)].join("-")
            },
            _generate: function() {
                var value = "";
                for (var i = 0; i < 32; i++) {
                    value += Math.round(15 * Math.random()).toString(16)
                }
                return value
            },
            toString: function() {
                return this._value
            },
            valueOf: function() {
                return this._value
            },
            toJSON: function() {
                return this._value
            }
        });
        module.exports = Guid
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/button.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _utils = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var _utils2 = _interopRequireDefault(_utils);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _themes = __webpack_require__( /*! ./themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _action = __webpack_require__( /*! ../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _validation_engine = __webpack_require__( /*! ./validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _ui = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _short = __webpack_require__( /*! ../events/short */ 116);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _function_template = __webpack_require__( /*! ../core/templates/function_template */ 113);
        var _icon = __webpack_require__( /*! ../core/utils/icon */ 53);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var Button = function(_Widget) {
            _inherits(Button, _Widget);
            var _super = _createSuper(Button);

            function Button() {
                var _this;
                _classCallCheck(this, Button);
                for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                    args[_key] = arguments[_key]
                }
                _this = _super.call.apply(_super, [this].concat(args));
                _this._feedbackHideTimeout = 100;
                return _this
            }
            _createClass(Button, [{
                key: "_$content",
                value: function() {
                    return this.$element().find(".dx-button-content")
                }
            }, {
                key: "_$submitInput",
                value: function() {
                    return this.$element().find(".dx-button-submit-input")
                }
            }, {
                key: "_attachActiveEvents",
                value: function(active, inactive) {
                    var $el = this._eventBindingTarget();
                    var namespace = "inkRipple";
                    var selector = this._activeStateUnit;
                    _short.active.off($el, {
                        namespace: namespace,
                        selector: selector
                    });
                    _short.active.on($el, new _action2.default(active), new _action2.default(inactive, {
                        excludeValidators: ["disabled", "readOnly"]
                    }), {
                        showTimeout: this._feedbackShowTimeout,
                        hideTimeout: this._feedbackHideTimeout,
                        selector: selector,
                        namespace: namespace
                    })
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(Button.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                        },
                        options: {
                            focusStateEnabled: true
                        }
                    }, {
                        device: function() {
                            return _themes2.default.isMaterial(_themes2.default.current())
                        },
                        options: {
                            useInkRipple: true
                        }
                    }])
                }
            }, {
                key: "_executeClickAction",
                value: function(event) {
                    this._clickAction({
                        validationGroup: this._validationGroupConfig,
                        event: event
                    })
                }
            }, {
                key: "_findGroup",
                value: function() {
                    var $element = this.$element();
                    var model = this._modelByElement($element);
                    var _this$option = this.option(),
                        validationGroup = _this$option.validationGroup;
                    return validationGroup || _validation_engine2.default.findGroup($element, model)
                }
            }, {
                key: "_getContentData",
                value: function() {
                    var _this$option2 = this.option(),
                        icon = _this$option2.icon,
                        text = _this$option2.text,
                        type = _this$option2.type,
                        _templateData = _this$option2._templateData;
                    return (0, _extend.extend)({
                        icon: "back" === type && !icon ? "back" : icon,
                        text: text
                    }, _templateData)
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Button.prototype), "_getDefaultOptions", this).call(this), {
                        hoverStateEnabled: true,
                        onClick: null,
                        type: "normal",
                        text: "",
                        icon: "",
                        iconPosition: "left",
                        validationGroup: void 0,
                        activeStateEnabled: true,
                        template: "content",
                        useSubmitBehavior: false,
                        useInkRipple: false,
                        _templateData: {},
                        stylingMode: "contained"
                    })
                }
            }, {
                key: "_getSubmitAction",
                value: function() {
                    var _this2 = this;
                    var needValidate = true;
                    var validationStatus = "valid";
                    return this._createAction(function(_ref) {
                        var event = _ref.event;
                        if (needValidate) {
                            var validationGroup = _this2._validationGroupConfig;
                            if (validationGroup) {
                                var _validationGroup$vali = validationGroup.validate(),
                                    status = _validationGroup$vali.status,
                                    complete = _validationGroup$vali.complete;
                                validationStatus = status;
                                if ("pending" === status) {
                                    needValidate = false;
                                    _this2.option("disabled", true);
                                    complete.then(function(_ref2) {
                                        var status = _ref2.status;
                                        _this2.option("disabled", false);
                                        validationStatus = status;
                                        "valid" === validationStatus && _this2._submitInput().click();
                                        needValidate = true
                                    })
                                }
                            }
                        }
                        "valid" !== validationStatus && event.preventDefault();
                        event.stopPropagation()
                    })
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this.$element().addClass("dx-button");
                    this._renderType();
                    this._renderStylingMode();
                    this._renderInkRipple();
                    this._renderClick();
                    this._updateAriaLabel();
                    _get(_getPrototypeOf(Button.prototype), "_initMarkup", this).call(this);
                    this._updateContent();
                    this.setAria("role", "button")
                }
            }, {
                key: "_getAnonymousTemplateName",
                value: function() {
                    return ANONYMOUS_TEMPLATE_NAME
                }
            }, {
                key: "_initTemplates",
                value: function() {
                    var _this3 = this;
                    this._templateManager.addDefaultTemplates({
                        content: new _function_template.FunctionTemplate(function(_ref3) {
                            var _ref3$model = _ref3.model,
                                model = void 0 === _ref3$model ? {} : _ref3$model,
                                container = _ref3.container;
                            var text = model.text,
                                icon = model.icon;
                            var _this3$option = _this3.option(),
                                iconPosition = _this3$option.iconPosition;
                            var $icon = (0, _icon.getImageContainer)(icon);
                            var $textContainer = text && (0, _renderer2.default)("<span>").text(text).addClass("dx-button-text");
                            var $container = (0, _renderer2.default)(container);
                            $container.append($textContainer);
                            if ("left" === iconPosition) {
                                $container.prepend($icon)
                            } else {
                                $icon.addClass("dx-icon-right");
                                $container.append($icon)
                            }
                        })
                    });
                    _get(_getPrototypeOf(Button.prototype), "_initTemplates", this).call(this)
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name,
                        previousValue = args.previousValue;
                    switch (name) {
                        case "onClick":
                            this._updateClick();
                            break;
                        case "icon":
                        case "text":
                            this._updateContent();
                            this._updateAriaLabel();
                            break;
                        case "type":
                            this._updateType(previousValue);
                            this._updateContent();
                            break;
                        case "_templateData":
                            break;
                        case "template":
                        case "iconPosition":
                            this._updateContent();
                            break;
                        case "stylingMode":
                            this._updateStylingMode();
                            break;
                        case "useSubmitBehavior":
                            this._updateSubmitInput();
                            break;
                        case "useInkRipple":
                            this._invalidate();
                            break;
                        default:
                            _get(_getPrototypeOf(Button.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_renderClick",
                value: function() {
                    var _this4 = this;
                    var $el = this.$element();
                    _short.dxClick.off($el, {
                        namespace: this.NAME
                    });
                    _short.dxClick.on($el, function(event) {
                        return _this4._executeClickAction(event)
                    }, {
                        namespace: this.NAME
                    });
                    this._updateClick()
                }
            }, {
                key: "_renderInkRipple",
                value: function() {
                    var _this5 = this;
                    var _this$option3 = this.option(),
                        text = _this$option3.text,
                        icon = _this$option3.icon,
                        type = _this$option3.type,
                        useInkRipple = _this$option3.useInkRipple;
                    if (useInkRipple) {
                        var isOnlyIconButton = !text && icon || "back" === type;
                        var _inkRipple = _utils2.default.render(isOnlyIconButton ? {
                            waveSizeCoefficient: 1,
                            useHoldAnimation: false,
                            isCentered: true
                        } : {});
                        var changeWaveVisibility = function(event, visible) {
                            var _this5$option = _this5.option(),
                                activeStateEnabled = _this5$option.activeStateEnabled,
                                useInkRipple = _this5$option.useInkRipple;
                            if (useInkRipple && activeStateEnabled && !_this5._disposed) {
                                var config = {
                                    element: _this5._$content(),
                                    event: event
                                };
                                visible ? _inkRipple.showWave(config) : _inkRipple.hideWave(config)
                            }
                        };
                        this._attachActiveEvents(function(_ref4) {
                            var event = _ref4.event;
                            return changeWaveVisibility(event, true)
                        }, function(_ref5) {
                            var event = _ref5.event;
                            return changeWaveVisibility(event)
                        })
                    }
                }
            }, {
                key: "_renderStylingMode",
                value: function() {
                    var $element = this.$element();
                    var _this$option4 = this.option(),
                        stylingMode = _this$option4.stylingMode;
                    if (["contained", "text", "outlined"].indexOf(stylingMode) === -1) {
                        stylingMode = this._getDefaultOptions().stylingMode
                    }
                    $element.addClass("dx-button-mode-".concat(stylingMode))
                }
            }, {
                key: "_renderSubmitInput",
                value: function() {
                    var _this$option5 = this.option(),
                        useSubmitBehavior = _this$option5.useSubmitBehavior;
                    if (useSubmitBehavior) {
                        var submitAction = this._getSubmitAction();
                        var $content = this._$content();
                        (0, _renderer2.default)("<input>").attr("type", "submit").attr("tabindex", -1).addClass("dx-button-submit-input").appendTo($content);
                        _short.click.on(this._$submitInput(), function(event) {
                            return submitAction({
                                event: event
                            })
                        })
                    }
                }
            }, {
                key: "_renderType",
                value: function() {
                    var _this$option6 = this.option(),
                        type = _this$option6.type;
                    var $element = this.$element();
                    type && $element.addClass("dx-button-".concat(type))
                }
            }, {
                key: "_submitInput",
                value: function() {
                    return this._$submitInput().get(0)
                }
            }, {
                key: "_supportedKeys",
                value: function() {
                    var _this6 = this;
                    var click = function(e) {
                        e.preventDefault();
                        _this6._executeClickAction(e)
                    };
                    return (0, _extend.extend)(_get(_getPrototypeOf(Button.prototype), "_supportedKeys", this).call(this), {
                        space: click,
                        enter: click
                    })
                }
            }, {
                key: "_updateAriaLabel",
                value: function() {
                    var ariaTarget = this._getAriaTarget();
                    var _this$option7 = this.option(),
                        icon = _this$option7.icon,
                        text = _this$option7.text;
                    if (!text) {
                        if ("image" === (0, _icon.getImageSourceType)(icon)) {
                            icon = icon.indexOf("base64") === -1 ? icon.replace(/.+\/([^.]+)\..+$/, "$1") : "Base64"
                        }
                        text = icon || ""
                    }
                    ariaTarget.attr("aria-label", text.trim() || null)
                }
            }, {
                key: "_updateClick",
                value: function() {
                    var _this7 = this;
                    this._clickAction = this._createActionByOption("onClick", {
                        excludeValidators: ["readOnly"],
                        afterExecute: function() {
                            var _this7$option = _this7.option(),
                                useSubmitBehavior = _this7$option.useSubmitBehavior;
                            useSubmitBehavior && setTimeout(function() {
                                return _this7._submitInput().click()
                            })
                        }
                    })
                }
            }, {
                key: "_updateContent",
                value: function() {
                    var $element = this.$element();
                    var $content = this._$content();
                    var data = this._getContentData();
                    var _this$option8 = this.option(),
                        template = _this$option8.template,
                        iconPosition = _this$option8.iconPosition;
                    var icon = data.icon,
                        text = data.text;
                    $content.length ? $content.empty() : $content = (0, _renderer2.default)("<div>").addClass("dx-button-content").appendTo($element);
                    $element.toggleClass("dx-button-has-icon", !!icon).toggleClass("dx-button-icon-right", !!icon && "left" !== iconPosition).toggleClass("dx-button-has-text", !!text);
                    var $template = (0, _renderer2.default)(this._getTemplateByOption("template").render({
                        model: data,
                        container: (0, _dom.getPublicElement)($content),
                        transclude: this._templateManager.anonymousTemplateName === template
                    }));
                    if ($template.hasClass("dx-template-wrapper")) {
                        $template.addClass("dx-button-content");
                        $content.replaceWith($template)
                    }
                    this._updateSubmitInput()
                }
            }, {
                key: "_updateSubmitInput",
                value: function() {
                    var _this$option9 = this.option(),
                        useSubmitBehavior = _this$option9.useSubmitBehavior;
                    var $submitInput = this._$submitInput();
                    if (!useSubmitBehavior && $submitInput.length) {
                        $submitInput.remove()
                    } else {
                        if (useSubmitBehavior && !$submitInput.length) {
                            this._renderSubmitInput()
                        }
                    }
                }
            }, {
                key: "_updateStylingMode",
                value: function() {
                    var $element = this.$element();
                    ["contained", "text", "outlined"].map(function(mode) {
                        return "dx-button-mode-".concat(mode)
                    }).forEach($element.removeClass.bind($element));
                    this._renderStylingMode()
                }
            }, {
                key: "_updateType",
                value: function(previous) {
                    var $element = this.$element();
                    [previous, "back", "danger", "default", "normal", "success"].map(function(type) {
                        return "dx-button-".concat(type)
                    }).forEach($element.removeClass.bind($element));
                    this._renderType()
                }
            }, {
                key: "_validationGroupConfig",
                get: function() {
                    return _validation_engine2.default.getGroupConfig(this._findGroup())
                }
            }]);
            return Button
        }(_ui2.default);
        (0, _component_registrator2.default)("dxButton", Button);
        module.exports = Button
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/data/errors.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ../core/utils/error */ 138);
        var coreErrors = __webpack_require__( /*! ../core/errors */ 22);
        var handlers = {};
        var errors = errorUtils(coreErrors.ERROR_MESSAGES, {
            E4000: "[DevExpress.data]: {0}",
            E4001: "Unknown aggregating function is detected: '{0}'",
            E4002: "Unsupported OData protocol version is used",
            E4003: "Unknown filter operation is used: {0}",
            E4004: "The thenby() method is called before the sortby() method",
            E4005: "Store requires a key expression for this operation",
            E4006: "ArrayStore 'data' option must be an array",
            E4007: "Compound keys cannot be auto-generated",
            E4008: "Attempt to insert an item with the a duplicated key",
            E4009: "Data item cannot be found",
            E4010: "CustomStore does not support creating queries",
            E4011: "Custom Store method is not implemented or is not a function: {0}",
            E4012: "Custom Store method returns an invalid value: {0}",
            E4013: "Local Store requires the 'name' configuration option is specified",
            E4014: "Unknown data type is specified for ODataStore: {0}",
            E4015: "Unknown entity name or alias is used: {0}",
            E4016: "The compileSetter(expr) method is called with 'self' passed as a parameter",
            E4017: "Keys cannot be modified",
            E4018: "The server has returned a non-numeric value in a response to an item count request",
            E4019: "Mixing of group operators inside a single group of filter expression is not allowed",
            E4020: "Unknown store type is detected: {0}",
            E4021: "The server response does not provide the totalCount value",
            E4022: "The server response does not provide the groupCount value",
            E4023: "Could not parse the following XML: {0}",
            E4024: "String function {0} cannot be used with the data field {1} of type {2}.",
            W4000: "Data returned from the server has an incorrect structure",
            W4001: 'The {0} field is listed in both "keyType" and "fieldTypes". The value of "fieldTypes" is used.',
            W4002: "Data loading has failed for some cells due to the following error: {0}"
        });

        function handleError(error) {
            var id = "E4000";
            if (error && "__id" in error) {
                id = error.__id
            }
            errors.log(id, error)
        }
        var errorHandler = null;
        var _errorHandler = function(error) {
            handleError(error);
            if (handlers.errorHandler) {
                handlers.errorHandler(error)
            }
        };
        handlers = {
            errors: errors,
            errorHandler: errorHandler,
            _errorHandler: _errorHandler
        };
        module.exports = handlers
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.modules.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var WIDGET_WITH_LEGACY_CONTAINER_NAME = "dxDataGrid";
        var ModuleItem = _class2.default.inherit({
            _endUpdateCore: function() {},
            ctor: function(component) {
                var that = this;
                that._updateLockCount = 0;
                that.component = component;
                that._actions = {};
                that._actionConfigs = {};
                (0, _iterator.each)(this.callbackNames() || [], function(index, name) {
                    var flags = that.callbackFlags(name) || {};
                    flags.unique = true, flags.syncStrategy = true;
                    that[this] = (0, _callbacks2.default)(flags)
                })
            },
            init: function() {},
            callbackNames: function() {},
            callbackFlags: function() {},
            publicMethods: function() {},
            beginUpdate: function() {
                this._updateLockCount++
            },
            endUpdate: function() {
                if (this._updateLockCount > 0) {
                    this._updateLockCount--;
                    if (!this._updateLockCount) {
                        this._endUpdateCore()
                    }
                }
            },
            option: function(name) {
                var component = this.component;
                var optionCache = component._optionCache;
                if (1 === arguments.length && optionCache) {
                    if (!(name in optionCache)) {
                        optionCache[name] = component.option(name)
                    }
                    return optionCache[name]
                }
                return component.option.apply(component, arguments)
            },
            localize: function(name) {
                var optionCache = this.component._optionCache;
                if (optionCache) {
                    if (!(name in optionCache)) {
                        optionCache[name] = _message2.default.format(name)
                    }
                    return optionCache[name]
                }
                return _message2.default.format(name)
            },
            on: function() {
                return this.component.on.apply(this.component, arguments)
            },
            off: function() {
                return this.component.off.apply(this.component, arguments)
            },
            optionChanged: function(args) {
                if (args.name in this._actions) {
                    this.createAction(args.name, this._actionConfigs[args.name]);
                    args.handled = true
                }
            },
            getAction: function(actionName) {
                return this._actions[actionName]
            },
            setAria: function(name, value, $target) {
                var target = $target.get(0);
                var prefix = "role" !== name && "id" !== name ? "aria-" : "";
                if (target.setAttribute) {
                    target.setAttribute(prefix + name, value)
                } else {
                    $target.attr(prefix + name, value)
                }
            },
            _createComponent: function() {
                return this.component._createComponent.apply(this.component, arguments)
            },
            getController: function(name) {
                return this.component._controllers[name]
            },
            createAction: function(actionName, config) {
                if ((0, _type.isFunction)(actionName)) {
                    var action = this.component._createAction(actionName.bind(this), config);
                    return function(e) {
                        action({
                            event: e
                        })
                    }
                } else {
                    this._actions[actionName] = this.component._createActionByOption(actionName, config);
                    this._actionConfigs[actionName] = config
                }
            },
            executeAction: function(actionName, options) {
                var action = this._actions[actionName];
                return action && action(options)
            },
            dispose: function() {
                var that = this;
                (0, _iterator.each)(that.callbackNames() || [], function() {
                    that[this].empty()
                })
            },
            addWidgetPrefix: function(className) {
                var componentName = this.component.NAME;
                return "dx-" + componentName.slice(2).toLowerCase() + (className ? "-" + className : "")
            },
            getWidgetContainerClass: function() {
                var containerName = this.component.NAME === WIDGET_WITH_LEGACY_CONTAINER_NAME ? null : "container";
                return this.addWidgetPrefix(containerName)
            }
        });
        var Controller = ModuleItem;
        var ViewController = Controller.inherit({
            getView: function(name) {
                return this.component._views[name]
            },
            getViews: function() {
                return this.component._views
            }
        });
        var View = ModuleItem.inherit({
            _isReady: function() {
                return this.component.isReady()
            },
            _endUpdateCore: function() {
                this.callBase();
                if (!this._isReady() && this._requireReady) {
                    this._requireRender = false;
                    this.component._requireResize = false
                }
                if (this._requireRender) {
                    this._requireRender = false;
                    this.render(this._$parent)
                }
            },
            _invalidate: function(requireResize, requireReady) {
                this._requireRender = true;
                this.component._requireResize = (0, _window.hasWindow)() && (this.component._requireResize || requireResize);
                this._requireReady = this._requireReady || requireReady
            },
            _renderCore: function() {},
            _resizeCore: function() {},
            _afterRender: function() {},
            _parentElement: function() {
                return this._$parent
            },
            ctor: function(component) {
                this.callBase(component);
                this.renderCompleted = (0, _callbacks2.default)();
                this.resizeCompleted = (0, _callbacks2.default)()
            },
            element: function() {
                return this._$element
            },
            getElementHeight: function() {
                var $element = this.element();
                if (!$element) {
                    return 0
                }
                var marginTop = parseFloat($element.css("marginTop")) || 0;
                var marginBottom = parseFloat($element.css("marginBottom")) || 0;
                var offsetHeight = $element.get(0).offsetHeight;
                return offsetHeight + marginTop + marginBottom
            },
            isVisible: function() {
                return true
            },
            getTemplate: function(name) {
                return this.component._getTemplate(name)
            },
            render: function($parent, options) {
                var $element = this._$element;
                var isVisible = this.isVisible();
                if (!$element && !$parent) {
                    return
                }
                this._requireReady = false;
                if (!$element) {
                    $element = this._$element = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._$parent = $parent
                }
                $element.toggleClass("dx-hidden", !isVisible);
                if (isVisible) {
                    this.component._optionCache = {};
                    this._renderCore(options);
                    this.component._optionCache = void 0;
                    this._afterRender($parent);
                    this.renderCompleted.fire(options)
                }
            },
            resize: function() {
                this.isResizing = true;
                this._resizeCore();
                this.resizeCompleted.fire();
                this.isResizing = false
            },
            focus: function() {
                _events_engine2.default.trigger(this.element(), "focus")
            }
        });
        var MODULES_ORDER_MAX_INDEX = 1e6;
        var processModules = function(that, componentClass) {
            var modules = componentClass.modules;
            var modulesOrder = componentClass.modulesOrder;
            var controllerTypes = componentClass.controllerTypes || {};
            var viewTypes = componentClass.viewTypes || {};
            if (!componentClass.controllerTypes) {
                if (modulesOrder) {
                    modules.sort(function(module1, module2) {
                        var orderIndex1 = (0, _array.inArray)(module1.name, modulesOrder);
                        var orderIndex2 = (0, _array.inArray)(module2.name, modulesOrder);
                        if (orderIndex1 < 0) {
                            orderIndex1 = MODULES_ORDER_MAX_INDEX
                        }
                        if (orderIndex2 < 0) {
                            orderIndex2 = MODULES_ORDER_MAX_INDEX
                        }
                        return orderIndex1 - orderIndex2
                    })
                }(0, _iterator.each)(modules, function() {
                    var controllers = this.controllers;
                    var moduleName = this.name;
                    var views = this.views;
                    controllers && (0, _iterator.each)(controllers, function(name, type) {
                        if (controllerTypes[name]) {
                            throw _ui2.default.Error("E1001", moduleName, name)
                        } else {
                            if (!(type && type.subclassOf && type.subclassOf(Controller))) {
                                type.subclassOf(Controller);
                                throw _ui2.default.Error("E1002", moduleName, name)
                            }
                        }
                        controllerTypes[name] = type
                    });
                    views && (0, _iterator.each)(views, function(name, type) {
                        if (viewTypes[name]) {
                            throw _ui2.default.Error("E1003", moduleName, name)
                        } else {
                            if (!(type && type.subclassOf && type.subclassOf(View))) {
                                throw _ui2.default.Error("E1004", moduleName, name)
                            }
                        }
                        viewTypes[name] = type
                    })
                });
                (0, _iterator.each)(modules, function() {
                    var extenders = this.extenders;
                    if (extenders) {
                        extenders.controllers && (0, _iterator.each)(extenders.controllers, function(name, extender) {
                            if (controllerTypes[name]) {
                                controllerTypes[name] = controllerTypes[name].inherit(extender)
                            }
                        });
                        extenders.views && (0, _iterator.each)(extenders.views, function(name, extender) {
                            if (viewTypes[name]) {
                                viewTypes[name] = viewTypes[name].inherit(extender)
                            }
                        })
                    }
                });
                componentClass.controllerTypes = controllerTypes;
                componentClass.viewTypes = viewTypes
            }
            var registerPublicMethods = function(that, name, moduleItem) {
                var publicMethods = moduleItem.publicMethods();
                if (publicMethods) {
                    (0, _iterator.each)(publicMethods, function(index, methodName) {
                        if (moduleItem[methodName]) {
                            if (!that[methodName]) {
                                that[methodName] = function() {
                                    return moduleItem[methodName].apply(moduleItem, arguments)
                                }
                            } else {
                                throw _ui2.default.Error("E1005", methodName)
                            }
                        } else {
                            throw _ui2.default.Error("E1006", name, methodName)
                        }
                    })
                }
            };
            var createModuleItems = function(moduleTypes) {
                var moduleItems = {};
                (0, _iterator.each)(moduleTypes, function(name, moduleType) {
                    var moduleItem = new moduleType(that);
                    moduleItem.name = name;
                    registerPublicMethods(that, name, moduleItem);
                    moduleItems[name] = moduleItem
                });
                return moduleItems
            };
            that._controllers = createModuleItems(controllerTypes);
            that._views = createModuleItems(viewTypes)
        };
        var callModuleItemsMethod = function(that, methodName, args) {
            args = args || [];
            if (that._controllers) {
                (0, _iterator.each)(that._controllers, function() {
                    this[methodName] && this[methodName].apply(this, args)
                })
            }
            if (that._views) {
                (0, _iterator.each)(that._views, function() {
                    this[methodName] && this[methodName].apply(this, args)
                })
            }
        };
        module.exports = {
            modules: [],
            View: View,
            ViewController: ViewController,
            Controller: Controller,
            registerModule: function(name, module) {
                var modules = this.modules;
                for (var i = 0; i < modules.length; i++) {
                    if (modules[i].name === name) {
                        return
                    }
                }
                module.name = name;
                modules.push(module);
                delete this.controllerTypes;
                delete this.viewTypes
            },
            registerModulesOrder: function(moduleNames) {
                this.modulesOrder = moduleNames
            },
            unregisterModule: function(name) {
                this.modules = (0, _common.grep)(this.modules, function(module) {
                    return module.name !== name
                });
                delete this.controllerTypes;
                delete this.viewTypes
            },
            processModules: processModules,
            callModuleItemsMethod: callModuleItemsMethod
        }
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/animation/fx.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var errors = __webpack_require__( /*! ../core/errors */ 22);
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var translator = __webpack_require__( /*! ./translator */ 28);
        var easing = __webpack_require__( /*! ./easing */ 281);
        var animationFrame = __webpack_require__( /*! ./frame */ 117);
        var support = __webpack_require__( /*! ../core/utils/support */ 46);
        var positionUtils = __webpack_require__( /*! ./position */ 74);
        var removeEvent = __webpack_require__( /*! ../core/remove_event */ 140);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var when = deferredUtils.when;
        var Deferred = deferredUtils.Deferred;
        var removeEventName = eventUtils.addNamespace(removeEvent, "dxFX");
        var isFunction = typeUtils.isFunction;
        var isPlainObject = typeUtils.isPlainObject;
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var RELATIVE_VALUE_REGEX = /^([+-])=(.*)/i;
        var ANIM_DATA_KEY = "dxAnimData";
        var ANIM_QUEUE_KEY = "dxAnimQueue";
        var TRANSFORM_PROP = "transform";
        var TransitionAnimationStrategy = {
            initAnimation: function($element, config) {
                $element.css({
                    transitionProperty: "none"
                });
                if ("string" === typeof config.from) {
                    $element.addClass(config.from)
                } else {
                    setProps($element, config.from)
                }
                var that = this;
                var deferred = new Deferred;
                var cleanupWhen = config.cleanupWhen;
                config.transitionAnimation = {
                    deferred: deferred,
                    finish: function() {
                        that._finishTransition($element);
                        if (cleanupWhen) {
                            when(deferred, cleanupWhen).always(function() {
                                that._cleanup($element, config)
                            })
                        } else {
                            that._cleanup($element, config)
                        }
                        deferred.resolveWith($element, [config, $element])
                    }
                };
                this._completeAnimationCallback($element, config).done(function() {
                    config.transitionAnimation.finish()
                }).fail(function() {
                    deferred.rejectWith($element, [config, $element])
                });
                if (!config.duration) {
                    config.transitionAnimation.finish()
                }
                $element.css("transform")
            },
            animate: function($element, config) {
                this._startAnimation($element, config);
                return config.transitionAnimation.deferred.promise()
            },
            _completeAnimationCallback: function($element, config) {
                var that = this;
                var startTime = Date.now() + config.delay;
                var deferred = new Deferred;
                var transitionEndFired = new Deferred;
                var simulatedTransitionEndFired = new Deferred;
                var simulatedEndEventTimer;
                var transitionEndEventName = support.transitionEndEventName() + ".dxFX";
                config.transitionAnimation.cleanup = function() {
                    clearTimeout(simulatedEndEventTimer);
                    clearTimeout(waitForJSCompleteTimer);
                    eventsEngine.off($element, transitionEndEventName);
                    eventsEngine.off($element, removeEventName)
                };
                eventsEngine.one($element, transitionEndEventName, function() {
                    if (Date.now() - startTime >= config.duration) {
                        transitionEndFired.reject()
                    }
                });
                eventsEngine.off($element, removeEventName);
                eventsEngine.on($element, removeEventName, function() {
                    that.stop($element, config);
                    deferred.reject()
                });
                var waitForJSCompleteTimer = setTimeout(function() {
                    simulatedEndEventTimer = setTimeout(function() {
                        simulatedTransitionEndFired.reject()
                    }, config.duration + config.delay + fx._simulatedTransitionEndDelay);
                    when(transitionEndFired, simulatedTransitionEndFired).fail(function() {
                        deferred.resolve()
                    }.bind(this))
                });
                return deferred.promise()
            },
            _startAnimation: function($element, config) {
                $element.css({
                    transitionProperty: "all",
                    transitionDelay: config.delay + "ms",
                    transitionDuration: config.duration + "ms",
                    transitionTimingFunction: config.easing
                });
                if ("string" === typeof config.to) {
                    $element[0].className += " " + config.to
                } else {
                    if (config.to) {
                        setProps($element, config.to)
                    }
                }
            },
            _finishTransition: function($element) {
                $element.css("transition", "none")
            },
            _cleanup: function($element, config) {
                config.transitionAnimation.cleanup();
                if ("string" === typeof config.from) {
                    $element.removeClass(config.from);
                    $element.removeClass(config.to)
                }
            },
            stop: function($element, config, jumpToEnd) {
                if (!config) {
                    return
                }
                if (jumpToEnd) {
                    config.transitionAnimation.finish()
                } else {
                    if (isPlainObject(config.to)) {
                        iteratorUtils.each(config.to, function(key) {
                            $element.css(key, $element.css(key))
                        })
                    }
                    this._finishTransition($element);
                    this._cleanup($element, config)
                }
            }
        };
        var FrameAnimationStrategy = {
            initAnimation: function($element, config) {
                setProps($element, config.from)
            },
            animate: function($element, config) {
                var deferred = new Deferred;
                var that = this;
                if (!config) {
                    return deferred.reject().promise()
                }
                iteratorUtils.each(config.to, function(prop) {
                    if (void 0 === config.from[prop]) {
                        config.from[prop] = that._normalizeValue($element.css(prop))
                    }
                });
                if (config.to[TRANSFORM_PROP]) {
                    config.from[TRANSFORM_PROP] = that._parseTransform(config.from[TRANSFORM_PROP]);
                    config.to[TRANSFORM_PROP] = that._parseTransform(config.to[TRANSFORM_PROP])
                }
                config.frameAnimation = {
                    to: config.to,
                    from: config.from,
                    currentValue: config.from,
                    easing: easing.convertTransitionTimingFuncToEasing(config.easing),
                    duration: config.duration,
                    startTime: (new Date).valueOf(),
                    finish: function() {
                        this.currentValue = this.to;
                        this.draw();
                        animationFrame.cancelAnimationFrame(config.frameAnimation.animationFrameId);
                        deferred.resolve()
                    },
                    draw: function() {
                        if (config.draw) {
                            config.draw(this.currentValue);
                            return
                        }
                        var currentValue = extend({}, this.currentValue);
                        if (currentValue[TRANSFORM_PROP]) {
                            currentValue[TRANSFORM_PROP] = iteratorUtils.map(currentValue[TRANSFORM_PROP], function(value, prop) {
                                if ("translate" === prop) {
                                    return translator.getTranslateCss(value)
                                } else {
                                    if ("scale" === prop) {
                                        return "scale(" + value + ")"
                                    } else {
                                        if ("rotate" === prop.substr(0, prop.length - 1)) {
                                            return prop + "(" + value + "deg)"
                                        }
                                    }
                                }
                            }).join(" ")
                        }
                        $element.css(currentValue)
                    }
                };
                if (config.delay) {
                    config.frameAnimation.startTime += config.delay;
                    config.frameAnimation.delayTimeout = setTimeout(function() {
                        that._startAnimation($element, config)
                    }, config.delay)
                } else {
                    that._startAnimation($element, config)
                }
                return deferred.promise()
            },
            _startAnimation: function($element, config) {
                eventsEngine.off($element, removeEventName);
                eventsEngine.on($element, removeEventName, function() {
                    if (config.frameAnimation) {
                        animationFrame.cancelAnimationFrame(config.frameAnimation.animationFrameId)
                    }
                });
                this._animationStep($element, config)
            },
            _parseTransform: function(transformString) {
                var result = {};
                iteratorUtils.each(transformString.match(/(\w|\d)+\([^)]*\)\s*/g), function(i, part) {
                    var translateData = translator.parseTranslate(part);
                    var scaleData = part.match(/scale\((.+?)\)/);
                    var rotateData = part.match(/(rotate.)\((.+)deg\)/);
                    if (translateData) {
                        result.translate = translateData
                    }
                    if (scaleData && scaleData[1]) {
                        result.scale = parseFloat(scaleData[1])
                    }
                    if (rotateData && rotateData[1]) {
                        result[rotateData[1]] = parseFloat(rotateData[2])
                    }
                });
                return result
            },
            stop: function($element, config, jumpToEnd) {
                var frameAnimation = config && config.frameAnimation;
                if (!frameAnimation) {
                    return
                }
                animationFrame.cancelAnimationFrame(frameAnimation.animationFrameId);
                clearTimeout(frameAnimation.delayTimeout);
                if (jumpToEnd) {
                    frameAnimation.finish()
                }
                delete config.frameAnimation
            },
            _animationStep: function($element, config) {
                var frameAnimation = config && config.frameAnimation;
                if (!frameAnimation) {
                    return
                }
                var now = (new Date).valueOf();
                if (now >= frameAnimation.startTime + frameAnimation.duration) {
                    frameAnimation.finish();
                    return
                }
                frameAnimation.currentValue = this._calcStepValue(frameAnimation, now - frameAnimation.startTime);
                frameAnimation.draw();
                var that = this;
                frameAnimation.animationFrameId = animationFrame.requestAnimationFrame(function() {
                    that._animationStep($element, config)
                })
            },
            _calcStepValue: function(frameAnimation, currentDuration) {
                var calcValueRecursively = function calcValueRecursively(from, to) {
                    var result = Array.isArray(to) ? [] : {};
                    var calcEasedValue = function(propName) {
                        var x = currentDuration / frameAnimation.duration;
                        var t = currentDuration;
                        var b = 1 * from[propName];
                        var c = to[propName] - from[propName];
                        var d = frameAnimation.duration;
                        return easing.getEasing(frameAnimation.easing)(x, t, b, c, d)
                    };
                    iteratorUtils.each(to, function(propName, endPropValue) {
                        if ("string" === typeof endPropValue && false === parseFloat(endPropValue, 10)) {
                            return true
                        }
                        result[propName] = "object" === _typeof(endPropValue) ? calcValueRecursively(from[propName], endPropValue) : calcEasedValue(propName)
                    });
                    return result
                };
                return calcValueRecursively(frameAnimation.from, frameAnimation.to)
            },
            _normalizeValue: function(value) {
                var numericValue = parseFloat(value, 10);
                if (false === numericValue) {
                    return value
                }
                return numericValue
            }
        };
        var FallbackToNoAnimationStrategy = {
            initAnimation: function() {},
            animate: function() {
                return (new Deferred).resolve().promise()
            },
            stop: noop,
            isSynchronous: true
        };
        var getAnimationStrategy = function(config) {
            config = config || {};
            var animationStrategies = {
                transition: support.transition() ? TransitionAnimationStrategy : FrameAnimationStrategy,
                frame: FrameAnimationStrategy,
                noAnimation: FallbackToNoAnimationStrategy
            };
            var strategy = config.strategy || "transition";
            if ("css" === config.type && !support.transition()) {
                strategy = "noAnimation"
            }
            return animationStrategies[strategy]
        };
        var baseConfigValidator = function(config, animationType, validate, typeMessage) {
            iteratorUtils.each(["from", "to"], function() {
                if (!validate(config[this])) {
                    throw errors.Error("E0010", animationType, this, typeMessage)
                }
            })
        };
        var isObjectConfigValidator = function(config, animationType) {
            return baseConfigValidator(config, animationType, function(target) {
                return isPlainObject(target)
            }, "a plain object")
        };
        var isStringConfigValidator = function(config, animationType) {
            return baseConfigValidator(config, animationType, function(target) {
                return "string" === typeof target
            }, "a string")
        };
        var CustomAnimationConfigurator = {
            setup: function() {}
        };
        var CssAnimationConfigurator = {
            validateConfig: function(config) {
                isStringConfigValidator(config, "css")
            },
            setup: function() {}
        };
        var positionAliases = {
            top: {
                my: "bottom center",
                at: "top center"
            },
            bottom: {
                my: "top center",
                at: "bottom center"
            },
            right: {
                my: "left center",
                at: "right center"
            },
            left: {
                my: "right center",
                at: "left center"
            }
        };
        var SlideAnimationConfigurator = {
            validateConfig: function(config) {
                isObjectConfigValidator(config, "slide")
            },
            setup: function($element, config) {
                var location = translator.locate($element);
                if ("slide" !== config.type) {
                    var positioningConfig = "slideIn" === config.type ? config.from : config.to;
                    positioningConfig.position = extend({
                        of: window
                    }, positionAliases[config.direction]);
                    setupPosition($element, positioningConfig)
                }
                this._setUpConfig(location, config.from);
                this._setUpConfig(location, config.to);
                translator.clearCache($element)
            },
            _setUpConfig: function(location, config) {
                config.left = "left" in config ? config.left : "+=0";
                config.top = "top" in config ? config.top : "+=0";
                this._initNewPosition(location, config)
            },
            _initNewPosition: function(location, config) {
                var position = {
                    left: config.left,
                    top: config.top
                };
                delete config.left;
                delete config.top;
                var relativeValue = this._getRelativeValue(position.left);
                if (void 0 !== relativeValue) {
                    position.left = relativeValue + location.left
                } else {
                    config.left = 0
                }
                relativeValue = this._getRelativeValue(position.top);
                if (void 0 !== relativeValue) {
                    position.top = relativeValue + location.top
                } else {
                    config.top = 0
                }
                config[TRANSFORM_PROP] = translator.getTranslateCss({
                    x: position.left,
                    y: position.top
                })
            },
            _getRelativeValue: function(value) {
                var relativeValue;
                if ("string" === typeof value && (relativeValue = RELATIVE_VALUE_REGEX.exec(value))) {
                    return parseInt(relativeValue[1] + "1") * relativeValue[2]
                }
            }
        };
        var FadeAnimationConfigurator = {
            setup: function($element, config) {
                var from = config.from;
                var fromOpacity = isPlainObject(from) ? config.skipElementInitialStyles ? 0 : $element.css("opacity") : String(from);
                var toOpacity;
                switch (config.type) {
                    case "fadeIn":
                        toOpacity = 1;
                        break;
                    case "fadeOut":
                        toOpacity = 0;
                        break;
                    default:
                        toOpacity = String(config.to)
                }
                config.from = {
                    visibility: "visible",
                    opacity: fromOpacity
                };
                config.to = {
                    opacity: toOpacity
                }
            }
        };
        var PopAnimationConfigurator = {
            validateConfig: function(config) {
                isObjectConfigValidator(config, "pop")
            },
            setup: function($element, config) {
                var from = config.from;
                var to = config.to;
                var fromOpacity = "opacity" in from ? from.opacity : $element.css("opacity");
                var toOpacity = "opacity" in to ? to.opacity : 1;
                var fromScale = "scale" in from ? from.scale : 0;
                var toScale = "scale" in to ? to.scale : 1;
                config.from = {
                    opacity: fromOpacity
                };
                var translate = translator.getTranslate($element);
                config.from[TRANSFORM_PROP] = this._getCssTransform(translate, fromScale);
                config.to = {
                    opacity: toOpacity
                };
                config.to[TRANSFORM_PROP] = this._getCssTransform(translate, toScale)
            },
            _getCssTransform: function(translate, scale) {
                return translator.getTranslateCss(translate) + "scale(" + scale + ")"
            }
        };
        var animationConfigurators = {
            custom: CustomAnimationConfigurator,
            slide: SlideAnimationConfigurator,
            slideIn: SlideAnimationConfigurator,
            slideOut: SlideAnimationConfigurator,
            fade: FadeAnimationConfigurator,
            fadeIn: FadeAnimationConfigurator,
            fadeOut: FadeAnimationConfigurator,
            pop: PopAnimationConfigurator,
            css: CssAnimationConfigurator
        };
        var getAnimationConfigurator = function(config) {
            var result = animationConfigurators[config.type];
            if (!result) {
                throw errors.Error("E0011", config.type)
            }
            return result
        };
        var defaultJSConfig = {
            type: "custom",
            from: {},
            to: {},
            duration: 400,
            start: noop,
            complete: noop,
            easing: "ease",
            delay: 0
        };
        var defaultCssConfig = {
            duration: 400,
            easing: "ease",
            delay: 0
        };

        function setupAnimationOnElement() {
            var animation = this;
            var $element = animation.element;
            var config = animation.config;
            setupPosition($element, config.from);
            setupPosition($element, config.to);
            animation.configurator.setup($element, config);
            $element.data(ANIM_DATA_KEY, animation);
            if (fx.off) {
                config.duration = 0;
                config.delay = 0
            }
            animation.strategy.initAnimation($element, config);
            if (config.start) {
                var element = getPublicElement($element);
                config.start.apply(this, [element, config])
            }
        }
        var onElementAnimationComplete = function(animation) {
            var $element = animation.element;
            var config = animation.config;
            $element.removeData(ANIM_DATA_KEY);
            if (config.complete) {
                var element = getPublicElement($element);
                config.complete.apply(this, [element, config])
            }
            animation.deferred.resolveWith(this, [$element, config])
        };
        var startAnimationOnElement = function() {
            var animation = this;
            var $element = animation.element;
            var config = animation.config;
            animation.isStarted = true;
            return animation.strategy.animate($element, config).done(function() {
                onElementAnimationComplete(animation)
            }).fail(function() {
                animation.deferred.rejectWith(this, [$element, config])
            })
        };
        var stopAnimationOnElement = function(jumpToEnd) {
            var animation = this;
            var $element = animation.element;
            var config = animation.config;
            clearTimeout(animation.startTimeout);
            if (!animation.isStarted) {
                animation.start()
            }
            animation.strategy.stop($element, config, jumpToEnd)
        };
        var scopedRemoveEvent = eventUtils.addNamespace(removeEvent, "dxFXStartAnimation");
        var subscribeToRemoveEvent = function(animation) {
            eventsEngine.off(animation.element, scopedRemoveEvent);
            eventsEngine.on(animation.element, scopedRemoveEvent, function() {
                fx.stop(animation.element)
            });
            animation.deferred.always(function() {
                eventsEngine.off(animation.element, scopedRemoveEvent)
            })
        };
        var createAnimation = function(element, initialConfig) {
            var defaultConfig = "css" === initialConfig.type ? defaultCssConfig : defaultJSConfig;
            var config = extend(true, {}, defaultConfig, initialConfig);
            var configurator = getAnimationConfigurator(config);
            var strategy = getAnimationStrategy(config);
            var animation = {
                element: $(element),
                config: config,
                configurator: configurator,
                strategy: strategy,
                isSynchronous: strategy.isSynchronous,
                setup: setupAnimationOnElement,
                start: startAnimationOnElement,
                stop: stopAnimationOnElement,
                deferred: new Deferred
            };
            if (isFunction(configurator.validateConfig)) {
                configurator.validateConfig(config)
            }
            subscribeToRemoveEvent(animation);
            return animation
        };
        var animate = function(element, config) {
            var $element = $(element);
            if (!$element.length) {
                return (new Deferred).resolve().promise()
            }
            var animation = createAnimation($element, config);
            pushInAnimationQueue($element, animation);
            return animation.deferred.promise()
        };

        function pushInAnimationQueue($element, animation) {
            var queueData = getAnimQueueData($element);
            writeAnimQueueData($element, queueData);
            queueData.push(animation);
            if (!isAnimating($element)) {
                shiftFromAnimationQueue($element, queueData)
            }
        }

        function getAnimQueueData($element) {
            return $element.data(ANIM_QUEUE_KEY) || []
        }

        function writeAnimQueueData($element, queueData) {
            $element.data(ANIM_QUEUE_KEY, queueData)
        }
        var destroyAnimQueueData = function($element) {
            $element.removeData(ANIM_QUEUE_KEY)
        };

        function isAnimating($element) {
            return !!$element.data(ANIM_DATA_KEY)
        }

        function shiftFromAnimationQueue($element, queueData) {
            queueData = getAnimQueueData($element);
            if (!queueData.length) {
                return
            }
            var animation = queueData.shift();
            if (0 === queueData.length) {
                destroyAnimQueueData($element)
            }
            executeAnimation(animation).done(function() {
                if (!isAnimating($element)) {
                    shiftFromAnimationQueue($element)
                }
            })
        }

        function executeAnimation(animation) {
            animation.setup();
            if (fx.off || animation.isSynchronous) {
                animation.start()
            } else {
                animation.startTimeout = setTimeout(function() {
                    animation.start()
                })
            }
            return animation.deferred.promise()
        }

        function setupPosition($element, config) {
            if (!config || !config.position) {
                return
            }
            var win = $(window);
            var left = 0;
            var top = 0;
            var position = positionUtils.calculate($element, config.position);
            var offset = $element.offset();
            var currentPosition = $element.position();
            if (currentPosition.top > offset.top) {
                top = win.scrollTop()
            }
            if (currentPosition.left > offset.left) {
                left = win.scrollLeft()
            }
            extend(config, {
                left: position.h.location - offset.left + currentPosition.left - left,
                top: position.v.location - offset.top + currentPosition.top - top
            });
            delete config.position
        }

        function setProps($element, props) {
            iteratorUtils.each(props, function(key, value) {
                try {
                    $element.css(key, typeUtils.isFunction(value) ? value() : value)
                } catch (e) {}
            })
        }
        var stop = function(element, jumpToEnd) {
            var $element = $(element);
            var queueData = getAnimQueueData($element);
            iteratorUtils.each(queueData, function(_, animation) {
                animation.config.delay = 0;
                animation.config.duration = 0;
                animation.isSynchronous = true
            });
            if (!isAnimating($element)) {
                shiftFromAnimationQueue($element, queueData)
            }
            var animation = $element.data(ANIM_DATA_KEY);
            if (animation) {
                animation.stop(jumpToEnd)
            }
            $element.removeData(ANIM_DATA_KEY);
            destroyAnimQueueData($element)
        };
        var fx = {
            off: false,
            animationTypes: animationConfigurators,
            animate: animate,
            createAnimation: createAnimation,
            isAnimating: isAnimating,
            stop: stop,
            _simulatedTransitionEndDelay: 100
        };
        module.exports = fx
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/element_data.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _weak_map = __webpack_require__( /*! ./polyfills/weak_map */ 184);
        var _weak_map2 = _interopRequireDefault(_weak_map);
        var _dom_adapter = __webpack_require__( /*! ./dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _memorized_callbacks = __webpack_require__( /*! ./memorized_callbacks */ 185);
        var _memorized_callbacks2 = _interopRequireDefault(_memorized_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var dataMap = new _weak_map2.default;
        var strategy;
        var strategyChanging = new _memorized_callbacks2.default;
        var beforeCleanData = function() {};
        var afterCleanData = function() {};
        var setDataStrategy = exports.setDataStrategy = function(value) {
            strategyChanging.fire(value);
            strategy = value;
            var cleanData = strategy.cleanData;
            strategy.cleanData = function(nodes) {
                beforeCleanData(nodes);
                var result = cleanData.call(this, nodes);
                afterCleanData(nodes);
                return result
            }
        };
        setDataStrategy({
            data: function() {
                var element = arguments[0];
                var key = arguments[1];
                var value = arguments[2];
                if (!element) {
                    return
                }
                var elementData = dataMap.get(element);
                if (!elementData) {
                    elementData = {};
                    dataMap.set(element, elementData)
                }
                if (void 0 === key) {
                    return elementData
                }
                if (2 === arguments.length) {
                    return elementData[key]
                }
                elementData[key] = value;
                return value
            },
            removeData: function(element, key) {
                if (!element) {
                    return
                }
                if (void 0 === key) {
                    dataMap.delete(element)
                } else {
                    var elementData = dataMap.get(element);
                    if (elementData) {
                        delete elementData[key]
                    }
                }
            },
            cleanData: function(elements) {
                for (var i = 0; i < elements.length; i++) {
                    _events_engine2.default.off(elements[i]);
                    dataMap.delete(elements[i])
                }
            }
        });
        exports.setDataStrategy = setDataStrategy;
        exports.getDataStrategy = function() {
            return strategy
        };
        exports.data = function() {
            return strategy.data.apply(this, arguments)
        };
        exports.strategyChanging = strategyChanging;
        exports.beforeCleanData = function(callback) {
            beforeCleanData = callback
        };
        exports.afterCleanData = function(callback) {
            afterCleanData = callback
        };
        exports.cleanData = function(nodes) {
            return strategy.cleanData.call(this, nodes)
        };
        exports.removeData = function(element, key) {
            return strategy.removeData.call(this, element, key)
        };
        exports.cleanDataRecursive = function(element, cleanSelf) {
            if (!_dom_adapter2.default.isElementNode(element)) {
                return
            }
            var childElements = element.getElementsByTagName("*");
            strategy.cleanData(childElements);
            if (cleanSelf) {
                strategy.cleanData([element])
            }
        }
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/data/utils.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _ready_callbacks = __webpack_require__( /*! ../core/utils/ready_callbacks */ 51);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var XHR_ERROR_UNLOAD = "DEVEXTREME_XHR_ERROR_UNLOAD";
        var normalizeBinaryCriterion = function(crit) {
            return [crit[0], crit.length < 3 ? "=" : String(crit[1]).toLowerCase(), crit.length < 2 ? true : crit[crit.length - 1]]
        };
        var normalizeSortingInfo = function(info) {
            if (!Array.isArray(info)) {
                info = [info]
            }
            return (0, _iterator.map)(info, function(i) {
                var result = {
                    selector: (0, _type.isFunction)(i) || "string" === typeof i ? i : i.getter || i.field || i.selector,
                    desc: !!(i.desc || "d" === String(i.dir).charAt(0).toLowerCase())
                };
                if (i.compare) {
                    result.compare = i.compare
                }
                return result
            })
        };
        var errorMessageFromXhr = function() {
            var textStatusMessages = {
                timeout: "Network connection timeout",
                error: "Unspecified network error",
                parsererror: "Unexpected server response"
            };
            var textStatusDetails = {
                timeout: "possible causes: the remote host is not accessible, overloaded or is not included into the domain white-list when being run in the native container",
                error: "if the remote host is located on another domain, make sure it properly supports cross-origin resource sharing (CORS), or use the JSONP approach instead",
                parsererror: "the remote host did not respond with valid JSON data"
            };
            var explainTextStatus = function(textStatus) {
                var result = textStatusMessages[textStatus];
                if (!result) {
                    return textStatus
                }
                result += " (" + textStatusDetails[textStatus] + ")";
                return result
            };
            var unloading;
            (0, _ready_callbacks.add)(function() {
                var window = (0, _window.getWindow)();
                _dom_adapter2.default.listen(window, "beforeunload", function() {
                    unloading = true
                })
            });
            return function(xhr, textStatus) {
                if (unloading) {
                    return XHR_ERROR_UNLOAD
                }
                if (xhr.status < 400) {
                    return explainTextStatus(textStatus)
                }
                return xhr.statusText
            }
        }();
        var aggregators = {
            count: {
                seed: 0,
                step: function(count) {
                    return 1 + count
                }
            },
            sum: {
                seed: 0,
                step: function(sum, item) {
                    return sum + item
                }
            },
            min: {
                step: function(min, item) {
                    return item < min ? item : min
                }
            },
            max: {
                step: function(max, item) {
                    return item > max ? item : max
                }
            },
            avg: {
                seed: [0, 0],
                step: function(pair, value) {
                    return [pair[0] + value, pair[1] + 1]
                },
                finalize: function(pair) {
                    return pair[1] ? pair[0] / pair[1] : NaN
                }
            }
        };
        var processRequestResultLock = function() {
            var lockCount = 0;
            var lockDeferred;
            var obtain = function() {
                if (0 === lockCount) {
                    lockDeferred = new _deferred.Deferred
                }
                lockCount++
            };
            var release = function() {
                lockCount--;
                if (lockCount < 1) {
                    lockDeferred.resolve()
                }
            };
            var promise = function() {
                var deferred = 0 === lockCount ? (new _deferred.Deferred).resolve() : lockDeferred;
                return deferred.promise()
            };
            var reset = function() {
                lockCount = 0;
                if (lockDeferred) {
                    lockDeferred.resolve()
                }
            };
            return {
                obtain: obtain,
                release: release,
                promise: promise,
                reset: reset
            }
        }();

        function isDisjunctiveOperator(condition) {
            return /^(or|\|\||\|)$/i.test(condition)
        }

        function isConjunctiveOperator(condition) {
            return /^(and|&&|&)$/i.test(condition)
        }
        var keysEqual = function(keyExpr, key1, key2) {
            if (Array.isArray(keyExpr)) {
                var names = (0, _iterator.map)(key1, function(v, k) {
                    return k
                });
                var name;
                for (var i = 0; i < names.length; i++) {
                    name = names[i];
                    if (!(0, _common.equalByValue)(key1[name], key2[name], 0, false)) {
                        return false
                    }
                }
                return true
            }
            return (0, _common.equalByValue)(key1, key2, 0, false)
        };
        var BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        var base64_encode = function(input) {
            if (!Array.isArray(input)) {
                input = stringToByteArray(String(input))
            }
            var result = "";

            function getBase64Char(index) {
                return BASE64_CHARS.charAt(index)
            }
            for (var i = 0; i < input.length; i += 3) {
                var octet1 = input[i];
                var octet2 = input[i + 1];
                var octet3 = input[i + 2];
                result += (0, _iterator.map)([octet1 >> 2, (3 & octet1) << 4 | octet2 >> 4, isNaN(octet2) ? 64 : (15 & octet2) << 2 | octet3 >> 6, isNaN(octet3) ? 64 : 63 & octet3], getBase64Char).join("")
            }
            return result
        };

        function stringToByteArray(str) {
            var bytes = [];
            var code;
            var i;
            for (i = 0; i < str.length; i++) {
                code = str.charCodeAt(i);
                if (code < 128) {
                    bytes.push(code)
                } else {
                    if (code < 2048) {
                        bytes.push(192 + (code >> 6), 128 + (63 & code))
                    } else {
                        if (code < 65536) {
                            bytes.push(224 + (code >> 12), 128 + (code >> 6 & 63), 128 + (63 & code))
                        } else {
                            if (code < 2097152) {
                                bytes.push(240 + (code >> 18), 128 + (code >> 12 & 63), 128 + (code >> 6 & 63), 128 + (63 & code))
                            }
                        }
                    }
                }
            }
            return bytes
        }
        var isUnaryOperation = function(crit) {
            return "!" === crit[0] && Array.isArray(crit[1])
        };
        var isGroupOperator = function(value) {
            return "and" === value || "or" === value
        };
        var isGroupCriterion = function(crit) {
            var first = crit[0];
            var second = crit[1];
            if (Array.isArray(first)) {
                return true
            }
            if (_type2.default.isFunction(first)) {
                if (Array.isArray(second) || _type2.default.isFunction(second) || isGroupOperator(second)) {
                    return true
                }
            }
            return false
        };
        var trivialPromise = function() {
            var d = new _deferred.Deferred;
            return d.resolve.apply(d, arguments).promise()
        };
        var rejectedPromise = function() {
            var d = new _deferred.Deferred;
            return d.reject.apply(d, arguments).promise()
        };

        function throttle(func, timeout) {
            var timeoutId;
            var lastArgs;
            return function() {
                var _this = this;
                lastArgs = arguments;
                if (!timeoutId) {
                    timeoutId = setTimeout(function() {
                        timeoutId = void 0;
                        if (lastArgs) {
                            func.call(_this, lastArgs)
                        }
                    }, (0, _type.isFunction)(timeout) ? timeout() : timeout)
                }
                return timeoutId
            }
        }

        function throttleChanges(func, timeout) {
            var cache = [];
            var throttled = throttle(function() {
                func.call(this, cache);
                cache = []
            }, timeout);
            return function(changes) {
                if (Array.isArray(changes)) {
                    var _cache;
                    (_cache = cache).push.apply(_cache, _toConsumableArray(changes))
                }
                return throttled.call(this, cache)
            }
        }
        var utils = {
            XHR_ERROR_UNLOAD: XHR_ERROR_UNLOAD,
            normalizeBinaryCriterion: normalizeBinaryCriterion,
            normalizeSortingInfo: normalizeSortingInfo,
            errorMessageFromXhr: errorMessageFromXhr,
            aggregators: aggregators,
            keysEqual: keysEqual,
            throttleChanges: throttleChanges,
            trivialPromise: trivialPromise,
            rejectedPromise: rejectedPromise,
            isDisjunctiveOperator: isDisjunctiveOperator,
            isConjunctiveOperator: isConjunctiveOperator,
            processRequestResultLock: processRequestResultLock,
            isUnaryOperation: isUnaryOperation,
            isGroupCriterion: isGroupCriterion,
            base64_encode: base64_encode
        };
        module.exports = utils
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/string.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var encodeHtml = function() {
            var encodeRegExp = [new RegExp("&", "g"), new RegExp('"', "g"), new RegExp("'", "g"), new RegExp("<", "g"), new RegExp(">", "g")];
            return function(str) {
                return String(str).replace(encodeRegExp[0], "&amp;").replace(encodeRegExp[1], "&quot;").replace(encodeRegExp[2], "&#39;").replace(encodeRegExp[3], "&lt;").replace(encodeRegExp[4], "&gt;")
            }
        }();
        var splitQuad = function(raw) {
            switch (_typeof(raw)) {
                case "string":
                    return raw.split(/\s+/, 4);
                case "object":
                    return [raw.x || raw.h || raw.left, raw.y || raw.v || raw.top, raw.x || raw.h || raw.right, raw.y || raw.v || raw.bottom];
                case "number":
                    return [raw];
                default:
                    return raw
            }
        };
        var quadToObject = function(raw) {
            var quad = splitQuad(raw);
            var left = parseInt(quad && quad[0], 10);
            var top = parseInt(quad && quad[1], 10);
            var right = parseInt(quad && quad[2], 10);
            var bottom = parseInt(quad && quad[3], 10);
            if (!isFinite(left)) {
                left = 0
            }
            if (!isFinite(top)) {
                top = left
            }
            if (!isFinite(right)) {
                right = left
            }
            if (!isFinite(bottom)) {
                bottom = top
            }
            return {
                top: top,
                right: right,
                bottom: bottom,
                left: left
            }
        };
        var stringFormat = function() {
            var s = arguments[0];
            var values = [].slice.call(arguments).slice(1);
            var replaceDollarCount;
            var reg;
            var value;
            if (typeUtils.isFunction(s)) {
                return s.apply(this, values)
            }
            for (var i = 0; i < values.length; i++) {
                reg = new RegExp("\\{" + i + "\\}", "gm");
                value = values[i];
                if ("string" === typeUtils.type(value) && value.indexOf("$") >= 0) {
                    replaceDollarCount = "$".replace("$", "$$").length;
                    value = value.replace("$", 1 === replaceDollarCount ? "$$$$" : "$$")
                }
                s = s.replace(reg, value)
            }
            return s
        };
        var replaceAll = function() {
            var quote = function(str) {
                return (str + "").replace(/([+*?.[^\]$(){}><|=!:])/g, "\\$1")
            };
            return function(text, searchToken, replacementToken) {
                return text.replace(new RegExp("(" + quote(searchToken) + ")", "gi"), replacementToken)
            }
        }();
        var isEmpty = function() {
            var SPACE_REGEXP = /\s/g;
            return function(text) {
                return !text || !text.replace(SPACE_REGEXP, "")
            }
        }();
        exports.encodeHtml = encodeHtml;
        exports.quadToObject = quadToObject;
        exports.format = stringFormat;
        exports.replaceAll = replaceAll;
        exports.isEmpty = isEmpty
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/popup.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _translator = __webpack_require__( /*! ../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _empty_template = __webpack_require__( /*! ../core/templates/empty_template */ 87);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _size = __webpack_require__( /*! ../core/utils/size */ 180);
        var _size2 = _interopRequireDefault(_size);
        var _position = __webpack_require__( /*! ../core/utils/position */ 21);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _version = __webpack_require__( /*! ../core/utils/version */ 60);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _message = __webpack_require__( /*! ../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _button = __webpack_require__( /*! ./button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _overlay = __webpack_require__( /*! ./overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _themes = __webpack_require__( /*! ./themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var window = _window2.default.getWindow();
        __webpack_require__( /*! ./toolbar/ui.toolbar.base */ 306);
        var POPUP_CLASS = "dx-popup";
        var POPUP_WRAPPER_CLASS = "dx-popup-wrapper";
        var POPUP_FULL_SCREEN_CLASS = "dx-popup-fullscreen";
        var POPUP_FULL_SCREEN_WIDTH_CLASS = "dx-popup-fullscreen-width";
        var POPUP_NORMAL_CLASS = "dx-popup-normal";
        var POPUP_CONTENT_CLASS = "dx-popup-content";
        var POPUP_DRAGGABLE_CLASS = "dx-popup-draggable";
        var POPUP_TITLE_CLASS = "dx-popup-title";
        var POPUP_TITLE_CLOSEBUTTON_CLASS = "dx-closebutton";
        var POPUP_BOTTOM_CLASS = "dx-popup-bottom";
        var TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper";
        var POPUP_CONTENT_FLEX_HEIGHT_CLASS = "dx-popup-flex-height";
        var POPUP_CONTENT_INHERIT_HEIGHT_CLASS = "dx-popup-inherit-height";
        var ALLOWED_TOOLBAR_ITEM_ALIASES = ["cancel", "clear", "done"];
        var BUTTON_DEFAULT_TYPE = "default";
        var BUTTON_NORMAL_TYPE = "normal";
        var BUTTON_TEXT_MODE = "text";
        var BUTTON_CONTAINED_MODE = "contained";
        var IS_IE11 = _browser2.default.msie && 11 === parseInt(_browser2.default.version);
        var IS_OLD_SAFARI = _browser2.default.safari && (0, _version.compare)(_browser2.default.version, [11]) < 0;
        var HEIGHT_STRATEGIES = {
            "static": "",
            inherit: POPUP_CONTENT_INHERIT_HEIGHT_CLASS,
            flex: POPUP_CONTENT_FLEX_HEIGHT_CLASS
        };
        var getButtonPlace = function(name) {
            var device = _devices2.default.current();
            var platform = device.platform;
            var toolbar = "bottom";
            var location = "before";
            if ("ios" === platform) {
                switch (name) {
                    case "cancel":
                        toolbar = "top";
                        break;
                    case "clear":
                        toolbar = "top";
                        location = "after";
                        break;
                    case "done":
                        location = "after"
                }
            } else {
                if ("android" === platform && device.version && parseInt(device.version[0]) > 4) {
                    switch (name) {
                        case "cancel":
                            location = "after";
                            break;
                        case "done":
                            location = "after"
                    }
                } else {
                    if ("android" === platform) {
                        location = "center"
                    }
                }
            }
            return {
                toolbar: toolbar,
                location: location
            }
        };
        var Popup = _overlay2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    fullScreen: false,
                    title: "",
                    showTitle: true,
                    titleTemplate: "title",
                    onTitleRendered: null,
                    dragEnabled: false,
                    toolbarItems: [],
                    showCloseButton: false,
                    bottomTemplate: "bottom",
                    useDefaultToolbarButtons: false,
                    useFlatToolbarButtons: false,
                    autoResizeEnabled: true
                })
            },
            _defaultOptionsRules: function() {
                var themeName = _themes2.default.current();
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        animation: this._iosAnimation
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        animation: this._androidAnimation
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        showCloseButton: true
                    }
                }, {
                    device: function(_device) {
                        return "desktop" === _devices2.default.real().deviceType && "generic" === _device.platform
                    },
                    options: {
                        dragEnabled: true
                    }
                }, {
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return _themes2.default.isMaterial(themeName)
                    },
                    options: {
                        useDefaultToolbarButtons: true,
                        useFlatToolbarButtons: true
                    }
                }])
            },
            _iosAnimation: {
                show: {
                    type: "slide",
                    duration: 400,
                    from: {
                        position: {
                            my: "top",
                            at: "bottom"
                        }
                    },
                    to: {
                        position: {
                            my: "center",
                            at: "center"
                        }
                    }
                },
                hide: {
                    type: "slide",
                    duration: 400,
                    from: {
                        opacity: 1,
                        position: {
                            my: "center",
                            at: "center"
                        }
                    },
                    to: {
                        opacity: 1,
                        position: {
                            my: "top",
                            at: "bottom"
                        }
                    }
                }
            },
            _androidAnimation: function() {
                var fullScreenConfig = {
                    show: {
                        type: "slide",
                        duration: 300,
                        from: {
                            top: "30%",
                            opacity: 0
                        },
                        to: {
                            top: 0,
                            opacity: 1
                        }
                    },
                    hide: {
                        type: "slide",
                        duration: 300,
                        from: {
                            top: 0,
                            opacity: 1
                        },
                        to: {
                            top: "30%",
                            opacity: 0
                        }
                    }
                };
                var defaultConfig = {
                    show: {
                        type: "fade",
                        duration: 400,
                        from: 0,
                        to: 1
                    },
                    hide: {
                        type: "fade",
                        duration: 400,
                        from: 1,
                        to: 0
                    }
                };
                return this.option("fullScreen") ? fullScreenConfig : defaultConfig
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(POPUP_CLASS);
                this._wrapper().addClass(POPUP_WRAPPER_CLASS);
                this._$popupContent = this._$content.wrapInner((0, _renderer2.default)("<div>").addClass(POPUP_CONTENT_CLASS)).children().eq(0)
            },
            _render: function() {
                var isFullscreen = this.option("fullScreen");
                this._toggleFullScreenClass(isFullscreen);
                this.callBase()
            },
            _toggleFullScreenClass: function(value) {
                this._$content.toggleClass(POPUP_FULL_SCREEN_CLASS, value).toggleClass(POPUP_NORMAL_CLASS, !value)
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    title: new _empty_template.EmptyTemplate,
                    bottom: new _empty_template.EmptyTemplate
                })
            },
            _renderContentImpl: function() {
                this._renderTitle();
                this.callBase();
                this._renderBottom()
            },
            _renderTitle: function() {
                var items = this._getToolbarItems("top");
                var titleText = this.option("title");
                var showTitle = this.option("showTitle");
                if (showTitle && !!titleText) {
                    items.unshift({
                        location: _devices2.default.current().ios ? "center" : "before",
                        text: titleText
                    })
                }
                if (showTitle || items.length > 0) {
                    this._$title && this._$title.remove();
                    var $title = (0, _renderer2.default)("<div>").addClass(POPUP_TITLE_CLASS).insertBefore(this.$content());
                    this._$title = this._renderTemplateByType("titleTemplate", items, $title).addClass(POPUP_TITLE_CLASS);
                    this._renderDrag();
                    this._executeTitleRenderAction(this._$title)
                } else {
                    if (this._$title) {
                        this._$title.detach()
                    }
                }
            },
            _renderTemplateByType: function(optionName, data, $container, additionalToolbarOptions) {
                var template = this._getTemplateByOption(optionName);
                var toolbarTemplate = template instanceof _empty_template.EmptyTemplate;
                if (toolbarTemplate) {
                    var integrationOptions = (0, _extend.extend)({}, this.option("integrationOptions"), {
                        skipTemplates: ["content", "title"]
                    });
                    var toolbarOptions = (0, _extend.extend)(additionalToolbarOptions, {
                        items: data,
                        rtlEnabled: this.option("rtlEnabled"),
                        useDefaultButtons: this.option("useDefaultToolbarButtons"),
                        useFlatButtons: this.option("useFlatToolbarButtons"),
                        integrationOptions: integrationOptions
                    });
                    this._getTemplate("dx-polymorph-widget").render({
                        container: $container,
                        model: {
                            widget: "dxToolbarBase",
                            options: toolbarOptions
                        }
                    });
                    var $toolbar = $container.children("div");
                    $container.replaceWith($toolbar);
                    return $toolbar
                } else {
                    var $result = (0, _renderer2.default)(template.render({
                        container: (0, _dom.getPublicElement)($container)
                    }));
                    if ($result.hasClass(TEMPLATE_WRAPPER_CLASS)) {
                        $container.replaceWith($result);
                        $container = $result
                    }
                    return $container
                }
            },
            _executeTitleRenderAction: function($titleElement) {
                this._getTitleRenderAction()({
                    titleElement: (0, _dom.getPublicElement)($titleElement)
                })
            },
            _getTitleRenderAction: function() {
                return this._titleRenderAction || this._createTitleRenderAction()
            },
            _createTitleRenderAction: function() {
                return this._titleRenderAction = this._createActionByOption("onTitleRendered", {
                    element: this.element(),
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _getCloseButton: function() {
                return {
                    toolbar: "top",
                    location: "after",
                    template: this._getCloseButtonRenderer()
                }
            },
            _getCloseButtonRenderer: function() {
                return function(_, __, container) {
                    var $button = (0, _renderer2.default)("<div>").addClass(POPUP_TITLE_CLOSEBUTTON_CLASS);
                    this._createComponent($button, _button2.default, {
                        icon: "close",
                        onClick: this._createToolbarItemAction(void 0),
                        integrationOptions: {}
                    });
                    (0, _renderer2.default)(container).append($button)
                }.bind(this)
            },
            _getToolbarItems: function(toolbar) {
                var toolbarItems = this.option("toolbarItems");
                var toolbarsItems = [];
                this._toolbarItemClasses = [];
                var currentPlatform = _devices2.default.current().platform;
                var index = 0;
                (0, _iterator.each)(toolbarItems, function(_, data) {
                    var isShortcut = (0, _type.isDefined)(data.shortcut);
                    var item = isShortcut ? getButtonPlace(data.shortcut) : data;
                    if (isShortcut && "ios" === currentPlatform && index < 2) {
                        item.toolbar = "top";
                        index++
                    }
                    item.toolbar = data.toolbar || item.toolbar || "top";
                    if (item && item.toolbar === toolbar) {
                        if (isShortcut) {
                            (0, _extend.extend)(item, {
                                location: data.location
                            }, this._getToolbarItemByAlias(data))
                        }
                        var isLTROrder = "generic" === currentPlatform;
                        if ("done" === data.shortcut && isLTROrder || "cancel" === data.shortcut && !isLTROrder) {
                            toolbarsItems.unshift(item)
                        } else {
                            toolbarsItems.push(item)
                        }
                    }
                }.bind(this));
                if ("top" === toolbar && this.option("showCloseButton") && this.option("showTitle")) {
                    toolbarsItems.push(this._getCloseButton())
                }
                return toolbarsItems
            },
            _getLocalizationKey: function(itemType) {
                return "done" === itemType.toLowerCase() ? "OK" : (0, _inflector.camelize)(itemType, true)
            },
            _getToolbarItemByAlias: function(data) {
                var that = this;
                var itemType = data.shortcut;
                if ((0, _array.inArray)(itemType, ALLOWED_TOOLBAR_ITEM_ALIASES) < 0) {
                    return false
                }
                var itemConfig = (0, _extend.extend)({
                    text: _message2.default.format(this._getLocalizationKey(itemType)),
                    onClick: this._createToolbarItemAction(data.onClick),
                    integrationOptions: {},
                    type: that.option("useDefaultToolbarButtons") ? BUTTON_DEFAULT_TYPE : BUTTON_NORMAL_TYPE,
                    stylingMode: that.option("useFlatToolbarButtons") ? BUTTON_TEXT_MODE : BUTTON_CONTAINED_MODE
                }, data.options || {});
                var itemClass = POPUP_CLASS + "-" + itemType;
                this._toolbarItemClasses.push(itemClass);
                return {
                    template: function(_, __, container) {
                        var $toolbarItem = (0, _renderer2.default)("<div>").addClass(itemClass).appendTo(container);
                        that._createComponent($toolbarItem, _button2.default, itemConfig)
                    }
                }
            },
            _createToolbarItemAction: function(clickAction) {
                return this._createAction(clickAction, {
                    afterExecute: function(e) {
                        e.component.hide()
                    }
                })
            },
            _renderBottom: function() {
                var items = this._getToolbarItems("bottom");
                if (items.length) {
                    this._$bottom && this._$bottom.remove();
                    var $bottom = (0, _renderer2.default)("<div>").addClass(POPUP_BOTTOM_CLASS).insertAfter(this.$content());
                    this._$bottom = this._renderTemplateByType("bottomTemplate", items, $bottom, {
                        compactMode: true
                    }).addClass(POPUP_BOTTOM_CLASS);
                    this._toggleClasses()
                } else {
                    this._$bottom && this._$bottom.detach()
                }
            },
            _toggleClasses: function() {
                var aliases = ALLOWED_TOOLBAR_ITEM_ALIASES;
                (0, _iterator.each)(aliases, function(_, alias) {
                    var className = POPUP_CLASS + "-" + alias;
                    if ((0, _array.inArray)(className, this._toolbarItemClasses) >= 0) {
                        this._wrapper().addClass(className + "-visible");
                        this._$bottom.addClass(className)
                    } else {
                        this._wrapper().removeClass(className + "-visible");
                        this._$bottom.removeClass(className)
                    }
                }.bind(this))
            },
            _getContainer: function() {
                if (this.option("fullScreen")) {
                    return (0, _renderer2.default)(window)
                }
                return this.callBase()
            },
            _getDragTarget: function() {
                return this.topToolbar()
            },
            _renderGeometryImpl: function(isDimensionChanged) {
                if (!isDimensionChanged) {
                    this._resetContentHeight()
                }
                this.callBase.apply(this, arguments);
                this._setContentHeight()
            },
            _resetContentHeight: function() {
                this._$popupContent.css({
                    height: "auto",
                    maxHeight: "none"
                })
            },
            _renderDrag: function() {
                this.callBase();
                this._$content.toggleClass(POPUP_DRAGGABLE_CLASS, this.option("dragEnabled"))
            },
            _renderResize: function() {
                this.callBase();
                this._resizable.option("onResize", function() {
                    this._setContentHeight();
                    this._actions.onResize(arguments)
                }.bind(this))
            },
            _setContentHeight: function() {
                (this.option("forceApplyBindings") || _common.noop)();
                var overlayContent = this.overlayContent().get(0);
                var currentHeightStrategyClass = this._chooseHeightStrategy(overlayContent);
                this.$content().css(this._getHeightCssStyles(currentHeightStrategyClass, overlayContent));
                this._setHeightClasses(this.overlayContent(), currentHeightStrategyClass)
            },
            _heightStrategyChangeOffset: function(currentHeightStrategyClass, popupVerticalPaddings) {
                return currentHeightStrategyClass === HEIGHT_STRATEGIES.flex ? -popupVerticalPaddings : 0
            },
            _chooseHeightStrategy: function(overlayContent) {
                var isAutoWidth = "auto" === overlayContent.style.width || "" === overlayContent.style.width;
                var currentHeightStrategyClass = HEIGHT_STRATEGIES.static;
                if (this._isAutoHeight() && this.option("autoResizeEnabled")) {
                    if (isAutoWidth || IS_OLD_SAFARI) {
                        if (!IS_IE11) {
                            currentHeightStrategyClass = HEIGHT_STRATEGIES.inherit
                        }
                    } else {
                        currentHeightStrategyClass = HEIGHT_STRATEGIES.flex
                    }
                }
                return currentHeightStrategyClass
            },
            _getHeightCssStyles: function(currentHeightStrategyClass, overlayContent) {
                var cssStyles = {};
                var contentMaxHeight = this._getOptionValue("maxHeight", overlayContent);
                var contentMinHeight = this._getOptionValue("minHeight", overlayContent);
                var popupHeightParts = this._splitPopupHeight();
                var toolbarsAndVerticalOffsetsHeight = popupHeightParts.header + popupHeightParts.footer + popupHeightParts.contentVerticalOffsets + popupHeightParts.popupVerticalOffsets + this._heightStrategyChangeOffset(currentHeightStrategyClass, popupHeightParts.popupVerticalPaddings);
                if (currentHeightStrategyClass === HEIGHT_STRATEGIES.static) {
                    if (!this._isAutoHeight() || contentMaxHeight || contentMinHeight) {
                        var overlayHeight = this.option("fullScreen") ? Math.min((0, _position.getBoundingRect)(overlayContent).height, _window2.default.getWindow().innerHeight) : (0, _position.getBoundingRect)(overlayContent).height;
                        var contentHeight = overlayHeight - toolbarsAndVerticalOffsetsHeight;
                        cssStyles = {
                            height: Math.max(0, contentHeight),
                            minHeight: "auto",
                            maxHeight: "auto"
                        }
                    }
                } else {
                    var container = (0, _renderer2.default)(this._getContainer()).get(0);
                    var maxHeightValue = _size2.default.addOffsetToMaxHeight(contentMaxHeight, -toolbarsAndVerticalOffsetsHeight, container);
                    var minHeightValue = _size2.default.addOffsetToMinHeight(contentMinHeight, -toolbarsAndVerticalOffsetsHeight, container);
                    cssStyles = {
                        height: "auto",
                        minHeight: minHeightValue,
                        maxHeight: maxHeightValue
                    }
                }
                return cssStyles
            },
            _setHeightClasses: function($container, currentClass) {
                var excessClasses = "";
                for (var name in HEIGHT_STRATEGIES) {
                    if (HEIGHT_STRATEGIES[name] !== currentClass) {
                        excessClasses += " " + HEIGHT_STRATEGIES[name]
                    }
                }
                $container.removeClass(excessClasses).addClass(currentClass)
            },
            _isAutoHeight: function() {
                return "auto" === this.overlayContent().get(0).style.height
            },
            _splitPopupHeight: function() {
                var topToolbar = this.topToolbar();
                var bottomToolbar = this.bottomToolbar();
                return {
                    header: _size2.default.getVisibleHeight(topToolbar && topToolbar.get(0)),
                    footer: _size2.default.getVisibleHeight(bottomToolbar && bottomToolbar.get(0)),
                    contentVerticalOffsets: _size2.default.getVerticalOffsets(this.overlayContent().get(0), true),
                    popupVerticalOffsets: _size2.default.getVerticalOffsets(this.$content().get(0), true),
                    popupVerticalPaddings: _size2.default.getVerticalOffsets(this.$content().get(0), false)
                }
            },
            _useFixedPosition: function() {
                return this.callBase() || this.option("fullScreen")
            },
            _toggleSafariFullScreen: function(value) {
                var toggleFullScreenBeforeShown = this._useFixedPosition() && value && !this._isShown;
                if (toggleFullScreenBeforeShown) {
                    this._bodyScrollTop = value ? window.pageYOffset : void 0
                } else {
                    this._toggleSafariScrolling(!value)
                }
            },
            _renderDimensions: function() {
                if (this.option("fullScreen")) {
                    this._$content.css({
                        width: "100%",
                        height: "100%"
                    })
                } else {
                    this.callBase.apply(this, arguments)
                }
                if (_window2.default.hasWindow()) {
                    this._renderFullscreenWidthClass()
                }
            },
            _renderFullscreenWidthClass: function() {
                this.overlayContent().toggleClass(POPUP_FULL_SCREEN_WIDTH_CLASS, this.overlayContent().outerWidth() === (0, _renderer2.default)(window).width())
            },
            refreshPosition: function() {
                this._renderPosition()
            },
            _renderPosition: function() {
                if (this.option("fullScreen")) {
                    _translator2.default.move(this._$content, {
                        top: 0,
                        left: 0
                    })
                } else {
                    (this.option("forceApplyBindings") || _common.noop)();
                    return this.callBase.apply(this, arguments)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "showTitle":
                    case "title":
                    case "titleTemplate":
                        this._renderTitle();
                        this._renderGeometry();
                        break;
                    case "bottomTemplate":
                        this._renderBottom();
                        this._renderGeometry();
                        break;
                    case "onTitleRendered":
                        this._createTitleRenderAction(args.value);
                        break;
                    case "toolbarItems":
                    case "useDefaultToolbarButtons":
                    case "useFlatToolbarButtons":
                        var shouldRenderGeometry = !args.fullName.match(/^toolbarItems((\[\d+\])(\.(options|visible).*)?)?$/);
                        this._renderTitle();
                        this._renderBottom();
                        if (shouldRenderGeometry) {
                            this._renderGeometry()
                        }
                        break;
                    case "dragEnabled":
                        this._renderDrag();
                        break;
                    case "autoResizeEnabled":
                        this._renderGeometry();
                        _dom2.default.triggerResizeEvent(this._$content);
                        break;
                    case "fullScreen":
                        this._toggleFullScreenClass(args.value);
                        this._toggleSafariFullScreen(args.value);
                        this._renderGeometry();
                        _dom2.default.triggerResizeEvent(this._$content);
                        break;
                    case "showCloseButton":
                        this._renderTitle();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            bottomToolbar: function() {
                return this._$bottom
            },
            topToolbar: function() {
                return this._$title
            },
            $content: function() {
                return this._$popupContent
            },
            content: function() {
                return (0, _dom.getPublicElement)(this._$popupContent)
            },
            overlayContent: function() {
                return this._$content
            }
        });
        (0, _component_registrator2.default)("dxPopup", Popup);
        module.exports = Popup
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/data/query.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var arrayQueryImpl = __webpack_require__( /*! ./array_query */ 161);
        var remoteQueryImpl = __webpack_require__( /*! ./remote_query */ 497);
        var queryImpl = {
            array: arrayQueryImpl,
            remote: remoteQueryImpl
        };
        var query = function() {
            var impl = Array.isArray(arguments[0]) ? "array" : "remote";
            return queryImpl[impl].apply(this, arguments)
        };
        module.exports = query;
        module.exports.queryImpl = queryImpl
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/support.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _array = __webpack_require__( /*! ./array */ 14);
        var _dom_adapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var _common = __webpack_require__( /*! ./common */ 3);
        var _call_once = __webpack_require__( /*! ./call_once */ 80);
        var _call_once2 = _interopRequireDefault(_call_once);
        var _window = __webpack_require__( /*! ./window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _devices = __webpack_require__( /*! ../devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _style = __webpack_require__( /*! ./style */ 93);
        var _style2 = _interopRequireDefault(_style);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var _windowUtils$getNavig = _window2.default.getNavigator(),
            maxTouchPoints = _windowUtils$getNavig.maxTouchPoints,
            msMaxTouchPoints = _windowUtils$getNavig.msMaxTouchPoints,
            pointerEnabled = _windowUtils$getNavig.pointerEnabled;
        var hasProperty = _window2.default.hasProperty.bind(_window2.default);
        var transitionEndEventNames = {
            webkitTransition: "webkitTransitionEnd",
            MozTransition: "transitionend",
            OTransition: "oTransitionEnd",
            msTransition: "MsTransitionEnd",
            transition: "transitionend"
        };
        var supportProp = function(prop) {
            return !!_style2.default.styleProp(prop)
        };
        var isNativeScrollingSupported = function() {
            var _devices$real = _devices2.default.real(),
                platform = _devices$real.platform,
                version = _devices$real.version,
                isMac = _devices$real.mac;
            var isObsoleteAndroid = version && version[0] < 4 && "android" === platform;
            var isNativeScrollDevice = !isObsoleteAndroid && (0, _array.inArray)(platform, ["ios", "android"]) > -1 || isMac;
            return isNativeScrollDevice
        };
        var inputType = function(type) {
            if ("text" === type) {
                return true
            }
            var input = (0, _dom_adapter.createElement)("input");
            try {
                input.setAttribute("type", type);
                input.value = "wrongValue";
                return !input.value
            } catch (e) {
                return false
            }
        };
        var detectTouchEvents = function(hasWindowProperty, maxTouchPoints) {
            return (hasWindowProperty("ontouchstart") || !!maxTouchPoints) && !hasWindowProperty("callPhantom")
        };
        var detectPointerEvent = function(hasWindowProperty, pointerEnabled) {
            var isPointerEnabled = (0, _common.ensureDefined)(pointerEnabled, true);
            var canUsePointerEvent = (0, _common.ensureDefined)(pointerEnabled, false);
            return hasWindowProperty("PointerEvent") && isPointerEnabled || canUsePointerEvent
        };
        var touchEvents = detectTouchEvents(hasProperty, maxTouchPoints);
        var pointerEvents = detectPointerEvent(hasProperty, pointerEnabled);
        var touchPointersPresent = !!maxTouchPoints || !!msMaxTouchPoints;
        exports.detectTouchEvents = detectTouchEvents;
        exports.detectPointerEvent = detectPointerEvent;
        exports.touchEvents = touchEvents;
        exports.pointerEvents = pointerEvents;
        exports.touch = touchEvents || pointerEvents && touchPointersPresent;
        exports.transition = (0, _call_once2.default)(function() {
            return supportProp("transition")
        });
        exports.transitionEndEventName = (0, _call_once2.default)(function() {
            return transitionEndEventNames[_style2.default.styleProp("transition")]
        });
        exports.animation = (0, _call_once2.default)(function() {
            return supportProp("animation")
        });
        exports.nativeScrolling = isNativeScrollingSupported();
        exports.styleProp = _style2.default.styleProp;
        exports.stylePropPrefix = _style2.default.stylePropPrefix;
        exports.supportProp = supportProp;
        exports.inputType = inputType
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/object.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var variableWrapper = __webpack_require__( /*! ./variable_wrapper */ 94);
        var clone = function() {
            function Clone() {}
            return function(obj) {
                Clone.prototype = obj;
                return new Clone
            }
        }();
        var orderEach = function(map, func) {
            var keys = [];
            var key;
            var i;
            for (key in map) {
                if (Object.prototype.hasOwnProperty.call(map, key)) {
                    keys.push(key)
                }
            }
            keys.sort(function(x, y) {
                var isNumberX = typeUtils.isNumeric(x);
                var isNumberY = typeUtils.isNumeric(y);
                if (isNumberX && isNumberY) {
                    return x - y
                }
                if (isNumberX && !isNumberY) {
                    return -1
                }
                if (!isNumberX && isNumberY) {
                    return 1
                }
                if (x < y) {
                    return -1
                }
                if (x > y) {
                    return 1
                }
                return 0
            });
            for (i = 0; i < keys.length; i++) {
                key = keys[i];
                func(key, map[key])
            }
        };
        var assignValueToProperty = function(target, property, value, assignByReference) {
            if (!assignByReference && variableWrapper.isWrapped(target[property])) {
                variableWrapper.assign(target[property], value)
            } else {
                target[property] = value
            }
        };
        var deepExtendArraySafe = function deepExtendArraySafe(target, changes, extendComplexObject, assignByReference) {
            var prevValue;
            var newValue;
            for (var name in changes) {
                prevValue = target[name];
                newValue = changes[name];
                if ("__proto__" === name || target === newValue) {
                    continue
                }
                if (typeUtils.isPlainObject(newValue)) {
                    var goDeeper = extendComplexObject ? typeUtils.isObject(prevValue) : typeUtils.isPlainObject(prevValue);
                    newValue = deepExtendArraySafe(goDeeper ? prevValue : {}, newValue, extendComplexObject, assignByReference)
                }
                if (void 0 !== newValue && prevValue !== newValue) {
                    assignValueToProperty(target, name, newValue, assignByReference)
                }
            }
            return target
        };
        exports.clone = clone;
        exports.orderEach = orderEach;
        exports.deepExtendArraySafe = deepExtendArraySafe
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/editor/editor.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _validation_engine = __webpack_require__( /*! ../validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var READONLY_STATE_CLASS = "dx-state-readonly";
        var INVALID_CLASS = "dx-invalid";
        var INVALID_MESSAGE = "dx-invalid-message";
        var INVALID_MESSAGE_CONTENT = "dx-invalid-message-content";
        var INVALID_MESSAGE_AUTO = "dx-invalid-message-auto";
        var INVALID_MESSAGE_ALWAYS = "dx-invalid-message-always";
        var DX_INVALID_BADGE_CLASS = "dx-show-invalid-badge";
        var VALIDATION_TARGET = "dx-validation-target";
        var VALIDATION_MESSAGE_MIN_WIDTH = 100;
        var VALIDATION_STATUS_VALID = "valid";
        var VALIDATION_STATUS_INVALID = "invalid";
        var READONLY_NAMESPACE = "editorReadOnly";
        var getValidationErrorMessage = function(validationErrors) {
            var validationErrorMessage = "";
            if (validationErrors) {
                validationErrors.forEach(function(err) {
                    if (err.message) {
                        validationErrorMessage += (validationErrorMessage ? "<br />" : "") + (0, _string.encodeHtml)(err.message)
                    }
                })
            }
            return validationErrorMessage
        };
        var Editor = _ui2.default.inherit({
            ctor: function() {
                this.showValidationMessageTimeout = null;
                this.validationRequest = (0, _callbacks2.default)();
                this.callBase.apply(this, arguments)
            },
            _createElement: function(element) {
                this.callBase(element);
                var $element = this.$element();
                if ($element) {
                    _element_data2.default.data($element[0], VALIDATION_TARGET, this)
                }
            },
            _initOptions: function(options) {
                this.callBase.apply(this, arguments);
                this.option(_validation_engine2.default.initValidationOptions(options))
            },
            _init: function() {
                this.callBase();
                this._options.cache("validationTooltipOptions", this.option("validationTooltipOptions"));
                var $element = this.$element();
                $element.addClass(DX_INVALID_BADGE_CLASS)
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    value: null,
                    name: "",
                    onValueChanged: null,
                    readOnly: false,
                    isValid: true,
                    validationError: null,
                    validationErrors: null,
                    validationStatus: VALIDATION_STATUS_VALID,
                    validationMessageMode: "auto",
                    validationBoundary: void 0,
                    validationMessageOffset: {
                        h: 0,
                        v: 0
                    },
                    validationTooltipOptions: {}
                })
            },
            _attachKeyboardEvents: function() {
                if (!this.option("readOnly")) {
                    this.callBase()
                }
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    validationError: true
                })
            },
            _createValueChangeAction: function() {
                this._valueChangeAction = this._createActionByOption("onValueChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _suppressValueChangeAction: function() {
                this._valueChangeActionSuppressed = true
            },
            _resumeValueChangeAction: function() {
                this._valueChangeActionSuppressed = false
            },
            _initMarkup: function() {
                this._toggleReadOnlyState();
                this._setSubmitElementName(this.option("name"));
                this.callBase();
                this._renderValidationState()
            },
            _raiseValueChangeAction: function(value, previousValue) {
                if (!this._valueChangeAction) {
                    this._createValueChangeAction()
                }
                this._valueChangeAction(this._valueChangeArgs(value, previousValue))
            },
            _valueChangeArgs: function(value, previousValue) {
                return {
                    value: value,
                    previousValue: previousValue,
                    event: this._valueChangeEventInstance
                }
            },
            _saveValueChangeEvent: function(e) {
                this._valueChangeEventInstance = e
            },
            _focusInHandler: function(e) {
                var _this = this;
                var isValidationMessageShownOnFocus = "auto" === this.option("validationMessageMode");
                if (this._canValueBeChangedByClick() && isValidationMessageShownOnFocus) {
                    this._$validationMessage && this._$validationMessage.removeClass(INVALID_MESSAGE_AUTO);
                    clearTimeout(this.showValidationMessageTimeout);
                    this.showValidationMessageTimeout = setTimeout(function() {
                        return _this._$validationMessage && _this._$validationMessage.addClass(INVALID_MESSAGE_AUTO)
                    }, 150)
                }
                return this.callBase(e)
            },
            _canValueBeChangedByClick: function() {
                return false
            },
            _renderValidationState: function() {
                var isValid = this.option("isValid") && this.option("validationStatus") !== VALIDATION_STATUS_INVALID;
                var validationMessageMode = this.option("validationMessageMode");
                var $element = this.$element();
                var validationErrors = this.option("validationErrors");
                if (!validationErrors && this.option("validationError")) {
                    validationErrors = [this.option("validationError")]
                }
                $element.toggleClass(INVALID_CLASS, !isValid);
                this.setAria(VALIDATION_STATUS_INVALID, !isValid || void 0);
                if (!_window2.default.hasWindow()) {
                    return
                }
                if (this._$validationMessage) {
                    this._$validationMessage.remove();
                    this.setAria("describedby", null);
                    this._$validationMessage = null
                }
                var validationErrorMessage = getValidationErrorMessage(validationErrors);
                if (!isValid && validationErrorMessage) {
                    this._$validationMessage = (0, _renderer2.default)("<div>").addClass(INVALID_MESSAGE).html(validationErrorMessage).appendTo($element);
                    var validationTarget = this._getValidationMessageTarget();
                    this._validationMessage = this._createComponent(this._$validationMessage, _overlay2.default, (0, _extend.extend)({
                        integrationOptions: {},
                        templatesRenderAsynchronously: false,
                        target: validationTarget,
                        shading: false,
                        width: "auto",
                        height: "auto",
                        container: $element,
                        position: this._getValidationMessagePosition("below"),
                        closeOnOutsideClick: false,
                        closeOnTargetScroll: false,
                        animation: null,
                        visible: true,
                        propagateOutsideClick: true,
                        _checkParentVisibility: false
                    }, this._options.cache("validationTooltipOptions")));
                    this._$validationMessage.toggleClass(INVALID_MESSAGE_AUTO, "auto" === validationMessageMode).toggleClass(INVALID_MESSAGE_ALWAYS, "always" === validationMessageMode);
                    var messageId = "dx-" + new _guid2.default;
                    this._validationMessage.$content().addClass(INVALID_MESSAGE_CONTENT).attr("id", messageId);
                    this.setAria("describedby", messageId);
                    this._setValidationMessageMaxWidth();
                    this._bindInnerWidgetOptions(this._validationMessage, "validationTooltipOptions")
                }
            },
            _setValidationMessageMaxWidth: function() {
                if (!this._validationMessage) {
                    return
                }
                if (0 === this._getValidationMessageTarget().outerWidth()) {
                    this._validationMessage.option("maxWidth", "100%");
                    return
                }
                var validationMessageMaxWidth = Math.max(VALIDATION_MESSAGE_MIN_WIDTH, this._getValidationMessageTarget().outerWidth());
                this._validationMessage.option("maxWidth", validationMessageMaxWidth)
            },
            _getValidationMessageTarget: function() {
                return this.$element()
            },
            _getValidationMessagePosition: function(positionRequest) {
                var rtlEnabled = this.option("rtlEnabled");
                var messagePositionSide = (0, _position.getDefaultAlignment)(rtlEnabled);
                var messageOriginalOffset = this.option("validationMessageOffset");
                var messageOffset = {
                    h: messageOriginalOffset.h,
                    v: messageOriginalOffset.v
                };
                var verticalPositions = "below" === positionRequest ? [" top", " bottom"] : [" bottom", " top"];
                if (rtlEnabled) {
                    messageOffset.h = -messageOffset.h
                }
                if ("below" !== positionRequest) {
                    messageOffset.v = -messageOffset.v
                }
                return {
                    offset: messageOffset,
                    boundary: this.option("validationBoundary"),
                    my: messagePositionSide + verticalPositions[0],
                    at: messagePositionSide + verticalPositions[1],
                    collision: "none flip"
                }
            },
            _toggleReadOnlyState: function() {
                var readOnly = this.option("readOnly");
                this._toggleBackspaceHandler(readOnly);
                this.$element().toggleClass(READONLY_STATE_CLASS, !!readOnly);
                this.setAria("readonly", readOnly || void 0)
            },
            _toggleBackspaceHandler: function(isReadOnly) {
                var $eventTarget = this._keyboardEventBindingTarget();
                var eventName = (0, _utils.addNamespace)("keydown", READONLY_NAMESPACE);
                _events_engine2.default.off($eventTarget, eventName);
                if (isReadOnly) {
                    _events_engine2.default.on($eventTarget, eventName, function(e) {
                        if ("backspace" === (0, _utils.normalizeKeyName)(e)) {
                            e.preventDefault()
                        }
                    })
                }
            },
            _dispose: function() {
                var element = this.$element()[0];
                _element_data2.default.data(element, VALIDATION_TARGET, null);
                clearTimeout(this.showValidationMessageTimeout);
                this.callBase()
            },
            _setSubmitElementName: function(name) {
                var $submitElement = this._getSubmitElement();
                if (!$submitElement) {
                    return
                }
                if (name.length > 0) {
                    $submitElement.attr("name", name)
                } else {
                    $submitElement.removeAttr("name")
                }
            },
            _getSubmitElement: function() {
                return null
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onValueChanged":
                        this._createValueChangeAction();
                        break;
                    case "isValid":
                    case "validationError":
                        this.option(_validation_engine2.default.synchronizeValidationOptions(args, this.option()));
                        break;
                    case "validationErrors":
                    case "validationStatus":
                        this.option(_validation_engine2.default.synchronizeValidationOptions(args, this.option()));
                        this._renderValidationState();
                        break;
                    case "validationBoundary":
                    case "validationMessageMode":
                        this._renderValidationState();
                        break;
                    case "validationTooltipOptions":
                        this._innerWidgetOptionChanged(this._validationMessage, args);
                        break;
                    case "readOnly":
                        this._toggleReadOnlyState();
                        this._refreshFocusState();
                        break;
                    case "value":
                        if (args.value != args.previousValue) {
                            this.validationRequest.fire({
                                value: args.value,
                                editor: this
                            })
                        }
                        if (!this._valueChangeActionSuppressed) {
                            this._raiseValueChangeAction(args.value, args.previousValue);
                            this._saveValueChangeEvent(void 0)
                        }
                        break;
                    case "width":
                        this.callBase(args);
                        this._setValidationMessageMaxWidth();
                        break;
                    case "name":
                        this._setSubmitElementName(args.value);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            reset: function() {
                var defaultOptions = this._getDefaultOptions();
                this.option("value", defaultOptions.value)
            }
        });
        module.exports = Editor
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/localization/number.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dependency_injector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _number = __webpack_require__( /*! ./ldml/number */ 297);
        var _number2 = _interopRequireDefault(_number);
        var _config = __webpack_require__( /*! ../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _errors = __webpack_require__( /*! ../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _utils = __webpack_require__( /*! ./utils */ 271);
        var _currency = __webpack_require__( /*! ./currency */ 131);
        var _currency2 = _interopRequireDefault(_currency);
        var _number3 = __webpack_require__( /*! ./intl/number */ 451);
        var _number4 = _interopRequireDefault(_number3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _slicedToArray(arr, i) {
            return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest()
        }

        function _nonIterableRest() {
            throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

        function _iterableToArrayLimit(arr, i) {
            if ("undefined" === typeof Symbol || !(Symbol.iterator in Object(arr))) {
                return
            }
            var _arr = [];
            var _n = true;
            var _d = false;
            var _e = void 0;
            try {
                for (var _s, _i = arr[Symbol.iterator](); !(_n = (_s = _i.next()).done); _n = true) {
                    _arr.push(_s.value);
                    if (i && _arr.length === i) {
                        break
                    }
                }
            } catch (err) {
                _d = true;
                _e = err
            } finally {
                try {
                    if (!_n && null != _i.return) {
                        _i.return()
                    }
                } finally {
                    if (_d) {
                        throw _e
                    }
                }
            }
            return _arr
        }

        function _arrayWithHoles(arr) {
            if (Array.isArray(arr)) {
                return arr
            }
        }
        var hasIntl = "undefined" !== typeof Intl;
        var MAX_LARGE_NUMBER_POWER = 4;
        var DECIMAL_BASE = 10;
        var NUMERIC_FORMATS = ["currency", "fixedpoint", "exponential", "percent", "decimal"];
        var LargeNumberFormatPostfixes = {
            1: "K",
            2: "M",
            3: "B",
            4: "T"
        };
        var LargeNumberFormatPowers = {
            largenumber: "auto",
            thousands: 1,
            millions: 2,
            billions: 3,
            trillions: 4
        };
        var numberLocalization = (0, _dependency_injector2.default)({
            engine: function() {
                return "base"
            },
            numericFormats: NUMERIC_FORMATS,
            defaultLargeNumberFormatPostfixes: LargeNumberFormatPostfixes,
            _parseNumberFormatString: function(formatType) {
                var formatObject = {};
                if (!formatType || "string" !== typeof formatType) {
                    return
                }
                var formatList = formatType.toLowerCase().split(" ");
                (0, _iterator.each)(formatList, function(index, value) {
                    if ((0, _array.inArray)(value, NUMERIC_FORMATS) > -1) {
                        formatObject.formatType = value
                    } else {
                        if (value in LargeNumberFormatPowers) {
                            formatObject.power = LargeNumberFormatPowers[value]
                        }
                    }
                });
                if (formatObject.power && !formatObject.formatType) {
                    formatObject.formatType = "fixedpoint"
                }
                if (formatObject.formatType) {
                    return formatObject
                }
            },
            _calculateNumberPower: function(value, base, minPower, maxPower) {
                var number = Math.abs(value);
                var power = 0;
                if (number > 1) {
                    while (number && number >= base && (void 0 === maxPower || power < maxPower)) {
                        power++;
                        number /= base
                    }
                } else {
                    if (number > 0 && number < 1) {
                        while (number < 1 && (void 0 === minPower || power > minPower)) {
                            power--;
                            number *= base
                        }
                    }
                }
                return power
            },
            _getNumberByPower: function(number, power, base) {
                var result = number;
                while (power > 0) {
                    result /= base;
                    power--
                }
                while (power < 0) {
                    result *= base;
                    power++
                }
                return result
            },
            _formatNumber: function(value, formatObject, formatConfig) {
                if ("auto" === formatObject.power) {
                    formatObject.power = this._calculateNumberPower(value, 1e3, 0, MAX_LARGE_NUMBER_POWER)
                }
                if (formatObject.power) {
                    value = this._getNumberByPower(value, formatObject.power, 1e3)
                }
                var powerPostfix = this.defaultLargeNumberFormatPostfixes[formatObject.power] || "";
                var result = this._formatNumberCore(value, formatObject.formatType, formatConfig);
                result = result.replace(/(\d|.$)(\D*)$/, "$1" + powerPostfix + "$2");
                return result
            },
            _formatNumberExponential: function(value, formatConfig) {
                var power = this._calculateNumberPower(value, DECIMAL_BASE);
                var number = this._getNumberByPower(value, power, DECIMAL_BASE);
                if (void 0 === formatConfig.precision) {
                    formatConfig.precision = 1
                }
                if (number.toFixed(formatConfig.precision || 0) >= DECIMAL_BASE) {
                    power++;
                    number /= DECIMAL_BASE
                }
                var powString = (power >= 0 ? "+" : "") + power.toString();
                return this._formatNumberCore(number, "fixedpoint", formatConfig) + "E" + powString
            },
            _addZeroes: function(value, precision) {
                var multiplier = Math.pow(10, precision);
                var sign = value < 0 ? "-" : "";
                value = (Math.abs(value) * multiplier >>> 0) / multiplier;
                var result = value.toString();
                while (result.length < precision) {
                    result = "0" + result
                }
                return sign + result
            },
            _addGroupSeparators: function(value) {
                var parts = value.toString().split(".");
                return parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, (0, _config2.default)().thousandsSeparator) + (parts[1] ? (0, _config2.default)().decimalSeparator + parts[1] : "")
            },
            _formatNumberCore: function(value, format, formatConfig) {
                if ("exponential" === format) {
                    return this._formatNumberExponential(value, formatConfig)
                }
                if ("decimal" !== format && null !== formatConfig.precision) {
                    formatConfig.precision = formatConfig.precision || 0
                }
                if ("percent" === format) {
                    value = 100 * value
                }
                if (void 0 !== formatConfig.precision) {
                    if ("decimal" === format) {
                        value = this._addZeroes(value, formatConfig.precision)
                    } else {
                        value = null === formatConfig.precision ? value.toPrecision() : (0, _utils.toFixed)(value, formatConfig.precision)
                    }
                }
                if ("decimal" !== format) {
                    value = this._addGroupSeparators(value)
                } else {
                    value = value.toString().replace(".", (0, _config2.default)().decimalSeparator)
                }
                if ("percent" === format) {
                    value += "%"
                }
                return value
            },
            _normalizeFormat: function(format) {
                if (!format) {
                    return {}
                }
                if ("function" === typeof format) {
                    return format
                }
                if (!(0, _type.isPlainObject)(format)) {
                    format = {
                        type: format
                    }
                }
                return format
            },
            _getSeparators: function() {
                return {
                    decimalSeparator: this.getDecimalSeparator(),
                    thousandsSeparator: this.getThousandsSeparator()
                }
            },
            getThousandsSeparator: function() {
                return this.format(1e4, "fixedPoint")[2]
            },
            getDecimalSeparator: function() {
                return this.format(1.2, {
                    type: "fixedPoint",
                    precision: 1
                })[1]
            },
            convertDigits: function(value, toStandard) {
                var digits = this.format(90, "decimal");
                if ("string" !== typeof value || "0" === digits[1]) {
                    return value
                }
                var fromFirstDigit = toStandard ? digits[1] : "0";
                var toFirstDigit = toStandard ? "0" : digits[1];
                var fromLastDigit = toStandard ? digits[0] : "9";
                var regExp = new RegExp("[" + fromFirstDigit + "-" + fromLastDigit + "]", "g");
                return value.replace(regExp, function(char) {
                    return String.fromCharCode(char.charCodeAt(0) + (toFirstDigit.charCodeAt(0) - fromFirstDigit.charCodeAt(0)))
                })
            },
            getSign: function(text, format) {
                if ("-" === text.replace(/[^0-9-]/g, "").charAt(0)) {
                    return -1
                }
                if (!format) {
                    return 1
                }
                var separators = this._getSeparators();
                var regExp = new RegExp("[0-9" + (0, _common.escapeRegExp)(separators.decimalSeparator + separators.thousandsSeparator) + "]+", "g");
                var negativeEtalon = this.format(-1, format).replace(regExp, "1");
                var cleanedText = text.replace(regExp, "1");
                return cleanedText === negativeEtalon ? -1 : 1
            },
            format: function(value, _format) {
                if ("number" !== typeof value) {
                    return value
                }
                if ("number" === typeof _format) {
                    return value
                }
                _format = _format && _format.formatter || _format;
                if ("function" === typeof _format) {
                    return _format(value)
                }
                _format = this._normalizeFormat(_format);
                if (!_format.type) {
                    _format.type = "decimal"
                }
                var numberConfig = this._parseNumberFormatString(_format.type);
                if (!numberConfig) {
                    var formatterConfig = this._getSeparators();
                    formatterConfig.unlimitedIntegerDigits = _format.unlimitedIntegerDigits;
                    return this.convertDigits(_number2.default.getFormatter(_format.type, formatterConfig)(value))
                }
                return this._formatNumber(value, numberConfig, _format)
            },
            parse: function(text, format) {
                if (!text) {
                    return
                }
                if (format && format.parser) {
                    return format.parser(text)
                }
                text = this.convertDigits(text, true);
                if (format && "string" !== typeof format) {
                    _errors2.default.log("W0011")
                }
                var decimalSeparator = this.getDecimalSeparator();
                var regExp = new RegExp("[^0-9" + (0, _common.escapeRegExp)(decimalSeparator) + "]", "g");
                var cleanedText = text.replace(regExp, "").replace(decimalSeparator, ".").replace(/\.$/g, "");
                if ("." === cleanedText || "" === cleanedText) {
                    return null
                }
                if (this._calcSignificantDigits(cleanedText) > 15) {
                    return NaN
                }
                var parsed = +cleanedText;
                return parsed * this.getSign(text, format)
            },
            _calcSignificantDigits: function(text) {
                var _text$split = text.split("."),
                    _text$split2 = _slicedToArray(_text$split, 2),
                    integer = _text$split2[0],
                    fractional = _text$split2[1];
                var calcDigitsAfterLeadingZeros = function(digits) {
                    var index = -1;
                    for (var i = 0; i < digits.length; i++) {
                        if ("0" !== digits[i]) {
                            index = i;
                            break
                        }
                    }
                    return index > -1 ? digits.length - index : 0
                };
                var result = 0;
                if (integer) {
                    result += calcDigitsAfterLeadingZeros(integer.split(""))
                }
                if (fractional) {
                    result += calcDigitsAfterLeadingZeros(fractional.split("").reverse())
                }
                return result
            }
        });
        numberLocalization.inject(_currency2.default);
        if (hasIntl) {
            numberLocalization.inject(_number4.default)
        }
        module.exports = numberLocalization
    }, ,
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/ready_callbacks.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var injector = __webpack_require__( /*! ./dependency_injector */ 56);
        var windowUtils = __webpack_require__( /*! ./window */ 7);
        var callOnce = __webpack_require__( /*! ./call_once */ 80);
        var callbacks = [];
        var isReady = function() {
            return "complete" === domAdapter.getReadyState() || "loading" !== domAdapter.getReadyState() && !domAdapter.getDocumentElement().doScroll
        };
        var subscribeReady = callOnce(function() {
            var removeListener = domAdapter.listen(domAdapter.getDocument(), "DOMContentLoaded", function() {
                readyCallbacks.fire();
                removeListener()
            })
        });
        var readyCallbacks = {
            add: function(callback) {
                var hasWindow = windowUtils.hasWindow();
                if (hasWindow && isReady()) {
                    callback()
                } else {
                    callbacks.push(callback);
                    hasWindow && subscribeReady()
                }
            },
            fire: function() {
                callbacks.forEach(function(callback) {
                    return callback()
                });
                callbacks = []
            }
        };
        module.exports = injector(readyCallbacks)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.edit.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiCollection_widget = __webpack_require__( /*! ./ui.collection_widget.base */ 495);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _uiCollection_widgetEditStrategy = __webpack_require__( /*! ./ui.collection_widget.edit.strategy.plain */ 191);
        var _uiCollection_widgetEditStrategy2 = _interopRequireDefault(_uiCollection_widgetEditStrategy);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _utils = __webpack_require__( /*! ../../data/data_source/utils */ 64);
        var _selection = __webpack_require__( /*! ../selection/selection */ 218);
        var _selection2 = _interopRequireDefault(_selection);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var ITEM_DELETING_DATA_KEY = "dxItemDeleting";
        var NOT_EXISTING_INDEX = -1;
        var indexExists = function(index) {
            return index !== NOT_EXISTING_INDEX
        };
        var CollectionWidget = _uiCollection_widget2.default.inherit({
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    selectedItem: true
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    selectionMode: "none",
                    selectionRequired: false,
                    selectionByClick: true,
                    selectedItems: [],
                    selectedItemKeys: [],
                    maxFilterLengthInRequest: 1500,
                    keyExpr: null,
                    selectedIndex: NOT_EXISTING_INDEX,
                    selectedItem: null,
                    onSelectionChanged: null,
                    onItemReordered: null,
                    onItemDeleting: null,
                    onItemDeleted: null
                })
            },
            ctor: function(element, options) {
                this._userOptions = options || {};
                this.callBase(element, options)
            },
            _init: function() {
                this._initEditStrategy();
                this.callBase();
                this._initKeyGetter();
                this._initSelectionModule();
                if ("multi" === this.option("selectionMode")) {
                    this._showDeprecatedSelectionMode()
                }
            },
            _initKeyGetter: function() {
                this._keyGetter = (0, _data.compileGetter)(this.option("keyExpr"))
            },
            _getKeysByItems: function(selectedItems) {
                return this._editStrategy.getKeysByItems(selectedItems)
            },
            _getItemsByKeys: function(selectedItemKeys, selectedItems) {
                return this._editStrategy.getItemsByKeys(selectedItemKeys, selectedItems)
            },
            _getKeyByIndex: function(index) {
                return this._editStrategy.getKeyByIndex(index)
            },
            _getIndexByKey: function(key) {
                return this._editStrategy.getIndexByKey(key)
            },
            _getIndexByItemData: function(itemData) {
                return this._editStrategy.getIndexByItemData(itemData)
            },
            _isKeySpecified: function() {
                return !!(this._dataSource && this._dataSource.key())
            },
            _getCombinedFilter: function() {
                return this._dataSource && this._dataSource.filter()
            },
            key: function() {
                if (this.option("keyExpr")) {
                    return this.option("keyExpr")
                }
                return this._dataSource && this._dataSource.key()
            },
            keyOf: function(item) {
                var key = item;
                var store = this._dataSource && this._dataSource.store();
                if (this.option("keyExpr")) {
                    key = this._keyGetter(item)
                } else {
                    if (store) {
                        key = store.keyOf(item)
                    }
                }
                return key
            },
            _nullValueSelectionSupported: function() {
                return false
            },
            _initSelectionModule: function() {
                var that = this;
                var itemsGetter = that._editStrategy.itemsGetter;
                this._selection = new _selection2.default({
                    allowNullValue: this._nullValueSelectionSupported(),
                    mode: this.option("selectionMode"),
                    maxFilterLengthInRequest: this.option("maxFilterLengthInRequest"),
                    equalByReference: !this._isKeySpecified(),
                    onSelectionChanged: function(args) {
                        if (args.addedItemKeys.length || args.removedItemKeys.length) {
                            that.option("selectedItems", that._getItemsByKeys(args.selectedItemKeys, args.selectedItems));
                            that._updateSelectedItems(args)
                        }
                    },
                    filter: that._getCombinedFilter.bind(that),
                    totalCount: function() {
                        var items = that.option("items");
                        var dataSource = that._dataSource;
                        return dataSource && dataSource.totalCount() >= 0 ? dataSource.totalCount() : items.length
                    },
                    key: that.key.bind(that),
                    keyOf: that.keyOf.bind(that),
                    load: function(options) {
                        if (that._dataSource) {
                            var loadOptions = that._dataSource.loadOptions();
                            options.customQueryParams = loadOptions.customQueryParams;
                            options.userData = that._dataSource._userData
                        }
                        var store = that._dataSource && that._dataSource.store();
                        if (store) {
                            return store.load(options).done(function(loadResult) {
                                if (that._disposed) {
                                    return
                                }
                                var items = (0, _utils.normalizeLoadResult)(loadResult).data;
                                that._dataSource._applyMapFunction(items)
                            })
                        } else {
                            return (new _deferred.Deferred).resolve(this.plainItems())
                        }
                    },
                    dataFields: function() {
                        return that._dataSource && that._dataSource.select()
                    },
                    plainItems: itemsGetter.bind(that._editStrategy)
                })
            },
            _initEditStrategy: function() {
                var Strategy = _uiCollection_widgetEditStrategy2.default;
                this._editStrategy = new Strategy(this)
            },
            _getSelectedItemIndices: function(keys) {
                var that = this;
                var indices = [];
                keys = keys || this._selection.getSelectedItemKeys();
                that._editStrategy.beginCache();
                (0, _iterator.each)(keys, function(_, key) {
                    var selectedIndex = that._getIndexByKey(key);
                    if (indexExists(selectedIndex)) {
                        indices.push(selectedIndex)
                    }
                });
                that._editStrategy.endCache();
                return indices
            },
            _initMarkup: function() {
                var _this = this;
                this._rendering = true;
                if (!this._dataSource || !this._dataSource.isLoading()) {
                    this._syncSelectionOptions().done(function() {
                        return _this._normalizeSelectedItems()
                    })
                }
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._rendering = false
            },
            _fireContentReadyAction: function() {
                this._rendering = false;
                this._rendered = true;
                this.callBase.apply(this, arguments)
            },
            _syncSelectionOptions: function(byOption) {
                byOption = byOption || this._chooseSelectOption();
                var selectedItem;
                var selectedIndex;
                var selectedItemKeys;
                var selectedItems;
                switch (byOption) {
                    case "selectedIndex":
                        selectedItem = this._editStrategy.getItemDataByIndex(this.option("selectedIndex"));
                        if ((0, _type.isDefined)(selectedItem)) {
                            this._setOptionWithoutOptionChange("selectedItems", [selectedItem]);
                            this._setOptionWithoutOptionChange("selectedItem", selectedItem);
                            this._setOptionWithoutOptionChange("selectedItemKeys", this._editStrategy.getKeysByItems([selectedItem]))
                        } else {
                            this._setOptionWithoutOptionChange("selectedItems", []);
                            this._setOptionWithoutOptionChange("selectedItemKeys", []);
                            this._setOptionWithoutOptionChange("selectedItem", null)
                        }
                        break;
                    case "selectedItems":
                        selectedItems = this.option("selectedItems") || [];
                        selectedIndex = this._editStrategy.getIndexByItemData(selectedItems[0]);
                        if (this.option("selectionRequired") && !indexExists(selectedIndex)) {
                            return this._syncSelectionOptions("selectedIndex")
                        }
                        this._setOptionWithoutOptionChange("selectedItem", selectedItems[0]);
                        this._setOptionWithoutOptionChange("selectedIndex", selectedIndex);
                        this._setOptionWithoutOptionChange("selectedItemKeys", this._editStrategy.getKeysByItems(selectedItems));
                        break;
                    case "selectedItem":
                        selectedItem = this.option("selectedItem");
                        selectedIndex = this._editStrategy.getIndexByItemData(selectedItem);
                        if (this.option("selectionRequired") && !indexExists(selectedIndex)) {
                            return this._syncSelectionOptions("selectedIndex")
                        }
                        if ((0, _type.isDefined)(selectedItem)) {
                            this._setOptionWithoutOptionChange("selectedItems", [selectedItem]);
                            this._setOptionWithoutOptionChange("selectedIndex", selectedIndex);
                            this._setOptionWithoutOptionChange("selectedItemKeys", this._editStrategy.getKeysByItems([selectedItem]))
                        } else {
                            this._setOptionWithoutOptionChange("selectedItems", []);
                            this._setOptionWithoutOptionChange("selectedItemKeys", []);
                            this._setOptionWithoutOptionChange("selectedIndex", NOT_EXISTING_INDEX)
                        }
                        break;
                    case "selectedItemKeys":
                        selectedItemKeys = this.option("selectedItemKeys");
                        if (this.option("selectionRequired")) {
                            var selectedItemIndex = this._getIndexByKey(selectedItemKeys[0]);
                            if (!indexExists(selectedItemIndex)) {
                                return this._syncSelectionOptions("selectedIndex")
                            }
                        }
                        return this._selection.setSelection(selectedItemKeys)
                }
                return (new _deferred.Deferred).resolve().promise()
            },
            _chooseSelectOption: function() {
                var optionName = "selectedIndex";
                var isOptionDefined = function(optionName) {
                    var optionValue = this.option(optionName);
                    var length = (0, _type.isDefined)(optionValue) && optionValue.length;
                    return length || optionName in this._userOptions
                }.bind(this);
                if (isOptionDefined("selectedItems")) {
                    optionName = "selectedItems"
                } else {
                    if (isOptionDefined("selectedItem")) {
                        optionName = "selectedItem"
                    } else {
                        if (isOptionDefined("selectedItemKeys")) {
                            optionName = "selectedItemKeys"
                        }
                    }
                }
                return optionName
            },
            _compareKeys: function(oldKeys, newKeys) {
                if (oldKeys.length !== newKeys.length) {
                    return false
                }
                for (var i = 0; i < newKeys.length; i++) {
                    if (oldKeys[i] !== newKeys[i]) {
                        return false
                    }
                }
                return true
            },
            _normalizeSelectedItems: function() {
                if ("none" === this.option("selectionMode")) {
                    this._setOptionWithoutOptionChange("selectedItems", []);
                    this._syncSelectionOptions("selectedItems")
                } else {
                    if ("single" === this.option("selectionMode")) {
                        var newSelection = this.option("selectedItems");
                        if (newSelection.length > 1 || !newSelection.length && this.option("selectionRequired") && this.option("items") && this.option("items").length) {
                            var currentSelection = this._selection.getSelectedItems();
                            var normalizedSelection = void 0 === newSelection[0] ? currentSelection[0] : newSelection[0];
                            if (void 0 === normalizedSelection) {
                                normalizedSelection = this._editStrategy.itemsGetter()[0]
                            }
                            if (this.option("grouped") && normalizedSelection && normalizedSelection.items) {
                                normalizedSelection.items = [normalizedSelection.items[0]]
                            }
                            this._selection.setSelection(this._getKeysByItems([normalizedSelection]));
                            this._setOptionWithoutOptionChange("selectedItems", [normalizedSelection]);
                            return this._syncSelectionOptions("selectedItems")
                        } else {
                            this._selection.setSelection(this._getKeysByItems(newSelection))
                        }
                    } else {
                        var newKeys = this._getKeysByItems(this.option("selectedItems"));
                        var oldKeys = this._selection.getSelectedItemKeys();
                        if (!this._compareKeys(oldKeys, newKeys)) {
                            this._selection.setSelection(newKeys)
                        }
                    }
                }
                return (new _deferred.Deferred).resolve().promise()
            },
            _itemClickHandler: function(e) {
                this._createAction(function(e) {
                    this._itemSelectHandler(e.event)
                }.bind(this), {
                    validatingTargetName: "itemElement"
                })({
                    itemElement: (0, _renderer2.default)(e.currentTarget),
                    event: e
                });
                this.callBase.apply(this, arguments)
            },
            _itemSelectHandler: function(e) {
                if (!this.option("selectionByClick")) {
                    return
                }
                var $itemElement = e.currentTarget;
                if (this.isItemSelected($itemElement)) {
                    this.unselectItem(e.currentTarget)
                } else {
                    this.selectItem(e.currentTarget)
                }
            },
            _selectedItemElement: function(index) {
                return this._itemElements().eq(index)
            },
            _postprocessRenderItem: function(args) {
                if ("none" !== this.option("selectionMode")) {
                    var $itemElement = (0, _renderer2.default)(args.itemElement);
                    var normalizedItemIndex = this._editStrategy.getNormalizedIndex($itemElement);
                    var isItemSelected = this._isItemSelected(normalizedItemIndex);
                    this._processSelectableItem($itemElement, isItemSelected)
                }
            },
            _processSelectableItem: function($itemElement, isSelected) {
                $itemElement.toggleClass(this._selectedItemClass(), isSelected);
                this._setAriaSelected($itemElement, String(isSelected))
            },
            _updateSelectedItems: function(args) {
                var that = this;
                var addedItemKeys = args.addedItemKeys;
                var removedItemKeys = args.removedItemKeys;
                if (that._rendered && (addedItemKeys.length || removedItemKeys.length)) {
                    var selectionChangePromise = that._selectionChangePromise;
                    if (!that._rendering) {
                        var addedSelection = [];
                        var normalizedIndex;
                        var removedSelection = [];
                        that._editStrategy.beginCache();
                        for (var i = 0; i < addedItemKeys.length; i++) {
                            normalizedIndex = that._getIndexByKey(addedItemKeys[i]);
                            addedSelection.push(normalizedIndex);
                            that._addSelection(normalizedIndex)
                        }
                        for (var _i = 0; _i < removedItemKeys.length; _i++) {
                            normalizedIndex = that._getIndexByKey(removedItemKeys[_i]);
                            removedSelection.push(normalizedIndex);
                            that._removeSelection(normalizedIndex)
                        }
                        that._editStrategy.endCache();
                        that._updateSelection(addedSelection, removedSelection)
                    }(0, _deferred.when)(selectionChangePromise).done(function() {
                        that._fireSelectionChangeEvent(args.addedItems, args.removedItems)
                    })
                }
            },
            _fireSelectionChangeEvent: function(addedItems, removedItems) {
                this._createActionByOption("onSelectionChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })({
                    addedItems: addedItems,
                    removedItems: removedItems
                })
            },
            _updateSelection: _common.noop,
            _setAriaSelected: function($target, value) {
                this.setAria("selected", value, $target)
            },
            _removeSelection: function(normalizedIndex) {
                var $itemElement = this._editStrategy.getItemElement(normalizedIndex);
                if (indexExists(normalizedIndex)) {
                    this._processSelectableItem($itemElement, false);
                    _events_engine2.default.triggerHandler($itemElement, "stateChanged", false)
                }
            },
            _showDeprecatedSelectionMode: function() {
                _ui2.default.log("W0001", this.NAME, "selectionMode: 'multi'", "16.1", "Use selectionMode: 'multiple' instead");
                this.option("selectionMode", "multiple")
            },
            _addSelection: function(normalizedIndex) {
                var $itemElement = this._editStrategy.getItemElement(normalizedIndex);
                if (indexExists(normalizedIndex)) {
                    this._processSelectableItem($itemElement, true);
                    _events_engine2.default.triggerHandler($itemElement, "stateChanged", true)
                }
            },
            _isItemSelected: function(index) {
                var key = this._getKeyByIndex(index);
                return this._selection.isItemSelected(key)
            },
            _optionChanged: function(args) {
                var _this2 = this;
                switch (args.name) {
                    case "selectionMode":
                        if ("multi" === args.value) {
                            this._showDeprecatedSelectionMode()
                        } else {
                            this._invalidate()
                        }
                        break;
                    case "dataSource":
                        if (!args.value || Array.isArray(args.value) && !args.value.length) {
                            this.option("selectedItemKeys", [])
                        }
                        this.callBase(args);
                        break;
                    case "selectedIndex":
                    case "selectedItem":
                    case "selectedItems":
                    case "selectedItemKeys":
                        this._syncSelectionOptions(args.name).done(function() {
                            return _this2._normalizeSelectedItems()
                        });
                        break;
                    case "keyExpr":
                        this._initKeyGetter();
                        break;
                    case "selectionRequired":
                        this._normalizeSelectedItems();
                        break;
                    case "selectionByClick":
                    case "onSelectionChanged":
                    case "onItemDeleting":
                    case "onItemDeleted":
                    case "onItemReordered":
                    case "maxFilterLengthInRequest":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clearSelectedItems: function() {
                this._setOptionWithoutOptionChange("selectedItems", []);
                this._syncSelectionOptions("selectedItems")
            },
            _waitDeletingPrepare: function($itemElement) {
                if ($itemElement.data(ITEM_DELETING_DATA_KEY)) {
                    return (new _deferred.Deferred).resolve().promise()
                }
                $itemElement.data(ITEM_DELETING_DATA_KEY, true);
                var deferred = new _deferred.Deferred;
                var deletingActionArgs = {
                    cancel: false
                };
                var deletePromise = this._itemEventHandler($itemElement, "onItemDeleting", deletingActionArgs, {
                    excludeValidators: ["disabled", "readOnly"]
                });
                (0, _deferred.when)(deletePromise).always(function(value) {
                    var deletePromiseExists = !deletePromise;
                    var deletePromiseResolved = !deletePromiseExists && "resolved" === deletePromise.state();
                    var argumentsSpecified = !!arguments.length;
                    var shouldDelete = deletePromiseExists || deletePromiseResolved && !argumentsSpecified || deletePromiseResolved && value;
                    (0, _deferred.when)((0, _deferred.fromPromise)(deletingActionArgs.cancel)).always(function() {
                        $itemElement.data(ITEM_DELETING_DATA_KEY, false)
                    }).done(function(cancel) {
                        shouldDelete && !cancel ? deferred.resolve() : deferred.reject()
                    }).fail(deferred.reject)
                }.bind(this));
                return deferred.promise()
            },
            _deleteItemFromDS: function($item) {
                if (!this._dataSource) {
                    return (new _deferred.Deferred).resolve().promise()
                }
                var deferred = new _deferred.Deferred;
                var disabledState = this.option("disabled");
                var dataStore = this._dataSource.store();
                this.option("disabled", true);
                if (!dataStore.remove) {
                    throw _ui2.default.Error("E1011")
                }
                dataStore.remove(dataStore.keyOf(this._getItemData($item))).done(function(key) {
                    if (void 0 !== key) {
                        deferred.resolve()
                    } else {
                        deferred.reject()
                    }
                }).fail(function() {
                    deferred.reject()
                });
                deferred.always(function() {
                    this.option("disabled", disabledState)
                }.bind(this));
                return deferred
            },
            _tryRefreshLastPage: function() {
                var deferred = new _deferred.Deferred;
                if (this._isLastPage() || this.option("grouped")) {
                    deferred.resolve()
                } else {
                    this._refreshLastPage().done(function() {
                        deferred.resolve()
                    })
                }
                return deferred.promise()
            },
            _refreshLastPage: function() {
                this._expectLastItemLoading();
                return this._dataSource.load()
            },
            _updateSelectionAfterDelete: function(index) {
                var key = this._getKeyByIndex(index);
                this._selection.deselect([key])
            },
            _updateIndicesAfterIndex: function(index) {
                var itemElements = this._itemElements();
                for (var i = index + 1; i < itemElements.length; i++) {
                    (0, _renderer2.default)(itemElements[i]).data(this._itemIndexKey(), i - 1)
                }
            },
            _simulateOptionChange: function(optionName) {
                var optionValue = this.option(optionName);
                if (optionValue instanceof _data_source.DataSource) {
                    return
                }
                this._optionChangedAction({
                    name: optionName,
                    fullName: optionName,
                    value: optionValue
                })
            },
            isItemSelected: function(itemElement) {
                return this._isItemSelected(this._editStrategy.getNormalizedIndex(itemElement))
            },
            selectItem: function(itemElement) {
                if ("none" === this.option("selectionMode")) {
                    return
                }
                var itemIndex = this._editStrategy.getNormalizedIndex(itemElement);
                if (!indexExists(itemIndex)) {
                    return
                }
                var key = this._getKeyByIndex(itemIndex);
                if (this._selection.isItemSelected(key)) {
                    return
                }
                if ("single" === this.option("selectionMode")) {
                    this._selection.setSelection([key])
                } else {
                    var selectedItemKeys = this.option("selectedItemKeys") || [];
                    this._selection.setSelection([].concat(_toConsumableArray(selectedItemKeys), [key]))
                }
            },
            unselectItem: function(itemElement) {
                var itemIndex = this._editStrategy.getNormalizedIndex(itemElement);
                if (!indexExists(itemIndex)) {
                    return
                }
                var selectedItemKeys = this._selection.getSelectedItemKeys();
                if (this.option("selectionRequired") && selectedItemKeys.length <= 1) {
                    return
                }
                var key = this._getKeyByIndex(itemIndex);
                if (!this._selection.isItemSelected(key)) {
                    return
                }
                this._selection.deselect([key])
            },
            _deleteItemElementByIndex: function(index) {
                this._updateSelectionAfterDelete(index);
                this._updateIndicesAfterIndex(index);
                this._editStrategy.deleteItemAtIndex(index)
            },
            _afterItemElementDeleted: function($item, deletedActionArgs) {
                var changingOption = this._dataSource ? "dataSource" : "items";
                this._simulateOptionChange(changingOption);
                this._itemEventHandler($item, "onItemDeleted", deletedActionArgs, {
                    beforeExecute: function() {
                        $item.remove()
                    },
                    excludeValidators: ["disabled", "readOnly"]
                });
                this._renderEmptyMessage()
            },
            deleteItem: function(itemElement) {
                var that = this;
                var deferred = new _deferred.Deferred;
                var $item = this._editStrategy.getItemElement(itemElement);
                var index = this._editStrategy.getNormalizedIndex(itemElement);
                var itemResponseWaitClass = this._itemResponseWaitClass();
                if (indexExists(index)) {
                    this._waitDeletingPrepare($item).done(function() {
                        $item.addClass(itemResponseWaitClass);
                        var deletedActionArgs = that._extendActionArgs($item);
                        that._deleteItemFromDS($item).done(function() {
                            that._deleteItemElementByIndex(index);
                            that._afterItemElementDeleted($item, deletedActionArgs);
                            that._tryRefreshLastPage().done(function() {
                                deferred.resolveWith(that)
                            })
                        }).fail(function() {
                            $item.removeClass(itemResponseWaitClass);
                            deferred.rejectWith(that)
                        })
                    }).fail(function() {
                        deferred.rejectWith(that)
                    })
                } else {
                    deferred.rejectWith(that)
                }
                return deferred.promise()
            },
            reorderItem: function(itemElement, toItemElement) {
                var deferred = new _deferred.Deferred;
                var that = this;
                var strategy = this._editStrategy;
                var $movingItem = strategy.getItemElement(itemElement);
                var $destinationItem = strategy.getItemElement(toItemElement);
                var movingIndex = strategy.getNormalizedIndex(itemElement);
                var destinationIndex = strategy.getNormalizedIndex(toItemElement);
                var changingOption = this._dataSource ? "dataSource" : "items";
                var canMoveItems = indexExists(movingIndex) && indexExists(destinationIndex) && movingIndex !== destinationIndex;
                if (canMoveItems) {
                    deferred.resolveWith(this)
                } else {
                    deferred.rejectWith(this)
                }
                return deferred.promise().done(function() {
                    $destinationItem[strategy.itemPlacementFunc(movingIndex, destinationIndex)]($movingItem);
                    strategy.moveItemAtIndexToIndex(movingIndex, destinationIndex);
                    this._updateIndicesAfterIndex(movingIndex);
                    that.option("selectedItems", that._getItemsByKeys(that._selection.getSelectedItemKeys(), that._selection.getSelectedItems()));
                    if ("items" === changingOption) {
                        that._simulateOptionChange(changingOption)
                    }
                    that._itemEventHandler($movingItem, "onItemReordered", {
                        fromIndex: strategy.getIndex(movingIndex),
                        toIndex: strategy.getIndex(destinationIndex)
                    }, {
                        excludeValidators: ["disabled", "readOnly"]
                    })
                })
            }
        });
        module.exports = CollectionWidget
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/icon.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ICON_CLASS = "dx-icon";
        var SVG_ICON_CLASS = "dx-svg-icon";
        var getImageSourceType = function(source) {
            if (!source || "string" !== typeof source) {
                return false
            }
            if (/^\s*<svg[^>]*>(.|\r\n|\r|\n)*?<\/svg>\s*$/i.test(source)) {
                return "svg"
            }
            if (/data:.*base64|\.|[^<\s]\//.test(source)) {
                return "image"
            }
            if (/^[\w-_]+$/.test(source)) {
                return "dxIcon"
            }
            if (/^\s?([\w-_]\s?)+$/.test(source)) {
                return "fontIcon"
            }
            return false
        };
        var getImageContainer = function(source) {
            switch (getImageSourceType(source)) {
                case "image":
                    return (0, _renderer2.default)("<img>").attr("src", source).addClass(ICON_CLASS);
                case "fontIcon":
                    return (0, _renderer2.default)("<i>").addClass("".concat(ICON_CLASS, " ").concat(source));
                case "dxIcon":
                    return (0, _renderer2.default)("<i>").addClass("".concat(ICON_CLASS, " ").concat(ICON_CLASS, "-").concat(source));
                case "svg":
                    return (0, _renderer2.default)("<i>").addClass("".concat(ICON_CLASS, " ").concat(SVG_ICON_CLASS)).append(source);
                default:
                    return null
            }
        };
        exports.getImageSourceType = getImageSourceType;
        exports.getImageContainer = getImageContainer
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/date_serialization.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var config = __webpack_require__( /*! ../config */ 30);
        var getLDMLFormatter = __webpack_require__( /*! ../../localization/ldml/date.formatter */ 273).getFormatter;
        var defaultDateNames = __webpack_require__( /*! ../../localization/default_date_names */ 274);
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var isString = typeUtils.isString;
        var isDate = typeUtils.isDate;
        var isNumber = typeUtils.isNumeric;
        var NUMBER_SERIALIZATION_FORMAT = "number";
        var DATE_SERIALIZATION_FORMAT = "yyyy/MM/dd";
        var DATETIME_SERIALIZATION_FORMAT = "yyyy/MM/dd HH:mm:ss";
        var ISO8601_PATTERN = /^(\d{4,})(-)?(\d{2})(-)?(\d{2})(?:T(\d{2})(:)?(\d{2})?(:)?(\d{2}(?:\.(\d{1,3})\d*)?)?)?(Z|([+-])(\d{2})(:)?(\d{2})?)?$/;
        var ISO8601_TIME_PATTERN = /^(\d{2}):(\d{2})(:(\d{2}))?$/;
        var ISO8601_PATTERN_PARTS = ["", "yyyy", "", "MM", "", "dd", "THH", "", "mm", "", "ss", ".SSS"];
        var MILLISECOND_LENGHT = 3;
        var dateParser = function(text, skipISO8601Parsing) {
            var result;
            var parsedValue;
            if (isString(text) && !skipISO8601Parsing) {
                result = parseISO8601String(text)
            }
            if (!result) {
                parsedValue = !isDate(text) && Date.parse(text);
                result = isNumber(parsedValue) ? new Date(parsedValue) : text
            }
            return result
        };

        function parseISO8601String(text) {
            var parts = text.match(ISO8601_PATTERN);
            var timePart = function(part) {
                return +part || 0
            };
            if (!parts) {
                parts = text.match(ISO8601_TIME_PATTERN);
                if (parts) {
                    return new Date(0, 0, 0, timePart(parts[1]), timePart(parts[2]), timePart(parts[4]))
                }
                return
            }
            var year = parts[1];
            var month = --parts[3];
            var day = parts[5];
            var timeZoneHour = 0;
            var timeZoneMinute = 0;
            timeZoneHour = timePart(parts[14]);
            timeZoneMinute = timePart(parts[16]);
            if ("-" === parts[13]) {
                timeZoneHour = -timeZoneHour;
                timeZoneMinute = -timeZoneMinute
            }
            var hour = timePart(parts[6]) - timeZoneHour;
            var minute = timePart(parts[8]) - timeZoneMinute;
            var second = timePart(parts[10]);
            var parseMilliseconds = function(part) {
                part = part || "";
                return timePart(part) * Math.pow(10, MILLISECOND_LENGHT - part.length)
            };
            var millisecond = parseMilliseconds(parts[11]);
            if (parts[12]) {
                return new Date(Date.UTC(year, month, day, hour, minute, second, millisecond))
            }
            return new Date(year, month, day, hour, minute, second, millisecond)
        }
        var getIso8601Format = function(text, useUtc) {
            var parts = text.match(ISO8601_PATTERN);
            var result = "";
            if (!parts) {
                parts = text.match(ISO8601_TIME_PATTERN);
                if (parts) {
                    return parts[3] ? "HH:mm:ss" : "HH:mm"
                }
                return
            }
            for (var i = 1; i < ISO8601_PATTERN_PARTS.length; i++) {
                if (parts[i]) {
                    result += ISO8601_PATTERN_PARTS[i] || parts[i]
                }
            }
            if ("Z" === parts[12]) {
                result += "'Z'"
            }
            if (parts[14]) {
                if (parts[15]) {
                    result += "xxx"
                } else {
                    if (parts[16]) {
                        result += "xx"
                    } else {
                        result += "x"
                    }
                }
            }
            return result
        };
        var deserializeDate = function(value) {
            if ("number" === typeof value) {
                return new Date(value)
            }
            return dateParser(value, !config().forceIsoDateParsing)
        };
        var serializeDate = function(value, serializationFormat) {
            if (!serializationFormat) {
                return value
            }
            if (!isDate(value)) {
                return null
            }
            if (serializationFormat === NUMBER_SERIALIZATION_FORMAT) {
                return value && value.valueOf ? value.valueOf() : null
            }
            return getLDMLFormatter(serializationFormat, defaultDateNames)(value)
        };
        var getDateSerializationFormat = function(value) {
            if ("number" === typeof value) {
                return NUMBER_SERIALIZATION_FORMAT
            } else {
                if (isString(value)) {
                    var format;
                    if (config().forceIsoDateParsing) {
                        format = getIso8601Format(value)
                    }
                    if (format) {
                        return format
                    } else {
                        if (value.indexOf(":") >= 0) {
                            return DATETIME_SERIALIZATION_FORMAT
                        } else {
                            return DATE_SERIALIZATION_FORMAT
                        }
                    }
                } else {
                    if (value) {
                        return null
                    }
                }
            }
        };
        module.exports = {
            dateParser: dateParser,
            deserializeDate: deserializeDate,
            serializeDate: serializeDate,
            getDateSerializationFormat: getDateSerializationFormat
        }
    },
    /*!*******************************!*\
      !*** external "window.Quill" ***!
      \*******************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.Quill
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/dependency_injector.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = function(object) {
            var extend = __webpack_require__( /*! ./extend */ 0).extend;
            var isFunction = __webpack_require__( /*! ./type */ 1).isFunction;
            var each = __webpack_require__( /*! ./iterator */ 4).each;
            var Class = __webpack_require__( /*! ../class */ 16);
            var BaseClass = Class.inherit(object);
            var InjectedClass = BaseClass;
            var instance = new InjectedClass(object);
            var initialFields = {};
            var injectFields = function(injectionObject, initial) {
                each(injectionObject, function(key) {
                    if (isFunction(instance[key])) {
                        if (initial || !object[key]) {
                            object[key] = function() {
                                return instance[key].apply(object, arguments)
                            }
                        }
                    } else {
                        if (initial) {
                            initialFields[key] = object[key]
                        }
                        object[key] = instance[key]
                    }
                })
            };
            injectFields(object, true);
            object.inject = function(injectionObject) {
                InjectedClass = InjectedClass.inherit(injectionObject);
                instance = new InjectedClass;
                injectFields(injectionObject)
            };
            object.resetInjection = function() {
                extend(object, initialFields);
                InjectedClass = BaseClass;
                instance = new BaseClass
            };
            return object
        }
    },
    /*!********************************!*\
      !*** external "window.jQuery" ***!
      \********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.jQuery
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/overlay.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./overlay/ui.overlay */ 301)
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/bindable_template.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.BindableTemplate = void 0;
        var _renderer = __webpack_require__( /*! ../renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _template_base = __webpack_require__( /*! ./template_base */ 78);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _remove_event = __webpack_require__( /*! ../remove_event */ 140);
        var _remove_event2 = _interopRequireDefault(_remove_event);
        var _type = __webpack_require__( /*! ../utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var watchChanges = function() {
            var globalWatch = function(data, watchMethod, callback) {
                return watchMethod(function() {
                    return data
                }, callback)
            };
            var fieldsWatch = function(data, watchMethod, fields, fieldsMap, callback) {
                var resolvedData = {};
                var missedFields = fields.slice();
                var watchHandlers = fields.map(function(name) {
                    var fieldGetter = fieldsMap[name];
                    return watchMethod(fieldGetter ? function() {
                        return fieldGetter(data)
                    } : function() {
                        return data[name]
                    }, function(value) {
                        resolvedData[name] = value;
                        if (missedFields.length) {
                            var index = missedFields.indexOf(name);
                            if (index >= 0) {
                                missedFields.splice(index, 1)
                            }
                        }
                        if (!missedFields.length) {
                            callback(resolvedData)
                        }
                    })
                });
                return function() {
                    watchHandlers.forEach(function(dispose) {
                        return dispose()
                    })
                }
            };
            return function(rawData, watchMethod, fields, fieldsMap, callback) {
                var fieldsDispose;
                var globalDispose = globalWatch(rawData, watchMethod, function(dataWithRawFields) {
                    fieldsDispose && fieldsDispose();
                    if ((0, _type.isPrimitive)(dataWithRawFields)) {
                        callback(dataWithRawFields);
                        return
                    }
                    fieldsDispose = fieldsWatch(dataWithRawFields, watchMethod, fields, fieldsMap, callback)
                });
                return function() {
                    fieldsDispose && fieldsDispose();
                    globalDispose && globalDispose()
                }
            }
        }();
        exports.BindableTemplate = function(_TemplateBase) {
            _inherits(BindableTemplate, _TemplateBase);
            var _super = _createSuper(BindableTemplate);

            function BindableTemplate(render, fields, watchMethod, fieldsMap) {
                var _this;
                _classCallCheck(this, BindableTemplate);
                _this = _super.call(this);
                _this._render = render;
                _this._fields = fields;
                _this._fieldsMap = fieldsMap || {};
                _this._watchMethod = watchMethod;
                return _this
            }
            _createClass(BindableTemplate, [{
                key: "_renderCore",
                value: function(options) {
                    var _this2 = this;
                    var $container = (0, _renderer2.default)(options.container);
                    var dispose = watchChanges(options.model, this._watchMethod, this._fields, this._fieldsMap, function(data) {
                        $container.empty();
                        _this2._render($container, data, options.model)
                    });
                    (0, _events_engine.on)($container, _remove_event2.default, dispose);
                    return $container.contents()
                }
            }]);
            return BindableTemplate
        }(_template_base.TemplateBase)
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/version.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        exports.compare = function(x, y, maxLevel) {
            function normalizeArg(value) {
                if ("string" === typeof value) {
                    return value.split(".")
                }
                if ("number" === typeof value) {
                    return [value]
                }
                return value
            }
            x = normalizeArg(x);
            y = normalizeArg(y);
            var length = Math.max(x.length, y.length);
            if (isFinite(maxLevel)) {
                length = Math.min(length, maxLevel)
            }
            for (var i = 0; i < length; i++) {
                var xItem = parseInt(x[i] || 0, 10);
                var yItem = parseInt(y[i] || 0, 10);
                if (xItem < yItem) {
                    return -1
                }
                if (xItem > yItem) {
                    return 1
                }
            }
            return 0
        }
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/data/data_source/data_source.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.DataSource = void 0;
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _utils = __webpack_require__( /*! ../utils */ 42);
        var _array_utils = __webpack_require__( /*! ../array_utils */ 142);
        var _array_utils2 = _interopRequireDefault(_array_utils);
        var _custom_store = __webpack_require__( /*! ../custom_store */ 118);
        var _custom_store2 = _interopRequireDefault(_custom_store);
        var _events_strategy = __webpack_require__( /*! ../../core/events_strategy */ 100);
        var _errors = __webpack_require__( /*! ../errors */ 38);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _queue = __webpack_require__( /*! ../../core/utils/queue */ 280);
        var _queue2 = _interopRequireDefault(_queue);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _operation_manager = __webpack_require__( /*! ./operation_manager */ 496);
        var _operation_manager2 = _interopRequireDefault(_operation_manager);
        var _utils2 = __webpack_require__( /*! ./utils */ 64);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.DataSource = _class2.default.inherit({
            ctor: function(options) {
                var _options$reshapeOnPus, _this = this;
                options = (0, _utils2.normalizeDataSourceOptions)(options);
                this._eventsStrategy = new _events_strategy.EventsStrategy(this);
                var onPushHandler = 0 !== options.pushAggregationTimeout ? (0, _utils.throttleChanges)(this._onPush, function() {
                    return void 0 === options.pushAggregationTimeout ? 5 * _this._changedTime : options.pushAggregationTimeout
                }) : this._onPush;
                this._changedTime = 0;
                this._onPushHandler = function(changes) {
                    _this._aggregationTimeoutId = onPushHandler.call(_this, changes)
                };
                this._store = options.store;
                this._store.on("push", this._onPushHandler);
                this._storeLoadOptions = this._extractLoadOptions(options);
                this._mapFunc = options.map;
                this._postProcessFunc = options.postProcess;
                this._pageIndex = void 0 !== options.pageIndex ? options.pageIndex : 0;
                this._pageSize = void 0 !== options.pageSize ? options.pageSize : 20;
                this._loadingCount = 0;
                this._loadQueue = this._createLoadQueue();
                this._searchValue = "searchValue" in options ? options.searchValue : null;
                this._searchOperation = options.searchOperation || "contains";
                this._searchExpr = options.searchExpr;
                this._paginate = options.paginate;
                this._reshapeOnPush = null !== (_options$reshapeOnPus = options.reshapeOnPush) && void 0 !== _options$reshapeOnPus ? _options$reshapeOnPus : false;
                (0, _iterator.each)(["onChanged", "onLoadError", "onLoadingChanged", "onCustomizeLoadResult", "onCustomizeStoreLoadOptions"], function(_, optionName) {
                    if (optionName in options) {
                        _this.on(optionName.substr(2, 1).toLowerCase() + optionName.substr(3), options[optionName])
                    }
                });
                this._operationManager = new _operation_manager2.default;
                this._init()
            },
            _init: function() {
                this._items = [];
                this._userData = {};
                this._totalCount = -1;
                this._isLoaded = false;
                if (!(0, _type.isDefined)(this._paginate)) {
                    this._paginate = !this.group()
                }
                this._isLastPage = !this._paginate
            },
            dispose: function() {
                var _this$_delayedLoadTas;
                this._store.off("push", this._onPushHandler);
                this._eventsStrategy.dispose();
                clearTimeout(this._aggregationTimeoutId);
                delete this._store;
                null === (_this$_delayedLoadTas = this._delayedLoadTask) || void 0 === _this$_delayedLoadTas ? void 0 : _this$_delayedLoadTas.abort();
                this._operationManager.cancelAll();
                this._disposed = true
            },
            _extractLoadOptions: function(options) {
                var result = {};
                var names = ["sort", "filter", "select", "group", "requireTotalCount"];
                var customNames = this._store._customLoadOptions();
                if (customNames) {
                    names = names.concat(customNames)
                }(0, _iterator.each)(names, function() {
                    result[this] = options[this]
                });
                return result
            },
            loadOptions: function() {
                return this._storeLoadOptions
            },
            items: function() {
                return this._items
            },
            pageIndex: function(newIndex) {
                if (!(0, _type.isNumeric)(newIndex)) {
                    return this._pageIndex
                }
                this._pageIndex = newIndex;
                this._isLastPage = !this._paginate
            },
            paginate: function(value) {
                if (!(0, _type.isBoolean)(value)) {
                    return this._paginate
                }
                if (this._paginate !== value) {
                    this._paginate = value;
                    this.pageIndex(0)
                }
            },
            pageSize: function(value) {
                if (!(0, _type.isNumeric)(value)) {
                    return this._pageSize
                }
                this._pageSize = value
            },
            isLastPage: function() {
                return this._isLastPage
            },
            generateStoreLoadOptionAccessor: function(optionName) {
                var _this2 = this;
                return function(args) {
                    var normalizedArgs = (0, _utils2.normalizeStoreLoadOptionAccessorArguments)(args);
                    if (void 0 === normalizedArgs) {
                        return _this2._storeLoadOptions[optionName]
                    }
                    _this2._storeLoadOptions[optionName] = normalizedArgs
                }
            },
            sort: function() {
                for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                    args[_key] = arguments[_key]
                }
                return this.generateStoreLoadOptionAccessor("sort")(args)
            },
            filter: function() {
                var newFilter = (0, _utils2.normalizeStoreLoadOptionAccessorArguments)(arguments);
                if (void 0 === newFilter) {
                    return this._storeLoadOptions.filter
                }
                this._storeLoadOptions.filter = newFilter;
                this.pageIndex(0)
            },
            group: function() {
                for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
                    args[_key2] = arguments[_key2]
                }
                return this.generateStoreLoadOptionAccessor("group")(args)
            },
            select: function() {
                for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
                    args[_key3] = arguments[_key3]
                }
                return this.generateStoreLoadOptionAccessor("select")(args)
            },
            requireTotalCount: function(value) {
                if (!(0, _type.isBoolean)(value)) {
                    return this._storeLoadOptions.requireTotalCount
                }
                this._storeLoadOptions.requireTotalCount = value
            },
            searchValue: function(value) {
                if (arguments.length < 1) {
                    return this._searchValue
                }
                this._searchValue = value;
                this.pageIndex(0)
            },
            searchOperation: function(op) {
                if (!(0, _type.isString)(op)) {
                    return this._searchOperation
                }
                this._searchOperation = op;
                this.pageIndex(0)
            },
            searchExpr: function(expr) {
                var argc = arguments.length;
                if (0 === argc) {
                    return this._searchExpr
                }
                if (argc > 1) {
                    expr = [].slice.call(arguments)
                }
                this._searchExpr = expr;
                this.pageIndex(0)
            },
            store: function() {
                return this._store
            },
            key: function() {
                var _this$_store;
                return null === (_this$_store = this._store) || void 0 === _this$_store ? void 0 : _this$_store.key()
            },
            totalCount: function() {
                return this._totalCount
            },
            isLoaded: function() {
                return this._isLoaded
            },
            isLoading: function() {
                return this._loadingCount > 0
            },
            beginLoading: function() {
                this._changeLoadingCount(1)
            },
            endLoading: function() {
                this._changeLoadingCount(-1)
            },
            _createLoadQueue: function() {
                return _queue2.default.create()
            },
            _changeLoadingCount: function(increment) {
                var oldLoading = this.isLoading();
                this._loadingCount += increment;
                var newLoading = this.isLoading();
                if (oldLoading ^ newLoading) {
                    this._eventsStrategy.fireEvent("loadingChanged", [newLoading])
                }
            },
            _scheduleLoadCallbacks: function(deferred) {
                var _this3 = this;
                this.beginLoading();
                deferred.always(function() {
                    _this3.endLoading()
                })
            },
            _scheduleFailCallbacks: function(deferred) {
                var _this4 = this;
                deferred.fail(function() {
                    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
                        args[_key4] = arguments[_key4]
                    }
                    if (args[0] === _utils2.CANCELED_TOKEN) {
                        return
                    }
                    _this4._eventsStrategy.fireEvent("loadError", args)
                })
            },
            _fireChanged: function(args) {
                var date = new Date;
                this._eventsStrategy.fireEvent("changed", args);
                this._changedTime = new Date - date
            },
            _scheduleChangedCallbacks: function(deferred) {
                var _this5 = this;
                deferred.done(function() {
                    return _this5._fireChanged()
                })
            },
            loadSingle: function(propName, propValue) {
                var _this6 = this;
                var d = new _deferred.Deferred;
                var key = this.key();
                var store = this._store;
                var options = this._createStoreLoadOptions();
                var handleDone = function(data) {
                    if (!(0, _type.isDefined)(data) || _array2.default.isEmpty(data)) {
                        d.reject(new _errors.errors.Error("E4009"))
                    } else {
                        if (!Array.isArray(data)) {
                            data = [data]
                        }
                        d.resolve(_this6._applyMapFunction(data)[0])
                    }
                };
                this._scheduleFailCallbacks(d);
                if (arguments.length < 2) {
                    propValue = propName;
                    propName = key
                }
                delete options.skip;
                delete options.group;
                delete options.refresh;
                delete options.pageIndex;
                delete options.searchString;
                var shouldForceByKey = function() {
                    return store instanceof _custom_store2.default && !store._byKeyViaLoad()
                };
                (function() {
                    if (propName === key || shouldForceByKey()) {
                        return store.byKey(propValue, options)
                    }
                    options.take = 1;
                    options.filter = options.filter ? [options.filter, [propName, propValue]] : [propName, propValue];
                    return store.load(options)
                })().fail(d.reject).done(handleDone);
                return d.promise()
            },
            load: function() {
                var _this7 = this;
                var d = new _deferred.Deferred;
                var loadTask = function() {
                    if (_this7._disposed) {
                        return
                    }
                    if (!(0, _utils2.isPending)(d)) {
                        return
                    }
                    return _this7._loadFromStore(loadOperation, d)
                };
                this._scheduleLoadCallbacks(d);
                this._scheduleFailCallbacks(d);
                this._scheduleChangedCallbacks(d);
                var loadOperation = this._createLoadOperation(d);
                this._eventsStrategy.fireEvent("customizeStoreLoadOptions", [loadOperation]);
                this._loadQueue.add(function() {
                    if ("number" === typeof loadOperation.delay) {
                        _this7._delayedLoadTask = _common2.default.executeAsync(loadTask, loadOperation.delay)
                    } else {
                        loadTask()
                    }
                    return d.promise()
                });
                return d.promise({
                    operationId: loadOperation.operationId
                })
            },
            _onPush: function(changes) {
                var _this8 = this;
                if (this._reshapeOnPush) {
                    this.load()
                } else {
                    this._eventsStrategy.fireEvent("changing", [{
                        changes: changes
                    }]);
                    var group = this.group();
                    var items = this.items();
                    var groupLevel = 0;
                    var dataSourceChanges = this.paginate() || group ? changes.filter(function(item) {
                        return "update" === item.type
                    }) : changes;
                    if (group) {
                        groupLevel = Array.isArray(group) ? group.length : 1
                    }
                    if (this._mapFunc) {
                        dataSourceChanges.forEach(function(item) {
                            if ("insert" === item.type) {
                                item.data = _this8._mapFunc(item.data)
                            }
                        })
                    }
                    _array_utils2.default.applyBatch(this.store(), items, dataSourceChanges, groupLevel, true);
                    this._fireChanged([{
                        changes: changes
                    }])
                }
            },
            _createLoadOperation: function(deferred) {
                var _this9 = this;
                var operationId = this._operationManager.add(deferred);
                var storeLoadOptions = this._createStoreLoadOptions();
                deferred.always(function() {
                    return _this9._operationManager.remove(operationId)
                });
                return {
                    operationId: operationId,
                    storeLoadOptions: storeLoadOptions
                }
            },
            reload: function() {
                var store = this.store();
                if (store instanceof _custom_store2.default) {
                    store.clearRawDataCache()
                }
                this._init();
                return this.load()
            },
            cancel: function(operationId) {
                return this._operationManager.cancel(operationId)
            },
            cancelAll: function() {
                return this._operationManager.cancelAll()
            },
            _addSearchOptions: function(storeLoadOptions) {
                if (this._disposed) {
                    return
                }
                if (this.store()._useDefaultSearch) {
                    this._addSearchFilter(storeLoadOptions)
                } else {
                    storeLoadOptions.searchOperation = this._searchOperation;
                    storeLoadOptions.searchValue = this._searchValue;
                    storeLoadOptions.searchExpr = this._searchExpr
                }
            },
            _createStoreLoadOptions: function() {
                var result = (0, _extend.extend)({}, this._storeLoadOptions);
                this._addSearchOptions(result);
                if (this._paginate) {
                    if (this._pageSize) {
                        result.skip = this._pageIndex * this._pageSize;
                        result.take = this._pageSize
                    }
                }
                result.userData = this._userData;
                return result
            },
            _addSearchFilter: function(storeLoadOptions) {
                var value = this._searchValue;
                var op = this._searchOperation;
                var selector = this._searchExpr;
                var searchFilter = [];
                if (!value) {
                    return
                }
                if (!selector) {
                    selector = "this"
                }
                if (!Array.isArray(selector)) {
                    selector = [selector]
                }(0, _iterator.each)(selector, function(i, item) {
                    if (searchFilter.length) {
                        searchFilter.push("or")
                    }
                    searchFilter.push([item, op, value])
                });
                if (storeLoadOptions.filter) {
                    storeLoadOptions.filter = [searchFilter, storeLoadOptions.filter]
                } else {
                    storeLoadOptions.filter = searchFilter
                }
            },
            _loadFromStore: function(loadOptions, pendingDeferred) {
                var _this10 = this;
                var handleSuccess = function(data, extra) {
                    if (_this10._disposed) {
                        return
                    }
                    if (!(0, _utils2.isPending)(pendingDeferred)) {
                        return
                    }
                    var loadResult = (0, _extend.extend)((0, _utils2.normalizeLoadResult)(data, extra), loadOptions);
                    _this10._eventsStrategy.fireEvent("customizeLoadResult", [loadResult]);
                    (0, _deferred.when)(loadResult.data).done(function(data) {
                        loadResult.data = data;
                        _this10._processStoreLoadResult(loadResult, pendingDeferred)
                    }).fail(pendingDeferred.reject)
                };
                if (loadOptions.data) {
                    return (new _deferred.Deferred).resolve(loadOptions.data).done(handleSuccess)
                }
                return this.store().load(loadOptions.storeLoadOptions).done(handleSuccess).fail(pendingDeferred.reject)
            },
            _processStoreLoadResult: function(loadResult, pendingDeferred) {
                var _this11 = this;
                var data = loadResult.data;
                var extra = loadResult.extra;
                var storeLoadOptions = loadResult.storeLoadOptions;
                var resolvePendingDeferred = function() {
                    _this11._isLoaded = true;
                    _this11._totalCount = isFinite(extra.totalCount) ? extra.totalCount : -1;
                    return pendingDeferred.resolve(data, extra)
                };
                var proceedLoadingTotalCount = function() {
                    _this11.store().totalCount(storeLoadOptions).done(function(count) {
                        extra.totalCount = count;
                        resolvePendingDeferred()
                    }).fail(pendingDeferred.reject)
                };
                if (this._disposed) {
                    return
                }
                data = this._applyPostProcessFunction(this._applyMapFunction(data));
                if (!(0, _type.isPlainObject)(extra)) {
                    extra = {}
                }
                this._items = data;
                if (!data.length || !this._paginate || this._pageSize && data.length < this._pageSize) {
                    this._isLastPage = true
                }
                if (storeLoadOptions.requireTotalCount && !isFinite(extra.totalCount)) {
                    proceedLoadingTotalCount()
                } else {
                    resolvePendingDeferred()
                }
            },
            _applyMapFunction: function(data) {
                if (this._mapFunc) {
                    return (0, _utils2.mapDataRespectingGrouping)(data, this._mapFunc, this.group())
                }
                return data
            },
            _applyPostProcessFunction: function(data) {
                if (this._postProcessFunc) {
                    return this._postProcessFunc(data)
                }
                return data
            },
            on: function(eventName, eventHandler) {
                this._eventsStrategy.on(eventName, eventHandler);
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            }
        })
    },
    /*!****************************!*\
      !*** external "window.ko" ***!
      \****************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.ko
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/format_helper.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./core/utils/type */ 1);
        var dateUtils = __webpack_require__( /*! ./core/utils/date */ 24);
        var numberLocalization = __webpack_require__( /*! ./localization/number */ 49);
        var dateLocalization = __webpack_require__( /*! ./localization/date */ 35);
        var dependencyInjector = __webpack_require__( /*! ./core/utils/dependency_injector */ 56);
        __webpack_require__( /*! ./localization/currency */ 131);
        module.exports = dependencyInjector({
            format: function(value, _format) {
                var formatIsValid = typeUtils.isString(_format) && "" !== _format || typeUtils.isPlainObject(_format) || typeUtils.isFunction(_format);
                var valueIsValid = typeUtils.isNumeric(value) || typeUtils.isDate(value);
                if (!formatIsValid || !valueIsValid) {
                    return typeUtils.isDefined(value) ? value.toString() : ""
                }
                if (typeUtils.isFunction(_format)) {
                    return _format(value)
                }
                if (typeUtils.isString(_format)) {
                    _format = {
                        type: _format
                    }
                }
                if (typeUtils.isNumeric(value)) {
                    return numberLocalization.format(value, _format)
                }
                if (typeUtils.isDate(value)) {
                    return dateLocalization.format(value, _format)
                }
            },
            getTimeFormat: function(showSecond) {
                return showSecond ? "longtime" : "shorttime"
            },
            _normalizeFormat: function(format) {
                if (!Array.isArray(format)) {
                    return format
                }
                if (1 === format.length) {
                    return format[0]
                }
                return function(date) {
                    return format.map(function(formatPart) {
                        return dateLocalization.format(date, formatPart)
                    }).join(" ")
                }
            },
            getDateFormatByDifferences: function(dateDifferences, intervalFormat) {
                var resultFormat = [];
                var needSpecialSecondFormatter = intervalFormat && dateDifferences.millisecond && !(dateDifferences.year || dateDifferences.month || dateDifferences.day);
                if (needSpecialSecondFormatter) {
                    var secondFormatter = function(date) {
                        return date.getSeconds() + date.getMilliseconds() / 1e3 + "s"
                    };
                    resultFormat.push(secondFormatter)
                } else {
                    if (dateDifferences.millisecond) {
                        resultFormat.push("millisecond")
                    }
                }
                if (dateDifferences.hour || dateDifferences.minute || !needSpecialSecondFormatter && dateDifferences.second) {
                    resultFormat.unshift(this.getTimeFormat(dateDifferences.second))
                }
                if (dateDifferences.year && dateDifferences.month && dateDifferences.day) {
                    if (intervalFormat && "month" === intervalFormat) {
                        return "monthandyear"
                    } else {
                        resultFormat.unshift("shortdate");
                        return this._normalizeFormat(resultFormat)
                    }
                }
                if (dateDifferences.year && dateDifferences.month) {
                    return "monthandyear"
                }
                if (dateDifferences.year && dateDifferences.quarter) {
                    return "quarterandyear"
                }
                if (dateDifferences.year) {
                    return "year"
                }
                if (dateDifferences.quarter) {
                    return "quarter"
                }
                if (dateDifferences.month && dateDifferences.day) {
                    if (intervalFormat) {
                        var monthDayFormatter = function(date) {
                            return dateLocalization.getMonthNames("abbreviated")[date.getMonth()] + " " + dateLocalization.format(date, "day")
                        };
                        resultFormat.unshift(monthDayFormatter)
                    } else {
                        resultFormat.unshift("monthandday")
                    }
                    return this._normalizeFormat(resultFormat)
                }
                if (dateDifferences.month) {
                    return "month"
                }
                if (dateDifferences.day) {
                    if (intervalFormat) {
                        resultFormat.unshift("day")
                    } else {
                        var dayFormatter = function(date) {
                            return dateLocalization.format(date, "dayofweek") + ", " + dateLocalization.format(date, "day")
                        };
                        resultFormat.unshift(dayFormatter)
                    }
                    return this._normalizeFormat(resultFormat)
                }
                return this._normalizeFormat(resultFormat)
            },
            getDateFormatByTicks: function(ticks) {
                var maxDiff;
                var currentDiff;
                var i;
                if (ticks.length > 1) {
                    maxDiff = dateUtils.getDatesDifferences(ticks[0], ticks[1]);
                    for (i = 1; i < ticks.length - 1; i++) {
                        currentDiff = dateUtils.getDatesDifferences(ticks[i], ticks[i + 1]);
                        if (maxDiff.count < currentDiff.count) {
                            maxDiff = currentDiff
                        }
                    }
                } else {
                    maxDiff = {
                        year: true,
                        month: true,
                        day: true,
                        hour: ticks[0].getHours() > 0,
                        minute: ticks[0].getMinutes() > 0,
                        second: ticks[0].getSeconds() > 0,
                        millisecond: ticks[0].getMilliseconds() > 0
                    }
                }
                var resultFormat = this.getDateFormatByDifferences(maxDiff);
                return resultFormat
            },
            getDateFormatByTickInterval: function(startValue, endValue, tickInterval) {
                var dateUnitInterval;
                var dateDifferencesConverter = {
                    week: "day"
                };
                var correctDateDifferences = function(dateDifferences, tickInterval, value) {
                    switch (tickInterval) {
                        case "year":
                        case "quarter":
                            dateDifferences.month = value;
                        case "month":
                            dateDifferences.day = value;
                        case "week":
                        case "day":
                            dateDifferences.hour = value;
                        case "hour":
                            dateDifferences.minute = value;
                        case "minute":
                            dateDifferences.second = value;
                        case "second":
                            dateDifferences.millisecond = value
                    }
                };
                var correctDifferencesByMaxDate = function(differences, minDate, maxDate) {
                    if (!maxDate.getMilliseconds() && maxDate.getSeconds()) {
                        if (maxDate.getSeconds() - minDate.getSeconds() === 1) {
                            differences.millisecond = true;
                            differences.second = false
                        }
                    } else {
                        if (!maxDate.getSeconds() && maxDate.getMinutes()) {
                            if (maxDate.getMinutes() - minDate.getMinutes() === 1) {
                                differences.second = true;
                                differences.minute = false
                            }
                        } else {
                            if (!maxDate.getMinutes() && maxDate.getHours()) {
                                if (maxDate.getHours() - minDate.getHours() === 1) {
                                    differences.minute = true;
                                    differences.hour = false
                                }
                            } else {
                                if (!maxDate.getHours() && maxDate.getDate() > 1) {
                                    if (maxDate.getDate() - minDate.getDate() === 1) {
                                        differences.hour = true;
                                        differences.day = false
                                    }
                                } else {
                                    if (1 === maxDate.getDate() && maxDate.getMonth()) {
                                        if (maxDate.getMonth() - minDate.getMonth() === 1) {
                                            differences.day = true;
                                            differences.month = false
                                        }
                                    } else {
                                        if (!maxDate.getMonth() && maxDate.getFullYear()) {
                                            if (maxDate.getFullYear() - minDate.getFullYear() === 1) {
                                                differences.month = true;
                                                differences.year = false
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                };
                tickInterval = typeUtils.isString(tickInterval) ? tickInterval.toLowerCase() : tickInterval;
                var dateDifferences = dateUtils.getDatesDifferences(startValue, endValue);
                if (startValue !== endValue) {
                    correctDifferencesByMaxDate(dateDifferences, startValue > endValue ? endValue : startValue, startValue > endValue ? startValue : endValue)
                }
                dateUnitInterval = dateUtils.getDateUnitInterval(dateDifferences);
                correctDateDifferences(dateDifferences, dateUnitInterval, true);
                dateUnitInterval = dateUtils.getDateUnitInterval(tickInterval || "second");
                correctDateDifferences(dateDifferences, dateUnitInterval, false);
                dateDifferences[dateDifferencesConverter[dateUnitInterval] || dateUnitInterval] = true;
                var resultFormat = this.getDateFormatByDifferences(dateDifferences);
                return resultFormat
            }
        })
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/data/data_source/utils.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.normalizeDataSourceOptions = exports.normalizeLoadResult = exports.mapDataRespectingGrouping = exports.normalizeStoreLoadOptionAccessorArguments = exports.isPending = exports.CANCELED_TOKEN = void 0;
        var _ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var _abstract_store = __webpack_require__( /*! ../abstract_store */ 103);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _array_store = __webpack_require__( /*! ../array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _custom_store = __webpack_require__( /*! ../custom_store */ 118);
        var _custom_store2 = _interopRequireDefault(_custom_store);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _utils = __webpack_require__( /*! ../utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.CANCELED_TOKEN = "canceled";
        exports.isPending = function(deferred) {
            return "pending" === deferred.state()
        };
        exports.normalizeStoreLoadOptionAccessorArguments = function(originalArguments) {
            switch (originalArguments.length) {
                case 0:
                    return;
                case 1:
                    return originalArguments[0]
            }
            return [].slice.call(originalArguments)
        };
        var mapGroup = function(group, level, mapper) {
            return (0, _iterator.map)(group, function(item) {
                var result = {
                    key: item.key,
                    items: mapRecursive(item.items, level - 1, mapper)
                };
                if ("aggregates" in item) {
                    result.aggregates = item.aggregates
                }
                return result
            })
        };
        var mapRecursive = function(items, level, mapper) {
            if (!Array.isArray(items)) {
                return items
            }
            return level ? mapGroup(items, level, mapper) : (0, _iterator.map)(items, mapper)
        };
        exports.mapDataRespectingGrouping = function(items, mapper, groupInfo) {
            var level = groupInfo ? (0, _utils.normalizeSortingInfo)(groupInfo).length : 0;
            return mapRecursive(items, level, mapper)
        };
        exports.normalizeLoadResult = function(data, extra) {
            var _data;
            if (null === (_data = data) || void 0 === _data ? void 0 : _data.data) {
                extra = data;
                data = data.data
            }
            if (!Array.isArray(data)) {
                data = [data]
            }
            return {
                data: data,
                extra: extra
            }
        };
        var createCustomStoreFromLoadFunc = function(options) {
            var storeConfig = {};
            (0, _iterator.each)(["useDefaultSearch", "key", "load", "loadMode", "cacheRawData", "byKey", "lookup", "totalCount", "insert", "update", "remove"], function() {
                storeConfig[this] = options[this];
                delete options[this]
            });
            return new _custom_store2.default(storeConfig)
        };
        var createStoreFromConfig = function(storeConfig) {
            var alias = storeConfig.type;
            delete storeConfig.type;
            return _abstract_store2.default.create(alias, storeConfig)
        };
        var createCustomStoreFromUrl = function(url, normalizationOptions) {
            return new _custom_store2.default({
                load: function() {
                    return (0, _ajax.sendRequest)({
                        url: url,
                        dataType: "json"
                    })
                },
                loadMode: null === normalizationOptions || void 0 === normalizationOptions ? void 0 : normalizationOptions.fromUrlLoadMode
            })
        };
        exports.normalizeDataSourceOptions = function(options, normalizationOptions) {
            var store;
            if ("string" === typeof options) {
                options = {
                    paginate: false,
                    store: createCustomStoreFromUrl(options, normalizationOptions)
                }
            }
            if (void 0 === options) {
                options = []
            }
            if (Array.isArray(options) || options instanceof _abstract_store2.default) {
                options = {
                    store: options
                }
            } else {
                options = (0, _extend.extend)({}, options)
            }
            if (void 0 === options.store) {
                options.store = []
            }
            store = options.store;
            if ("load" in options) {
                store = createCustomStoreFromLoadFunc(options)
            } else {
                if (Array.isArray(store)) {
                    store = new _array_store2.default(store)
                } else {
                    if ((0, _type.isPlainObject)(store)) {
                        store = createStoreFromConfig((0, _extend.extend)({}, store))
                    }
                }
            }
            options.store = store;
            return options
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/console.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isFunction = __webpack_require__( /*! ./type */ 1).isFunction;
        var noop = function() {};
        var getConsoleMethod = function(method) {
            if ("undefined" === typeof console || !isFunction(console[method])) {
                return noop
            }
            return console[method].bind(console)
        };
        var logger = {
            info: getConsoleMethod("info"),
            warn: getConsoleMethod("warn"),
            error: getConsoleMethod("error")
        };
        var debug = function() {
            function assert(condition, message) {
                if (!condition) {
                    throw new Error(message)
                }
            }

            function assertParam(parameter, message) {
                assert(null !== parameter && void 0 !== parameter, message)
            }
            return {
                assert: assert,
                assertParam: assertParam
            }
        }();
        exports.logger = logger;
        exports.debug = debug
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/selectors.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _focusable = function(element, tabIndex) {
            if (!visible(element)) {
                return false
            }
            var nodeName = element.nodeName.toLowerCase();
            var isTabIndexNotNaN = !isNaN(tabIndex);
            var isDisabled = element.disabled;
            var isDefaultFocus = /^(input|select|textarea|button|object|iframe)$/.test(nodeName);
            var isHyperlink = "a" === nodeName;
            var isFocusable = true;
            var isContentEditable = element.isContentEditable;
            if (isDefaultFocus || isContentEditable) {
                isFocusable = !isDisabled
            } else {
                if (isHyperlink) {
                    isFocusable = element.href || isTabIndexNotNaN
                } else {
                    isFocusable = isTabIndexNotNaN
                }
            }
            return isFocusable
        };

        function visible(element) {
            var $element = $(element);
            return $element.is(":visible") && "hidden" !== $element.css("visibility") && "hidden" !== $element.parents().css("visibility")
        }
        module.exports = {
            focusable: function(index, element) {
                return _focusable(element, $(element).attr("tabIndex"))
            },
            tabbable: function(index, element) {
                var tabIndex = $(element).attr("tabIndex");
                return (isNaN(tabIndex) || tabIndex >= 0) && _focusable(element, tabIndex)
            },
            focused: function($element) {
                var element = $($element).get(0);
                return domAdapter.getActiveElement() === element
            }
        }
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/core/polyfills/promise.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var Deferred = deferredUtils.Deferred;
        var when = deferredUtils.when;
        var promise = windowUtils.hasWindow() ? windowUtils.getWindow().Promise : Promise;
        if (!promise) {
            promise = function(resolver) {
                var d = new Deferred;
                resolver(d.resolve.bind(this), d.reject.bind(this));
                return d.promise()
            };
            promise.resolve = function(val) {
                return (new Deferred).resolve(val).promise()
            };
            promise.reject = function(val) {
                return (new Deferred).reject(val).promise()
            };
            promise.all = function(promises) {
                return when.apply(this, promises).then(function() {
                    return [].slice.call(arguments)
                })
            }
        }
        module.exports = promise
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/dom_component.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _config = __webpack_require__( /*! ./config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _resize_callbacks = __webpack_require__( /*! ../core/utils/resize_callbacks */ 114);
        var _resize_callbacks2 = _interopRequireDefault(_resize_callbacks);
        var _component = __webpack_require__( /*! ./component */ 115);
        var _component2 = _interopRequireDefault(_component);
        var _template_manager = __webpack_require__( /*! ./template_manager */ 471);
        var _template_manager2 = _interopRequireDefault(_template_manager);
        var _public_component = __webpack_require__( /*! ./utils/public_component */ 139);
        var _element_data = __webpack_require__( /*! ./element_data */ 41);
        var _iterator = __webpack_require__( /*! ./utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ./utils/extend */ 0);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _common = __webpack_require__( /*! ./utils/common */ 3);
        var _array = __webpack_require__( /*! ./utils/array */ 14);
        var _type = __webpack_require__( /*! ./utils/type */ 1);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _short = __webpack_require__( /*! ../events/short */ 116);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var abstract = _component2.default.abstract;
        var DOMComponent = _component2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    width: void 0,
                    height: void 0,
                    rtlEnabled: (0, _config2.default)().rtlEnabled,
                    elementAttr: {},
                    disabled: false,
                    integrationOptions: {}
                }, this._useTemplates() ? _template_manager2.default.createDefaultOptions() : {})
            },
            ctor: function(element, options) {
                this._createElement(element);
                (0, _public_component.attachInstanceToElement)(this._$element, this, this._dispose);
                this.callBase(options)
            },
            _createElement: function(element) {
                this._$element = (0, _renderer2.default)(element)
            },
            _getSynchronizableOptionsForCreateComponent: function() {
                return ["rtlEnabled", "disabled", "templatesRenderAsynchronously"]
            },
            _visibilityChanged: abstract,
            _dimensionChanged: abstract,
            _init: function() {
                this.callBase();
                this._attachWindowResizeCallback();
                this._initTemplateManager()
            },
            _setOptionsByDevice: function(instanceCustomRules) {
                this.callBase([].concat(this.constructor._classCustomRules || [], instanceCustomRules || []))
            },
            _isInitialOptionValue: function(name) {
                var isCustomOption = this.constructor._classCustomRules && Object.prototype.hasOwnProperty.call(this._convertRulesToOptions(this.constructor._classCustomRules), name);
                return !isCustomOption && this.callBase(name)
            },
            _attachWindowResizeCallback: function() {
                if (this._isDimensionChangeSupported()) {
                    var windowResizeCallBack = this._windowResizeCallBack = this._dimensionChanged.bind(this);
                    _resize_callbacks2.default.add(windowResizeCallBack)
                }
            },
            _isDimensionChangeSupported: function() {
                return this._dimensionChanged !== abstract
            },
            _renderComponent: function() {
                this._initMarkup();
                (0, _window.hasWindow)() && this._render()
            },
            _initMarkup: function() {
                var _ref = this.option() || {},
                    rtlEnabled = _ref.rtlEnabled;
                this._renderElementAttributes();
                this._toggleRTLDirection(rtlEnabled);
                this._renderVisibilityChange();
                this._renderDimensions()
            },
            _render: function() {
                this._attachVisibilityChangeHandlers()
            },
            _renderElementAttributes: function() {
                var _ref2 = this.option() || {},
                    elementAttr = _ref2.elementAttr;
                var attributes = (0, _extend.extend)({}, elementAttr);
                var classNames = attributes.class;
                delete attributes.class;
                this.$element().attr(attributes).addClass(classNames)
            },
            _renderVisibilityChange: function() {
                if (this._isDimensionChangeSupported()) {
                    this._attachDimensionChangeHandlers()
                }
                if (this._isVisibilityChangeSupported()) {
                    var $element = this.$element();
                    $element.addClass("dx-visibility-change-handler")
                }
            },
            _renderDimensions: function() {
                var $element = this.$element();
                var element = $element.get(0);
                var width = this._getOptionValue("width", element);
                var height = this._getOptionValue("height", element);
                if (this._isCssUpdateRequired(element, height, width)) {
                    $element.css({
                        width: null === width ? "" : width,
                        height: null === height ? "" : height
                    })
                }
            },
            _isCssUpdateRequired: function(element, height, width) {
                return !!((0, _type.isDefined)(width) || (0, _type.isDefined)(height) || element.style.width || element.style.height)
            },
            _attachDimensionChangeHandlers: function() {
                var _this = this;
                var $el = this.$element();
                var namespace = "".concat(this.NAME, "VisibilityChange");
                _short.resize.off($el, {
                    namespace: namespace
                });
                _short.resize.on($el, function() {
                    return _this._dimensionChanged()
                }, {
                    namespace: namespace
                })
            },
            _attachVisibilityChangeHandlers: function() {
                var _this2 = this;
                if (this._isVisibilityChangeSupported()) {
                    var $el = this.$element();
                    var namespace = "".concat(this.NAME, "VisibilityChange");
                    this._isHidden = !this._isVisible();
                    _short.visibility.off($el, {
                        namespace: namespace
                    });
                    _short.visibility.on($el, function() {
                        return _this2._checkVisibilityChanged("shown")
                    }, function() {
                        return _this2._checkVisibilityChanged("hiding")
                    }, {
                        namespace: namespace
                    })
                }
            },
            _isVisible: function() {
                var $element = this.$element();
                return $element.is(":visible")
            },
            _checkVisibilityChanged: function(action) {
                var isVisible = this._isVisible();
                if (isVisible) {
                    if ("hiding" === action && !this._isHidden) {
                        this._visibilityChanged(false);
                        this._isHidden = true
                    } else {
                        if ("shown" === action && this._isHidden) {
                            this._isHidden = false;
                            this._visibilityChanged(true)
                        }
                    }
                }
            },
            _isVisibilityChangeSupported: function() {
                return this._visibilityChanged !== abstract && (0, _window.hasWindow)()
            },
            _clean: _common.noop,
            _modelByElement: function() {
                var _this$option = this.option(),
                    modelByElement = _this$option.modelByElement;
                var $element = this.$element();
                return modelByElement ? modelByElement($element) : void 0
            },
            _invalidate: function() {
                if (this._isUpdateAllowed()) {
                    throw _errors2.default.Error("E0007")
                }
                this._requireRefresh = true
            },
            _refresh: function() {
                this._clean();
                this._renderComponent()
            },
            _dispose: function() {
                this._templateManager && this._templateManager.dispose();
                this.callBase();
                this._clean();
                this._detachWindowResizeCallback()
            },
            _detachWindowResizeCallback: function() {
                if (this._isDimensionChangeSupported()) {
                    _resize_callbacks2.default.remove(this._windowResizeCallBack)
                }
            },
            _toggleRTLDirection: function(rtl) {
                var $element = this.$element();
                $element.toggleClass("dx-rtl", rtl)
            },
            _createComponent: function(element, component) {
                var _this3 = this;
                var config = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                var synchronizableOptions = (0, _common.grep)(this._getSynchronizableOptionsForCreateComponent(), function(value) {
                    return !(value in config)
                });
                var _this$option2 = this.option(),
                    integrationOptions = _this$option2.integrationOptions;
                var _this$option3 = this.option(),
                    nestedComponentOptions = _this$option3.nestedComponentOptions;
                nestedComponentOptions = nestedComponentOptions || _common.noop;
                var nestedComponentConfig = (0, _extend.extend)({
                    integrationOptions: integrationOptions
                }, nestedComponentOptions(this));
                synchronizableOptions.forEach(function(optionName) {
                    return nestedComponentConfig[optionName] = _this3.option(optionName)
                });
                this._extendConfig(config, nestedComponentConfig);
                var instance = void 0;
                if ((0, _type.isString)(component)) {
                    var $element = (0, _renderer2.default)(element)[component](config);
                    instance = $element[component]("instance")
                } else {
                    if (element) {
                        instance = component.getInstance(element);
                        if (instance) {
                            instance.option(config)
                        } else {
                            instance = new component(element, config)
                        }
                    }
                }
                if (instance) {
                    var optionChangedHandler = function(_ref3) {
                        var name = _ref3.name,
                            value = _ref3.value;
                        if ((0, _array.inArray)(name, synchronizableOptions) >= 0) {
                            instance.option(name, value)
                        }
                    };
                    this.on("optionChanged", optionChangedHandler);
                    instance.on("disposing", function() {
                        return _this3.off("optionChanged", optionChangedHandler)
                    })
                }
                return instance
            },
            _extendConfig: function(config, extendConfig) {
                (0, _iterator.each)(extendConfig, function(key, value) {
                    !Object.prototype.hasOwnProperty.call(config, key) && (config[key] = value)
                })
            },
            _defaultActionConfig: function() {
                var $element = this.$element();
                var context = this._modelByElement($element);
                return (0, _extend.extend)(this.callBase(), {
                    context: context
                })
            },
            _defaultActionArgs: function() {
                var $element = this.$element();
                var model = this._modelByElement($element);
                var element = this.element();
                return (0, _extend.extend)(this.callBase(), {
                    element: element,
                    model: model
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                    case "height":
                        this._renderDimensions();
                        break;
                    case "rtlEnabled":
                        this._invalidate();
                        break;
                    case "elementAttr":
                        this._renderElementAttributes();
                        break;
                    case "disabled":
                    case "integrationOptions":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _removeAttributes: function(element) {
                var attrs = element.attributes;
                for (var i = attrs.length - 1; i >= 0; i--) {
                    var attr = attrs[i];
                    if (attr) {
                        var name = attr.name;
                        if (!name.indexOf("aria-") || name.indexOf("dx-") !== -1 || "role" === name || "style" === name || "tabindex" === name) {
                            element.removeAttribute(name)
                        }
                    }
                }
            },
            _removeClasses: function(element) {
                element.className = element.className.split(" ").filter(function(cssClass) {
                    return 0 !== cssClass.lastIndexOf("dx-", 0)
                }).join(" ")
            },
            _updateDOMComponent: function(renderRequired) {
                if (renderRequired) {
                    this._renderComponent()
                } else {
                    if (this._requireRefresh) {
                        this._requireRefresh = false;
                        this._refresh()
                    }
                }
            },
            endUpdate: function() {
                var renderRequired = this._isInitializingRequired();
                this.callBase();
                this._isUpdateAllowed() && this._updateDOMComponent(renderRequired)
            },
            $element: function() {
                return this._$element
            },
            element: function() {
                var $element = this.$element();
                return (0, _dom.getPublicElement)($element)
            },
            dispose: function() {
                var element = this.$element().get(0);
                (0, _element_data.cleanDataRecursive)(element, true);
                element.textContent = "";
                this._removeAttributes(element);
                this._removeClasses(element)
            },
            resetOption: function(optionName) {
                this.callBase(optionName);
                if ("width" === optionName || "height" === optionName) {
                    var initialOption = this.initialOption(optionName);
                    !(0, _type.isDefined)(initialOption) && this.$element().css(optionName, "")
                }
            },
            _getAnonymousTemplateName: function() {
                return
            },
            _initTemplateManager: function() {
                if (this._templateManager || !this._useTemplates()) {
                    return
                }
                var _this$option4 = this.option(),
                    _this$option4$integra = _this$option4.integrationOptions,
                    integrationOptions = void 0 === _this$option4$integra ? {} : _this$option4$integra;
                var createTemplate = integrationOptions.createTemplate;
                this._templateManager = new _template_manager2.default(createTemplate, this._getAnonymousTemplateName());
                this._initTemplates()
            },
            _initTemplates: function() {
                var _this4 = this;
                var _this$_templateManage = this._templateManager.extractTemplates(this.$element()),
                    templates = _this$_templateManage.templates,
                    anonymousTemplateMeta = _this$_templateManage.anonymousTemplateMeta;
                var anonymousTemplate = this.option("integrationOptions.templates.".concat(anonymousTemplateMeta.name));
                templates.forEach(function(_ref4) {
                    var name = _ref4.name,
                        template = _ref4.template;
                    _this4._options.silent("integrationOptions.templates.".concat(name), template)
                });
                if (anonymousTemplateMeta.name && !anonymousTemplate) {
                    this._options.silent("integrationOptions.templates.".concat(anonymousTemplateMeta.name), anonymousTemplateMeta.template)
                }
            },
            _getTemplateByOption: function(optionName) {
                return this._getTemplate(this.option(optionName))
            },
            _getTemplate: function(templateSource) {
                var templates = this.option("integrationOptions.templates");
                var isAsyncTemplate = this.option("templatesRenderAsynchronously");
                var skipTemplates = this.option("integrationOptions.skipTemplates");
                return this._templateManager.getTemplate(templateSource, templates, {
                    isAsyncTemplate: isAsyncTemplate,
                    skipTemplates: skipTemplates
                }, this)
            },
            _saveTemplate: function(name, template) {
                this._setOptionWithoutOptionChange("integrationOptions.templates." + name, this._templateManager._createTemplate(template))
            },
            _useTemplates: function() {
                return true
            }
        });
        DOMComponent.getInstance = function(element) {
            return (0, _public_component.getInstanceByElement)((0, _renderer2.default)(element), this)
        };
        DOMComponent.defaultOptions = function(rule) {
            this._classCustomRules = this._classCustomRules || [];
            this._classCustomRules.push(rule)
        };
        module.exports = DOMComponent
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/events/drag.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var dataUtils = __webpack_require__( /*! ../core/element_data */ 41);
        var wrapToArray = __webpack_require__( /*! ../core/utils/array */ 14).wrapToArray;
        var inArray = __webpack_require__( /*! ../core/utils/array */ 14).inArray;
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var contains = __webpack_require__( /*! ../core/utils/dom */ 11).contains;
        var registerEvent = __webpack_require__( /*! ./core/event_registrator */ 77);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var GestureEmitter = __webpack_require__( /*! ./gesture/emitter.gesture */ 166);
        var registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 101);
        var DRAG_START_EVENT = "dxdragstart";
        var DRAG_EVENT = "dxdrag";
        var DRAG_END_EVENT = "dxdragend";
        var DRAG_ENTER_EVENT = "dxdragenter";
        var DRAG_LEAVE_EVENT = "dxdragleave";
        var DROP_EVENT = "dxdrop";
        var DX_DRAG_EVENTS_COUNT_KEY = "dxDragEventsCount";
        var knownDropTargets = [];
        var knownDropTargetSelectors = [];
        var knownDropTargetConfigs = [];
        var dropTargetRegistration = {
            setup: function(element, data) {
                var knownDropTarget = inArray(element, knownDropTargets) !== -1;
                if (!knownDropTarget) {
                    knownDropTargets.push(element);
                    knownDropTargetSelectors.push([]);
                    knownDropTargetConfigs.push(data || {})
                }
            },
            add: function(element, handleObj) {
                var index = inArray(element, knownDropTargets);
                this.updateEventsCounter(element, handleObj.type, 1);
                var selector = handleObj.selector;
                if (inArray(selector, knownDropTargetSelectors[index]) === -1) {
                    knownDropTargetSelectors[index].push(selector)
                }
            },
            updateEventsCounter: function(element, event, value) {
                if ([DRAG_ENTER_EVENT, DRAG_LEAVE_EVENT, DROP_EVENT].indexOf(event) > -1) {
                    var eventsCount = dataUtils.data(element, DX_DRAG_EVENTS_COUNT_KEY) || 0;
                    dataUtils.data(element, DX_DRAG_EVENTS_COUNT_KEY, Math.max(0, eventsCount + value))
                }
            },
            remove: function(element, handleObj) {
                this.updateEventsCounter(element, handleObj.type, -1)
            },
            teardown: function(element) {
                var handlersCount = dataUtils.data(element, DX_DRAG_EVENTS_COUNT_KEY);
                if (!handlersCount) {
                    var index = inArray(element, knownDropTargets);
                    knownDropTargets.splice(index, 1);
                    knownDropTargetSelectors.splice(index, 1);
                    knownDropTargetConfigs.splice(index, 1);
                    dataUtils.removeData(element, DX_DRAG_EVENTS_COUNT_KEY)
                }
            }
        };
        registerEvent(DRAG_ENTER_EVENT, dropTargetRegistration);
        registerEvent(DRAG_LEAVE_EVENT, dropTargetRegistration);
        registerEvent(DROP_EVENT, dropTargetRegistration);
        var getItemDelegatedTargets = function($element) {
            var dropTargetIndex = inArray($element.get(0), knownDropTargets);
            var dropTargetSelectors = knownDropTargetSelectors[dropTargetIndex].filter(function(selector) {
                return selector
            });
            var $delegatedTargets = $element.find(dropTargetSelectors.join(", "));
            if (inArray(void 0, knownDropTargetSelectors[dropTargetIndex]) !== -1) {
                $delegatedTargets = $delegatedTargets.add($element)
            }
            return $delegatedTargets
        };
        var getItemConfig = function($element) {
            var dropTargetIndex = inArray($element.get(0), knownDropTargets);
            return knownDropTargetConfigs[dropTargetIndex]
        };
        var getItemPosition = function(dropTargetConfig, $element) {
            if (dropTargetConfig.itemPositionFunc) {
                return dropTargetConfig.itemPositionFunc($element)
            } else {
                return $element.offset()
            }
        };
        var getItemSize = function(dropTargetConfig, $element) {
            if (dropTargetConfig.itemSizeFunc) {
                return dropTargetConfig.itemSizeFunc($element)
            }
            return {
                width: $element.get(0).getBoundingClientRect().width,
                height: $element.get(0).getBoundingClientRect().height
            }
        };
        var DragEmitter = GestureEmitter.inherit({
            ctor: function(element) {
                this.callBase(element);
                this.direction = "both"
            },
            _init: function(e) {
                this._initEvent = e
            },
            _start: function(e) {
                e = this._fireEvent(DRAG_START_EVENT, this._initEvent);
                this._maxLeftOffset = e.maxLeftOffset;
                this._maxRightOffset = e.maxRightOffset;
                this._maxTopOffset = e.maxTopOffset;
                this._maxBottomOffset = e.maxBottomOffset;
                var dropTargets = wrapToArray(e.targetElements || (null === e.targetElements ? [] : knownDropTargets));
                this._dropTargets = iteratorUtils.map(dropTargets, function(element) {
                    return $(element).get(0)
                })
            },
            _move: function(e) {
                var eventData = eventUtils.eventData(e);
                var dragOffset = this._calculateOffset(eventData);
                e = this._fireEvent(DRAG_EVENT, e, {
                    offset: dragOffset
                });
                this._processDropTargets(e);
                if (!e._cancelPreventDefault) {
                    e.preventDefault()
                }
            },
            _calculateOffset: function(eventData) {
                return {
                    x: this._calculateXOffset(eventData),
                    y: this._calculateYOffset(eventData)
                }
            },
            _calculateXOffset: function(eventData) {
                if ("vertical" !== this.direction) {
                    var offset = eventData.x - this._startEventData.x;
                    return this._fitOffset(offset, this._maxLeftOffset, this._maxRightOffset)
                }
                return 0
            },
            _calculateYOffset: function(eventData) {
                if ("horizontal" !== this.direction) {
                    var offset = eventData.y - this._startEventData.y;
                    return this._fitOffset(offset, this._maxTopOffset, this._maxBottomOffset)
                }
                return 0
            },
            _fitOffset: function(offset, minOffset, maxOffset) {
                if (null != minOffset) {
                    offset = Math.max(offset, -minOffset)
                }
                if (null != maxOffset) {
                    offset = Math.min(offset, maxOffset)
                }
                return offset
            },
            _processDropTargets: function(e) {
                var target = this._findDropTarget(e);
                var sameTarget = target === this._currentDropTarget;
                if (!sameTarget) {
                    this._fireDropTargetEvent(e, DRAG_LEAVE_EVENT);
                    this._currentDropTarget = target;
                    this._fireDropTargetEvent(e, DRAG_ENTER_EVENT)
                }
            },
            _fireDropTargetEvent: function(event, eventName) {
                if (!this._currentDropTarget) {
                    return
                }
                var eventData = {
                    type: eventName,
                    originalEvent: event,
                    draggingElement: this._$element.get(0),
                    target: this._currentDropTarget
                };
                eventUtils.fireEvent(eventData)
            },
            _findDropTarget: function(e) {
                var that = this;
                var result;
                iteratorUtils.each(knownDropTargets, function(_, target) {
                    if (!that._checkDropTargetActive(target)) {
                        return
                    }
                    var $target = $(target);
                    iteratorUtils.each(getItemDelegatedTargets($target), function(_, delegatedTarget) {
                        var $delegatedTarget = $(delegatedTarget);
                        if (that._checkDropTarget(getItemConfig($target), $delegatedTarget, e)) {
                            result = delegatedTarget
                        }
                    })
                });
                return result
            },
            _checkDropTargetActive: function(target) {
                var active = false;
                iteratorUtils.each(this._dropTargets, function(_, activeTarget) {
                    active = active || activeTarget === target || contains(activeTarget, target);
                    return !active
                });
                return active
            },
            _checkDropTarget: function(config, $target, e) {
                var isDraggingElement = $target.get(0) === $(e.target).get(0);
                if (isDraggingElement) {
                    return false
                }
                var targetPosition = getItemPosition(config, $target);
                if (e.pageX < targetPosition.left) {
                    return false
                }
                if (e.pageY < targetPosition.top) {
                    return false
                }
                var targetSize = getItemSize(config, $target);
                if (e.pageX > targetPosition.left + targetSize.width) {
                    return false
                }
                if (e.pageY > targetPosition.top + targetSize.height) {
                    return false
                }
                if (config.checkDropTarget && !config.checkDropTarget($target, e)) {
                    return false
                }
                return $target
            },
            _end: function(e) {
                var eventData = eventUtils.eventData(e);
                this._fireEvent(DRAG_END_EVENT, e, {
                    offset: this._calculateOffset(eventData)
                });
                this._fireDropTargetEvent(e, DROP_EVENT);
                delete this._currentDropTarget
            }
        });
        registerEmitter({
            emitter: DragEmitter,
            events: [DRAG_START_EVENT, DRAG_EVENT, DRAG_END_EVENT]
        });
        exports.dropTargets = knownDropTargets;
        exports.move = DRAG_EVENT;
        exports.start = DRAG_START_EVENT;
        exports.end = DRAG_END_EVENT;
        exports.enter = DRAG_ENTER_EVENT;
        exports.leave = DRAG_LEAVE_EVENT;
        exports.drop = DROP_EVENT
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/array_store.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _utils = __webpack_require__( /*! ./utils */ 42);
        var _query = __webpack_require__( /*! ./query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _errors = __webpack_require__( /*! ./errors */ 38);
        var _abstract_store = __webpack_require__( /*! ./abstract_store */ 103);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _array_utils = __webpack_require__( /*! ./array_utils */ 142);
        var _array_utils2 = _interopRequireDefault(_array_utils);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ArrayStore = _abstract_store2.default.inherit({
            ctor: function(options) {
                if (Array.isArray(options)) {
                    options = {
                        data: options
                    }
                } else {
                    options = options || {}
                }
                this.callBase(options);
                var initialArray = options.data;
                if (initialArray && !Array.isArray(initialArray)) {
                    throw _errors.errors.Error("E4006")
                }
                this._array = initialArray || []
            },
            createQuery: function() {
                return (0, _query2.default)(this._array, {
                    errorHandler: this._errorHandler
                })
            },
            _byKeyImpl: function(key) {
                var index = _array_utils2.default.indexByKey(this, this._array, key);
                if (index === -1) {
                    return (0, _utils.rejectedPromise)(_errors.errors.Error("E4009"))
                }
                return (0, _utils.trivialPromise)(this._array[index])
            },
            _insertImpl: function(values) {
                return _array_utils2.default.insert(this, this._array, values)
            },
            _pushImpl: function(changes) {
                _array_utils2.default.applyBatch(this, this._array, changes)
            },
            _updateImpl: function(key, values) {
                return _array_utils2.default.update(this, this._array, key, values)
            },
            _removeImpl: function(key) {
                return _array_utils2.default.remove(this, this._array, key)
            },
            clear: function() {
                this._eventsStrategy.fireEvent("modifying");
                this._array = [];
                this._eventsStrategy.fireEvent("modified")
            }
        }, "array");
        module.exports = ArrayStore
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/utils.ink_ripple.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var INKRIPPLE_CLASS = "dx-inkripple";
        var INKRIPPLE_WAVE_CLASS = "dx-inkripple-wave";
        var INKRIPPLE_SHOWING_CLASS = "dx-inkripple-showing";
        var INKRIPPLE_HIDING_CLASS = "dx-inkripple-hiding";
        var DEFAULT_WAVE_SIZE_COEFFICIENT = 2;
        var MAX_WAVE_SIZE = 4e3;
        var ANIMATION_DURATION = 300;
        var HOLD_ANIMATION_DURATION = 1e3;
        var DEFAULT_WAVE_INDEX = 0;
        var render = function(args) {
            args = args || {};
            if (void 0 === args.useHoldAnimation) {
                args.useHoldAnimation = true
            }
            var config = {
                waveSizeCoefficient: args.waveSizeCoefficient || DEFAULT_WAVE_SIZE_COEFFICIENT,
                isCentered: args.isCentered || false,
                wavesNumber: args.wavesNumber || 1,
                durations: getDurations(args.useHoldAnimation)
            };
            return {
                showWave: showWave.bind(this, config),
                hideWave: hideWave.bind(this, config)
            }
        };
        var getInkRipple = function(element) {
            var result = element.children("." + INKRIPPLE_CLASS);
            if (0 === result.length) {
                result = $("<div>").addClass(INKRIPPLE_CLASS).appendTo(element)
            }
            return result
        };
        var getWaves = function(element, wavesNumber) {
            var inkRipple = getInkRipple(element);
            var result = inkRipple.children("." + INKRIPPLE_WAVE_CLASS).toArray();
            for (var i = result.length; i < wavesNumber; i++) {
                var $currentWave = $("<div>").appendTo(inkRipple).addClass(INKRIPPLE_WAVE_CLASS);
                result.push($currentWave[0])
            }
            return $(result)
        };
        var getWaveStyleConfig = function(args, config) {
            var element = config.element;
            var elementWidth = element.outerWidth();
            var elementHeight = element.outerHeight();
            var elementDiagonal = parseInt(Math.sqrt(elementWidth * elementWidth + elementHeight * elementHeight));
            var waveSize = Math.min(MAX_WAVE_SIZE, parseInt(elementDiagonal * args.waveSizeCoefficient));
            var left;
            var top;
            if (args.isCentered) {
                left = (elementWidth - waveSize) / 2;
                top = (elementHeight - waveSize) / 2
            } else {
                var event = config.event;
                var position = config.element.offset();
                var x = event.pageX - position.left;
                var y = event.pageY - position.top;
                left = x - waveSize / 2;
                top = y - waveSize / 2
            }
            return {
                left: left,
                top: top,
                height: waveSize,
                width: waveSize
            }
        };

        function showWave(args, config) {
            var $wave = getWaves(config.element, args.wavesNumber).eq(config.wave || DEFAULT_WAVE_INDEX);
            args.hidingTimeout && clearTimeout(args.hidingTimeout);
            hideSelectedWave($wave);
            $wave.css(getWaveStyleConfig(args, config));
            args.showingTimeout = setTimeout(showingWaveHandler.bind(this, args, $wave), 0)
        }

        function showingWaveHandler(args, $wave) {
            var durationCss = args.durations.showingScale + "ms";
            $wave.addClass(INKRIPPLE_SHOWING_CLASS).css("transitionDuration", durationCss)
        }

        function getDurations(useHoldAnimation) {
            return {
                showingScale: useHoldAnimation ? HOLD_ANIMATION_DURATION : ANIMATION_DURATION,
                hidingScale: ANIMATION_DURATION,
                hidingOpacity: ANIMATION_DURATION
            }
        }

        function hideSelectedWave($wave) {
            $wave.removeClass(INKRIPPLE_HIDING_CLASS).css("transitionDuration", "")
        }

        function hideWave(args, config) {
            args.showingTimeout && clearTimeout(args.showingTimeout);
            var $wave = getWaves(config.element, config.wavesNumber).eq(config.wave || DEFAULT_WAVE_INDEX);
            var durations = args.durations;
            var durationCss = durations.hidingScale + "ms, " + durations.hidingOpacity + "ms";
            $wave.addClass(INKRIPPLE_HIDING_CLASS).removeClass(INKRIPPLE_SHOWING_CLASS).css("transitionDuration", durationCss);
            var animationDuration = Math.max(durations.hidingScale, durations.hidingOpacity);
            args.hidingTimeout = setTimeout(hideSelectedWave.bind(this, $wave), animationDuration)
        }
        module.exports = {
            render: render
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/load_indicator.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var navigator = windowUtils.getNavigator();
        var support = __webpack_require__( /*! ../core/utils/support */ 46);
        var themes = __webpack_require__( /*! ./themes */ 32);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var Widget = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var LOADINDICATOR_CLASS = "dx-loadindicator";
        var LOADINDICATOR_WRAPPER_CLASS = "dx-loadindicator-wrapper";
        var LOADINDICATOR_CONTENT_CLASS = "dx-loadindicator-content";
        var LOADINDICATOR_ICON_CLASS = "dx-loadindicator-icon";
        var LOADINDICATOR_SEGMENT_CLASS = "dx-loadindicator-segment";
        var LOADINDICATOR_SEGMENT_INNER_CLASS = "dx-loadindicator-segment-inner";
        var LOADINDICATOR_IMAGE_CLASS = "dx-loadindicator-image";
        var LoadIndicator = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    indicatorSrc: "",
                    activeStateEnabled: false,
                    hoverStateEnabled: false,
                    _animatingSegmentCount: 1,
                    _animatingSegmentInner: false
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        var realDevice = devices.real();
                        var obsoleteAndroid = "android" === realDevice.platform && !/chrome/i.test(navigator.userAgent);
                        return obsoleteAndroid
                    },
                    options: {
                        viaImage: true
                    }
                }, {
                    device: function() {
                        return themes.isIos7(themeName)
                    },
                    options: {
                        _animatingSegmentCount: 11
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        _animatingSegmentCount: 2,
                        _animatingSegmentInner: true
                    }
                }, {
                    device: function() {
                        return themes.isGeneric(themeName)
                    },
                    options: {
                        _animatingSegmentCount: 7
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(LOADINDICATOR_CLASS)
            },
            _initMarkup: function() {
                this.callBase();
                this._renderWrapper();
                this._renderIndicatorContent();
                this._renderMarkup()
            },
            _renderWrapper: function() {
                this._$wrapper = $("<div>").addClass(LOADINDICATOR_WRAPPER_CLASS);
                this.$element().append(this._$wrapper)
            },
            _renderIndicatorContent: function() {
                this._$content = $("<div>").addClass(LOADINDICATOR_CONTENT_CLASS);
                this._$wrapper.append(this._$content)
            },
            _renderMarkup: function() {
                if (support.animation() && !this.option("viaImage") && !this.option("indicatorSrc")) {
                    this._renderMarkupForAnimation()
                } else {
                    this._renderMarkupForImage()
                }
            },
            _renderMarkupForAnimation: function() {
                var animatingSegmentInner = this.option("_animatingSegmentInner");
                this._$indicator = $("<div>").addClass(LOADINDICATOR_ICON_CLASS);
                this._$content.append(this._$indicator);
                for (var i = this.option("_animatingSegmentCount"); i >= 0; --i) {
                    var $segment = $("<div>").addClass(LOADINDICATOR_SEGMENT_CLASS).addClass(LOADINDICATOR_SEGMENT_CLASS + i);
                    if (animatingSegmentInner) {
                        $segment.append($("<div>").addClass(LOADINDICATOR_SEGMENT_INNER_CLASS))
                    }
                    this._$indicator.append($segment)
                }
            },
            _renderMarkupForImage: function() {
                var indicatorSrc = this.option("indicatorSrc");
                this._$wrapper.addClass(LOADINDICATOR_IMAGE_CLASS);
                if (indicatorSrc) {
                    this._$wrapper.css("backgroundImage", "url(" + indicatorSrc + ")")
                }
            },
            _renderDimensions: function() {
                this.callBase();
                this._updateContentSizeForAnimation()
            },
            _updateContentSizeForAnimation: function() {
                if (!this._$indicator) {
                    return
                }
                var width = this.option("width");
                var height = this.option("height");
                if (width || height) {
                    width = this.$element().width();
                    height = this.$element().height();
                    var minDimension = Math.min(height, width);
                    this._$wrapper.css({
                        height: minDimension,
                        width: minDimension,
                        fontSize: minDimension
                    })
                }
            },
            _clean: function() {
                this.callBase();
                this._removeMarkupForAnimation();
                this._removeMarkupForImage()
            },
            _removeMarkupForAnimation: function() {
                if (!this._$indicator) {
                    return
                }
                this._$indicator.remove();
                delete this._$indicator
            },
            _removeMarkupForImage: function() {
                this._$wrapper.css("backgroundImage", "none")
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "_animatingSegmentCount":
                    case "_animatingSegmentInner":
                    case "indicatorSrc":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxLoadIndicator", LoadIndicator);
        module.exports = LoadIndicator
    }, ,
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/animation/position.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var isWindow = __webpack_require__( /*! ../core/utils/type */ 1).isWindow;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var getBoundingRect = __webpack_require__( /*! ../core/utils/position */ 21).getBoundingRect;
        var browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var translator = __webpack_require__( /*! ./translator */ 28);
        var support = __webpack_require__( /*! ../core/utils/support */ 46);
        var horzRe = /left|right/;
        var vertRe = /top|bottom/;
        var collisionRe = /fit|flip|none/;
        var IS_SAFARI = browser.safari;
        var normalizeAlign = function(raw) {
            var result = {
                h: "center",
                v: "center"
            };
            var pair = commonUtils.splitPair(raw);
            if (pair) {
                each(pair, function() {
                    var w = String(this).toLowerCase();
                    if (horzRe.test(w)) {
                        result.h = w
                    } else {
                        if (vertRe.test(w)) {
                            result.v = w
                        }
                    }
                })
            }
            return result
        };
        var normalizeOffset = function(raw) {
            return commonUtils.pairToObject(raw)
        };
        var normalizeCollision = function(raw) {
            var pair = commonUtils.splitPair(raw);
            var h = String(pair && pair[0]).toLowerCase();
            var v = String(pair && pair[1]).toLowerCase();
            if (!collisionRe.test(h)) {
                h = "none"
            }
            if (!collisionRe.test(v)) {
                v = h
            }
            return {
                h: h,
                v: v
            }
        };
        var getAlignFactor = function(align) {
            switch (align) {
                case "center":
                    return .5;
                case "right":
                case "bottom":
                    return 1;
                default:
                    return 0
            }
        };
        var inverseAlign = function(align) {
            switch (align) {
                case "left":
                    return "right";
                case "right":
                    return "left";
                case "top":
                    return "bottom";
                case "bottom":
                    return "top";
                default:
                    return align
            }
        };
        var calculateOversize = function(data, bounds) {
            var oversize = 0;
            if (data.myLocation < bounds.min) {
                oversize += bounds.min - data.myLocation
            }
            if (data.myLocation > bounds.max) {
                oversize += data.myLocation - bounds.max
            }
            return oversize
        };
        var collisionSide = function(direction, data, bounds) {
            if (data.myLocation < bounds.min) {
                return "h" === direction ? "left" : "top"
            }
            if (data.myLocation > bounds.max) {
                return "h" === direction ? "right" : "bottom"
            }
            return "none"
        };
        var initMyLocation = function(data) {
            data.myLocation = data.atLocation + getAlignFactor(data.atAlign) * data.atSize - getAlignFactor(data.myAlign) * data.mySize + data.offset
        };
        var collisionResolvers = {
            fit: function(data, bounds) {
                var result = false;
                if (data.myLocation > bounds.max) {
                    data.myLocation = bounds.max;
                    result = true
                }
                if (data.myLocation < bounds.min) {
                    data.myLocation = bounds.min;
                    result = true
                }
                data.fit = result
            },
            flip: function(data, bounds) {
                data.flip = false;
                if ("center" === data.myAlign && "center" === data.atAlign) {
                    return
                }
                if (data.myLocation < bounds.min || data.myLocation > bounds.max) {
                    var inverseData = extend({}, data, {
                        myAlign: inverseAlign(data.myAlign),
                        atAlign: inverseAlign(data.atAlign),
                        offset: -data.offset
                    });
                    initMyLocation(inverseData);
                    inverseData.oversize = calculateOversize(inverseData, bounds);
                    if (inverseData.myLocation >= bounds.min && inverseData.myLocation <= bounds.max || data.oversize > inverseData.oversize) {
                        data.myLocation = inverseData.myLocation;
                        data.oversize = inverseData.oversize;
                        data.flip = true
                    }
                }
            },
            flipfit: function(data, bounds) {
                this.flip(data, bounds);
                this.fit(data, bounds)
            },
            none: function(data) {
                data.oversize = 0
            }
        };
        var scrollbarWidth;
        var calculateScrollbarWidth = function() {
            var $scrollDiv = $("<div>").css({
                width: 100,
                height: 100,
                overflow: "scroll",
                position: "absolute",
                top: -9999
            }).appendTo($("body"));
            var result = $scrollDiv.get(0).offsetWidth - $scrollDiv.get(0).clientWidth;
            $scrollDiv.remove();
            scrollbarWidth = result
        };
        var defaultPositionResult = {
            h: {
                location: 0,
                flip: false,
                fit: false,
                oversize: 0
            },
            v: {
                location: 0,
                flip: false,
                fit: false,
                oversize: 0
            }
        };
        var calculatePosition = function(what, options) {
            var $what = $(what);
            var currentOffset = $what.offset();
            var result = extend(true, {}, defaultPositionResult, {
                h: {
                    location: currentOffset.left
                },
                v: {
                    location: currentOffset.top
                }
            });
            if (!options) {
                return result
            }
            var my = normalizeAlign(options.my);
            var at = normalizeAlign(options.at);
            var of = $(options.of).length && options.of || window;
            var offset = normalizeOffset(options.offset);
            var collision = normalizeCollision(options.collision);
            var boundary = options.boundary;
            var boundaryOffset = normalizeOffset(options.boundaryOffset);
            var h = {
                mySize: $what.outerWidth(),
                myAlign: my.h,
                atAlign: at.h,
                offset: offset.h,
                collision: collision.h,
                boundaryOffset: boundaryOffset.h
            };
            var v = {
                mySize: $what.outerHeight(),
                myAlign: my.v,
                atAlign: at.v,
                offset: offset.v,
                collision: collision.v,
                boundaryOffset: boundaryOffset.v
            };
            if ( of .preventDefault) {
                h.atLocation = of .pageX;
                v.atLocation = of .pageY;
                h.atSize = 0;
                v.atSize = 0
            } else {
                of = $( of );
                if (isWindow( of [0])) {
                    h.atLocation = of .scrollLeft();
                    v.atLocation = of .scrollTop();
                    h.atSize = of [0].innerWidth >= of [0].outerWidth ? of [0].innerWidth : of .width();
                    v.atSize = of [0].innerHeight >= of [0].outerHeight || IS_SAFARI ? of [0].innerHeight : of .height()
                } else {
                    if (9 === of [0].nodeType) {
                        h.atLocation = 0;
                        v.atLocation = 0;
                        h.atSize = of .width();
                        v.atSize = of .height()
                    } else {
                        var ofRect = getBoundingRect( of .get(0));
                        var o = of .offset();
                        h.atLocation = o.left;
                        v.atLocation = o.top;
                        h.atSize = ofRect.width;
                        v.atSize = ofRect.height
                    }
                }
            }
            initMyLocation(h);
            initMyLocation(v);
            var bounds = function() {
                var win = $(window);
                var windowWidth = win.width();
                var windowHeight = win.height();
                var left = win.scrollLeft();
                var top = win.scrollTop();
                var documentElement = domAdapter.getDocumentElement();
                var hZoomLevel = support.touch ? documentElement.clientWidth / windowWidth : 1;
                var vZoomLevel = support.touch ? documentElement.clientHeight / windowHeight : 1;
                if (void 0 === scrollbarWidth) {
                    calculateScrollbarWidth()
                }
                var boundaryWidth = windowWidth;
                var boundaryHeight = windowHeight;
                if (boundary) {
                    var $boundary = $(boundary);
                    var boundaryPosition = $boundary.offset();
                    left = boundaryPosition.left;
                    top = boundaryPosition.top;
                    boundaryWidth = $boundary.width();
                    boundaryHeight = $boundary.height()
                }
                return {
                    h: {
                        min: left + h.boundaryOffset,
                        max: left + boundaryWidth / hZoomLevel - h.mySize - h.boundaryOffset
                    },
                    v: {
                        min: top + v.boundaryOffset,
                        max: top + boundaryHeight / vZoomLevel - v.mySize - v.boundaryOffset
                    }
                }
            }();
            h.oversize = calculateOversize(h, bounds.h);
            v.oversize = calculateOversize(v, bounds.v);
            h.collisionSide = collisionSide("h", h, bounds.h);
            v.collisionSide = collisionSide("v", v, bounds.v);
            if (collisionResolvers[h.collision]) {
                collisionResolvers[h.collision](h, bounds.h)
            }
            if (collisionResolvers[v.collision]) {
                collisionResolvers[v.collision](v, bounds.v)
            }
            var preciser = function(number) {
                return options.precise ? number : Math.round(number)
            };
            extend(true, result, {
                h: {
                    location: preciser(h.myLocation),
                    oversize: preciser(h.oversize),
                    fit: h.fit,
                    flip: h.flip,
                    collisionSide: h.collisionSide
                },
                v: {
                    location: preciser(v.myLocation),
                    oversize: preciser(v.oversize),
                    fit: v.fit,
                    flip: v.flip,
                    collisionSide: v.collisionSide
                },
                precise: options.precise
            });
            return result
        };
        var position = function(what, options) {
            var $what = $(what);
            if (!options) {
                return $what.offset()
            }
            translator.resetPosition($what, true);
            var offset = $what.offset();
            var targetPosition = options.h && options.v ? options : calculatePosition($what, options);
            var preciser = function(number) {
                return options.precise ? number : Math.round(number)
            };
            translator.move($what, {
                left: targetPosition.h.location - preciser(offset.left),
                top: targetPosition.v.location - preciser(offset.top)
            });
            return targetPosition
        };
        var offset = function(element) {
            element = $(element).get(0);
            if (isWindow(element)) {
                return null
            } else {
                if (element && "pageY" in element && "pageX" in element) {
                    return {
                        top: element.pageY,
                        left: element.pageX
                    }
                }
            }
            return $(element).offset()
        };
        if (!position.inverseAlign) {
            position.inverseAlign = inverseAlign
        }
        if (!position.normalizeAlign) {
            position.normalizeAlign = normalizeAlign
        }
        module.exports = {
            calculateScrollbarWidth: calculateScrollbarWidth,
            calculate: calculatePosition,
            setup: position,
            offset: offset
        }
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/ajax.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Deferred = __webpack_require__( /*! ./deferred */ 6).Deferred;
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var httpRequest = __webpack_require__( /*! ../../core/http_request */ 463);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var extendFromObject = __webpack_require__( /*! ./extend */ 0).extendFromObject;
        var isDefined = __webpack_require__( /*! ./type */ 1).isDefined;
        var Promise = __webpack_require__( /*! ../polyfills/promise */ 67);
        var injector = __webpack_require__( /*! ./dependency_injector */ 56);
        var SUCCESS = "success";
        var ERROR = "error";
        var TIMEOUT = "timeout";
        var NO_CONTENT = "nocontent";
        var PARSER_ERROR = "parsererror";
        var isStatusSuccess = function(status) {
            return 200 <= status && status < 300
        };
        var hasContent = function(status) {
            return 204 !== status
        };
        var paramsConvert = function(params) {
            var result = [];
            for (var name in params) {
                var value = params[name];
                if (void 0 === value) {
                    continue
                }
                if (null === value) {
                    value = ""
                }
                result.push(encodeURIComponent(name) + "=" + encodeURIComponent(value))
            }
            return result.join("&")
        };
        var createScript = function(options) {
            var script = domAdapter.createElement("script");
            for (var name in options) {
                script[name] = options[name]
            }
            return script
        };
        var removeScript = function(scriptNode) {
            scriptNode.parentNode.removeChild(scriptNode)
        };
        var appendToHead = function(element) {
            return domAdapter.getHead().appendChild(element)
        };
        var evalScript = function(code) {
            var script = createScript({
                text: code
            });
            appendToHead(script);
            removeScript(script)
        };
        var evalCrossDomainScript = function(url) {
            var script = createScript({
                src: url
            });
            return new Promise(function(resolve, reject) {
                var events = {
                    load: resolve,
                    error: reject
                };
                var loadHandler = function(e) {
                    events[e.type]();
                    removeScript(script)
                };
                for (var event in events) {
                    domAdapter.listen(script, event, loadHandler)
                }
                appendToHead(script)
            })
        };
        var getAcceptHeader = function(options) {
            var dataType = options.dataType || "*";
            var scriptAccept = "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript";
            var accepts = {
                "*": "*/*",
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript",
                jsonp: scriptAccept,
                script: scriptAccept
            };
            extendFromObject(accepts, options.accepts, true);
            return accepts[dataType] ? accepts[dataType] + ("*" !== dataType ? ", */*; q=0.01" : "") : accepts["*"]
        };
        var getContentTypeHeader = function(options) {
            var defaultContentType;
            if (options.data && !options.upload && "GET" !== getMethod(options)) {
                defaultContentType = "application/x-www-form-urlencoded;charset=utf-8"
            }
            return options.contentType || defaultContentType
        };
        var getDataFromResponse = function(xhr) {
            return xhr.responseType && "text" !== xhr.responseType || "string" !== typeof xhr.responseText ? xhr.response : xhr.responseText
        };
        var postProcess = function(deferred, xhr, dataType) {
            var data = getDataFromResponse(xhr);
            switch (dataType) {
                case "jsonp":
                    evalScript(data);
                    break;
                case "script":
                    evalScript(data);
                    deferred.resolve(data, SUCCESS, xhr);
                    break;
                case "json":
                    try {
                        deferred.resolve(JSON.parse(data), SUCCESS, xhr)
                    } catch (e) {
                        deferred.reject(xhr, PARSER_ERROR, e)
                    }
                    break;
                default:
                    deferred.resolve(data, SUCCESS, xhr)
            }
        };
        var isCrossDomain = function(url) {
            if (!windowUtils.hasWindow()) {
                return true
            }
            var crossDomain = false;
            var originAnchor = domAdapter.createElement("a");
            var urlAnchor = domAdapter.createElement("a");
            originAnchor.href = window.location.href;
            try {
                urlAnchor.href = url;
                urlAnchor.href = urlAnchor.href;
                crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host
            } catch (e) {
                crossDomain = true
            }
            return crossDomain
        };
        var setHttpTimeout = function(timeout, xhr) {
            return timeout && setTimeout(function() {
                xhr.customStatus = TIMEOUT;
                xhr.abort()
            }, timeout)
        };
        var getJsonpOptions = function(options) {
            if ("jsonp" === options.dataType) {
                var random = Math.random().toString().replace(/\D/g, "");
                var callbackName = options.jsonpCallback || "dxCallback" + Date.now() + "_" + random;
                var callbackParameter = options.jsonp || "callback";
                options.data = options.data || {};
                options.data[callbackParameter] = callbackName;
                return callbackName
            }
        };
        var getRequestOptions = function(options, headers) {
            var params = options.data;
            var paramsAlreadyString = "string" === typeof params;
            var url = options.url || window.location.href;
            if (!paramsAlreadyString && !options.cache) {
                params = params || {};
                params._ = Date.now()
            }
            if (params && !options.upload) {
                if (!paramsAlreadyString) {
                    params = paramsConvert(params)
                }
                if ("GET" === getMethod(options)) {
                    if ("" !== params) {
                        url += (url.indexOf("?") > -1 ? "&" : "?") + params
                    }
                    params = null
                } else {
                    if (headers["Content-Type"] && headers["Content-Type"].indexOf("application/x-www-form-urlencoded") > -1) {
                        params = params.replace(/%20/g, "+")
                    }
                }
            }
            return {
                url: url,
                parameters: params
            }
        };

        function getMethod(options) {
            return (options.method || "GET").toUpperCase()
        }
        var getRequestHeaders = function(options) {
            var headers = options.headers || {};
            headers["Content-Type"] = headers["Content-Type"] || getContentTypeHeader(options);
            headers.Accept = headers.Accept || getAcceptHeader(options);
            if (!options.crossDomain && !headers["X-Requested-With"]) {
                headers["X-Requested-With"] = "XMLHttpRequest"
            }
            return headers
        };
        var sendRequest = function(options) {
            var xhr = httpRequest.getXhr();
            var d = new Deferred;
            var result = d.promise();
            var async = isDefined(options.async) ? options.async : true;
            var dataType = options.dataType;
            var timeout = options.timeout || 0;
            var timeoutId;
            options.crossDomain = isCrossDomain(options.url);
            var needScriptEvaluation = "jsonp" === dataType || "script" === dataType;
            if (void 0 === options.cache) {
                options.cache = !needScriptEvaluation
            }
            var callbackName = getJsonpOptions(options);
            var headers = getRequestHeaders(options);
            var requestOptions = getRequestOptions(options, headers);
            var url = requestOptions.url;
            var parameters = requestOptions.parameters;
            if (callbackName) {
                window[callbackName] = function(data) {
                    d.resolve(data, SUCCESS, xhr)
                }
            }
            if (options.crossDomain && needScriptEvaluation) {
                var reject = function() {
                    d.reject(xhr, ERROR)
                };
                var resolve = function() {
                    if ("jsonp" === dataType) {
                        return
                    }
                    d.resolve(null, SUCCESS, xhr)
                };
                evalCrossDomainScript(url).then(resolve, reject);
                return result
            }
            if (options.crossDomain && !("withCredentials" in xhr)) {
                d.reject(xhr, ERROR);
                return result
            }
            xhr.open(getMethod(options), url, async, options.username, options.password);
            if (async) {
                xhr.timeout = timeout;
                timeoutId = setHttpTimeout(timeout, xhr, d)
            }
            xhr.onreadystatechange = function(e) {
                if (4 === xhr.readyState) {
                    clearTimeout(timeoutId);
                    if (isStatusSuccess(xhr.status)) {
                        if (hasContent(xhr.status)) {
                            postProcess(d, xhr, dataType)
                        } else {
                            d.resolve(null, NO_CONTENT, xhr)
                        }
                    } else {
                        d.reject(xhr, xhr.customStatus || ERROR)
                    }
                }
            };
            if (options.upload) {
                xhr.upload.onprogress = options.upload.onprogress;
                xhr.upload.onloadstart = options.upload.onloadstart;
                xhr.upload.onabort = options.upload.onabort
            }
            if (options.xhrFields) {
                for (var field in options.xhrFields) {
                    xhr[field] = options.xhrFields[field]
                }
            }
            if ("arraybuffer" === options.responseType) {
                xhr.responseType = options.responseType
            }
            for (var name in headers) {
                if (Object.prototype.hasOwnProperty.call(headers, name) && isDefined(headers[name])) {
                    xhr.setRequestHeader(name, headers[name])
                }
            }
            if (options.beforeSend) {
                options.beforeSend(xhr)
            }
            xhr.send(parameters);
            result.abort = function() {
                xhr.abort()
            };
            return result
        };
        module.exports = injector({
            sendRequest: sendRequest
        })
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/view_port.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../renderer */ 2);
        var readyCallbacks = __webpack_require__( /*! ./ready_callbacks */ 51);
        var ready = readyCallbacks.add;
        var changeCallback = __webpack_require__( /*! ./callbacks */ 27)();
        var $originalViewPort = $();
        var value = function() {
            var $current;
            return function(element) {
                if (!arguments.length) {
                    return $current
                }
                var $element = $(element);
                $originalViewPort = $element;
                var isNewViewportFound = !!$element.length;
                var prevViewPort = value();
                $current = isNewViewportFound ? $element : $("body");
                changeCallback.fire(isNewViewportFound ? value() : $(), prevViewPort)
            }
        }();
        ready(function() {
            value(".dx-viewport")
        });
        exports.value = value;
        exports.changeCallback = changeCallback;
        exports.originalViewPort = function() {
            return $originalViewPort
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/events/core/event_registrator.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _event_registrator_callbacks = __webpack_require__( /*! ./event_registrator_callbacks */ 130);
        var _event_registrator_callbacks2 = _interopRequireDefault(_event_registrator_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var registerEvent = function(name, eventObject) {
            var strategy = {};
            if ("noBubble" in eventObject) {
                strategy.noBubble = eventObject.noBubble
            }
            if ("bindType" in eventObject) {
                strategy.bindType = eventObject.bindType
            }
            if ("delegateType" in eventObject) {
                strategy.delegateType = eventObject.delegateType
            }(0, _iterator.each)(["setup", "teardown", "add", "remove", "trigger", "handle", "_default", "dispose"], function(_, methodName) {
                if (!eventObject[methodName]) {
                    return
                }
                strategy[methodName] = function() {
                    var args = [].slice.call(arguments);
                    args.unshift(this);
                    return eventObject[methodName].apply(eventObject, args)
                }
            });
            _event_registrator_callbacks2.default.fire(name, strategy)
        };
        registerEvent.callbacks = _event_registrator_callbacks2.default;
        module.exports = registerEvent
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/template_base.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.TemplateBase = exports.renderedCallbacks = void 0;
        var _renderer = __webpack_require__( /*! ../renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var _callbacks = __webpack_require__( /*! ../utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _dom = __webpack_require__( /*! ../utils/dom */ 11);
        var _errors = __webpack_require__( /*! ../errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var renderedCallbacks = exports.renderedCallbacks = (0, _callbacks2.default)({
            syncStrategy: true
        });
        exports.TemplateBase = function() {
            function TemplateBase() {
                _classCallCheck(this, TemplateBase)
            }
            _createClass(TemplateBase, [{
                key: "render",
                value: function(options) {
                    options = options || {};
                    var onRendered = options.onRendered;
                    delete options.onRendered;
                    var $result = this._renderCore(options);
                    this._ensureResultInContainer($result, options.container);
                    renderedCallbacks.fire($result, options.container);
                    onRendered && onRendered();
                    return $result
                }
            }, {
                key: "_ensureResultInContainer",
                value: function($result, container) {
                    if (!container) {
                        return
                    }
                    var $container = (0, _renderer2.default)(container);
                    var resultInContainer = (0, _dom.contains)($container.get(0), $result.get(0));
                    $container.append($result);
                    if (resultInContainer) {
                        return
                    }
                    var resultInBody = (0, _dom_adapter.getBody)().contains($container.get(0));
                    if (!resultInBody) {
                        return
                    }(0, _dom.triggerShownEvent)($result)
                }
            }, {
                key: "_renderCore",
                value: function() {
                    throw _errors2.default.Error("E0001")
                }
            }]);
            return TemplateBase
        }()
    },
    /*!***********************************!*\
      !*** external "window.Globalize" ***!
      \***********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.Globalize
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/call_once.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var callOnce = function(handler) {
            var result;
            var _wrappedHandler = function() {
                result = handler.apply(this, arguments);
                _wrappedHandler = function() {
                    return result
                };
                return result
            };
            return function() {
                return _wrappedHandler.apply(this, arguments)
            }
        };
        module.exports = callOnce
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.utils.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _format_helper = __webpack_require__( /*! ../../format_helper */ 63);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var setFieldProperty = exports.setFieldProperty = function(field, property, value, isInitialization) {
            var initProperties = field._initProperties = field._initProperties || {};
            var initValue = isInitialization ? value : field[property];
            if (!Object.prototype.hasOwnProperty.call(initProperties, property) || isInitialization) {
                initProperties[property] = initValue
            }
            field[property] = value
        };
        exports.sendRequest = function(options) {
            return (0, _ajax.sendRequest)(options)
        };
        var foreachTreeAsyncDate = new Date;

        function createForeachTreeFunc(isAsync) {
            var foreachTreeFunc = function foreachTreeFunc(items, callback, parentAtFirst, members, index, isChildrenProcessing) {
                members = members || [];
                items = items || [];
                var i;
                var deferred;
                index = index || 0;

                function createForeachTreeAsyncHandler(deferred, i, isChildrenProcessing) {
                    (0, _deferred.when)(foreachTreeFunc(items, callback, parentAtFirst, members, i, isChildrenProcessing)).done(deferred.resolve)
                }
                for (i = index; i < items.length; i++) {
                    if (isAsync && i > index && i % 1e4 === 0 && new Date - foreachTreeAsyncDate >= 300) {
                        foreachTreeAsyncDate = new Date;
                        deferred = new _deferred.Deferred;
                        setTimeout(createForeachTreeAsyncHandler(deferred, i, false), 0);
                        return deferred
                    }
                    var item = items[i];
                    if (!isChildrenProcessing) {
                        members.unshift(item);
                        if (parentAtFirst && false === callback(members, i)) {
                            return
                        }
                        if (item.children) {
                            var childrenDeferred = foreachTreeFunc(item.children, callback, parentAtFirst, members);
                            if (isAsync && childrenDeferred) {
                                deferred = new _deferred.Deferred;
                                childrenDeferred.done(createForeachTreeAsyncHandler(deferred, i, true));
                                return deferred
                            }
                        }
                    }
                    isChildrenProcessing = false;
                    if (!parentAtFirst && false === callback(members, i)) {
                        return
                    }
                    members.shift();
                    if (items[i] !== item) {
                        i--
                    }
                }
            };
            return foreachTreeFunc
        }
        exports.foreachTree = createForeachTreeFunc(false);
        exports.foreachTreeAsync = createForeachTreeFunc(true);
        exports.findField = function(fields, id) {
            if (fields && (0, _type.isDefined)(id)) {
                for (var i = 0; i < fields.length; i++) {
                    var field = fields[i];
                    if (field.name === id || field.caption === id || field.dataField === id || field.index === id) {
                        return i
                    }
                }
            }
            return -1
        };
        exports.formatValue = function(value, options) {
            var valueText = value === value && (0, _format_helper.format)(value, options.format);
            var formatObject = {
                value: value,
                valueText: valueText || ""
            };
            return options.customizeText ? options.customizeText.call(options, formatObject) : formatObject.valueText
        };
        exports.getCompareFunction = function(valueSelector) {
            return function(a, b) {
                var result = 0;
                var valueA = valueSelector(a);
                var valueB = valueSelector(b);
                var aIsDefined = (0, _type.isDefined)(valueA);
                var bIsDefined = (0, _type.isDefined)(valueB);
                if (aIsDefined && bIsDefined) {
                    if (valueA > valueB) {
                        result = 1
                    } else {
                        if (valueA < valueB) {
                            result = -1
                        }
                    }
                }
                if (aIsDefined && !bIsDefined) {
                    result = 1
                }
                if (!aIsDefined && bIsDefined) {
                    result = -1
                }
                return result
            }
        };
        exports.createPath = function(items) {
            var result = [];
            for (var i = items.length - 1; i >= 0; i--) {
                result.push(items[i].key || items[i].value)
            }
            return result
        };
        exports.foreachDataLevel = function foreachDataLevel(data, callback, index, childrenField) {
            index = index || 0;
            childrenField = childrenField || "children";
            if (data.length) {
                callback(data, index)
            }
            for (var i = 0; i < data.length; i++) {
                var item = data[i];
                if (item[childrenField] && item[childrenField].length) {
                    foreachDataLevel(item[childrenField], callback, index + 1, childrenField)
                }
            }
        };
        exports.mergeArraysByMaxValue = function(values1, values2) {
            var result = [];
            for (var i = 0; i < values1.length; i++) {
                result.push(Math.max(values1[i] || 0, values2[i] || 0))
            }
            return result
        };
        exports.getExpandedLevel = function(options, axisName) {
            var dimensions = options[axisName];
            var expandLevel = 0;
            var expandedPaths = ("columns" === axisName ? options.columnExpandedPaths : options.rowExpandedPaths) || [];
            if (options.headerName === axisName) {
                expandLevel = options.path.length
            } else {
                if (options.headerName && options.headerName !== axisName && options.oppositePath) {
                    expandLevel = options.oppositePath.length
                } else {
                    (0, _iterator.each)(expandedPaths, function(_, path) {
                        expandLevel = Math.max(expandLevel, path.length)
                    })
                }
            }
            while (dimensions[expandLevel + 1] && dimensions[expandLevel].expanded) {
                expandLevel++
            }
            return expandLevel
        };

        function createGroupFields(item) {
            return (0, _iterator.map)(["year", "quarter", "month"], function(value, index) {
                return (0, _extend.extend)({}, item, {
                    groupInterval: value,
                    groupIndex: index
                })
            })
        }

        function parseFields(dataSource, fieldsList, path, fieldsDataType) {
            var result = [];
            Object.keys(fieldsList || []).forEach(function(field) {
                if (field && 0 === field.indexOf("__")) {
                    return
                }
                var dataIndex = 1;
                var currentPath = path.length ? path + "." + field : field;
                var dataType = fieldsDataType[currentPath];
                var getter = (0, _data.compileGetter)(currentPath);
                var value = fieldsList[field];
                var items;
                while (!(0, _type.isDefined)(value) && dataSource[dataIndex]) {
                    value = getter(dataSource[dataIndex]);
                    dataIndex++
                }
                if (!dataType && (0, _type.isDefined)(value)) {
                    dataType = (0, _type.type)(value)
                }
                items = [{
                    dataField: currentPath,
                    dataType: dataType,
                    groupName: "date" === dataType ? field : void 0,
                    groupInterval: void 0,
                    displayFolder: path
                }];
                if ("date" === dataType) {
                    items = items.concat(createGroupFields(items[0]))
                } else {
                    if ("object" === dataType) {
                        items = parseFields(dataSource, value, currentPath, fieldsDataType)
                    }
                }
                result.push.apply(result, items)
            });
            return result
        }
        exports.discoverObjectFields = function(items, fields) {
            var fieldsDataType = exports.getFieldsDataType(fields);
            return parseFields(items, items[0], "", fieldsDataType)
        };
        exports.getFieldsDataType = function(fields) {
            var result = {};
            (0, _iterator.each)(fields, function(_, field) {
                result[field.dataField] = result[field.dataField] || field.dataType
            });
            return result
        };
        var DATE_INTERVAL_FORMATS = {
            month: function(value) {
                return (0, _date.getMonthNames)()[value - 1]
            },
            quarter: function(value) {
                return (0, _date.format)(new Date(2e3, 3 * value - 1), "quarter")
            },
            dayOfWeek: function(value) {
                return (0, _date.getDayNames)()[value]
            }
        };
        exports.setDefaultFieldValueFormatting = function(field) {
            if ("date" === field.dataType) {
                if (!field.format) {
                    setFieldProperty(field, "format", DATE_INTERVAL_FORMATS[field.groupInterval])
                }
            } else {
                if ("number" === field.dataType) {
                    var groupInterval = (0, _type.isNumeric)(field.groupInterval) && field.groupInterval > 0 && field.groupInterval;
                    if (groupInterval && !field.customizeText) {
                        setFieldProperty(field, "customizeText", function(formatObject) {
                            var secondValue = formatObject.value + groupInterval;
                            var secondValueText = (0, _format_helper.format)(secondValue, field.format);
                            return formatObject.valueText && secondValueText ? formatObject.valueText + " - " + secondValueText : ""
                        })
                    }
                }
            }
        };
        exports.getFiltersByPath = function(fields, path) {
            var result = [];
            path = path || [];
            for (var i = 0; i < path.length; i++) {
                result.push((0, _extend.extend)({}, fields[i], {
                    groupIndex: null,
                    groupName: null,
                    filterType: "include",
                    filterValues: [path[i]]
                }))
            }
            return result
        };
        exports.storeDrillDownMixin = {
            createDrillDownDataSource: function(descriptions, params) {
                var items = this.getDrillDownItems(descriptions, params);
                var arrayStore;

                function createCustomStoreMethod(methodName) {
                    return function(options) {
                        var d;
                        if (arrayStore) {
                            d = arrayStore[methodName](options)
                        } else {
                            d = new _deferred.Deferred;
                            (0, _deferred.when)(items).done(function(data) {
                                var arrayStore = new _array_store2.default(data);
                                arrayStore[methodName](options).done(d.resolve).fail(d.reject)
                            }).fail(d.reject)
                        }
                        return d
                    }
                }
                var dataSource = new _data_source.DataSource({
                    load: createCustomStoreMethod("load"),
                    totalCount: createCustomStoreMethod("totalCount"),
                    key: this.key()
                });
                return dataSource
            }
        };
        exports.capitalizeFirstLetter = function(string) {
            return string.charAt(0).toUpperCase() + string.slice(1)
        }
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/data_helper.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DataSource = __webpack_require__( /*! ./data/data_source/data_source */ 61).DataSource;
        var extend = __webpack_require__( /*! ./core/utils/extend */ 0).extend;
        var normalizeDataSourceOptions = __webpack_require__( /*! ./data/data_source/utils */ 64).normalizeDataSourceOptions;
        var DATA_SOURCE_OPTIONS_METHOD = "_dataSourceOptions";
        var DATA_SOURCE_CHANGED_METHOD = "_dataSourceChangedHandler";
        var DATA_SOURCE_LOAD_ERROR_METHOD = "_dataSourceLoadErrorHandler";
        var DATA_SOURCE_LOADING_CHANGED_METHOD = "_dataSourceLoadingChangedHandler";
        var DATA_SOURCE_FROM_URL_LOAD_MODE_METHOD = "_dataSourceFromUrlLoadMode";
        var SPECIFIC_DATA_SOURCE_OPTION = "_getSpecificDataSourceOption";
        var NORMALIZE_DATA_SOURCE = "_normalizeDataSource";
        var DataHelperMixin = {
            postCtor: function() {
                this.on("disposing", function() {
                    this._disposeDataSource()
                }.bind(this))
            },
            _refreshDataSource: function() {
                this._initDataSource();
                this._loadDataSource()
            },
            _initDataSource: function() {
                var dataSourceOptions = SPECIFIC_DATA_SOURCE_OPTION in this ? this[SPECIFIC_DATA_SOURCE_OPTION]() : this.option("dataSource");
                var widgetDataSourceOptions;
                var dataSourceType;
                this._disposeDataSource();
                if (dataSourceOptions) {
                    if (dataSourceOptions instanceof DataSource) {
                        this._isSharedDataSource = true;
                        this._dataSource = dataSourceOptions
                    } else {
                        widgetDataSourceOptions = DATA_SOURCE_OPTIONS_METHOD in this ? this[DATA_SOURCE_OPTIONS_METHOD]() : {};
                        dataSourceType = this._dataSourceType ? this._dataSourceType() : DataSource;
                        dataSourceOptions = normalizeDataSourceOptions(dataSourceOptions, {
                            fromUrlLoadMode: DATA_SOURCE_FROM_URL_LOAD_MODE_METHOD in this && this[DATA_SOURCE_FROM_URL_LOAD_MODE_METHOD]()
                        });
                        this._dataSource = new dataSourceType(extend(true, {}, widgetDataSourceOptions, dataSourceOptions))
                    }
                    if (NORMALIZE_DATA_SOURCE in this) {
                        this._dataSource = this[NORMALIZE_DATA_SOURCE](this._dataSource)
                    }
                    this._addDataSourceHandlers()
                }
            },
            _addDataSourceHandlers: function() {
                if (DATA_SOURCE_CHANGED_METHOD in this) {
                    this._addDataSourceChangeHandler()
                }
                if (DATA_SOURCE_LOAD_ERROR_METHOD in this) {
                    this._addDataSourceLoadErrorHandler()
                }
                if (DATA_SOURCE_LOADING_CHANGED_METHOD in this) {
                    this._addDataSourceLoadingChangedHandler()
                }
                this._addReadyWatcher()
            },
            _addReadyWatcher: function() {
                this._dataSource.on("loadingChanged", function(isLoading) {
                    this._ready && this._ready(!isLoading)
                }.bind(this))
            },
            _addDataSourceChangeHandler: function() {
                var dataSource = this._dataSource;
                this._proxiedDataSourceChangedHandler = function(e) {
                    this[DATA_SOURCE_CHANGED_METHOD](dataSource.items(), e)
                }.bind(this);
                dataSource.on("changed", this._proxiedDataSourceChangedHandler)
            },
            _addDataSourceLoadErrorHandler: function() {
                this._proxiedDataSourceLoadErrorHandler = this[DATA_SOURCE_LOAD_ERROR_METHOD].bind(this);
                this._dataSource.on("loadError", this._proxiedDataSourceLoadErrorHandler)
            },
            _addDataSourceLoadingChangedHandler: function() {
                this._proxiedDataSourceLoadingChangedHandler = this[DATA_SOURCE_LOADING_CHANGED_METHOD].bind(this);
                this._dataSource.on("loadingChanged", this._proxiedDataSourceLoadingChangedHandler)
            },
            _loadDataSource: function() {
                if (this._dataSource) {
                    var dataSource = this._dataSource;
                    if (dataSource.isLoaded()) {
                        this._proxiedDataSourceChangedHandler && this._proxiedDataSourceChangedHandler()
                    } else {
                        dataSource.load()
                    }
                }
            },
            _loadSingle: function(key, value) {
                key = "this" === key ? this._dataSource.key() || "this" : key;
                return this._dataSource.loadSingle(key, value)
            },
            _isLastPage: function() {
                return !this._dataSource || this._dataSource.isLastPage() || !this._dataSource._pageSize
            },
            _isDataSourceLoading: function() {
                return this._dataSource && this._dataSource.isLoading()
            },
            _disposeDataSource: function() {
                if (this._dataSource) {
                    if (this._isSharedDataSource) {
                        delete this._isSharedDataSource;
                        this._proxiedDataSourceChangedHandler && this._dataSource.off("changed", this._proxiedDataSourceChangedHandler);
                        this._proxiedDataSourceLoadErrorHandler && this._dataSource.off("loadError", this._proxiedDataSourceLoadErrorHandler);
                        this._proxiedDataSourceLoadingChangedHandler && this._dataSource.off("loadingChanged", this._proxiedDataSourceLoadingChangedHandler)
                    } else {
                        this._dataSource.dispose()
                    }
                    delete this._dataSource;
                    delete this._proxiedDataSourceChangedHandler;
                    delete this._proxiedDataSourceLoadErrorHandler;
                    delete this._proxiedDataSourceLoadingChangedHandler
                }
            },
            getDataSource: function() {
                return this._dataSource || null
            }
        };
        module.exports = DataHelperMixin
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/localization/core.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dependency_injector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56);
        var _dependency_injector2 = _interopRequireDefault(_dependency_injector);
        var _parent_locales = __webpack_require__( /*! ./cldr-data/parent_locales */ 452);
        var _parent_locales2 = _interopRequireDefault(_parent_locales);
        var _parentLocale = __webpack_require__( /*! ./parentLocale */ 453);
        var _parentLocale2 = _interopRequireDefault(_parentLocale);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_LOCALE = "en";
        module.exports = (0, _dependency_injector2.default)({
            locale: function() {
                var currentLocale = DEFAULT_LOCALE;
                return function(locale) {
                    if (!locale) {
                        return currentLocale
                    }
                    currentLocale = locale
                }
            }(),
            getValueByClosestLocale: function(getter) {
                var locale = this.locale();
                var value = getter(locale);
                var isRootLocale;
                while (!value && !isRootLocale) {
                    locale = (0, _parentLocale2.default)(_parent_locales2.default, locale);
                    if (locale) {
                        value = getter(locale)
                    } else {
                        isRootLocale = true
                    }
                }
                if (void 0 === value && locale !== DEFAULT_LOCALE) {
                    return getter(DEFAULT_LOCALE)
                }
                return value
            }
        })
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.tag_helper.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var tagHelper = {
            toXml: function(tagName, attributes, content) {
                var result = ["<", tagName];
                for (var attributeName in attributes) {
                    var attributeValue = attributes[attributeName];
                    if ((0, _type.isDefined)(attributeValue)) {
                        result.push(" ", attributeName, '="', attributeValue, '"')
                    }
                }
                if ((0, _type.isDefined)(content) && "" !== content) {
                    result.push(">", content, "</", tagName, ">")
                } else {
                    result.push(" />")
                }
                return result.join("")
            }
        };
        exports.default = tagHelper
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/use_jquery.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var config = __webpack_require__( /*! ../../core/config */ 30);
        var useJQuery = config().useJQuery;
        if (jQuery && false !== useJQuery) {
            config({
                useJQuery: true
            })
        }
        module.exports = function() {
            return jQuery && config().useJQuery
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/store_helper.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var grep = __webpack_require__( /*! ../core/utils/common */ 3).grep;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var arrayQuery = __webpack_require__( /*! ./array_query */ 161);
        var normalizeSortingInfo = __webpack_require__( /*! ./utils */ 42).normalizeSortingInfo;

        function multiLevelGroup(query, groupInfo) {
            query = query.groupBy(groupInfo[0].selector);
            if (groupInfo.length > 1) {
                query = query.select(function(g) {
                    return extend({}, g, {
                        items: multiLevelGroup(arrayQuery(g.items), groupInfo.slice(1)).toArray()
                    })
                })
            }
            return query
        }

        function arrangeSortingInfo(groupInfo, sortInfo) {
            var filteredGroup = [];
            each(groupInfo, function(_, group) {
                var collision = grep(sortInfo, function(sort) {
                    return group.selector === sort.selector
                });
                if (collision.length < 1) {
                    filteredGroup.push(group)
                }
            });
            return filteredGroup.concat(sortInfo)
        }

        function queryByOptions(query, options, isCountQuery) {
            options = options || {};
            var filter = options.filter;
            if (filter) {
                query = query.filter(filter)
            }
            if (isCountQuery) {
                return query
            }
            var sort = options.sort;
            var select = options.select;
            var group = options.group;
            var skip = options.skip;
            var take = options.take;
            if (group) {
                group = normalizeSortingInfo(group);
                group.keepInitialKeyOrder = !!options.group.keepInitialKeyOrder
            }
            if (sort || group) {
                sort = normalizeSortingInfo(sort || []);
                if (group && !group.keepInitialKeyOrder) {
                    sort = arrangeSortingInfo(group, sort)
                }
                each(sort, function(index) {
                    query = query[index ? "thenBy" : "sortBy"](this.selector, this.desc, this.compare)
                })
            }
            if (select) {
                query = query.select(select)
            }
            if (group) {
                query = multiLevelGroup(query, group)
            }
            if (take || skip) {
                query = query.slice(skip || 0, take)
            }
            return query
        }
        module.exports = {
            multiLevelGroup: multiLevelGroup,
            arrangeSortingInfo: arrangeSortingInfo,
            queryByOptions: queryByOptions
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/empty_template.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.EmptyTemplate = void 0;
        var _renderer = __webpack_require__( /*! ../renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _template_base = __webpack_require__( /*! ./template_base */ 78);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        exports.EmptyTemplate = function(_TemplateBase) {
            _inherits(EmptyTemplate, _TemplateBase);
            var _super = _createSuper(EmptyTemplate);

            function EmptyTemplate() {
                _classCallCheck(this, EmptyTemplate);
                return _super.apply(this, arguments)
            }
            _createClass(EmptyTemplate, [{
                key: "_renderCore",
                value: function() {
                    return (0, _renderer2.default)()
                }
            }]);
            return EmptyTemplate
        }(_template_base.TemplateBase)
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/text_box.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./text_box/text_box */ 527)
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scrollable.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var _support2 = _interopRequireDefault(_support);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom_component = __webpack_require__( /*! ../../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _selectors2 = _interopRequireDefault(_selectors);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _uiEventsEmitterGesture = __webpack_require__( /*! ./ui.events.emitter.gesture.scroll */ 229);
        var _uiEventsEmitterGesture2 = _interopRequireDefault(_uiEventsEmitterGesture);
        var _uiScrollable = __webpack_require__( /*! ./ui.scrollable.simulated */ 317);
        var _uiScrollable2 = _interopRequireDefault(_uiScrollable);
        var _uiScrollable3 = __webpack_require__( /*! ./ui.scrollable.native */ 228);
        var _uiScrollable4 = _interopRequireDefault(_uiScrollable3);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCROLLABLE = "dxScrollable";
        var SCROLLABLE_STRATEGY = "dxScrollableStrategy";
        var SCROLLABLE_CLASS = "dx-scrollable";
        var SCROLLABLE_DISABLED_CLASS = "dx-scrollable-disabled";
        var SCROLLABLE_CONTAINER_CLASS = "dx-scrollable-container";
        var SCROLLABLE_WRAPPER_CLASS = "dx-scrollable-wrapper";
        var SCROLLABLE_CONTENT_CLASS = "dx-scrollable-content";
        var VERTICAL = "vertical";
        var HORIZONTAL = "horizontal";
        var BOTH = "both";
        var deviceDependentOptions = function() {
            return [{
                device: function() {
                    return !_support2.default.nativeScrolling
                },
                options: {
                    useNative: false
                }
            }, {
                device: function(_device) {
                    return !_devices2.default.isSimulator() && "desktop" === _devices2.default.real().deviceType && "generic" === _device.platform
                },
                options: {
                    bounceEnabled: false,
                    scrollByThumb: true,
                    scrollByContent: _support2.default.touch,
                    showScrollbar: "onHover"
                }
            }]
        };
        var Scrollable = _dom_component2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    disabled: false,
                    onScroll: null,
                    direction: VERTICAL,
                    showScrollbar: "onScroll",
                    useNative: true,
                    bounceEnabled: true,
                    scrollByContent: true,
                    scrollByThumb: false,
                    onUpdated: null,
                    onStart: null,
                    onEnd: null,
                    onBounce: null,
                    onStop: null,
                    useSimulatedScrollbar: false,
                    useKeyboard: true,
                    inertiaEnabled: true,
                    pushBackValue: 0,
                    updateManually: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat(deviceDependentOptions(), [{
                    device: function() {
                        return _support2.default.nativeScrolling && "android" === _devices2.default.real().platform && !_browser2.default.mozilla
                    },
                    options: {
                        useSimulatedScrollbar: true
                    }
                }, {
                    device: function() {
                        return "ios" === _devices2.default.real().platform
                    },
                    options: {
                        pushBackValue: 1
                    }
                }])
            },
            _initOptions: function(options) {
                this.callBase(options);
                if (!("useSimulatedScrollbar" in options)) {
                    this._setUseSimulatedScrollbar()
                }
            },
            _setUseSimulatedScrollbar: function() {
                if (!this.initialOption("useSimulatedScrollbar")) {
                    this.option("useSimulatedScrollbar", !this.option("useNative"))
                }
            },
            _init: function() {
                this.callBase();
                this._initScrollableMarkup();
                this._locked = false
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this.update();
                    this._updateRtlPosition();
                    this._savedScrollOffset && this.scrollTo(this._savedScrollOffset);
                    delete this._savedScrollOffset
                } else {
                    this._savedScrollOffset = this.scrollOffset()
                }
            },
            _initScrollableMarkup: function() {
                var $element = this.$element().addClass(SCROLLABLE_CLASS);
                var $container = this._$container = (0, _renderer2.default)("<div>").addClass(SCROLLABLE_CONTAINER_CLASS);
                var $wrapper = this._$wrapper = (0, _renderer2.default)("<div>").addClass(SCROLLABLE_WRAPPER_CLASS);
                var $content = this._$content = (0, _renderer2.default)("<div>").addClass(SCROLLABLE_CONTENT_CLASS);
                if (_dom_adapter2.default.hasDocumentProperty("onbeforeactivate") && _browser2.default.msie && _browser2.default.version < 12) {
                    _events_engine2.default.on($element, eventUtils.addNamespace("beforeactivate", SCROLLABLE), function(e) {
                        if (!(0, _renderer2.default)(e.target).is(_selectors2.default.focusable)) {
                            e.preventDefault()
                        }
                    })
                }
                $content.append($element.contents()).appendTo($container);
                $container.appendTo($wrapper);
                $wrapper.appendTo($element)
            },
            _dimensionChanged: function() {
                this.update()
            },
            _initMarkup: function() {
                this.callBase();
                this._renderDirection()
            },
            _render: function() {
                this._renderStrategy();
                this._attachEventHandlers();
                this._renderDisabledState();
                this._createActions();
                this.update();
                this.callBase();
                this._updateRtlPosition()
            },
            _updateRtlPosition: function() {
                var _this = this;
                this._updateBounds();
                if (this.option("rtlEnabled") && this.option("direction") !== VERTICAL) {
                    _common2.default.deferUpdate(function() {
                        var containerElement = _this._container().get(0);
                        var maxLeftOffset = containerElement.scrollWidth - containerElement.clientWidth;
                        _common2.default.deferRender(function() {
                            _this.scrollTo({
                                left: maxLeftOffset
                            })
                        })
                    })
                }
            },
            _updateBounds: function() {
                this._strategy.updateBounds()
            },
            _attachEventHandlers: function() {
                var strategy = this._strategy;
                var initEventData = {
                    getDirection: strategy.getDirection.bind(strategy),
                    validate: this._validate.bind(this),
                    isNative: this.option("useNative"),
                    scrollTarget: this._$container
                };
                _events_engine2.default.off(this._$wrapper, "." + SCROLLABLE);
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.init, SCROLLABLE), initEventData, this._initHandler.bind(this));
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.start, SCROLLABLE), strategy.handleStart.bind(strategy));
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.move, SCROLLABLE), strategy.handleMove.bind(strategy));
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.end, SCROLLABLE), strategy.handleEnd.bind(strategy));
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.cancel, SCROLLABLE), strategy.handleCancel.bind(strategy));
                _events_engine2.default.on(this._$wrapper, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.stop, SCROLLABLE), strategy.handleStop.bind(strategy));
                _events_engine2.default.off(this._$container, "." + SCROLLABLE);
                _events_engine2.default.on(this._$container, eventUtils.addNamespace("scroll", SCROLLABLE), strategy.handleScroll.bind(strategy))
            },
            _validate: function(e) {
                if (this._isLocked()) {
                    return false
                }
                this._updateIfNeed();
                return this._strategy.validate(e)
            },
            _initHandler: function() {
                var strategy = this._strategy;
                strategy.handleInit.apply(strategy, arguments)
            },
            _renderDisabledState: function() {
                this.$element().toggleClass(SCROLLABLE_DISABLED_CLASS, this.option("disabled"));
                if (this.option("disabled")) {
                    this._lock()
                } else {
                    this._unlock()
                }
            },
            _renderDirection: function() {
                this.$element().removeClass("dx-scrollable-" + HORIZONTAL).removeClass("dx-scrollable-" + VERTICAL).removeClass("dx-scrollable-" + BOTH).addClass("dx-scrollable-" + this.option("direction"))
            },
            _renderStrategy: function() {
                this._createStrategy();
                this._strategy.render();
                this.$element().data(SCROLLABLE_STRATEGY, this._strategy)
            },
            _createStrategy: function() {
                this._strategy = this.option("useNative") ? new _uiScrollable4.default(this) : new _uiScrollable2.default.SimulatedStrategy(this)
            },
            _createActions: function() {
                this._strategy && this._strategy.createActions()
            },
            _clean: function() {
                this._strategy && this._strategy.dispose()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onStart":
                    case "onEnd":
                    case "onStop":
                    case "onUpdated":
                    case "onScroll":
                    case "onBounce":
                        this._createActions();
                        break;
                    case "direction":
                        this._resetInactiveDirection();
                        this._invalidate();
                        break;
                    case "useNative":
                        this._setUseSimulatedScrollbar();
                        this._invalidate();
                        break;
                    case "inertiaEnabled":
                    case "scrollByContent":
                    case "scrollByThumb":
                    case "bounceEnabled":
                    case "useKeyboard":
                    case "showScrollbar":
                    case "useSimulatedScrollbar":
                    case "pushBackValue":
                        this._invalidate();
                        break;
                    case "disabled":
                        this._renderDisabledState();
                        this._strategy && this._strategy.disabledChanged();
                        break;
                    case "updateManually":
                        break;
                    case "width":
                        this.callBase(args);
                        this._updateRtlPosition();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _resetInactiveDirection: function() {
                var inactiveProp = this._getInactiveProp();
                if (!inactiveProp || !_window2.default.hasWindow()) {
                    return
                }
                var scrollOffset = this.scrollOffset();
                scrollOffset[inactiveProp] = 0;
                this.scrollTo(scrollOffset)
            },
            _getInactiveProp: function() {
                var direction = this.option("direction");
                if (direction === VERTICAL) {
                    return "left"
                }
                if (direction === HORIZONTAL) {
                    return "top"
                }
            },
            _location: function() {
                return this._strategy.location()
            },
            _normalizeLocation: function(location) {
                if (_type2.default.isPlainObject(location)) {
                    var left = _common2.default.ensureDefined(location.left, location.x);
                    var top = _common2.default.ensureDefined(location.top, location.y);
                    return {
                        left: _type2.default.isDefined(left) ? -left : void 0,
                        top: _type2.default.isDefined(top) ? -top : void 0
                    }
                } else {
                    var direction = this.option("direction");
                    return {
                        left: direction !== VERTICAL ? -location : void 0,
                        top: direction !== HORIZONTAL ? -location : void 0
                    }
                }
            },
            _isLocked: function() {
                return this._locked
            },
            _lock: function() {
                this._locked = true
            },
            _unlock: function() {
                if (!this.option("disabled")) {
                    this._locked = false
                }
            },
            _isDirection: function(direction) {
                var current = this.option("direction");
                if (direction === VERTICAL) {
                    return current !== HORIZONTAL
                }
                if (direction === HORIZONTAL) {
                    return current !== VERTICAL
                }
                return current === direction
            },
            _updateAllowedDirection: function() {
                var allowedDirections = this._strategy._allowedDirections();
                if (this._isDirection(BOTH) && allowedDirections.vertical && allowedDirections.horizontal) {
                    this._allowedDirectionValue = BOTH
                } else {
                    if (this._isDirection(HORIZONTAL) && allowedDirections.horizontal) {
                        this._allowedDirectionValue = HORIZONTAL
                    } else {
                        if (this._isDirection(VERTICAL) && allowedDirections.vertical) {
                            this._allowedDirectionValue = VERTICAL
                        } else {
                            this._allowedDirectionValue = null
                        }
                    }
                }
            },
            _allowedDirection: function() {
                return this._allowedDirectionValue
            },
            _container: function() {
                return this._$container
            },
            $content: function() {
                return this._$content
            },
            content: function() {
                return (0, _dom.getPublicElement)(this._$content)
            },
            scrollOffset: function() {
                var location = this._location();
                return {
                    top: -location.top,
                    left: -location.left
                }
            },
            scrollTop: function() {
                return this.scrollOffset().top
            },
            scrollLeft: function() {
                return this.scrollOffset().left
            },
            clientHeight: function() {
                return this._$container.height()
            },
            scrollHeight: function() {
                return this.$content().outerHeight() - 2 * this._strategy.verticalOffset()
            },
            clientWidth: function() {
                return this._$container.width()
            },
            scrollWidth: function() {
                return this.$content().outerWidth()
            },
            update: function() {
                if (!this._strategy) {
                    return
                }
                return (0, _deferred.when)(this._strategy.update()).done(function() {
                    this._updateAllowedDirection()
                }.bind(this))
            },
            scrollBy: function(distance) {
                distance = this._normalizeLocation(distance);
                if (!distance.top && !distance.left) {
                    return
                }
                this._updateIfNeed();
                this._strategy.scrollBy(distance)
            },
            scrollTo: function(targetLocation) {
                targetLocation = this._normalizeLocation(targetLocation);
                this._updateIfNeed();
                var location = this._location();
                if (!this.option("useNative")) {
                    targetLocation = this._strategy._applyScaleRatio(targetLocation);
                    location = this._strategy._applyScaleRatio(location)
                }
                var distance = this._normalizeLocation({
                    left: location.left - _common2.default.ensureDefined(targetLocation.left, location.left),
                    top: location.top - _common2.default.ensureDefined(targetLocation.top, location.top)
                });
                if (!distance.top && !distance.left) {
                    return
                }
                this._strategy.scrollBy(distance)
            },
            scrollToElement: function(element, offset) {
                var $element = (0, _renderer2.default)(element);
                var elementInsideContent = this.$content().find(element).length;
                var elementIsInsideContent = $element.parents("." + SCROLLABLE_CLASS).length - $element.parents("." + SCROLLABLE_CONTENT_CLASS).length === 0;
                if (!elementInsideContent || !elementIsInsideContent) {
                    return
                }
                var scrollPosition = {
                    top: 0,
                    left: 0
                };
                var direction = this.option("direction");
                if (direction !== VERTICAL) {
                    scrollPosition.left = this.getScrollElementPosition($element, HORIZONTAL, offset)
                }
                if (direction !== HORIZONTAL) {
                    scrollPosition.top = this.getScrollElementPosition($element, VERTICAL, offset)
                }
                this.scrollTo(scrollPosition)
            },
            scrollToElementTopLeft: function(element) {
                var $element = (0, _renderer2.default)(element);
                var elementInsideContent = this.$content().find(element).length;
                var elementIsInsideContent = $element.parents("." + SCROLLABLE_CLASS).length - $element.parents("." + SCROLLABLE_CONTENT_CLASS).length === 0;
                if (!elementInsideContent || !elementIsInsideContent) {
                    return
                }
                var scrollPosition = {
                    top: 0,
                    left: 0
                };
                var direction = this.option("direction");
                if (direction !== VERTICAL) {
                    var leftPosition = this._elementPositionRelativeToContent($element, "left");
                    scrollPosition.left = true === this.option("rtlEnabled") ? leftPosition + $element.width() - this.clientWidth() : leftPosition
                }
                if (direction !== HORIZONTAL) {
                    scrollPosition.top = this._elementPositionRelativeToContent($element, "top")
                }
                this.scrollTo(scrollPosition)
            },
            getScrollElementPosition: function($element, direction, offset) {
                offset = offset || {};
                var isVertical = direction === VERTICAL;
                var startOffset = (isVertical ? offset.top : offset.left) || 0;
                var endOffset = (isVertical ? offset.bottom : offset.right) || 0;
                var pushBackOffset = isVertical ? this._strategy.verticalOffset() : 0;
                var elementPositionRelativeToContent = this._elementPositionRelativeToContent($element, isVertical ? "top" : "left");
                var elementPosition = elementPositionRelativeToContent - pushBackOffset;
                var elementSize = $element[isVertical ? "outerHeight" : "outerWidth"]();
                var scrollLocation = isVertical ? this.scrollTop() : this.scrollLeft();
                var clientSize = isVertical ? this.clientHeight() : this.clientWidth();
                var startDistance = scrollLocation - elementPosition + startOffset;
                var endDistance = scrollLocation - elementPosition - elementSize + clientSize - endOffset;
                if (startDistance <= 0 && endDistance >= 0) {
                    return scrollLocation
                }
                return scrollLocation - (Math.abs(startDistance) > Math.abs(endDistance) ? endDistance : startDistance)
            },
            _elementPositionRelativeToContent: function($element, prop) {
                var result = 0;
                while (this._hasScrollContent($element)) {
                    result += $element.position()[prop];
                    $element = $element.offsetParent()
                }
                return result
            },
            _hasScrollContent: function($element) {
                var $content = this.$content();
                return $element.closest($content).length && !$element.is($content)
            },
            _updateIfNeed: function() {
                if (!this.option("updateManually")) {
                    this.update()
                }
            },
            _useTemplates: function() {
                return false
            }
        });
        (0, _component_registrator2.default)(SCROLLABLE, Scrollable);
        module.exports = Scrollable;
        module.exports.deviceDependentOptions = deviceDependentOptions
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.importer.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var Diagram = __webpack_require__( /*! devexpress-diagram */ 777);

        function getDiagram() {
            if (!Diagram) {
                throw Errors.Error("E1041", "devexpress-diagram")
            }
            return Diagram
        }
        module.exports.getDiagram = getDiagram
    },
    /*!***************************************!*\
      !*** ./artifacts/transpiled/color.js ***!
      \***************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var standardColorNames = {
            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",
            darkkhaki: "bdb76b",
            darkmagenta: "8b008b",
            darkolivegreen: "556b2f",
            darkorange: "ff8c00",
            darkorchid: "9932cc",
            darkred: "8b0000",
            darksalmon: "e9967a",
            darkseagreen: "8fbc8f",
            darkslateblue: "483d8b",
            darkslategray: "2f4f4f",
            darkturquoise: "00ced1",
            darkviolet: "9400d3",
            deeppink: "ff1493",
            deepskyblue: "00bfff",
            dimgray: "696969",
            dodgerblue: "1e90ff",
            feldspar: "d19275",
            firebrick: "b22222",
            floralwhite: "fffaf0",
            forestgreen: "228b22",
            fuchsia: "ff00ff",
            gainsboro: "dcdcdc",
            ghostwhite: "f8f8ff",
            gold: "ffd700",
            goldenrod: "daa520",
            gray: "808080",
            green: "008000",
            greenyellow: "adff2f",
            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",
            lightgrey: "d3d3d3",
            lightgreen: "90ee90",
            lightpink: "ffb6c1",
            lightsalmon: "ffa07a",
            lightseagreen: "20b2aa",
            lightskyblue: "87cefa",
            lightslateblue: "8470ff",
            lightslategray: "778899",
            lightsteelblue: "b0c4de",
            lightyellow: "ffffe0",
            lime: "00ff00",
            limegreen: "32cd32",
            linen: "faf0e6",
            magenta: "ff00ff",
            maroon: "800000",
            mediumaquamarine: "66cdaa",
            mediumblue: "0000cd",
            mediumorchid: "ba55d3",
            mediumpurple: "9370d8",
            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: "d87093",
            papayawhip: "ffefd5",
            peachpuff: "ffdab9",
            peru: "cd853f",
            pink: "ffc0cb",
            plum: "dda0dd",
            powderblue: "b0e0e6",
            purple: "800080",
            rebeccapurple: "663399",
            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",
            snow: "fffafa",
            springgreen: "00ff7f",
            steelblue: "4682b4",
            tan: "d2b48c",
            teal: "008080",
            thistle: "d8bfd8",
            tomato: "ff6347",
            turquoise: "40e0d0",
            violet: "ee82ee",
            violetred: "d02090",
            wheat: "f5deb3",
            white: "ffffff",
            whitesmoke: "f5f5f5",
            yellow: "ffff00",
            yellowgreen: "9acd32"
        };
        var standardColorTypes = [{
            re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            process: function(colorString) {
                return [parseInt(colorString[1], 10), parseInt(colorString[2], 10), parseInt(colorString[3], 10)]
            }
        }, {
            re: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*\.*\d+)\)$/,
            process: function(colorString) {
                return [parseInt(colorString[1], 10), parseInt(colorString[2], 10), parseInt(colorString[3], 10), parseFloat(colorString[4])]
            }
        }, {
            re: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/,
            process: function(colorString) {
                return [parseInt(colorString[1], 16), parseInt(colorString[2], 16), parseInt(colorString[3], 16)]
            }
        }, {
            re: /^#([a-f0-9]{1})([a-f0-9]{1})([a-f0-9]{1})$/,
            process: function(colorString) {
                return [parseInt(colorString[1] + colorString[1], 16), parseInt(colorString[2] + colorString[2], 16), parseInt(colorString[3] + colorString[3], 16)]
            }
        }, {
            re: /^hsv\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            process: function(colorString) {
                var h = parseInt(colorString[1], 10);
                var s = parseInt(colorString[2], 10);
                var v = parseInt(colorString[3], 10);
                var rgb = hsvToRgb(h, s, v);
                return [rgb[0], rgb[1], rgb[2], 1, [h, s, v]]
            }
        }, {
            re: /^hsl\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            process: function(colorString) {
                var h = parseInt(colorString[1], 10);
                var s = parseInt(colorString[2], 10);
                var l = parseInt(colorString[3], 10);
                var rgb = hslToRgb(h, s, l);
                return [rgb[0], rgb[1], rgb[2], 1, null, [h, s, l]]
            }
        }];
        var _round = Math.round;

        function Color(value) {
            this.baseColor = value;
            var color;
            if (value) {
                color = String(value).toLowerCase().replace(/ /g, "");
                color = standardColorNames[color] ? "#" + standardColorNames[color] : color;
                color = parseColor(color)
            }
            if (!color) {
                this.colorIsInvalid = true
            }
            color = color || {};
            this.r = normalize(color[0]);
            this.g = normalize(color[1]);
            this.b = normalize(color[2]);
            this.a = normalize(color[3], 1, 1);
            if (color[4]) {
                this.hsv = {
                    h: color[4][0],
                    s: color[4][1],
                    v: color[4][2]
                }
            } else {
                this.hsv = toHsvFromRgb(this.r, this.g, this.b)
            }
            if (color[5]) {
                this.hsl = {
                    h: color[5][0],
                    s: color[5][1],
                    l: color[5][2]
                }
            } else {
                this.hsl = toHslFromRgb(this.r, this.g, this.b)
            }
        }

        function parseColor(color) {
            if ("transparent" === color) {
                return [0, 0, 0, 0]
            }
            var i = 0;
            var ii = standardColorTypes.length;
            var str;
            for (; i < ii; ++i) {
                str = standardColorTypes[i].re.exec(color);
                if (str) {
                    return standardColorTypes[i].process(str)
                }
            }
            return null
        }

        function normalize(colorComponent, def, max) {
            def = def || 0;
            max = max || 255;
            return colorComponent < 0 || isNaN(colorComponent) ? def : colorComponent > max ? max : colorComponent
        }

        function toHexFromRgb(r, g, b) {
            return "#" + (16777216 | r << 16 | g << 8 | b).toString(16).slice(1)
        }

        function toHsvFromRgb(r, g, b) {
            var max = Math.max(r, g, b);
            var min = Math.min(r, g, b);
            var delta = max - min;
            var H;
            var S;
            var V = max;
            S = 0 === max ? 0 : 1 - min / max;
            if (max === min) {
                H = 0
            } else {
                switch (max) {
                    case r:
                        H = 60 * ((g - b) / delta);
                        if (g < b) {
                            H += 360
                        }
                        break;
                    case g:
                        H = 60 * ((b - r) / delta) + 120;
                        break;
                    case b:
                        H = 60 * ((r - g) / delta) + 240
                }
            }
            S *= 100;
            V *= 100 / 255;
            return {
                h: Math.round(H),
                s: Math.round(S),
                v: Math.round(V)
            }
        }

        function hsvToRgb(h, s, v) {
            var index = Math.floor(h % 360 / 60);
            var vMin = (100 - s) * v / 100;
            var a = (v - vMin) * (h % 60 / 60);
            var vInc = vMin + a;
            var vDec = v - a;
            var r;
            var g;
            var b;
            switch (index) {
                case 0:
                    r = v;
                    g = vInc;
                    b = vMin;
                    break;
                case 1:
                    r = vDec;
                    g = v;
                    b = vMin;
                    break;
                case 2:
                    r = vMin;
                    g = v;
                    b = vInc;
                    break;
                case 3:
                    r = vMin;
                    g = vDec;
                    b = v;
                    break;
                case 4:
                    r = vInc;
                    g = vMin;
                    b = v;
                    break;
                case 5:
                    r = v;
                    g = vMin;
                    b = vDec
            }
            return [Math.round(2.55 * r), Math.round(2.55 * g), Math.round(2.55 * b)]
        }

        function calculateHue(r, g, b, delta) {
            var max = Math.max(r, g, b);
            switch (max) {
                case r:
                    return (g - b) / delta + (g < b ? 6 : 0);
                case g:
                    return (b - r) / delta + 2;
                case b:
                    return (r - g) / delta + 4
            }
        }

        function toHslFromRgb(r, g, b) {
            r = convertTo01Bounds(r, 255);
            g = convertTo01Bounds(g, 255);
            b = convertTo01Bounds(b, 255);
            var max = Math.max(r, g, b);
            var min = Math.min(r, g, b);
            var maxMinSum = max + min;
            var h;
            var s;
            var l = maxMinSum / 2;
            if (max === min) {
                h = s = 0
            } else {
                var delta = max - min;
                if (l > .5) {
                    s = delta / (2 - maxMinSum)
                } else {
                    s = delta / maxMinSum
                }
                h = calculateHue(r, g, b, delta);
                h /= 6
            }
            return {
                h: _round(360 * h),
                s: _round(100 * s),
                l: _round(100 * l)
            }
        }

        function makeColorTint(colorPart, h) {
            var colorTint = h;
            if ("r" === colorPart) {
                colorTint = h + 1 / 3
            }
            if ("b" === colorPart) {
                colorTint = h - 1 / 3
            }
            return colorTint
        }

        function modifyColorTint(colorTint) {
            if (colorTint < 0) {
                colorTint += 1
            }
            if (colorTint > 1) {
                colorTint -= 1
            }
            return colorTint
        }

        function hueToRgb(p, q, colorTint) {
            colorTint = modifyColorTint(colorTint);
            if (colorTint < 1 / 6) {
                return p + 6 * (q - p) * colorTint
            }
            if (colorTint < .5) {
                return q
            }
            if (colorTint < 2 / 3) {
                return p + (q - p) * (2 / 3 - colorTint) * 6
            }
            return p
        }

        function hslToRgb(h, s, l) {
            var r;
            var g;
            var b;
            h = convertTo01Bounds(h, 360);
            s = convertTo01Bounds(s, 100);
            l = convertTo01Bounds(l, 100);
            if (0 === s) {
                r = g = b = l
            } else {
                var q = l < .5 ? l * (1 + s) : l + s - l * s;
                var p = 2 * l - q;
                r = hueToRgb(p, q, makeColorTint("r", h));
                g = hueToRgb(p, q, makeColorTint("g", h));
                b = hueToRgb(p, q, makeColorTint("b", h))
            }
            return [_round(255 * r), _round(255 * g), _round(255 * b)]
        }

        function convertTo01Bounds(n, max) {
            n = Math.min(max, Math.max(0, parseFloat(n)));
            if (Math.abs(n - max) < 1e-6) {
                return 1
            }
            return n % max / parseFloat(max)
        }

        function isIntegerBetweenMinAndMax(number, min, max) {
            min = min || 0;
            max = max || 255;
            if (number % 1 !== 0 || number < min || number > max || "number" !== typeof number || isNaN(number)) {
                return false
            }
            return true
        }
        Color.prototype = {
            constructor: Color,
            highlight: function(step) {
                step = step || 10;
                return this.alter(step).toHex()
            },
            darken: function(step) {
                step = step || 10;
                return this.alter(-step).toHex()
            },
            alter: function(step) {
                var result = new Color;
                result.r = normalize(this.r + step);
                result.g = normalize(this.g + step);
                result.b = normalize(this.b + step);
                return result
            },
            blend: function(blendColor, opacity) {
                var other = blendColor instanceof Color ? blendColor : new Color(blendColor);
                var result = new Color;
                result.r = normalize(_round(this.r * (1 - opacity) + other.r * opacity));
                result.g = normalize(_round(this.g * (1 - opacity) + other.g * opacity));
                result.b = normalize(_round(this.b * (1 - opacity) + other.b * opacity));
                return result
            },
            toHex: function() {
                return toHexFromRgb(this.r, this.g, this.b)
            },
            getPureColor: function() {
                var rgb = hsvToRgb(this.hsv.h, 100, 100);
                return new Color("rgb(" + rgb.join(",") + ")")
            },
            isValidHex: function(hex) {
                return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex)
            },
            isValidRGB: function(r, g, b) {
                if (!isIntegerBetweenMinAndMax(r) || !isIntegerBetweenMinAndMax(g) || !isIntegerBetweenMinAndMax(b)) {
                    return false
                }
                return true
            },
            isValidAlpha: function(a) {
                if (isNaN(a) || a < 0 || a > 1 || "number" !== typeof a) {
                    return false
                }
                return true
            },
            colorIsInvalid: false,
            fromHSL: function(hsl) {
                var color = new Color;
                var rgb = hslToRgb(hsl.h, hsl.s, hsl.l);
                color.r = rgb[0];
                color.g = rgb[1];
                color.b = rgb[2];
                return color
            }
        };
        module.exports = Color
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/validation_engine.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _class = __webpack_require__( /*! ../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _events_strategy = __webpack_require__( /*! ../core/events_strategy */ 100);
        var _errors = __webpack_require__( /*! ../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _number = __webpack_require__( /*! ../localization/number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _message = __webpack_require__( /*! ../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _promise = __webpack_require__( /*! ../core/polyfills/promise */ 67);
        var _promise2 = _interopRequireDefault(_promise);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

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

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var STATUS = {
            valid: "valid",
            invalid: "invalid",
            pending: "pending"
        };
        var BaseRuleValidator = function() {
            function BaseRuleValidator() {
                _classCallCheck(this, BaseRuleValidator);
                this.NAME = "base"
            }
            _createClass(BaseRuleValidator, [{
                key: "defaultMessage",
                value: function(value) {
                    return _message2.default.getFormatter("validation-".concat(this.NAME))(value)
                }
            }, {
                key: "defaultFormattedMessage",
                value: function(value) {
                    return _message2.default.getFormatter("validation-".concat(this.NAME, "-formatted"))(value)
                }
            }, {
                key: "_isValueEmpty",
                value: function(value) {
                    return !rulesValidators.required.validate(value, {})
                }
            }, {
                key: "validate",
                value: function(value, rule) {
                    var _this = this;
                    var valueArray = Array.isArray(value) ? value : [value];
                    var result = true;
                    if (valueArray.length) {
                        valueArray.every(function(itemValue) {
                            result = _this._validate(itemValue, rule);
                            return result
                        })
                    } else {
                        result = this._validate(null, rule)
                    }
                    return result
                }
            }]);
            return BaseRuleValidator
        }();
        var RequiredRuleValidator = function(_BaseRuleValidator) {
            _inherits(RequiredRuleValidator, _BaseRuleValidator);
            var _super = _createSuper(RequiredRuleValidator);

            function RequiredRuleValidator() {
                var _this2;
                _classCallCheck(this, RequiredRuleValidator);
                _this2 = _super.call(this);
                _this2.NAME = "required";
                return _this2
            }
            _createClass(RequiredRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (!_type2.default.isDefined(value)) {
                        return false
                    }
                    if (false === value) {
                        return false
                    }
                    value = String(value);
                    if (rule.trim || !_type2.default.isDefined(rule.trim)) {
                        value = value.trim()
                    }
                    return "" !== value
                }
            }]);
            return RequiredRuleValidator
        }(BaseRuleValidator);
        var NumericRuleValidator = function(_BaseRuleValidator2) {
            _inherits(NumericRuleValidator, _BaseRuleValidator2);
            var _super2 = _createSuper(NumericRuleValidator);

            function NumericRuleValidator() {
                var _this3;
                _classCallCheck(this, NumericRuleValidator);
                _this3 = _super2.call(this);
                _this3.NAME = "numeric";
                return _this3
            }
            _createClass(NumericRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (false !== rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    if (rule.useCultureSettings && _type2.default.isString(value)) {
                        return !isNaN(_number2.default.parse(value))
                    } else {
                        return _type2.default.isNumeric(value)
                    }
                }
            }]);
            return NumericRuleValidator
        }(BaseRuleValidator);
        var RangeRuleValidator = function(_BaseRuleValidator3) {
            _inherits(RangeRuleValidator, _BaseRuleValidator3);
            var _super3 = _createSuper(RangeRuleValidator);

            function RangeRuleValidator() {
                var _this4;
                _classCallCheck(this, RangeRuleValidator);
                _this4 = _super3.call(this);
                _this4.NAME = "range";
                return _this4
            }
            _createClass(RangeRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (false !== rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    var validNumber = rulesValidators.numeric.validate(value, rule);
                    var validValue = _type2.default.isDefined(value) && "" !== value;
                    var number = validNumber ? parseFloat(value) : validValue && value.valueOf();
                    var min = rule.min;
                    var max = rule.max;
                    if (!(validNumber || _type2.default.isDate(value)) && !validValue) {
                        return false
                    }
                    if (_type2.default.isDefined(min)) {
                        if (_type2.default.isDefined(max)) {
                            return number >= min && number <= max
                        }
                        return number >= min
                    } else {
                        if (_type2.default.isDefined(max)) {
                            return number <= max
                        } else {
                            throw _errors2.default.Error("E0101")
                        }
                    }
                }
            }]);
            return RangeRuleValidator
        }(BaseRuleValidator);
        var StringLengthRuleValidator = function(_BaseRuleValidator4) {
            _inherits(StringLengthRuleValidator, _BaseRuleValidator4);
            var _super4 = _createSuper(StringLengthRuleValidator);

            function StringLengthRuleValidator() {
                var _this5;
                _classCallCheck(this, StringLengthRuleValidator);
                _this5 = _super4.call(this);
                _this5.NAME = "stringLength";
                return _this5
            }
            _createClass(StringLengthRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    value = _type2.default.isDefined(value) ? String(value) : "";
                    if (rule.trim || !_type2.default.isDefined(rule.trim)) {
                        value = value.trim()
                    }
                    if (rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    return rulesValidators.range.validate(value.length, (0, _extend.extend)({}, rule))
                }
            }]);
            return StringLengthRuleValidator
        }(BaseRuleValidator);
        var CustomRuleValidator = function(_BaseRuleValidator5) {
            _inherits(CustomRuleValidator, _BaseRuleValidator5);
            var _super5 = _createSuper(CustomRuleValidator);

            function CustomRuleValidator() {
                var _this6;
                _classCallCheck(this, CustomRuleValidator);
                _this6 = _super5.call(this);
                _this6.NAME = "custom";
                return _this6
            }
            _createClass(CustomRuleValidator, [{
                key: "validate",
                value: function(value, rule) {
                    if (rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    var validator = rule.validator;
                    var dataGetter = validator && _type2.default.isFunction(validator.option) && validator.option("dataGetter");
                    var extraParams = _type2.default.isFunction(dataGetter) && dataGetter();
                    var params = {
                        value: value,
                        validator: validator,
                        rule: rule
                    };
                    if (extraParams) {
                        (0, _extend.extend)(params, extraParams)
                    }
                    return rule.validationCallback(params)
                }
            }]);
            return CustomRuleValidator
        }(BaseRuleValidator);
        var AsyncRuleValidator = function(_CustomRuleValidator) {
            _inherits(AsyncRuleValidator, _CustomRuleValidator);
            var _super6 = _createSuper(AsyncRuleValidator);

            function AsyncRuleValidator() {
                var _this7;
                _classCallCheck(this, AsyncRuleValidator);
                _this7 = _super6.call(this);
                _this7.NAME = "async";
                return _this7
            }
            _createClass(AsyncRuleValidator, [{
                key: "validate",
                value: function(value, rule) {
                    if (!_type2.default.isDefined(rule.reevaluate)) {
                        (0, _extend.extend)(rule, {
                            reevaluate: true
                        })
                    }
                    if (rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    var validator = rule.validator;
                    var dataGetter = validator && _type2.default.isFunction(validator.option) && validator.option("dataGetter");
                    var extraParams = _type2.default.isFunction(dataGetter) && dataGetter();
                    var params = {
                        value: value,
                        validator: validator,
                        rule: rule
                    };
                    if (extraParams) {
                        (0, _extend.extend)(params, extraParams)
                    }
                    var callbackResult = rule.validationCallback(params);
                    if (!_type2.default.isPromise(callbackResult)) {
                        throw _errors2.default.Error("E0103")
                    }
                    return this._getWrappedPromise((0, _deferred.fromPromise)(callbackResult).promise())
                }
            }, {
                key: "_getWrappedPromise",
                value: function(promise) {
                    var deferred = new _deferred.Deferred;
                    promise.then(function(res) {
                        deferred.resolve(res)
                    }, function(err) {
                        var res = {
                            isValid: false
                        };
                        if (_type2.default.isDefined(err)) {
                            if (_type2.default.isString(err)) {
                                res.message = err
                            } else {
                                if (_type2.default.isObject(err) && _type2.default.isDefined(err.message) && _type2.default.isString(err.message)) {
                                    res.message = err.message
                                }
                            }
                        }
                        deferred.resolve(res)
                    });
                    return deferred.promise()
                }
            }]);
            return AsyncRuleValidator
        }(CustomRuleValidator);
        var CompareRuleValidator = function(_BaseRuleValidator6) {
            _inherits(CompareRuleValidator, _BaseRuleValidator6);
            var _super7 = _createSuper(CompareRuleValidator);

            function CompareRuleValidator() {
                var _this8;
                _classCallCheck(this, CompareRuleValidator);
                _this8 = _super7.call(this);
                _this8.NAME = "compare";
                return _this8
            }
            _createClass(CompareRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (!rule.comparisonTarget) {
                        throw _errors2.default.Error("E0102")
                    }
                    if (rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }(0, _extend.extend)(rule, {
                        reevaluate: true
                    });
                    var otherValue = rule.comparisonTarget();
                    var type = rule.comparisonType || "==";
                    switch (type) {
                        case "==":
                            return value == otherValue;
                        case "!=":
                            return value != otherValue;
                        case "===":
                            return value === otherValue;
                        case "!==":
                            return value !== otherValue;
                        case ">":
                            return value > otherValue;
                        case ">=":
                            return value >= otherValue;
                        case "<":
                            return value < otherValue;
                        case "<=":
                            return value <= otherValue
                    }
                }
            }]);
            return CompareRuleValidator
        }(BaseRuleValidator);
        var PatternRuleValidator = function(_BaseRuleValidator7) {
            _inherits(PatternRuleValidator, _BaseRuleValidator7);
            var _super8 = _createSuper(PatternRuleValidator);

            function PatternRuleValidator() {
                var _this9;
                _classCallCheck(this, PatternRuleValidator);
                _this9 = _super8.call(this);
                _this9.NAME = "pattern";
                return _this9
            }
            _createClass(PatternRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (false !== rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    var pattern = rule.pattern;
                    if (_type2.default.isString(pattern)) {
                        pattern = new RegExp(pattern)
                    }
                    return pattern.test(value)
                }
            }]);
            return PatternRuleValidator
        }(BaseRuleValidator);
        var EmailRuleValidator = function(_BaseRuleValidator8) {
            _inherits(EmailRuleValidator, _BaseRuleValidator8);
            var _super9 = _createSuper(EmailRuleValidator);

            function EmailRuleValidator() {
                var _this10;
                _classCallCheck(this, EmailRuleValidator);
                _this10 = _super9.call(this);
                _this10.NAME = "email";
                return _this10
            }
            _createClass(EmailRuleValidator, [{
                key: "_validate",
                value: function(value, rule) {
                    if (false !== rule.ignoreEmptyValue && this._isValueEmpty(value)) {
                        return true
                    }
                    return rulesValidators.pattern.validate(value, (0, _extend.extend)({}, rule, {
                        pattern: /^[\d\w._-]+@([\d\w._-]+\.)+[\w]+$/i
                    }))
                }
            }]);
            return EmailRuleValidator
        }(BaseRuleValidator);
        var rulesValidators = {
            required: new RequiredRuleValidator,
            numeric: new NumericRuleValidator,
            range: new RangeRuleValidator,
            stringLength: new StringLengthRuleValidator,
            custom: new CustomRuleValidator,
            async: new AsyncRuleValidator,
            compare: new CompareRuleValidator,
            pattern: new PatternRuleValidator,
            email: new EmailRuleValidator
        };
        var GroupConfig = _class2.default.inherit({
            ctor: function(group) {
                this.group = group;
                this.validators = [];
                this._pendingValidators = [];
                this._onValidatorStatusChanged = this._onValidatorStatusChanged.bind(this);
                this._resetValidationInfo();
                this._eventsStrategy = new _events_strategy.EventsStrategy(this)
            },
            validate: function() {
                var _this11 = this;
                var result = {
                    isValid: true,
                    brokenRules: [],
                    validators: [],
                    status: STATUS.valid,
                    complete: null
                };
                this._unsubscribeFromAllChangeEvents();
                this._pendingValidators = [];
                this._resetValidationInfo();
                (0, _iterator.each)(this.validators, function(_, validator) {
                    var validatorResult = validator.validate();
                    result.isValid = result.isValid && validatorResult.isValid;
                    if (validatorResult.brokenRules) {
                        result.brokenRules = result.brokenRules.concat(validatorResult.brokenRules)
                    }
                    result.validators.push(validator);
                    if (validatorResult.status === STATUS.pending) {
                        _this11._addPendingValidator(validator)
                    }
                    _this11._subscribeToChangeEvents(validator)
                });
                if (this._pendingValidators.length) {
                    result.status = STATUS.pending
                } else {
                    result.status = result.isValid ? STATUS.valid : STATUS.invalid;
                    this._unsubscribeFromAllChangeEvents();
                    this._raiseValidatedEvent(result)
                }
                this._updateValidationInfo(result);
                return (0, _extend.extend)({}, this._validationInfo.result)
            },
            _subscribeToChangeEvents: function(validator) {
                validator.on("validating", this._onValidatorStatusChanged);
                validator.on("validated", this._onValidatorStatusChanged)
            },
            _unsubscribeFromChangeEvents: function(validator) {
                validator.off("validating", this._onValidatorStatusChanged);
                validator.off("validated", this._onValidatorStatusChanged)
            },
            _unsubscribeFromAllChangeEvents: function() {
                var _this12 = this;
                (0, _iterator.each)(this.validators, function(_, validator) {
                    _this12._unsubscribeFromChangeEvents(validator)
                })
            },
            _updateValidationInfo: function(result) {
                this._validationInfo.result = result;
                if (result.status !== STATUS.pending) {
                    return
                }
                if (!this._validationInfo.deferred) {
                    this._validationInfo.deferred = new _deferred.Deferred;
                    this._validationInfo.result.complete = this._validationInfo.deferred.promise()
                }
            },
            _addPendingValidator: function(validator) {
                var foundValidator = (0, _common.grep)(this._pendingValidators, function(val) {
                    return val === validator
                })[0];
                if (!foundValidator) {
                    this._pendingValidators.push(validator)
                }
            },
            _removePendingValidator: function(validator) {
                var index = (0, _array.inArray)(validator, this._pendingValidators);
                if (index >= 0) {
                    this._pendingValidators.splice(index, 1)
                }
            },
            _orderBrokenRules: function(brokenRules) {
                var orderedRules = [];
                (0, _iterator.each)(this.validators, function(_, validator) {
                    var foundRules = (0, _common.grep)(brokenRules, function(rule) {
                        return rule.validator === validator
                    });
                    if (foundRules.length) {
                        orderedRules = orderedRules.concat(foundRules)
                    }
                });
                return orderedRules
            },
            _updateBrokenRules: function(result) {
                if (!this._validationInfo.result) {
                    return
                }
                var brokenRules = this._validationInfo.result.brokenRules;
                var rules = (0, _common.grep)(brokenRules, function(rule) {
                    return rule.validator !== result.validator
                });
                if (result.brokenRules) {
                    brokenRules = rules.concat(result.brokenRules)
                }
                this._validationInfo.result.brokenRules = this._orderBrokenRules(brokenRules)
            },
            _onValidatorStatusChanged: function(result) {
                if (result.status === STATUS.pending) {
                    this._addPendingValidator(result.validator);
                    return
                }
                this._resolveIfComplete(result)
            },
            _resolveIfComplete: function(result) {
                this._removePendingValidator(result.validator);
                this._updateBrokenRules(result);
                if (!this._pendingValidators.length) {
                    this._unsubscribeFromAllChangeEvents();
                    if (!this._validationInfo.result) {
                        return
                    }
                    this._validationInfo.result.status = 0 === this._validationInfo.result.brokenRules.length ? STATUS.valid : STATUS.invalid;
                    this._validationInfo.result.isValid = this._validationInfo.result.status === STATUS.valid;
                    var res = (0, _extend.extend)({}, this._validationInfo.result, {
                        complete: null
                    });
                    var deferred = this._validationInfo.deferred;
                    this._resetValidationInfo();
                    this._raiseValidatedEvent(res);
                    deferred && setTimeout(function() {
                        deferred.resolve(res)
                    })
                }
            },
            _raiseValidatedEvent: function(result) {
                this._eventsStrategy.fireEvent("validated", [result])
            },
            _resetValidationInfo: function() {
                this._validationInfo = {
                    result: null,
                    deferred: null
                }
            },
            _synchronizeValidationInfo: function() {
                if (this._validationInfo.result) {
                    this._validationInfo.result.validators = this.validators
                }
            },
            removeRegisteredValidator: function(validator) {
                var index = (0, _array.inArray)(validator, this.validators);
                if (index > -1) {
                    this.validators.splice(index, 1);
                    this._synchronizeValidationInfo();
                    this._resolveIfComplete({
                        validator: validator
                    })
                }
            },
            registerValidator: function(validator) {
                if ((0, _array.inArray)(validator, this.validators) < 0) {
                    this.validators.push(validator);
                    this._synchronizeValidationInfo()
                }
            },
            reset: function() {
                (0, _iterator.each)(this.validators, function(_, validator) {
                    validator.reset()
                });
                this._pendingValidators = [];
                this._resetValidationInfo()
            },
            on: function(eventName, eventHandler) {
                this._eventsStrategy.on(eventName, eventHandler);
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            }
        });
        var ValidationEngine = {
            groups: [],
            getGroupConfig: function(group) {
                var result = (0, _common.grep)(this.groups, function(config) {
                    return config.group === group
                });
                if (result.length) {
                    return result[0]
                }
            },
            findGroup: function($element, model) {
                var $dxGroup = $element.parents(".dx-validationgroup").first();
                if ($dxGroup.length) {
                    return $dxGroup.dxValidationGroup("instance")
                }
                return model
            },
            initGroups: function() {
                this.groups = [];
                this.addGroup()
            },
            addGroup: function(group) {
                var config = this.getGroupConfig(group);
                if (!config) {
                    config = new GroupConfig(group);
                    this.groups.push(config)
                }
                return config
            },
            removeGroup: function(group) {
                var config = this.getGroupConfig(group);
                var index = (0, _array.inArray)(config, this.groups);
                if (index > -1) {
                    this.groups.splice(index, 1)
                }
                return config
            },
            _setDefaultMessage: function(info) {
                var rule = info.rule,
                    validator = info.validator,
                    name = info.name;
                if (!_type2.default.isDefined(rule.message)) {
                    if (validator.defaultFormattedMessage && _type2.default.isDefined(name)) {
                        rule.message = validator.defaultFormattedMessage(name)
                    } else {
                        rule.message = validator.defaultMessage()
                    }
                }
            },
            _addBrokenRule: function(info) {
                var result = info.result,
                    rule = info.rule;
                if (!result.brokenRule) {
                    result.brokenRule = rule
                }
                if (!result.brokenRules) {
                    result.brokenRules = []
                }
                result.brokenRules.push(rule)
            },
            validate: function(value, rules, name) {
                var _this13 = this;
                var result = {
                    name: name,
                    value: value,
                    brokenRule: null,
                    brokenRules: null,
                    isValid: true,
                    validationRules: rules,
                    pendingRules: null,
                    status: STATUS.valid,
                    complete: null
                };
                var asyncRuleItems = [];
                (0, _iterator.each)(rules || [], function(_, rule) {
                    var ruleValidator = rulesValidators[rule.type];
                    var ruleValidationResult;
                    if (ruleValidator) {
                        if (_type2.default.isDefined(rule.isValid) && rule.value === value && !rule.reevaluate) {
                            if (!rule.isValid) {
                                result.isValid = false;
                                _this13._addBrokenRule({
                                    result: result,
                                    rule: rule
                                });
                                return false
                            }
                            return true
                        }
                        rule.value = value;
                        if ("async" === rule.type) {
                            asyncRuleItems.push({
                                rule: rule,
                                ruleValidator: ruleValidator
                            });
                            return true
                        }
                        ruleValidationResult = ruleValidator.validate(value, rule);
                        rule.isValid = ruleValidationResult;
                        if (!ruleValidationResult) {
                            result.isValid = false;
                            _this13._setDefaultMessage({
                                rule: rule,
                                validator: ruleValidator,
                                name: name
                            });
                            _this13._addBrokenRule({
                                result: result,
                                rule: rule
                            })
                        }
                        if (!rule.isValid) {
                            return false
                        }
                    } else {
                        throw _errors2.default.Error("E0100")
                    }
                });
                if (result.isValid && !result.brokenRules && asyncRuleItems.length) {
                    result = this._validateAsyncRules({
                        value: value,
                        items: asyncRuleItems,
                        result: result,
                        name: name
                    })
                }
                result.status = result.pendingRules ? STATUS.pending : result.isValid ? STATUS.valid : STATUS.invalid;
                return result
            },
            _validateAsyncRules: function(_ref) {
                var _this14 = this;
                var result = _ref.result,
                    value = _ref.value,
                    items = _ref.items,
                    name = _ref.name;
                var asyncResults = [];
                (0, _iterator.each)(items, function(_, item) {
                    var validateResult = item.ruleValidator.validate(value, item.rule);
                    if (!_type2.default.isPromise(validateResult)) {
                        _this14._updateRuleConfig({
                            rule: item.rule,
                            ruleResult: _this14._getPatchedRuleResult(validateResult),
                            validator: item.ruleValidator,
                            name: name
                        })
                    } else {
                        if (!result.pendingRules) {
                            result.pendingRules = []
                        }
                        result.pendingRules.push(item.rule);
                        var asyncResult = validateResult.then(function(res) {
                            var ruleResult = _this14._getPatchedRuleResult(res);
                            _this14._updateRuleConfig({
                                rule: item.rule,
                                ruleResult: ruleResult,
                                validator: item.ruleValidator,
                                name: name
                            });
                            return ruleResult
                        });
                        asyncResults.push(asyncResult)
                    }
                });
                if (asyncResults.length) {
                    result.complete = _promise2.default.all(asyncResults).then(function(values) {
                        return _this14._getAsyncRulesResult({
                            result: result,
                            values: values
                        })
                    })
                }
                return result
            },
            _updateRuleConfig: function(_ref2) {
                var rule = _ref2.rule,
                    ruleResult = _ref2.ruleResult,
                    validator = _ref2.validator,
                    name = _ref2.name;
                rule.isValid = ruleResult.isValid;
                if (!ruleResult.isValid) {
                    if (_type2.default.isDefined(ruleResult.message) && _type2.default.isString(ruleResult.message) && ruleResult.message.length) {
                        rule.message = ruleResult.message
                    } else {
                        this._setDefaultMessage({
                            rule: rule,
                            validator: validator,
                            name: name
                        })
                    }
                }
            },
            _getPatchedRuleResult: function(ruleResult) {
                var result;
                var isValid = true;
                if (_type2.default.isObject(ruleResult)) {
                    result = (0, _extend.extend)({}, ruleResult);
                    if (!_type2.default.isDefined(result.isValid)) {
                        result.isValid = isValid
                    }
                } else {
                    result = {
                        isValid: _type2.default.isBoolean(ruleResult) ? ruleResult : isValid
                    }
                }
                return result
            },
            _getAsyncRulesResult: function(_ref3) {
                var _this15 = this;
                var values = _ref3.values,
                    result = _ref3.result;
                (0, _iterator.each)(values, function(index, val) {
                    if (false === val.isValid) {
                        result.isValid = val.isValid;
                        var rule = result.pendingRules[index];
                        _this15._addBrokenRule({
                            result: result,
                            rule: rule
                        })
                    }
                });
                result.pendingRules = null;
                result.complete = null;
                result.status = result.isValid ? STATUS.valid : STATUS.invalid;
                return result
            },
            registerValidatorInGroup: function(group, validator) {
                var groupConfig = ValidationEngine.addGroup(group);
                groupConfig.registerValidator.call(groupConfig, validator)
            },
            _shouldRemoveGroup: function(group, validatorsInGroup) {
                var isDefaultGroup = void 0 === group;
                var isValidationGroupInstance = group && "dxValidationGroup" === group.NAME;
                return !isDefaultGroup && !isValidationGroupInstance && !validatorsInGroup.length
            },
            removeRegisteredValidator: function(group, validator) {
                var config = ValidationEngine.getGroupConfig(group);
                if (config) {
                    config.removeRegisteredValidator.call(config, validator);
                    var validatorsInGroup = config.validators;
                    if (this._shouldRemoveGroup(group, validatorsInGroup)) {
                        this.removeGroup(group)
                    }
                }
            },
            initValidationOptions: function(options) {
                var _this16 = this;
                var initedOptions = {};
                if (options) {
                    var syncOptions = ["isValid", "validationStatus", "validationError", "validationErrors"];
                    syncOptions.forEach(function(prop) {
                        if (prop in options) {
                            (0, _extend.extend)(initedOptions, _this16.synchronizeValidationOptions({
                                name: prop,
                                value: options[prop]
                            }, options))
                        }
                    })
                }
                return initedOptions
            },
            synchronizeValidationOptions: function(_ref4, options) {
                var name = _ref4.name,
                    value = _ref4.value;
                switch (name) {
                    case "validationStatus":
                        var isValid = value === STATUS.valid || value === STATUS.pending;
                        return options.isValid !== isValid ? {
                            isValid: isValid
                        } : {};
                    case "isValid":
                        var validationStatus = options.validationStatus;
                        var newStatus = validationStatus;
                        if (value && validationStatus === STATUS.invalid) {
                            newStatus = STATUS.valid
                        } else {
                            if (!value && validationStatus !== STATUS.invalid) {
                                newStatus = STATUS.invalid
                            }
                        }
                        return newStatus !== validationStatus ? {
                            validationStatus: newStatus
                        } : {};
                    case "validationErrors":
                        var validationError = !value || !value.length ? null : value[0];
                        return options.validationError !== validationError ? {
                            validationError: validationError
                        } : {};
                    case "validationError":
                        var validationErrors = options.validationErrors;
                        if (!value && validationErrors) {
                            return {
                                validationErrors: null
                            }
                        } else {
                            if (value && !validationErrors) {
                                return {
                                    validationErrors: [value]
                                }
                            } else {
                                if (value && validationErrors && value !== validationErrors[0]) {
                                    validationErrors[0] = value;
                                    return {
                                        validationErrors: validationErrors.slice()
                                    }
                                }
                            }
                        }
                }
                return {}
            },
            validateGroup: function(group) {
                var groupConfig = ValidationEngine.getGroupConfig(group);
                if (!groupConfig) {
                    throw _errors2.default.Error("E0110")
                }
                return groupConfig.validate()
            },
            resetGroup: function(group) {
                var groupConfig = ValidationEngine.getGroupConfig(group);
                if (!groupConfig) {
                    throw _errors2.default.Error("E0110")
                }
                return groupConfig.reset()
            }
        };
        ValidationEngine.initGroups();
        module.exports = ValidationEngine
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/style.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var camelize = __webpack_require__( /*! ./inflector */ 34).camelize;
        var callOnce = __webpack_require__( /*! ./call_once */ 80);
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var jsPrefixes = ["", "Webkit", "Moz", "O", "Ms"];
        var cssPrefixes = {
            "": "",
            Webkit: "-webkit-",
            Moz: "-moz-",
            O: "-o-",
            ms: "-ms-"
        };
        var getStyles = callOnce(function() {
            return domAdapter.createElement("dx").style
        });
        var forEachPrefixes = function(prop, callBack) {
            prop = camelize(prop, true);
            var result;
            for (var i = 0, cssPrefixesCount = jsPrefixes.length; i < cssPrefixesCount; i++) {
                var jsPrefix = jsPrefixes[i];
                var prefixedProp = jsPrefix + prop;
                var lowerPrefixedProp = camelize(prefixedProp);
                result = callBack(lowerPrefixedProp, jsPrefix);
                if (void 0 === result) {
                    result = callBack(prefixedProp, jsPrefix)
                }
                if (void 0 !== result) {
                    break
                }
            }
            return result || ""
        };
        var styleProp = function(name) {
            if (name in getStyles()) {
                return name
            }
            var originalName = name;
            name = name.charAt(0).toUpperCase() + name.substr(1);
            for (var i = 1; i < jsPrefixes.length; i++) {
                var prefixedProp = jsPrefixes[i].toLowerCase() + name;
                if (prefixedProp in getStyles()) {
                    return prefixedProp
                }
            }
            return originalName
        };
        var stylePropPrefix = function(prop) {
            return forEachPrefixes(prop, function(specific, jsPrefix) {
                if (specific in getStyles()) {
                    return cssPrefixes[jsPrefix]
                }
            })
        };
        var pxExceptions = ["fillOpacity", "columnCount", "flexGrow", "flexShrink", "fontWeight", "lineHeight", "opacity", "zIndex", "zoom"];
        var normalizeStyleProp = function(prop, value) {
            if (typeUtils.isNumeric(value) && pxExceptions.indexOf(prop) === -1) {
                value += "px"
            }
            return value
        };
        var setDimensionProperty = function(elements, propertyName, value) {
            if (elements) {
                value = typeUtils.isNumeric(value) ? value += "px" : value;
                for (var i = 0; i < elements.length; ++i) {
                    elements[i].style[propertyName] = value
                }
            }
        };
        var setWidth = function(elements, value) {
            setDimensionProperty(elements, "width", value)
        };
        var setHeight = function(elements, value) {
            setDimensionProperty(elements, "height", value)
        };
        exports.styleProp = styleProp;
        exports.stylePropPrefix = stylePropPrefix;
        exports.normalizeStyleProp = normalizeStyleProp;
        exports.setWidth = setWidth;
        exports.setHeight = setHeight
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/variable_wrapper.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var logger = __webpack_require__( /*! ./console */ 65).logger;
        var dependencyInjector = __webpack_require__( /*! ./dependency_injector */ 56);
        module.exports = dependencyInjector({
            isWrapped: function() {
                return false
            },
            isWritableWrapped: function() {
                return false
            },
            wrap: function(value) {
                return value
            },
            unwrap: function(value) {
                return value
            },
            assign: function() {
                logger.error("Method 'assign' should not be used for not wrapped variables. Use 'isWrapped' method for ensuring.")
            }
        })
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/events/hold.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var Emitter = __webpack_require__( /*! ./core/emitter */ 132);
        var registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 101);
        var abs = Math.abs;
        var HOLD_EVENT_NAME = "dxhold";
        var HOLD_TIMEOUT = 750;
        var TOUCH_BOUNDARY = 5;
        var HoldEmitter = Emitter.inherit({
            start: function(e) {
                this._startEventData = eventUtils.eventData(e);
                this._startTimer(e)
            },
            _startTimer: function(e) {
                var holdTimeout = "timeout" in this ? this.timeout : HOLD_TIMEOUT;
                this._holdTimer = setTimeout(function() {
                    this._requestAccept(e);
                    this._fireEvent(HOLD_EVENT_NAME, e, {
                        target: e.target
                    });
                    this._forgetAccept()
                }.bind(this), holdTimeout)
            },
            move: function(e) {
                if (this._touchWasMoved(e)) {
                    this._cancel(e)
                }
            },
            _touchWasMoved: function(e) {
                var delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e));
                return abs(delta.x) > TOUCH_BOUNDARY || abs(delta.y) > TOUCH_BOUNDARY
            },
            end: function() {
                this._stopTimer()
            },
            _stopTimer: function() {
                clearTimeout(this._holdTimer)
            },
            cancel: function() {
                this._stopTimer()
            },
            dispose: function() {
                this._stopTimer()
            }
        });
        registerEmitter({
            emitter: HoldEmitter,
            bubble: true,
            events: [HOLD_EVENT_NAME]
        });
        module.exports = {
            name: HOLD_EVENT_NAME
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/odata/utils.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.OData__internals = exports.escapeServiceOperationParams = exports.formatFunctionInvocationUrl = exports.generateExpand = exports.generateSelect = exports.convertPrimitiveValue = exports.keyConverters = exports.serializeKey = exports.serializeValue = exports.serializePropName = exports.EdmLiteral = exports.sendRequest = void 0;
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var _ajax2 = _interopRequireDefault(_ajax);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _errors = __webpack_require__( /*! ../errors */ 38);
        var _utils = __webpack_require__( /*! ../utils */ 42);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var GUID_REGEX = /^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$/;
        var VERBOSE_DATE_REGEX = /^\/Date\((-?\d+)((\+|-)?(\d+)?)\)\/$/;
        var ISO8601_DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[-+]{1}\d{2}(:?)(\d{2})?)?$/;
        var JSON_VERBOSE_MIME_TYPE = "application/json;odata=verbose";
        var makeArray = function(value) {
            return "string" === (0, _type.type)(value) ? value.split() : value
        };
        var hasDot = function(x) {
            return /\./.test(x)
        };
        var pad = function(text, length, right) {
            text = String(text);
            while (text.length < length) {
                text = right ? "".concat(text, "0") : "0".concat(text)
            }
            return text
        };
        var formatISO8601 = function(date, skipZeroTime, skipTimezone) {
            var bag = [];
            var isZeroTime = function() {
                return date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds() < 1
            };
            var padLeft2 = function(text) {
                return pad(text, 2)
            };
            bag.push(date.getFullYear());
            bag.push("-");
            bag.push(padLeft2(date.getMonth() + 1));
            bag.push("-");
            bag.push(padLeft2(date.getDate()));
            if (!(skipZeroTime && isZeroTime())) {
                bag.push("T");
                bag.push(padLeft2(date.getHours()));
                bag.push(":");
                bag.push(padLeft2(date.getMinutes()));
                bag.push(":");
                bag.push(padLeft2(date.getSeconds()));
                if (date.getMilliseconds()) {
                    bag.push(".");
                    bag.push(pad(date.getMilliseconds(), 3))
                }
                if (!skipTimezone) {
                    bag.push("Z")
                }
            }
            return bag.join("")
        };
        var parseISO8601 = function(isoString) {
            var result = new Date(60 * new Date(0).getTimezoneOffset() * 1e3);
            var chunks = isoString.replace("Z", "").split("T");
            var date = /(\d{4})-(\d{2})-(\d{2})/.exec(chunks[0]);
            var time = /(\d{2}):(\d{2}):(\d{2})\.?(\d{0,7})?/.exec(chunks[1]);
            result.setFullYear(Number(date[1]));
            result.setMonth(Number(date[2]) - 1);
            result.setDate(Number(date[3]));
            if (Array.isArray(time) && time.length) {
                result.setHours(Number(time[1]));
                result.setMinutes(Number(time[2]));
                result.setSeconds(Number(time[3]));
                var fractional = (time[4] || "").slice(0, 3);
                fractional = pad(fractional, 3, true);
                result.setMilliseconds(Number(fractional))
            }
            return result
        };
        var isAbsoluteUrl = function(url) {
            return /^(?:[a-z]+:)?\/\//i.test(url)
        };
        var stripParams = function(url) {
            var index = url.indexOf("?");
            if (index > -1) {
                return url.substr(0, index)
            }
            return url
        };
        var toAbsoluteUrl = function(basePath, relativePath) {
            var part;
            var baseParts = stripParams(basePath).split("/");
            var relativeParts = relativePath.split("/");
            baseParts.pop();
            while (relativeParts.length) {
                part = relativeParts.shift();
                if (".." === part) {
                    baseParts.pop()
                } else {
                    baseParts.push(part)
                }
            }
            return baseParts.join("/")
        };
        var param = function(params) {
            var result = [];
            for (var name in params) {
                result.push(name + "=" + params[name])
            }
            return result.join("&")
        };
        var ajaxOptionsForRequest = function(protocolVersion, request) {
            var _options$beforeSend;
            var options = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
            var formatPayload = function(payload) {
                return JSON.stringify(payload, function(key, value) {
                    if (!(this[key] instanceof Date)) {
                        return value
                    }
                    value = formatISO8601(this[key]);
                    switch (protocolVersion) {
                        case 2:
                            return value.substr(0, value.length - 1);
                        case 3:
                        case 4:
                            return value;
                        default:
                            throw _errors.errors.Error("E4002")
                    }
                })
            };
            request = (0, _extend.extend)({
                async: true,
                method: "get",
                url: "",
                params: {},
                payload: null,
                headers: {},
                timeout: 3e4
            }, request);
            null === (_options$beforeSend = options.beforeSend) || void 0 === _options$beforeSend ? void 0 : _options$beforeSend.call(options, request);
            var _request = request,
                async = _request.async, timeout = _request.timeout, headers = _request.headers;
            var _request2 = request,
                url = _request2.url,
                method = _request2.method;
            var jsonp = options.jsonp,
                withCredentials = options.withCredentials;
            method = (method || "get").toLowerCase();
            var isGet = "get" === method;
            var useJsonp = isGet && jsonp;
            var params = (0, _extend.extend)({}, request.params);
            var ajaxData = isGet ? params : formatPayload(request.payload);
            var qs = !isGet && param(params);
            var contentType = !isGet && JSON_VERBOSE_MIME_TYPE;
            if (qs) {
                url += (url.indexOf("?") > -1 ? "&" : "?") + qs
            }
            if (useJsonp) {
                ajaxData.$format = "json"
            }
            return {
                url: url,
                data: ajaxData,
                dataType: useJsonp ? "jsonp" : "json",
                jsonp: useJsonp && "$callback",
                method: method,
                async: async,
                timeout: timeout,
                headers: headers,
                contentType: contentType,
                accepts: {
                    json: [JSON_VERBOSE_MIME_TYPE, "text/plain"].join()
                },
                xhrFields: {
                    withCredentials: withCredentials
                }
            }
        };
        exports.sendRequest = function sendRequest(protocolVersion, request, options) {
            var deserializeDates = options.deserializeDates,
                fieldTypes = options.fieldTypes,
                countOnly = options.countOnly,
                isPaged = options.isPaged;
            var d = new _deferred.Deferred;
            var ajaxOptions = ajaxOptionsForRequest(protocolVersion, request, options);
            _ajax2.default.sendRequest(ajaxOptions).always(function(obj, textStatus) {
                var transformOptions = {
                    deserializeDates: deserializeDates,
                    fieldTypes: fieldTypes
                };
                var tuple = interpretJsonFormat(obj, textStatus, transformOptions, ajaxOptions);
                var error = tuple.error,
                    data = tuple.data,
                    count = tuple.count;
                var nextUrl = tuple.nextUrl;
                if (error) {
                    if (error.message !== _utils.XHR_ERROR_UNLOAD) {
                        d.reject(error)
                    }
                } else {
                    if (countOnly) {
                        if (isFinite(count)) {
                            d.resolve(count)
                        } else {
                            d.reject(new _errors.errors.Error("E4018"))
                        }
                    } else {
                        if (nextUrl && !isPaged) {
                            if (!isAbsoluteUrl(nextUrl)) {
                                nextUrl = toAbsoluteUrl(ajaxOptions.url, nextUrl)
                            }
                            sendRequest(protocolVersion, {
                                url: nextUrl
                            }, options).fail(d.reject).done(function(nextData) {
                                return d.resolve(data.concat(nextData))
                            })
                        } else {
                            var extra = isFinite(count) ? {
                                totalCount: count
                            } : void 0;
                            d.resolve(data, extra)
                        }
                    }
                }
            });
            return d.promise()
        };
        var formatDotNetError = function(errorObj) {
            var message;
            var currentError = errorObj;
            if ("message" in errorObj) {
                var _errorObj$message;
                message = (null === (_errorObj$message = errorObj.message) || void 0 === _errorObj$message ? void 0 : _errorObj$message.value) || errorObj.message
            }
            while (currentError = currentError.innererror || currentError.internalexception) {
                message = currentError.message;
                if (currentError.internalexception && message.indexOf("inner exception") === -1) {
                    break
                }
            }
            return message
        };
        var errorFromResponse = function(obj, textStatus, ajaxOptions) {
            var _response, _response2, _response3, _response4;
            if ("nocontent" === textStatus) {
                return null
            }
            var message = "Unknown error";
            var response = obj;
            var httpStatus = 200;
            var errorData = {
                requestOptions: ajaxOptions
            };
            if ("success" !== textStatus) {
                var status = obj.status,
                    responseText = obj.responseText;
                httpStatus = status;
                message = (0, _utils.errorMessageFromXhr)(obj, textStatus);
                try {
                    response = JSON.parse(responseText)
                } catch (x) {}
            }
            var errorObj = (null === (_response = response) || void 0 === _response ? void 0 : _response.then) || (null === (_response2 = response) || void 0 === _response2 ? void 0 : _response2.error) || (null === (_response3 = response) || void 0 === _response3 ? void 0 : _response3["odata.error"]) || (null === (_response4 = response) || void 0 === _response4 ? void 0 : _response4["@odata.error"]);
            if (errorObj) {
                message = formatDotNetError(errorObj) || message;
                errorData.errorDetails = errorObj;
                if (200 === httpStatus) {
                    httpStatus = 500
                }
                var customCode = Number(errorObj.code);
                if (isFinite(customCode) && customCode >= 400) {
                    httpStatus = customCode
                }
            }
            if (httpStatus >= 400 || 0 === httpStatus) {
                errorData.httpStatus = httpStatus;
                return (0, _extend.extend)(Error(message), errorData)
            }
            return null
        };
        var interpretJsonFormat = function(obj, textStatus, transformOptions, ajaxOptions) {
            var error = errorFromResponse(obj, textStatus, ajaxOptions);
            if (error) {
                return {
                    error: error
                }
            }
            if (!(0, _type.isPlainObject)(obj)) {
                return {
                    data: obj
                }
            }
            var value = "d" in obj && (Array.isArray(obj.d) || (0, _type.isObject)(obj.d)) ? interpretVerboseJsonFormat(obj, textStatus) : interpretLightJsonFormat(obj, textStatus);
            transformTypes(value, transformOptions);
            return value
        };
        var interpretVerboseJsonFormat = function(_ref) {
            var _data$results;
            var data = _ref.d;
            if (!(0, _type.isDefined)(data)) {
                return {
                    error: Error("Malformed or unsupported JSON response received")
                }
            }
            return {
                data: null !== (_data$results = data.results) && void 0 !== _data$results ? _data$results : data,
                nextUrl: data.__next,
                count: parseInt(data.__count, 10)
            }
        };
        var interpretLightJsonFormat = function(obj) {
            var _obj$value;
            return {
                data: null !== (_obj$value = obj.value) && void 0 !== _obj$value ? _obj$value : obj,
                nextUrl: obj["@odata.nextLink"],
                count: parseInt(obj["@odata.count"], 10)
            }
        };
        var EdmLiteral = exports.EdmLiteral = _class2.default.inherit({
            ctor: function(value) {
                this._value = value
            },
            valueOf: function() {
                return this._value
            }
        });
        var transformTypes = function transformTypes(obj) {
            var options = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
            (0, _iterator.each)(obj, function(key, value) {
                if (null !== value && "object" === _typeof(value)) {
                    if ("results" in value) {
                        obj[key] = value.results
                    }
                    transformTypes(obj[key], options)
                } else {
                    if ("string" === typeof value) {
                        var fieldTypes = options.fieldTypes,
                            deserializeDates = options.deserializeDates;
                        var canBeGuid = !fieldTypes || "String" !== fieldTypes[key];
                        if (canBeGuid && GUID_REGEX.test(value)) {
                            obj[key] = new _guid2.default(value)
                        }
                        if (false !== deserializeDates) {
                            if (value.match(VERBOSE_DATE_REGEX)) {
                                var date = new Date(Number(RegExp.$1) + 60 * RegExp.$2 * 1e3);
                                obj[key] = new Date(date.valueOf() + 60 * date.getTimezoneOffset() * 1e3)
                            } else {
                                if (ISO8601_DATE_REGEX.test(value)) {
                                    obj[key] = new Date(parseISO8601(obj[key]).valueOf())
                                }
                            }
                        }
                    }
                }
            })
        };
        var serializeDate = function(date) {
            return "datetime'".concat(formatISO8601(date, true, true), "'")
        };
        var serializeString = function(value) {
            return "'".concat(value.replace(/'/g, "''"), "'")
        };
        var serializePropName = exports.serializePropName = function(propName) {
            return propName instanceof EdmLiteral ? propName.valueOf() : propName.replace(/\./g, "/")
        };
        var serializeValueV4 = function serializeValueV4(value) {
            if (value instanceof Date) {
                return formatISO8601(value, false, false)
            }
            if (value instanceof _guid2.default) {
                return value.valueOf()
            }
            if (Array.isArray(value)) {
                return "[".concat(value.map(function(item) {
                    return serializeValueV4(item)
                }).join(","), "]")
            }
            return serializeValueV2(value)
        };
        var serializeValueV2 = function(value) {
            if (value instanceof Date) {
                return serializeDate(value)
            }
            if (value instanceof _guid2.default) {
                return "guid'".concat(value, "'")
            }
            if (value instanceof EdmLiteral) {
                return value.valueOf()
            }
            if ("string" === typeof value) {
                return serializeString(value)
            }
            return String(value)
        };
        var serializeValue = exports.serializeValue = function(value, protocolVersion) {
            switch (protocolVersion) {
                case 2:
                case 3:
                    return serializeValueV2(value);
                case 4:
                    return serializeValueV4(value);
                default:
                    throw _errors.errors.Error("E4002")
            }
        };
        exports.serializeKey = function(key, protocolVersion) {
            if ((0, _type.isPlainObject)(key)) {
                var parts = [];
                (0, _iterator.each)(key, function(k, v) {
                    return parts.push("".concat(serializePropName(k), "=").concat(serializeValue(v, protocolVersion)))
                });
                return parts.join()
            }
            return serializeValue(key, protocolVersion)
        };
        var keyConverters = exports.keyConverters = {
            String: function(value) {
                return "".concat(value)
            },
            Int32: function(value) {
                return Math.floor(value)
            },
            Int64: function(value) {
                return value instanceof EdmLiteral ? value : new EdmLiteral("".concat(value, "L"))
            },
            Guid: function(value) {
                return value instanceof _guid2.default ? value : new _guid2.default(value)
            },
            Boolean: function(value) {
                return !!value
            },
            Single: function(value) {
                return value instanceof EdmLiteral ? value : new EdmLiteral(value + "f")
            },
            Decimal: function(value) {
                return value instanceof EdmLiteral ? value : new EdmLiteral(value + "m")
            }
        };
        exports.convertPrimitiveValue = function(type, value) {
            if (null === value) {
                return null
            }
            var converter = keyConverters[type];
            if (!converter) {
                throw _errors.errors.Error("E4014", type)
            }
            return converter(value)
        };
        exports.generateSelect = function(oDataVersion, select) {
            if (!select) {
                return
            }
            return oDataVersion < 4 ? serializePropName(select.join()) : (0, _common.grep)(select, hasDot, true).join()
        };
        var formatCore = function formatCore(hash) {
            var result = "";
            var selectValue = [];
            var expandValue = [];
            (0, _iterator.each)(hash, function(key, value) {
                if (Array.isArray(value)) {
                    [].push.apply(selectValue, value)
                }
                if ((0, _type.isPlainObject)(value)) {
                    expandValue.push("".concat(key).concat(formatCore(value)))
                }
            });
            if (selectValue.length || expandValue.length) {
                result += "(";
                if (selectValue.length) {
                    result += "$select=".concat((0, _iterator.map)(selectValue, serializePropName).join())
                }
                if (expandValue.length) {
                    if (selectValue.length) {
                        result += ";"
                    }
                    result += "$expand=".concat((0, _iterator.map)(expandValue, serializePropName).join())
                }
                result += ")"
            }
            return result
        };
        var format = function(hash) {
            var result = [];
            (0, _iterator.each)(hash, function(key, value) {
                return result.push("".concat(key).concat(formatCore(value)))
            });
            return result.join()
        };
        var parseCore = function parseCore(exprParts, root, stepper) {
            var result = stepper(root, exprParts.shift(), exprParts);
            if (false === result) {
                return
            }
            parseCore(exprParts, result, stepper)
        };
        var parseTree = function(exprs, root, stepper) {
            return (0, _iterator.each)(exprs, function(_, x) {
                return parseCore(x.split("."), root, stepper)
            })
        };
        var generatorV2 = function(expand, select) {
            var hash = {};
            if (expand) {
                (0, _iterator.each)(makeArray(expand), function() {
                    hash[serializePropName(this)] = 1
                })
            }
            if (select) {
                (0, _iterator.each)(makeArray(select), function() {
                    var path = this.split(".");
                    if (path.length < 2) {
                        return
                    }
                    path.pop();
                    hash[serializePropName(path.join("."))] = 1
                })
            }
            return (0, _iterator.map)(hash, function(_, v) {
                return v
            }).join()
        };
        var generatorV4 = function(expand, select) {
            var hash = {};
            if (expand || select) {
                if (expand) {
                    parseTree(makeArray(expand), hash, function(node, key, path) {
                        node[key] = node[key] || {};
                        return !path.length ? false : node[key]
                    })
                }
                if (select) {
                    parseTree((0, _common.grep)(makeArray(select), hasDot), hash, function(node, key, path) {
                        if (!path.length) {
                            node[key] = node[key] || [];
                            node[key].push(key);
                            return false
                        }
                        return node[key] = node[key] || {}
                    })
                }
                return format(hash)
            }
        };
        exports.generateExpand = function(oDataVersion, expand, select) {
            return oDataVersion < 4 ? generatorV2(expand, select) : generatorV4(expand, select)
        };
        exports.formatFunctionInvocationUrl = function(baseUrl, args) {
            return (0, _string.format)("{0}({1})", baseUrl, (0, _iterator.map)(args || {}, function(value, key) {
                return (0, _string.format)("{0}={1}", key, value)
            }).join(","))
        };
        exports.escapeServiceOperationParams = function(params, version) {
            if (!params) {
                return params
            }
            var result = {};
            (0, _iterator.each)(params, function(k, v) {
                result[k] = serializeValue(v, version)
            });
            return result
        };
        exports.OData__internals = {
            interpretJsonFormat: interpretJsonFormat
        }
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/select_box.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var isDefined = typeUtils.isDefined;
        var isPromise = typeUtils.isPromise;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../core/utils/array */ 14).inArray;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var Deferred = deferredUtils.Deferred;
        var errors = __webpack_require__( /*! ../core/errors */ 22);
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 225);
        var DISABLED_STATE_SELECTOR = ".dx-state-disabled";
        var SELECTBOX_CLASS = "dx-selectbox";
        var SELECTBOX_POPUP_CLASS = "dx-selectbox-popup";
        var SELECTBOX_CONTAINER_CLASS = "dx-selectbox-container";
        var SELECTBOX_POPUP_WRAPPER_CLASS = "dx-selectbox-popup-wrapper";
        var SelectBox = DropDownList.inherit({
            _supportedKeys: function() {
                var that = this;
                var parent = this.callBase();
                var clearSelectBox = function(e) {
                    var isEditable = this._isEditable();
                    if (!isEditable) {
                        if (this.option("showClearButton")) {
                            e.preventDefault();
                            this.reset()
                        }
                    } else {
                        if (this._valueSubstituted()) {
                            this._preventFiltering = true
                        }
                    }
                    this._preventSubstitution = true
                };
                var searchIfNeeded = function() {
                    if (that.option("searchEnabled") && that._valueSubstituted()) {
                        that._searchHandler()
                    }
                };
                return extend({}, parent, {
                    tab: function() {
                        if (this.option("opened") && "instantly" === this.option("applyValueMode")) {
                            this._cleanInputSelection()
                        }
                        if (this._wasSearch()) {
                            this._clearFilter()
                        }
                        parent.tab && parent.tab.apply(this, arguments)
                    },
                    upArrow: function(e) {
                        if (parent.upArrow && parent.upArrow.apply(this, arguments)) {
                            if (!this.option("opened")) {
                                this._setNextValue(e)
                            }
                            return true
                        }
                    },
                    downArrow: function(e) {
                        if (parent.downArrow && parent.downArrow.apply(this, arguments)) {
                            if (!this.option("opened")) {
                                this._setNextValue(e)
                            }
                            return true
                        }
                    },
                    leftArrow: function() {
                        searchIfNeeded();
                        parent.leftArrow && parent.leftArrow.apply(this, arguments)
                    },
                    rightArrow: function() {
                        searchIfNeeded();
                        parent.rightArrow && parent.rightArrow.apply(this, arguments)
                    },
                    home: function() {
                        searchIfNeeded();
                        parent.home && parent.home.apply(this, arguments)
                    },
                    end: function() {
                        searchIfNeeded();
                        parent.end && parent.end.apply(this, arguments)
                    },
                    escape: function() {
                        var result = parent.escape && parent.escape.apply(this, arguments);
                        this._cancelEditing();
                        return isDefined(result) ? result : true
                    },
                    enter: function(e) {
                        var isOpened = this.option("opened");
                        var inputText = this._input().val().trim();
                        var isCustomText = inputText && this._list && !this._list.option("focusedElement");
                        if (!inputText && this.option("value") && this.option("allowClearing")) {
                            this.option({
                                selectedItem: null,
                                value: null
                            });
                            this.close()
                        } else {
                            if (this.option("acceptCustomValue")) {
                                e.preventDefault();
                                if (isCustomText) {
                                    this._valueChangeEventHandler(e);
                                    if (isOpened) {
                                        this._toggleOpenState()
                                    }
                                }
                                return isOpened
                            }
                            if (parent.enter && parent.enter.apply(this, arguments)) {
                                return isOpened
                            }
                        }
                    },
                    space: function(e) {
                        var isOpened = this.option("opened");
                        var isSearchEnabled = this.option("searchEnabled");
                        var acceptCustomValue = this.option("acceptCustomValue");
                        if (!isOpened || isSearchEnabled || acceptCustomValue) {
                            return
                        }
                        e.preventDefault();
                        this._valueChangeEventHandler(e);
                        return true
                    },
                    backspace: clearSelectBox,
                    del: clearSelectBox
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    placeholder: messageLocalization.format("Select"),
                    fieldTemplate: null,
                    valueChangeEvent: "change",
                    acceptCustomValue: false,
                    onCustomItemCreating: function(e) {
                        if (!isDefined(e.customItem)) {
                            e.customItem = e.text
                        }
                    },
                    showSelectionControls: false,
                    autocompletionEnabled: true,
                    allowClearing: true,
                    tooltipEnabled: false,
                    openOnFieldClick: true,
                    showDropDownButton: true,
                    displayCustomValue: false,
                    _isAdaptablePopupPosition: false,
                    useInkRipple: false,
                    useHiddenSubmitElement: true
                })
            },
            _init: function() {
                this.callBase();
                this._initCustomItemCreatingAction()
            },
            _initMarkup: function() {
                this.$element().addClass(SELECTBOX_CLASS);
                this._renderTooltip();
                this.option("useInkRipple") && this._renderInkRipple();
                this.callBase();
                this._$container.addClass(SELECTBOX_CONTAINER_CLASS)
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render()
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                if (!this._inkRipple || this._isEditable()) {
                    return
                }
                var config = {
                    element: this._inputWrapper(),
                    event: e
                };
                if (value) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _createPopup: function() {
                this.callBase();
                this._popup.$element().addClass(SELECTBOX_POPUP_CLASS)
            },
            _popupWrapperClass: function() {
                return this.callBase() + " " + SELECTBOX_POPUP_WRAPPER_CLASS
            },
            _cancelEditing: function() {
                if (!this.option("searchEnabled") && this._list) {
                    this._focusListElement(null);
                    this._updateField(this.option("selectedItem"))
                }
            },
            _renderOpenedState: function() {
                this.callBase();
                if (this.option("opened")) {
                    this._scrollToSelectedItem();
                    this._focusSelectedElement()
                }
            },
            _focusSelectedElement: function() {
                var searchValue = this._searchValue();
                if (!searchValue) {
                    this._focusListElement(null);
                    return
                }
                var $listItems = this._list._itemElements();
                var index = inArray(this.option("selectedItem"), this.option("items"));
                var focusedElement = index >= 0 && !this._isCustomItemSelected() ? $listItems.eq(index) : null;
                this._focusListElement(focusedElement)
            },
            _renderFocusedElement: function() {
                if (!this._list) {
                    return
                }
                var searchValue = this._searchValue();
                if (!searchValue || this.option("acceptCustomValue")) {
                    this._focusListElement(null);
                    return
                }
                var $listItems = this._list._itemElements();
                var focusedElement = $listItems.not(DISABLED_STATE_SELECTOR).eq(0);
                this._focusListElement(focusedElement)
            },
            _focusListElement: function(element) {
                this._preventInputValueRender = true;
                this._list.option("focusedElement", getPublicElement(element));
                delete this._preventInputValueRender
            },
            _scrollToSelectedItem: function() {
                this._list && this._list.scrollToItem(this._list.option("selectedItem"))
            },
            _listContentReadyHandler: function() {
                this.callBase();
                var isPaginate = this._dataSource && this._dataSource.paginate();
                if (isPaginate && this._needPopupRepaint()) {
                    return
                }
                this._scrollToSelectedItem()
            },
            _renderValue: function() {
                this._renderInputValue();
                this._setSubmitValue();
                return (new Deferred).resolve()
            },
            _renderInputValue: function() {
                return this.callBase().always(function() {
                    this._renderInputValueAsync()
                }.bind(this))
            },
            _renderInputValueAsync: function() {
                this._renderTooltip();
                this._renderInputValueImpl().always(function() {
                    this._refreshSelected()
                }.bind(this))
            },
            _renderInputValueImpl: function() {
                this._renderField();
                return (new Deferred).resolve()
            },
            _setNextItem: function(step) {
                var item = this._calcNextItem(step);
                var value = this._valueGetter(item);
                this._setValue(value)
            },
            _setNextValue: function(e) {
                var dataSourceIsLoaded = this._dataSource.isLoaded() ? (new Deferred).resolve() : this._dataSource.load();
                dataSourceIsLoaded.done(function() {
                    var selectedIndex = this._getSelectedIndex();
                    var hasPages = this._dataSource.pageSize();
                    var isLastPage = this._dataSource.isLastPage();
                    var isLastItem = selectedIndex === this._items().length - 1;
                    this._saveValueChangeEvent(e);
                    var step = "ArrowDown" === e.key ? 1 : -1;
                    if (hasPages && !isLastPage && isLastItem && step > 0) {
                        if (!this._popup) {
                            this._createPopup()
                        }
                        if (!this._dataSource.isLoading()) {
                            this._list._loadNextPage().done(this._setNextItem.bind(this, step))
                        }
                    } else {
                        this._setNextItem(step)
                    }
                }.bind(this))
            },
            _setSelectedItem: function(item) {
                var isUnknownItem = !this._isCustomValueAllowed() && void 0 === item;
                this.callBase(isUnknownItem ? null : item);
                if (!isUnknownItem && (!this._isEditable() || this._isCustomItemSelected())) {
                    this._setListOption("selectedItem", this.option("selectedItem"))
                }
            },
            _isCustomValueAllowed: function() {
                return this.option("acceptCustomValue") || this.callBase()
            },
            _displayValue: function(item) {
                item = !isDefined(item) && this._isCustomValueAllowed() ? this.option("value") : item;
                return this.callBase(item)
            },
            _listConfig: function() {
                var result = extend(this.callBase(), {
                    pageLoadMode: "scrollBottom",
                    onSelectionChanged: this._getSelectionChangeHandler(),
                    selectedItem: this.option("selectedItem"),
                    onFocusedItemChanged: this._listFocusedItemChangeHandler.bind(this)
                });
                if (this.option("showSelectionControls")) {
                    extend(result, {
                        showSelectionControls: true,
                        selectionByClick: true
                    })
                }
                return result
            },
            _listFocusedItemChangeHandler: function(e) {
                if (this._preventInputValueRender) {
                    return
                }
                var list = e.component;
                var focusedElement = $(list.option("focusedElement"));
                var focusedItem = list._getItemData(focusedElement);
                this._updateField(focusedItem)
            },
            _updateField: function(item) {
                var fieldTemplate = this._getTemplateByOption("fieldTemplate");
                if (!(fieldTemplate && this.option("fieldTemplate"))) {
                    this._renderDisplayText(this._displayGetter(item));
                    return
                }
                this._renderField()
            },
            _getSelectionChangeHandler: function() {
                return this.option("showSelectionControls") ? this._selectionChangeHandler.bind(this) : commonUtils.noop
            },
            _selectionChangeHandler: function(e) {
                each(e.addedItems || [], function(_, addedItem) {
                    this._setValue(this._valueGetter(addedItem))
                }.bind(this))
            },
            _getActualSearchValue: function() {
                return this._dataSource.searchValue()
            },
            _toggleOpenState: function(isVisible) {
                if (this.option("disabled")) {
                    return
                }
                isVisible = arguments.length ? isVisible : !this.option("opened");
                if (!isVisible) {
                    this._restoreInputText(true)
                }
                if (this._wasSearch() && isVisible) {
                    this._wasSearch(false);
                    var showDataImmediately = this.option("showDataBeforeSearch") || 0 === this.option("minSearchLength");
                    if (showDataImmediately && this._dataSource) {
                        if (this._searchTimer) {
                            return
                        }
                        var searchValue = this._getActualSearchValue();
                        searchValue && this._wasSearch(true);
                        this._filterDataSource(searchValue || null)
                    } else {
                        this._setListOption("items", [])
                    }
                }
                if (isVisible) {
                    this._scrollToSelectedItem()
                }
                this.callBase(isVisible)
            },
            _renderTooltip: function() {
                if (this.option("tooltipEnabled")) {
                    this.$element().attr("title", this.option("displayValue"))
                }
            },
            _renderDimensions: function() {
                this.callBase();
                this._setPopupOption("width")
            },
            _isValueEqualInputText: function() {
                var initialSelectedItem = this.option("selectedItem");
                var value = this._displayGetter(initialSelectedItem);
                var displayValue = value ? String(value) : "";
                var inputText = this._searchValue();
                return displayValue === inputText
            },
            _popupHidingHandler: function() {
                if (this._isValueEqualInputText()) {
                    this._cancelEditing()
                }
                this.callBase()
            },
            _restoreInputText: function(saveEditingValue) {
                if (this.option("readOnly")) {
                    return
                }
                this._loadItemDeferred && this._loadItemDeferred.always(function() {
                    var initialSelectedItem = this.option("selectedItem");
                    if (this.option("acceptCustomValue")) {
                        if (!saveEditingValue) {
                            this._updateField(initialSelectedItem);
                            this._clearFilter()
                        }
                        return
                    }
                    if (this.option("searchEnabled")) {
                        if (!this._searchValue() && this.option("allowClearing")) {
                            this._clearTextValue();
                            return
                        }
                    }
                    if (this._isValueEqualInputText()) {
                        return
                    }
                    this._renderInputValue().always(function(selectedItem) {
                        var newSelectedItem = commonUtils.ensureDefined(selectedItem, initialSelectedItem);
                        this._setSelectedItem(newSelectedItem);
                        this._updateField(newSelectedItem);
                        this._clearFilter()
                    }.bind(this))
                }.bind(this))
            },
            _focusOutHandler: function(e) {
                if (!this._preventNestedFocusEvent(e)) {
                    this._clearSearchTimer();
                    this._restoreInputText();
                    var shouldCancelSearch = this._wasSearch() && !this.option("acceptCustomValue") && this.option("searchEnabled") && this.option("opened") && !this._isOverlayNestedTarget(e.relatedTarget);
                    if (shouldCancelSearch) {
                        this._searchCanceled()
                    }
                }
                this.callBase(e)
            },
            _isOverlayNestedTarget: function(target) {
                return !!$(target).closest(".".concat(SELECTBOX_POPUP_WRAPPER_CLASS)).length
            },
            _clearTextValue: function() {
                if (this.option("selectedItem")) {
                    this.option("value", null)
                }
            },
            _shouldOpenPopup: function() {
                return this._needPassDataSourceToList()
            },
            _isFocused: function() {
                var activeElement = domAdapter.getActiveElement();
                return this.callBase() && $(activeElement).closest(this._input()).length > 0
            },
            _renderValueChangeEvent: function() {
                if (this._isEditable()) {
                    this.callBase()
                }
            },
            _isEditable: function() {
                return this.option("acceptCustomValue") || this.option("searchEnabled")
            },
            _fieldRenderData: function() {
                var $listFocused = this._list && this.option("opened") && $(this._list.option("focusedElement"));
                if ($listFocused && $listFocused.length) {
                    return this._list._getItemData($listFocused)
                }
                return this.option("selectedItem")
            },
            _readOnlyPropValue: function() {
                return !this._isEditable() || this.option("readOnly")
            },
            _isSelectedValue: function(value) {
                return this._isValueEquals(value, this.option("value"))
            },
            _shouldCloseOnItemClick: function() {
                return !(this.option("showSelectionControls") && "single" !== this.option("selectionMode"))
            },
            _listItemClickHandler: function(e) {
                var previousValue = this._getCurrentValue();
                this._focusListElement($(e.itemElement));
                this._saveValueChangeEvent(e.event);
                if (this._shouldClearFilter()) {
                    this._clearFilter()
                }
                this._completeSelection(this._valueGetter(e.itemData));
                if (this._shouldCloseOnItemClick()) {
                    this.option("opened", false)
                }
                if (this.option("searchEnabled") && previousValue === this._valueGetter(e.itemData)) {
                    this._updateField(e.itemData)
                }
            },
            _shouldClearFilter: function() {
                return this._wasSearch()
            },
            _completeSelection: function(value) {
                this._setValue(value)
            },
            _loadItem: function(value, cache) {
                var that = this;
                var deferred = new Deferred;
                this.callBase(value, cache).done(function(item) {
                    deferred.resolve(item)
                }.bind(this)).fail(function() {
                    var selectedItem = that.option("selectedItem");
                    if (that.option("acceptCustomValue") && value === that._valueGetter(selectedItem)) {
                        deferred.resolve(selectedItem)
                    } else {
                        deferred.reject()
                    }
                }.bind(this));
                return deferred.promise()
            },
            _loadInputValue: function(value, callback) {
                this._loadItemDeferred = this._loadItem(value).always(callback);
                return this._loadItemDeferred
            },
            _isCustomItemSelected: function() {
                var selectedItem = this.option("selectedItem");
                var searchValue = this._searchValue();
                var selectedItemText = this._displayGetter(selectedItem);
                return !selectedItemText || searchValue !== selectedItemText.toString()
            },
            _valueChangeEventHandler: function(e) {
                if (this.option("acceptCustomValue") && this._isCustomItemSelected() && !this._isValueChanging) {
                    this._isValueChanging = true;
                    this._customItemAddedHandler(e);
                    this._isValueChanging = false
                }
            },
            _initCustomItemCreatingAction: function() {
                this._customItemCreatingAction = this._createActionByOption("onCustomItemCreating")
            },
            _createCustomItem: function(text) {
                var params = {
                    text: text
                };
                var actionResult = this._customItemCreatingAction(params);
                var item = commonUtils.ensureDefined(actionResult, params.customItem);
                if (isDefined(actionResult)) {
                    errors.log("W0015", "onCustomItemCreating", "customItem")
                }
                return item
            },
            _customItemAddedHandler: function(e) {
                var searchValue = this._searchValue();
                var item = this._createCustomItem(searchValue);
                this._saveValueChangeEvent(e);
                if (void 0 === item) {
                    this._renderValue();
                    throw errors.Error("E0121")
                }
                if (isPromise(item)) {
                    deferredUtils.fromPromise(item).done(this._setCustomItem.bind(this)).fail(this._setCustomItem.bind(this, null))
                } else {
                    this._setCustomItem(item)
                }
            },
            _setCustomItem: function(item) {
                if (this._disposed) {
                    return
                }
                item = item || null;
                this.option("selectedItem", item);
                if (this._shouldClearFilter()) {
                    this._filterDataSource(null)
                }
                this._setValue(this._valueGetter(item));
                this._renderDisplayText(this._displayGetter(item))
            },
            _clearValueHandler: function(e) {
                this.callBase(e);
                return false
            },
            _wasSearch: function(value) {
                if (!arguments.length) {
                    return this._wasSearchValue
                }
                this._wasSearchValue = value
            },
            _searchHandler: function(e) {
                if (this._preventFiltering) {
                    delete this._preventFiltering;
                    return
                }
                if (this._needPassDataSourceToList()) {
                    this._wasSearch(true)
                }
                this.callBase(e)
            },
            _dataSourceFiltered: function(searchValue) {
                this.callBase();
                if (null !== searchValue) {
                    this._renderInputSubstitution();
                    this._renderFocusedElement()
                }
            },
            _valueSubstituted: function() {
                var input = this._input().get(0);
                var isAllSelected = 0 === input.selectionStart && input.selectionEnd === this._searchValue().length;
                var inputHasSelection = input.selectionStart !== input.selectionEnd;
                return this._wasSearch() && inputHasSelection && !isAllSelected
            },
            _shouldSubstitutionBeRendered: function() {
                return this.option("autocompletionEnabled") && !this._preventSubstitution && this.option("searchEnabled") && !this.option("acceptCustomValue") && "startswith" === this.option("searchMode")
            },
            _renderInputSubstitution: function() {
                if (!this._shouldSubstitutionBeRendered()) {
                    delete this._preventSubstitution;
                    return
                }
                var item = this._list && this._getPlainItems(this._list.option("items"))[0];
                if (!item) {
                    return
                }
                var $input = this._input();
                var valueLength = $input.val().length;
                if (0 === valueLength) {
                    return
                }
                var inputElement = $input.get(0);
                var displayValue = this._displayGetter(item).toString();
                inputElement.value = displayValue;
                this._caret({
                    start: valueLength,
                    end: displayValue.length
                })
            },
            _cleanInputSelection: function() {
                var inputElement = this._input().get(0);
                var endPosition = inputElement.value.length;
                inputElement.selectionStart = endPosition;
                inputElement.selectionEnd = endPosition
            },
            _dispose: function() {
                this._renderInputValueAsync = commonUtils.noop;
                delete this._loadItemDeferred;
                this.callBase()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "_isAdaptablePopupPosition":
                    case "autocompletionEnabled":
                        break;
                    case "onCustomItemCreating":
                        this._initCustomItemCreatingAction();
                        break;
                    case "tooltipEnabled":
                        this._renderTooltip();
                        break;
                    case "displayCustomValue":
                    case "acceptCustomValue":
                    case "showSelectionControls":
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "allowClearing":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxSelectBox", SelectBox);
        module.exports = SelectBox
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/context_menu.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _ui = __webpack_require__( /*! ./context_menu/ui.context_menu */ 343);
        var _ui2 = _interopRequireDefault(_ui);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _ui2.default
    }, ,
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/events_strategy.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.EventsStrategy = void 0;
        var _callbacks = __webpack_require__( /*! ./utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _iterator = __webpack_require__( /*! ./utils/iterator */ 4);
        var _type = __webpack_require__( /*! ./utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.EventsStrategy = function() {
            function EventsStrategy(owner) {
                _classCallCheck(this, EventsStrategy);
                this._events = {};
                this._owner = owner
            }
            _createClass(EventsStrategy, [{
                key: "hasEvent",
                value: function(eventName) {
                    var callbacks = this._events[eventName];
                    return callbacks ? callbacks.has() : false
                }
            }, {
                key: "fireEvent",
                value: function(eventName, eventArgs) {
                    var callbacks = this._events[eventName];
                    if (callbacks) {
                        callbacks.fireWith(this._owner, eventArgs)
                    }
                    return this._owner
                }
            }, {
                key: "on",
                value: function(eventName, eventHandler) {
                    var _this = this;
                    if ((0, _type.isPlainObject)(eventName)) {
                        (0, _iterator.each)(eventName, function(e, h) {
                            _this.on(e, h)
                        })
                    } else {
                        var callbacks = this._events[eventName];
                        if (!callbacks) {
                            callbacks = (0, _callbacks2.default)();
                            this._events[eventName] = callbacks
                        }
                        var addFn = callbacks.originalAdd || callbacks.add;
                        addFn.call(callbacks, eventHandler)
                    }
                }
            }, {
                key: "off",
                value: function(eventName, eventHandler) {
                    var callbacks = this._events[eventName];
                    if (callbacks) {
                        if ((0, _type.isFunction)(eventHandler)) {
                            callbacks.remove(eventHandler)
                        } else {
                            callbacks.empty()
                        }
                    }
                }
            }, {
                key: "dispose",
                value: function() {
                    (0, _iterator.each)(this._events, function(eventName, event) {
                        event.empty()
                    })
                }
            }], [{
                key: "create",
                value: function(owner, strategy) {
                    if (strategy) {
                        return (0, _type.isFunction)(strategy) ? strategy(owner) : strategy
                    } else {
                        return new EventsStrategy(owner)
                    }
                }
            }]);
            return EventsStrategy
        }()
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/events/core/emitter_registrator.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var dataUtils = __webpack_require__( /*! ../../core/element_data */ 41);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var registerEvent = __webpack_require__( /*! ./event_registrator */ 77);
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../pointer */ 23);
        var wheelEvent = __webpack_require__( /*! ./wheel */ 133);
        var MANAGER_EVENT = "dxEventManager";
        var EMITTER_DATA = "dxEmitter";
        var EventManager = Class.inherit({
            ctor: function() {
                this._attachHandlers();
                this.reset();
                this._proxiedCancelHandler = this._cancelHandler.bind(this);
                this._proxiedAcceptHandler = this._acceptHandler.bind(this)
            },
            _attachHandlers: function() {
                readyCallbacks.add(function() {
                    var document = domAdapter.getDocument();
                    eventsEngine.subscribeGlobal(document, eventUtils.addNamespace(pointerEvents.down, MANAGER_EVENT), this._pointerDownHandler.bind(this));
                    eventsEngine.subscribeGlobal(document, eventUtils.addNamespace(pointerEvents.move, MANAGER_EVENT), this._pointerMoveHandler.bind(this));
                    eventsEngine.subscribeGlobal(document, eventUtils.addNamespace([pointerEvents.up, pointerEvents.cancel].join(" "), MANAGER_EVENT), this._pointerUpHandler.bind(this));
                    eventsEngine.subscribeGlobal(document, eventUtils.addNamespace(wheelEvent.name, MANAGER_EVENT), this._mouseWheelHandler.bind(this))
                }.bind(this))
            },
            _eachEmitter: function(callback) {
                var activeEmitters = this._activeEmitters || [];
                var i = 0;
                while (activeEmitters.length > i) {
                    var emitter = activeEmitters[i];
                    if (false === callback(emitter)) {
                        break
                    }
                    if (activeEmitters[i] === emitter) {
                        i++
                    }
                }
            },
            _applyToEmitters: function(method, arg) {
                this._eachEmitter(function(emitter) {
                    emitter[method].call(emitter, arg)
                })
            },
            reset: function() {
                this._eachEmitter(this._proxiedCancelHandler);
                this._activeEmitters = []
            },
            resetEmitter: function(emitter) {
                this._proxiedCancelHandler(emitter)
            },
            _pointerDownHandler: function(e) {
                if (eventUtils.isMouseEvent(e) && e.which > 1) {
                    return
                }
                this._updateEmitters(e)
            },
            _updateEmitters: function(e) {
                if (!this._isSetChanged(e)) {
                    return
                }
                this._cleanEmitters(e);
                this._fetchEmitters(e)
            },
            _isSetChanged: function(e) {
                var currentSet = this._closestEmitter(e);
                var previousSet = this._emittersSet || [];
                var setChanged = currentSet.length !== previousSet.length;
                each(currentSet, function(index, emitter) {
                    setChanged = setChanged || previousSet[index] !== emitter;
                    return !setChanged
                });
                this._emittersSet = currentSet;
                return setChanged
            },
            _closestEmitter: function(e) {
                var that = this;
                var result = [];
                var $element = $(e.target);

                function handleEmitter(_, emitter) {
                    if (!!emitter && emitter.validatePointers(e) && emitter.validate(e)) {
                        emitter.addCancelCallback(that._proxiedCancelHandler);
                        emitter.addAcceptCallback(that._proxiedAcceptHandler);
                        result.push(emitter)
                    }
                }
                while ($element.length) {
                    var emitters = dataUtils.data($element.get(0), EMITTER_DATA) || [];
                    each(emitters, handleEmitter);
                    $element = $element.parent()
                }
                return result
            },
            _acceptHandler: function(acceptedEmitter, e) {
                var that = this;
                this._eachEmitter(function(emitter) {
                    if (emitter !== acceptedEmitter) {
                        that._cancelEmitter(emitter, e)
                    }
                })
            },
            _cancelHandler: function(canceledEmitter, e) {
                this._cancelEmitter(canceledEmitter, e)
            },
            _cancelEmitter: function(emitter, e) {
                var activeEmitters = this._activeEmitters;
                if (e) {
                    emitter.cancel(e)
                } else {
                    emitter.reset()
                }
                emitter.removeCancelCallback();
                emitter.removeAcceptCallback();
                var emitterIndex = inArray(emitter, activeEmitters);
                if (emitterIndex > -1) {
                    activeEmitters.splice(emitterIndex, 1)
                }
            },
            _cleanEmitters: function(e) {
                this._applyToEmitters("end", e);
                this.reset(e)
            },
            _fetchEmitters: function(e) {
                this._activeEmitters = this._emittersSet.slice();
                this._applyToEmitters("start", e)
            },
            _pointerMoveHandler: function(e) {
                this._applyToEmitters("move", e)
            },
            _pointerUpHandler: function(e) {
                this._updateEmitters(e)
            },
            _mouseWheelHandler: function(e) {
                if (!this._allowInterruptionByMouseWheel()) {
                    return
                }
                e.pointers = [null];
                this._pointerDownHandler(e);
                this._adjustWheelEvent(e);
                this._pointerMoveHandler(e);
                e.pointers = [];
                this._pointerUpHandler(e)
            },
            _allowInterruptionByMouseWheel: function() {
                var allowInterruption = true;
                this._eachEmitter(function(emitter) {
                    allowInterruption = emitter.allowInterruptionByMouseWheel() && allowInterruption;
                    return allowInterruption
                });
                return allowInterruption
            },
            _adjustWheelEvent: function(e) {
                var closestGestureEmitter = null;
                this._eachEmitter(function(emitter) {
                    if (!emitter.gesture) {
                        return
                    }
                    var direction = emitter.getDirection(e);
                    if ("horizontal" !== direction && !e.shiftKey || "vertical" !== direction && e.shiftKey) {
                        closestGestureEmitter = emitter;
                        return false
                    }
                });
                if (!closestGestureEmitter) {
                    return
                }
                var direction = closestGestureEmitter.getDirection(e);
                var verticalGestureDirection = "both" === direction && !e.shiftKey || "vertical" === direction;
                var prop = verticalGestureDirection ? "pageY" : "pageX";
                e[prop] += e.delta
            },
            isActive: function(element) {
                var result = false;
                this._eachEmitter(function(emitter) {
                    result = result || emitter.getElement().is(element)
                });
                return result
            }
        });
        var eventManager = new EventManager;
        var EMITTER_SUBSCRIPTION_DATA = "dxEmitterSubscription";
        var registerEmitter = function(emitterConfig) {
            var emitterClass = emitterConfig.emitter;
            var emitterName = emitterConfig.events[0];
            var emitterEvents = emitterConfig.events;
            each(emitterEvents, function(_, eventName) {
                registerEvent(eventName, {
                    noBubble: !emitterConfig.bubble,
                    setup: function(element) {
                        var subscriptions = dataUtils.data(element, EMITTER_SUBSCRIPTION_DATA) || {};
                        var emitters = dataUtils.data(element, EMITTER_DATA) || {};
                        var emitter = emitters[emitterName] || new emitterClass(element);
                        subscriptions[eventName] = true;
                        emitters[emitterName] = emitter;
                        dataUtils.data(element, EMITTER_DATA, emitters);
                        dataUtils.data(element, EMITTER_SUBSCRIPTION_DATA, subscriptions)
                    },
                    add: function(element, handleObj) {
                        var emitters = dataUtils.data(element, EMITTER_DATA);
                        var emitter = emitters[emitterName];
                        emitter.configure(extend({
                            delegateSelector: handleObj.selector
                        }, handleObj.data), handleObj.type)
                    },
                    teardown: function(element) {
                        var subscriptions = dataUtils.data(element, EMITTER_SUBSCRIPTION_DATA);
                        var emitters = dataUtils.data(element, EMITTER_DATA);
                        var emitter = emitters[emitterName];
                        delete subscriptions[eventName];
                        var disposeEmitter = true;
                        each(emitterEvents, function(_, eventName) {
                            disposeEmitter = disposeEmitter && !subscriptions[eventName];
                            return disposeEmitter
                        });
                        if (disposeEmitter) {
                            if (eventManager.isActive(element)) {
                                eventManager.resetEmitter(emitter)
                            }
                            emitter && emitter.dispose();
                            delete emitters[emitterName]
                        }
                    }
                })
            })
        };
        module.exports = registerEmitter
    }, ,
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/data/abstract_store.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var abstract = Class.abstract;
        var EventsStrategy = __webpack_require__( /*! ../core/events_strategy */ 100).EventsStrategy;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var errorsModule = __webpack_require__( /*! ./errors */ 38);
        var dataUtils = __webpack_require__( /*! ./utils */ 42);
        var compileGetter = __webpack_require__( /*! ../core/utils/data */ 20).compileGetter;
        var storeHelper = __webpack_require__( /*! ./store_helper */ 86);
        var queryByOptions = storeHelper.queryByOptions;
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var storeImpl = {};
        var Store = Class.inherit({
            ctor: function(options) {
                var that = this;
                options = options || {};
                this._eventsStrategy = new EventsStrategy(this);
                each(["onLoaded", "onLoading", "onInserted", "onInserting", "onUpdated", "onUpdating", "onPush", "onRemoved", "onRemoving", "onModified", "onModifying"], function(_, optionName) {
                    if (optionName in options) {
                        that.on(optionName.slice(2).toLowerCase(), options[optionName])
                    }
                });
                this._key = options.key;
                this._errorHandler = options.errorHandler;
                this._useDefaultSearch = true
            },
            _customLoadOptions: function() {
                return null
            },
            key: function() {
                return this._key
            },
            keyOf: function(obj) {
                if (!this._keyGetter) {
                    this._keyGetter = compileGetter(this.key())
                }
                return this._keyGetter(obj)
            },
            _requireKey: function() {
                if (!this.key()) {
                    throw errorsModule.errors.Error("E4005")
                }
            },
            load: function(options) {
                var that = this;
                options = options || {};
                this._eventsStrategy.fireEvent("loading", [options]);
                return this._withLock(this._loadImpl(options)).done(function(result) {
                    that._eventsStrategy.fireEvent("loaded", [result, options])
                })
            },
            _loadImpl: function(options) {
                return queryByOptions(this.createQuery(options), options).enumerate()
            },
            _withLock: function(task) {
                var result = new Deferred;
                task.done(function() {
                    var that = this;
                    var args = arguments;
                    dataUtils.processRequestResultLock.promise().done(function() {
                        result.resolveWith(that, args)
                    })
                }).fail(function() {
                    result.rejectWith(this, arguments)
                });
                return result
            },
            createQuery: abstract,
            totalCount: function(options) {
                return this._totalCountImpl(options)
            },
            _totalCountImpl: function(options) {
                return queryByOptions(this.createQuery(options), options, true).count()
            },
            byKey: function(key, extraOptions) {
                return this._addFailHandlers(this._withLock(this._byKeyImpl(key, extraOptions)))
            },
            _byKeyImpl: abstract,
            insert: function(values) {
                var that = this;
                that._eventsStrategy.fireEvent("modifying");
                that._eventsStrategy.fireEvent("inserting", [values]);
                return that._addFailHandlers(that._insertImpl(values).done(function(callbackValues, callbackKey) {
                    that._eventsStrategy.fireEvent("inserted", [callbackValues, callbackKey]);
                    that._eventsStrategy.fireEvent("modified")
                }))
            },
            _insertImpl: abstract,
            update: function(key, values) {
                var that = this;
                that._eventsStrategy.fireEvent("modifying");
                that._eventsStrategy.fireEvent("updating", [key, values]);
                return that._addFailHandlers(that._updateImpl(key, values).done(function() {
                    that._eventsStrategy.fireEvent("updated", [key, values]);
                    that._eventsStrategy.fireEvent("modified")
                }))
            },
            _updateImpl: abstract,
            push: function(changes) {
                this._pushImpl(changes);
                this._eventsStrategy.fireEvent("push", [changes])
            },
            _pushImpl: noop,
            remove: function(key) {
                var that = this;
                that._eventsStrategy.fireEvent("modifying");
                that._eventsStrategy.fireEvent("removing", [key]);
                return that._addFailHandlers(that._removeImpl(key).done(function(callbackKey) {
                    that._eventsStrategy.fireEvent("removed", [callbackKey]);
                    that._eventsStrategy.fireEvent("modified")
                }))
            },
            _removeImpl: abstract,
            _addFailHandlers: function(deferred) {
                return deferred.fail(this._errorHandler).fail(errorsModule._errorHandler)
            },
            on: function(eventName, eventHandler) {
                this._eventsStrategy.on(eventName, eventHandler);
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            }
        });
        Store.create = function(alias, options) {
            if (!(alias in storeImpl)) {
                throw errorsModule.errors.Error("E4020", alias)
            }
            return new storeImpl[alias](options)
        };
        Store.registerClass = function(type, alias) {
            if (alias) {
                storeImpl[alias] = type
            }
            return type
        };
        Store.inherit = function(inheritor) {
            return function(members, alias) {
                var type = inheritor.apply(this, [members]);
                Store.registerClass(type, alias);
                return type
            }
        }(Store.inherit);
        module.exports = Store
    },
    /*!*****************************************!*\
      !*** ./artifacts/transpiled/ui/list.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ListEdit = __webpack_require__( /*! ./list/ui.list.edit.search */ 536);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        registerComponent("dxList", ListEdit);
        module.exports = ListEdit
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/action.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ./renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _config = __webpack_require__( /*! ./config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _window = __webpack_require__( /*! ./utils/window */ 7);
        var _type = __webpack_require__( /*! ./utils/type */ 1);
        var _iterator = __webpack_require__( /*! ./utils/iterator */ 4);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var Action = function() {
            function Action(action, config) {
                _classCallCheck(this, Action);
                config = config || {};
                this._action = action;
                this._context = config.context || (0, _window.getWindow)();
                this._beforeExecute = config.beforeExecute;
                this._afterExecute = config.afterExecute;
                this._component = config.component;
                this._validatingTargetName = config.validatingTargetName;
                var excludeValidators = this._excludeValidators = {};
                if (config.excludeValidators) {
                    for (var i = 0; i < config.excludeValidators.length; i++) {
                        excludeValidators[config.excludeValidators[i]] = true
                    }
                }
            }
            _createClass(Action, [{
                key: "execute",
                value: function() {
                    var e = {
                        action: this._action,
                        args: Array.prototype.slice.call(arguments),
                        context: this._context,
                        component: this._component,
                        validatingTargetName: this._validatingTargetName,
                        cancel: false,
                        handled: false
                    };
                    var beforeExecute = this._beforeExecute;
                    var afterExecute = this._afterExecute;
                    var argsBag = e.args[0] || {};
                    if ("jQueryEvent" in argsBag && !argsBag.event) {
                        throw "The jQueryEvent field is deprecated. Please, use the `event` field instead"
                    }
                    if (!("jQueryEvent" in argsBag) && argsBag.event && (0, _config2.default)().useJQuery) {
                        Object.defineProperty(argsBag, "jQueryEvent", {
                            get: function() {
                                _errors2.default.log("W0003", "Handler argument", "jQueryEvent", "17.2", "Use the 'event' field instead");
                                return argsBag.event
                            },
                            set: function(value) {
                                _errors2.default.log("W0003", "Handler argument", "jQueryEvent", "17.2", "Use the 'event' field instead");
                                argsBag.event = value
                            }
                        })
                    }
                    if (!this._validateAction(e)) {
                        return
                    }
                    null === beforeExecute || void 0 === beforeExecute ? void 0 : beforeExecute.call(this._context, e);
                    if (e.cancel) {
                        return
                    }
                    var result = this._executeAction(e);
                    if (argsBag.cancel) {
                        return
                    }
                    null === afterExecute || void 0 === afterExecute ? void 0 : afterExecute.call(this._context, e);
                    return result
                }
            }, {
                key: "_validateAction",
                value: function(e) {
                    var excludeValidators = this._excludeValidators;
                    var executors = Action.executors;
                    for (var name in executors) {
                        if (!excludeValidators[name]) {
                            var _executor$validate;
                            var executor = executors[name];
                            null === (_executor$validate = executor.validate) || void 0 === _executor$validate ? void 0 : _executor$validate.call(executor, e);
                            if (e.cancel) {
                                return false
                            }
                        }
                    }
                    return true
                }
            }, {
                key: "_executeAction",
                value: function(e) {
                    var result;
                    var executors = Action.executors;
                    for (var name in executors) {
                        var _executor$execute;
                        var executor = executors[name];
                        null === (_executor$execute = executor.execute) || void 0 === _executor$execute ? void 0 : _executor$execute.call(executor, e);
                        if (e.handled) {
                            result = e.result;
                            break
                        }
                    }
                    return result
                }
            }], [{
                key: "registerExecutor",
                value: function(name, executor) {
                    if ((0, _type.isPlainObject)(name)) {
                        (0, _iterator.each)(name, Action.registerExecutor);
                        return
                    }
                    Action.executors[name] = executor
                }
            }, {
                key: "unregisterExecutor",
                value: function() {
                    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                        args[_key] = arguments[_key]
                    }(0, _iterator.each)(args, function() {
                        delete Action.executors[this]
                    })
                }
            }]);
            return Action
        }();
        exports.default = Action;
        Action.executors = {};
        var createValidatorByTargetElement = function(condition) {
            return function(e) {
                if (!e.args.length) {
                    return
                }
                var args = e.args[0];
                var element = args[e.validatingTargetName] || args.element;
                if (element && condition((0, _renderer2.default)(element))) {
                    e.cancel = true
                }
            }
        };
        Action.registerExecutor({
            disabled: {
                validate: createValidatorByTargetElement(function($target) {
                    return $target.is(".dx-state-disabled, .dx-state-disabled *")
                })
            },
            readOnly: {
                validate: createValidatorByTargetElement(function($target) {
                    return $target.is(".dx-state-readonly, .dx-state-readonly *")
                })
            },
            undefined: {
                execute: function(e) {
                    if (!e.action) {
                        e.result = void 0;
                        e.handled = true
                    }
                }
            },
            func: {
                execute: function(e) {
                    if ((0, _type.isFunction)(e.action)) {
                        e.result = e.action.call(e.context, e.args[0]);
                        e.handled = true
                    }
                }
            }
        })
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator_registry.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        exports.registry = {};
        exports.register = function(option, type, decoratorClass) {
            var decoratorsRegistry = exports.registry;
            var decoratorConfig = {};
            decoratorConfig[option] = decoratorsRegistry[option] ? decoratorsRegistry[option] : {};
            decoratorConfig[option][type] = decoratorClass;
            decoratorsRegistry = extend(decoratorsRegistry, decoratorConfig)
        }
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./scroll_view/ui.scroll_view */ 227)
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/shared/accessibility.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FOCUS_STATE_CLASS = "dx-state-focused";
        var FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var FOCUSED_ROW_SELECTOR = ".dx-row-focused";
        var GRID_ROW_SELECTOR = ".dx-datagrid-rowsview .dx-row";
        var GRID_CELL_SELECTOR = "".concat(GRID_ROW_SELECTOR, " > td");
        var TREELIST_ROW_SELECTOR = ".dx-treelist-rowsview .dx-row";
        var TREELIST_CELL_SELECTOR = "".concat(TREELIST_ROW_SELECTOR, " > td");
        var viewItemSelectorMap = {
            groupPanel: [".dx-datagrid-group-panel .dx-group-panel-item[tabindex]"],
            columnHeaders: [".dx-datagrid-headers .dx-header-row > td.dx-datagrid-action", ".dx-treelist-headers .dx-header-row > td.dx-treelist-action"],
            filterRow: [".dx-datagrid-headers .dx-datagrid-filter-row .dx-editor-cell .dx-texteditor-input", ".dx-treelist-headers .dx-treelist-filter-row .dx-editor-cell .dx-texteditor-input"],
            rowsView: ["".concat(FOCUSED_ROW_SELECTOR), "".concat(GRID_ROW_SELECTOR, "[tabindex]"), "".concat(GRID_CELL_SELECTOR, "[tabindex]"), "".concat(GRID_CELL_SELECTOR), "".concat(TREELIST_ROW_SELECTOR, "[tabindex]"), "".concat(TREELIST_CELL_SELECTOR, "[tabindex]"), "".concat(TREELIST_CELL_SELECTOR)],
            footer: [".dx-datagrid-total-footer .dx-datagrid-summary-item", ".dx-treelist-total-footer .dx-treelist-summary-item"],
            filterPanel: [".dx-datagrid-filter-panel .dx-icon-filter", ".dx-treelist-filter-panel .dx-icon-filter"],
            pager: [".dx-datagrid-pager [tabindex]", ".dx-treelist-pager [tabindex]"]
        };
        var isMouseDown = false;
        var isHiddenFocusing = false;
        var focusedElementInfo = null;

        function processKeyDown(viewName, instance, event, action, $mainElement, executeKeyDown) {
            var isHandled = fireKeyDownEvent(instance, event.originalEvent, executeKeyDown);
            if (isHandled) {
                return
            }
            var keyName = eventUtils.normalizeKeyName(event);
            if ("enter" === keyName || "space" === keyName) {
                saveFocusedElementInfo(event.target, instance);
                action && action({
                    event: event
                })
            } else {
                if ("tab" === keyName) {
                    $mainElement.addClass(FOCUS_STATE_CLASS)
                } else {
                    module.exports.selectView(viewName, instance, event)
                }
            }
        }

        function saveFocusedElementInfo(target, instance) {
            var $target = (0, _renderer2.default)(target);
            var ariaLabel = $target.attr("aria-label");
            var $activeElements = getActiveAccessibleElements(ariaLabel, instance.element());
            var targetIndex = $activeElements.index($target);
            focusedElementInfo = (0, _extend.extend)({}, {
                ariaLabel: ariaLabel,
                index: targetIndex
            }, {
                viewInstance: instance
            })
        }

        function getActiveAccessibleElements(ariaLabel, viewElement) {
            var $viewElement = (0, _renderer2.default)(viewElement);
            var $activeElements;
            if (ariaLabel) {
                $activeElements = $viewElement.find('[aria-label="'.concat(ariaLabel, '"][tabindex]'))
            } else {
                $activeElements = $viewElement.find("[tabindex]")
            }
            return $activeElements
        }

        function findFocusedViewElement(viewSelectors) {
            for (var index in viewSelectors) {
                var selector = viewSelectors[index];
                var $focusViewElement = (0, _renderer2.default)(selector).first();
                if ($focusViewElement.length) {
                    return $focusViewElement
                }
            }
        }

        function fireKeyDownEvent(instance, event, executeAction) {
            var args = {
                event: event,
                handled: false
            };
            if (executeAction) {
                executeAction(args)
            } else {
                instance._createActionByOption("onKeyDown")(args)
            }
            return args.handled
        }

        function onDocumentVisibilityChange() {
            isHiddenFocusing = "visible" === _dom_adapter2.default.getDocument().visibilityState
        }
        module.exports = {
            subscribeVisibilityChange: function() {
                _events_engine2.default.on(_dom_adapter2.default.getDocument(), "visibilitychange", onDocumentVisibilityChange)
            },
            unsubscribeVisibilityChange: function() {
                _events_engine2.default.off(_dom_adapter2.default.getDocument(), "visibilitychange", onDocumentVisibilityChange)
            },
            hiddenFocus: function(element) {
                isHiddenFocusing = true;
                element.focus();
                isHiddenFocusing = false
            },
            registerKeyboardAction: function(viewName, instance, $element, selector, action, executeKeyDown) {
                if (instance.option("useLegacyKeyboardNavigation")) {
                    return
                }
                var $mainElement = (0, _renderer2.default)(instance.element());
                _events_engine2.default.on($element, "keydown", selector, function(e) {
                    return processKeyDown(viewName, instance, e, action, $mainElement, executeKeyDown)
                });
                _events_engine2.default.on($element, "mousedown", selector, function() {
                    isMouseDown = true;
                    $mainElement.removeClass(FOCUS_STATE_CLASS)
                });
                _events_engine2.default.on($element, "focusin", selector, function() {
                    var needShowOverlay = !isMouseDown && !isHiddenFocusing;
                    if (needShowOverlay) {
                        $mainElement.addClass(FOCUS_STATE_CLASS)
                    }
                    isMouseDown = false
                })
            },
            restoreFocus: function(instance) {
                if (!instance.option("useLegacyKeyboardNavigation") && focusedElementInfo) {
                    var viewInstance = focusedElementInfo.viewInstance;
                    if (viewInstance) {
                        var $activeElements = getActiveAccessibleElements(focusedElementInfo.ariaLabel, viewInstance.element());
                        var $targetElement = $activeElements.eq(focusedElementInfo.index);
                        focusedElementInfo = null;
                        _events_engine2.default.trigger($targetElement, "focus")
                    }
                }
            },
            selectView: function(viewName, instance, event) {
                var keyName = eventUtils.normalizeKeyName(event);
                if (event.ctrlKey && ("upArrow" === keyName || "downArrow" === keyName)) {
                    var viewNames = Object.keys(viewItemSelectorMap);
                    var viewItemIndex = viewNames.indexOf(viewName);
                    while (viewItemIndex >= 0 && viewItemIndex < viewNames.length) {
                        viewItemIndex = "upArrow" === keyName ? --viewItemIndex : ++viewItemIndex;
                        var _viewName = viewNames[viewItemIndex];
                        var viewSelectors = viewItemSelectorMap[_viewName];
                        var $focusViewElement = findFocusedViewElement(viewSelectors);
                        if ($focusViewElement && $focusViewElement.length) {
                            $focusViewElement.attr("tabindex", instance.option("tabindex") || 0);
                            _events_engine2.default.trigger($focusViewElement, "focus");
                            $focusViewElement.removeClass(FOCUS_DISABLED_CLASS);
                            break
                        }
                    }
                }
            },
            setTabIndex: function(instance, $element) {
                if (!instance.option("useLegacyKeyboardnavigation")) {
                    $element.attr("tabindex", instance.option("tabindex") || 0)
                }
            }
        }
    }, , , , ,
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/function_template.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.FunctionTemplate = void 0;
        var _template_base = __webpack_require__( /*! ./template_base */ 78);
        var _dom = __webpack_require__( /*! ../utils/dom */ 11);

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        exports.FunctionTemplate = function(_TemplateBase) {
            _inherits(FunctionTemplate, _TemplateBase);
            var _super = _createSuper(FunctionTemplate);

            function FunctionTemplate(render) {
                var _this;
                _classCallCheck(this, FunctionTemplate);
                _this = _super.call(this);
                _this._render = render;
                return _this
            }
            _createClass(FunctionTemplate, [{
                key: "_renderCore",
                value: function(options) {
                    return (0, _dom.normalizeTemplateElement)(this._render(options))
                }
            }]);
            return FunctionTemplate
        }(_template_base.TemplateBase)
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/resize_callbacks.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ./window */ 7);
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var Callbacks = __webpack_require__( /*! ./callbacks */ 27);
        var readyCallbacks = __webpack_require__( /*! ./ready_callbacks */ 51);
        var callOnce = __webpack_require__( /*! ./call_once */ 80);
        var resizeCallbacks = function() {
            var prevSize;
            var callbacks = Callbacks();
            var originalCallbacksAdd = callbacks.add;
            var originalCallbacksRemove = callbacks.remove;
            if (!windowUtils.hasWindow()) {
                return callbacks
            }
            var formatSize = function() {
                var window = windowUtils.getWindow();
                return {
                    width: window.innerWidth,
                    height: window.innerHeight
                }
            };
            var handleResize = function() {
                var now = formatSize();
                if (now.width === prevSize.width && now.height === prevSize.height) {
                    return
                }
                var changedDimension;
                if (now.width === prevSize.width) {
                    changedDimension = "height"
                }
                if (now.height === prevSize.height) {
                    changedDimension = "width"
                }
                prevSize = now;
                callbacks.fire(changedDimension)
            };
            var setPrevSize = callOnce(function() {
                prevSize = formatSize()
            });
            var removeListener;
            callbacks.add = function() {
                var result = originalCallbacksAdd.apply(callbacks, arguments);
                setPrevSize();
                readyCallbacks.add(function() {
                    if (!removeListener && callbacks.has()) {
                        removeListener = domAdapter.listen(windowUtils.getWindow(), "resize", handleResize)
                    }
                });
                return result
            };
            callbacks.remove = function() {
                var result = originalCallbacksRemove.apply(callbacks, arguments);
                if (!callbacks.has() && removeListener) {
                    removeListener();
                    removeListener = void 0
                }
                return result
            };
            return callbacks
        }();
        module.exports = resizeCallbacks
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/core/component.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _config = __webpack_require__( /*! ./config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _extend = __webpack_require__( /*! ./utils/extend */ 0);
        var _index = __webpack_require__( /*! ./options/index */ 468);
        var _utils = __webpack_require__( /*! ./options/utils */ 187);
        var _class = __webpack_require__( /*! ./class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _action = __webpack_require__( /*! ./action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _callbacks = __webpack_require__( /*! ./utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _events_strategy = __webpack_require__( /*! ./events_strategy */ 100);
        var _public_component = __webpack_require__( /*! ./utils/public_component */ 139);
        var _public_component2 = _interopRequireDefault(_public_component);
        var _postponed_operations = __webpack_require__( /*! ./postponed_operations */ 470);
        var _type = __webpack_require__( /*! ./utils/type */ 1);
        var _common = __webpack_require__( /*! ./utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var getEventName = function(actionName) {
            return actionName.charAt(2).toLowerCase() + actionName.substr(3)
        };
        var Component = _class2.default.inherit({
            _setDeprecatedOptions: function() {
                this._deprecatedOptions = {}
            },
            _getDeprecatedOptions: function() {
                return this._deprecatedOptions
            },
            _getDefaultOptions: function() {
                return {
                    onInitialized: null,
                    onOptionChanged: null,
                    onDisposing: null,
                    defaultOptionsRules: null
                }
            },
            _defaultOptionsRules: function() {
                return []
            },
            _setOptionsByDevice: function(rules) {
                this._options.applyRules(rules)
            },
            _convertRulesToOptions: function(rules) {
                return (0, _utils.convertRulesToOptions)(rules)
            },
            _isInitialOptionValue: function(name) {
                return this._options.isInitial(name)
            },
            _setOptionsByReference: function() {
                this._optionsByReference = {}
            },
            _getOptionsByReference: function() {
                return this._optionsByReference
            },
            ctor: function() {
                var options = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                var _optionChangedCallbacks = options._optionChangedCallbacks,
                    _disposingCallbacks = options._disposingCallbacks;
                this.NAME = _public_component2.default.name(this.constructor);
                this._eventsStrategy = _events_strategy.EventsStrategy.create(this, options.eventsStrategy);
                this._updateLockCount = 0;
                this._optionChangedCallbacks = _optionChangedCallbacks || (0, _callbacks2.default)();
                this._disposingCallbacks = _disposingCallbacks || (0, _callbacks2.default)();
                this.postponedOperations = new _postponed_operations.PostponedOperations;
                this._createOptions(options)
            },
            _createOptions: function(options) {
                var _this = this;
                this.beginUpdate();
                try {
                    this._setOptionsByReference();
                    this._setDeprecatedOptions();
                    this._options = new _index.Options(this._getDefaultOptions(), this._getDefaultOptions(), this._getOptionsByReference(), this._getDeprecatedOptions());
                    this._options.onChanging(function(name, previousValue, value) {
                        return _this._initialized && _this._optionChanging(name, previousValue, value)
                    });
                    this._options.onDeprecated(function(option, info) {
                        return _this._logDeprecatedOptionWarning(option, info)
                    });
                    this._options.onChanged(function(name, value, previousValue) {
                        return _this._notifyOptionChanged(name, value, previousValue)
                    });
                    this._options.onStartChange(function() {
                        return _this.beginUpdate()
                    });
                    this._options.onEndChange(function() {
                        return _this.endUpdate()
                    });
                    this._options.addRules(this._defaultOptionsRules());
                    if (options && options.onInitializing) {
                        options.onInitializing.apply(this, [options])
                    }
                    this._setOptionsByDevice(options.defaultOptionsRules);
                    this._initOptions(options)
                } finally {
                    this.endUpdate()
                }
            },
            _initOptions: function(options) {
                this.option(options)
            },
            _init: function() {
                var _this2 = this;
                this._createOptionChangedAction();
                this.on("disposing", function(args) {
                    _this2._disposingCallbacks.fireWith(_this2, [args])
                })
            },
            _logDeprecatedOptionWarning: function(option, info) {
                var message = info.message || "Use the '".concat(info.alias, "' option instead");
                _errors2.default.log("W0001", this.NAME, option, info.since, message)
            },
            _logDeprecatedComponentWarning: function(since, alias) {
                _errors2.default.log("W0000", this.NAME, since, "Use the '".concat(alias, "' widget instead"))
            },
            _createOptionChangedAction: function() {
                this._optionChangedAction = this._createActionByOption("onOptionChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _createDisposingAction: function() {
                this._disposingAction = this._createActionByOption("onDisposing", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onDisposing":
                    case "onInitialized":
                        break;
                    case "onOptionChanged":
                        this._createOptionChangedAction();
                        break;
                    case "defaultOptionsRules":
                }
            },
            _dispose: function() {
                this._optionChangedCallbacks.empty();
                this._createDisposingAction();
                this._disposingAction();
                this._eventsStrategy.dispose();
                this._options.dispose();
                this._disposed = true
            },
            _lockUpdate: function() {
                this._updateLockCount++
            },
            _unlockUpdate: function() {
                this._updateLockCount = Math.max(this._updateLockCount - 1, 0)
            },
            _isUpdateAllowed: function() {
                return 0 === this._updateLockCount
            },
            _isInitializingRequired: function() {
                return !this._initializing && !this._initialized
            },
            _commitUpdate: function() {
                this.postponedOperations.callPostponedOperations();
                this._isInitializingRequired() && this._initializeComponent()
            },
            _initializeComponent: function() {
                this._initializing = true;
                try {
                    this._init()
                } finally {
                    this._initializing = false;
                    this._lockUpdate();
                    this._createActionByOption("onInitialized", {
                        excludeValidators: ["disabled", "readOnly"]
                    })();
                    this._unlockUpdate();
                    this._initialized = true
                }
            },
            instance: function() {
                return this
            },
            beginUpdate: function() {
                this._lockUpdate()
            },
            endUpdate: function() {
                this._unlockUpdate();
                this._isUpdateAllowed() && this._commitUpdate()
            },
            _optionChanging: _common.noop,
            _notifyOptionChanged: function(option, value, previousValue) {
                if (this._initialized) {
                    var optionNames = [option].concat(this._options.getAliasesByName(option));
                    for (var i = 0; i < optionNames.length; i++) {
                        var name = optionNames[i];
                        var args = {
                            name: name.split(/[.[]/)[0],
                            fullName: name,
                            value: value,
                            previousValue: previousValue
                        };
                        this._optionChangedCallbacks.fireWith(this, [(0, _extend.extend)(this._defaultActionArgs(), args)]);
                        this._optionChangedAction((0, _extend.extend)({}, args));
                        if (!this._disposed && this._cancelOptionChange !== args.name) {
                            this._optionChanged(args)
                        }
                    }
                }
            },
            initialOption: function(name) {
                return this._options.initial(name)
            },
            _defaultActionConfig: function() {
                return {
                    context: this,
                    component: this
                }
            },
            _defaultActionArgs: function() {
                return {
                    component: this
                }
            },
            _createAction: function(actionSource, config) {
                var _this3 = this;
                var action;
                return function(e) {
                    if (!(0, _type.isDefined)(e)) {
                        e = {}
                    }
                    if (!(0, _type.isPlainObject)(e)) {
                        e = {
                            actionValue: e
                        }
                    }
                    action = action || new _action2.default(actionSource, (0, _extend.extend)(config, _this3._defaultActionConfig()));
                    return action.execute.call(action, (0, _extend.extend)(e, _this3._defaultActionArgs()))
                }
            },
            _createActionByOption: function(optionName, config) {
                var _this4 = this;
                var action;
                var eventName;
                var actionFunc;
                var result = function() {
                    if (!eventName) {
                        config = config || {};
                        if ("string" !== typeof optionName) {
                            throw _errors2.default.Error("E0008")
                        }
                        if (0 === optionName.indexOf("on")) {
                            eventName = getEventName(optionName)
                        }
                        if (0 !== optionName.indexOf("on")) {
                            throw Error("The '".concat(optionName, "' option name should start with 'on' prefix"))
                        }
                        actionFunc = _this4.option(optionName)
                    }
                    if (!action && !actionFunc && !config.beforeExecute && !config.afterExecute && !_this4._eventsStrategy.hasEvent(eventName)) {
                        return
                    }
                    if (!action) {
                        var beforeExecute = config.beforeExecute;
                        config.beforeExecute = function() {
                            for (var _len2 = arguments.length, props = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
                                props[_key2] = arguments[_key2]
                            }
                            beforeExecute && beforeExecute.apply(_this4, props);
                            _this4._eventsStrategy.fireEvent(eventName, props[0].args)
                        };
                        action = _this4._createAction(actionFunc, config)
                    }
                    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                        args[_key] = arguments[_key]
                    }
                    if ((0, _config2.default)().wrapActionsBeforeExecute) {
                        var beforeActionExecute = _this4.option("beforeActionExecute") || _common.noop;
                        var wrappedAction = beforeActionExecute(_this4, action, config) || action;
                        return wrappedAction.apply(_this4, args)
                    }
                    return action.apply(_this4, args)
                };
                if ((0, _config2.default)().wrapActionsBeforeExecute) {
                    return result
                }
                var onActionCreated = this.option("onActionCreated") || _common.noop;
                return onActionCreated(this, result, config) || result
            },
            on: function(eventName, eventHandler) {
                this._eventsStrategy.on(eventName, eventHandler);
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            },
            hasActionSubscription: function(actionName) {
                return !!this._options.silent(actionName) || this._eventsStrategy.hasEvent(getEventName(actionName))
            },
            isOptionDeprecated: function(name) {
                return this._options.isDeprecated(name)
            },
            _setOptionWithoutOptionChange: function(name, value) {
                this._cancelOptionChange = name;
                this.option(name, value);
                this._cancelOptionChange = false
            },
            _getOptionValue: function(name, context) {
                var value = this.option(name);
                if ((0, _type.isFunction)(value)) {
                    return value.bind(context)()
                }
                return value
            },
            option: function() {
                var _this$_options;
                return (_this$_options = this._options).option.apply(_this$_options, arguments)
            },
            resetOption: function(name) {
                this.beginUpdate();
                this._options.reset(name);
                this.endUpdate()
            }
        });
        module.exports = Component
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/short.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.keyboard = exports.click = exports.dxClick = exports.focus = exports.visibility = exports.hover = exports.resize = exports.active = void 0;
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ./core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _keyboard_processor = __webpack_require__( /*! ./core/keyboard_processor */ 475);
        var _keyboard_processor2 = _interopRequireDefault(_keyboard_processor);
        var _utils = __webpack_require__( /*! ./utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function addNamespace(event, namespace) {
            return namespace ? (0, _utils.addNamespace)(event, namespace) : event
        }
        exports.active = {
            on: function($el, active, inactive, opts) {
                var selector = opts.selector,
                    showTimeout = opts.showTimeout,
                    hideTimeout = opts.hideTimeout,
                    namespace = opts.namespace;
                _events_engine2.default.on($el, addNamespace("dxactive", namespace), selector, {
                    timeout: showTimeout
                }, function(event) {
                    return active.execute({
                        event: event,
                        element: event.currentTarget
                    })
                });
                _events_engine2.default.on($el, addNamespace("dxinactive", namespace), selector, {
                    timeout: hideTimeout
                }, function(event) {
                    return inactive.execute({
                        event: event,
                        element: event.currentTarget
                    })
                })
            },
            off: function($el, _ref) {
                var namespace = _ref.namespace,
                    selector = _ref.selector;
                _events_engine2.default.off($el, addNamespace("dxactive", namespace), selector);
                _events_engine2.default.off($el, addNamespace("dxinactive", namespace), selector)
            }
        };
        exports.resize = {
            on: function($el, resize) {
                var _ref2 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    namespace = _ref2.namespace;
                _events_engine2.default.on($el, addNamespace("dxresize", namespace), resize)
            },
            off: function($el) {
                var _ref3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    namespace = _ref3.namespace;
                _events_engine2.default.off($el, addNamespace("dxresize", namespace))
            }
        };
        exports.hover = {
            on: function($el, start, end, _ref4) {
                var selector = _ref4.selector,
                    namespace = _ref4.namespace;
                _events_engine2.default.on($el, addNamespace("dxhoverend", namespace), selector, function(event) {
                    return end(event)
                });
                _events_engine2.default.on($el, addNamespace("dxhoverstart", namespace), selector, function(event) {
                    start.execute({
                        element: event.target,
                        event: event
                    })
                })
            },
            off: function($el, _ref5) {
                var selector = _ref5.selector,
                    namespace = _ref5.namespace;
                _events_engine2.default.off($el, addNamespace("dxhoverstart", namespace), selector);
                _events_engine2.default.off($el, addNamespace("dxhoverend", namespace), selector)
            }
        };
        exports.visibility = {
            on: function($el, shown, hiding, _ref6) {
                var namespace = _ref6.namespace;
                _events_engine2.default.on($el, addNamespace("dxhiding", namespace), hiding);
                _events_engine2.default.on($el, addNamespace("dxshown", namespace), shown)
            },
            off: function($el, _ref7) {
                var namespace = _ref7.namespace;
                _events_engine2.default.off($el, addNamespace("dxhiding", namespace));
                _events_engine2.default.off($el, addNamespace("dxshown", namespace))
            }
        };
        exports.focus = {
            on: function($el, focusIn, focusOut, _ref8) {
                var namespace = _ref8.namespace,
                    isFocusable = _ref8.isFocusable;
                _events_engine2.default.on($el, addNamespace("focusin", namespace), focusIn);
                _events_engine2.default.on($el, addNamespace("focusout", namespace), focusOut);
                if (_dom_adapter2.default.hasDocumentProperty("onbeforeactivate")) {
                    _events_engine2.default.on($el, addNamespace("beforeactivate", namespace), function(e) {
                        return isFocusable(e.target) || e.preventDefault()
                    })
                }
            },
            off: function($el, _ref9) {
                var namespace = _ref9.namespace;
                _events_engine2.default.off($el, addNamespace("focusin", namespace));
                _events_engine2.default.off($el, addNamespace("focusout", namespace));
                if (_dom_adapter2.default.hasDocumentProperty("onbeforeactivate")) {
                    _events_engine2.default.off($el, addNamespace("beforeactivate", namespace))
                }
            },
            trigger: function($el) {
                return _events_engine2.default.trigger($el, "focus")
            }
        };
        exports.dxClick = {
            on: function($el, click) {
                var _ref10 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    namespace = _ref10.namespace;
                _events_engine2.default.on($el, addNamespace("dxclick", namespace), click)
            },
            off: function($el) {
                var _ref11 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    namespace = _ref11.namespace;
                _events_engine2.default.off($el, addNamespace("dxclick", namespace))
            }
        };
        exports.click = {
            on: function($el, click) {
                var _ref12 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                    namespace = _ref12.namespace;
                _events_engine2.default.on($el, addNamespace("click", namespace), click)
            },
            off: function($el) {
                var _ref13 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                    namespace = _ref13.namespace;
                _events_engine2.default.off($el, addNamespace("click", namespace))
            }
        };
        var index = 0;
        var keyboardProcessors = {};
        var generateListenerId = function() {
            return "keyboardProcessorId".concat(index++)
        };
        exports.keyboard = {
            on: function(element, focusTarget, handler) {
                var listenerId = generateListenerId();
                keyboardProcessors[listenerId] = new _keyboard_processor2.default({
                    element: element,
                    focusTarget: focusTarget,
                    handler: handler
                });
                return listenerId
            },
            off: function(listenerId) {
                if (listenerId && keyboardProcessors[listenerId]) {
                    keyboardProcessors[listenerId].dispose();
                    delete keyboardProcessors[listenerId]
                }
            },
            _getProcessor: function(listenerId) {
                return keyboardProcessors[listenerId]
            }
        }
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/animation/frame.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.hasWindow() ? windowUtils.getWindow() : {};
        var callOnce = __webpack_require__( /*! ../core/utils/call_once */ 80);
        var FRAME_ANIMATION_STEP_TIME = 1e3 / 60;
        var request = function(callback) {
            return setTimeout(callback, FRAME_ANIMATION_STEP_TIME)
        };
        var cancel = function(requestID) {
            clearTimeout(requestID)
        };
        var setAnimationFrameMethods = callOnce(function() {
            var nativeRequest = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame;
            var nativeCancel = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame;
            if (nativeRequest && nativeCancel) {
                request = nativeRequest;
                cancel = nativeCancel
            }
            if (nativeRequest && !nativeCancel) {
                var canceledRequests = {};
                request = function(callback) {
                    var requestId = nativeRequest.call(window, function() {
                        try {
                            if (requestId in canceledRequests) {
                                return
                            }
                            callback.apply(this, arguments)
                        } finally {
                            delete canceledRequests[requestId]
                        }
                    });
                    return requestId
                };
                cancel = function(requestId) {
                    canceledRequests[requestId] = true
                }
            }
        });
        exports.requestAnimationFrame = function() {
            setAnimationFrameMethods();
            return request.apply(window, arguments)
        };
        exports.cancelAnimationFrame = function() {
            setAnimationFrameMethods();
            cancel.apply(window, arguments)
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/custom_store.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var dataUtils = __webpack_require__( /*! ./utils */ 42);
        var arrayUtils = __webpack_require__( /*! ./array_utils */ 142);
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var config = __webpack_require__( /*! ../core/config */ 30);
        var errors = __webpack_require__( /*! ./errors */ 38).errors;
        var Store = __webpack_require__( /*! ./abstract_store */ 103);
        var arrayQuery = __webpack_require__( /*! ./array_query */ 161);
        var queryByOptions = __webpack_require__( /*! ./store_helper */ 86).queryByOptions;
        var deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var Deferred = deferredUtils.Deferred;
        var when = deferredUtils.when;
        var fromPromise = deferredUtils.fromPromise;
        var TOTAL_COUNT = "totalCount";
        var LOAD = "load";
        var BY_KEY = "byKey";
        var INSERT = "insert";
        var UPDATE = "update";
        var REMOVE = "remove";

        function isPromise(obj) {
            return obj && isFunction(obj.then)
        }

        function trivialPromise(value) {
            return (new Deferred).resolve(value).promise()
        }

        function ensureRequiredFuncOption(name, obj) {
            if (!isFunction(obj)) {
                throw errors.Error("E4011", name)
            }
        }

        function throwInvalidUserFuncResult(name) {
            throw errors.Error("E4012", name)
        }

        function createUserFuncFailureHandler(pendingDeferred) {
            function errorMessageFromXhr(promiseArguments) {
                var xhr = promiseArguments[0];
                var textStatus = promiseArguments[1];
                if (!xhr || !xhr.getResponseHeader) {
                    return null
                }
                return dataUtils.errorMessageFromXhr(xhr, textStatus)
            }
            return function(arg) {
                var error;
                if (arg instanceof Error) {
                    error = arg
                } else {
                    error = new Error(errorMessageFromXhr(arguments) || arg && String(arg) || "Unknown error")
                }
                if (error.message !== dataUtils.XHR_ERROR_UNLOAD) {
                    pendingDeferred.reject(error)
                }
            }
        }

        function invokeUserLoad(store, options) {
            var userFunc = store._loadFunc;
            var userResult;
            ensureRequiredFuncOption(LOAD, userFunc);
            userResult = userFunc.apply(store, [options]);
            if (Array.isArray(userResult)) {
                userResult = trivialPromise(userResult)
            } else {
                if (null === userResult || void 0 === userResult) {
                    userResult = trivialPromise([])
                } else {
                    if (!isPromise(userResult)) {
                        throwInvalidUserFuncResult(LOAD)
                    }
                }
            }
            return fromPromise(userResult)
        }

        function invokeUserTotalCountFunc(store, options) {
            var userFunc = store._totalCountFunc;
            var userResult;
            if (!isFunction(userFunc)) {
                throw errors.Error("E4021")
            }
            userResult = userFunc.apply(store, [options]);
            if (!isPromise(userResult)) {
                userResult = Number(userResult);
                if (!isFinite(userResult)) {
                    throwInvalidUserFuncResult(TOTAL_COUNT)
                }
                userResult = trivialPromise(userResult)
            }
            return fromPromise(userResult)
        }

        function invokeUserByKeyFunc(store, key, extraOptions) {
            var userFunc = store._byKeyFunc;
            var userResult;
            ensureRequiredFuncOption(BY_KEY, userFunc);
            userResult = userFunc.apply(store, [key, extraOptions]);
            if (!isPromise(userResult)) {
                userResult = trivialPromise(userResult)
            }
            return fromPromise(userResult)
        }

        function runRawLoad(pendingDeferred, store, userFuncOptions, continuation) {
            if (store.__rawData) {
                continuation(store.__rawData)
            } else {
                var loadPromise = store.__rawDataPromise || invokeUserLoad(store, userFuncOptions);
                if (store._cacheRawData) {
                    store.__rawDataPromise = loadPromise
                }
                loadPromise.always(function() {
                    delete store.__rawDataPromise
                }).done(function(rawData) {
                    if (store._cacheRawData) {
                        store.__rawData = rawData
                    }
                    continuation(rawData)
                }).fail(createUserFuncFailureHandler(pendingDeferred))
            }
        }

        function runRawLoadWithQuery(pendingDeferred, store, options, countOnly) {
            options = options || {};
            var userFuncOptions = {};
            if ("userData" in options) {
                userFuncOptions.userData = options.userData
            }
            runRawLoad(pendingDeferred, store, userFuncOptions, function(rawData) {
                var rawDataQuery = arrayQuery(rawData, {
                    errorHandler: store._errorHandler
                });
                var itemsQuery;
                var totalCountQuery;
                var waitList = [];
                var items;
                var totalCount;
                if (!countOnly) {
                    itemsQuery = queryByOptions(rawDataQuery, options);
                    if (itemsQuery === rawDataQuery) {
                        items = rawData.slice(0)
                    } else {
                        waitList.push(itemsQuery.enumerate().done(function(asyncResult) {
                            items = asyncResult
                        }))
                    }
                }
                if (options.requireTotalCount || countOnly) {
                    totalCountQuery = queryByOptions(rawDataQuery, options, true);
                    if (totalCountQuery === rawDataQuery) {
                        totalCount = rawData.length
                    } else {
                        waitList.push(totalCountQuery.count().done(function(asyncResult) {
                            totalCount = asyncResult
                        }))
                    }
                }
                when.apply($, waitList).done(function() {
                    if (countOnly) {
                        pendingDeferred.resolve(totalCount)
                    } else {
                        if (options.requireTotalCount) {
                            pendingDeferred.resolve(items, {
                                totalCount: totalCount
                            })
                        } else {
                            pendingDeferred.resolve(items)
                        }
                    }
                }).fail(function(x) {
                    pendingDeferred.reject(x)
                })
            })
        }

        function runRawLoadWithKey(pendingDeferred, store, key) {
            runRawLoad(pendingDeferred, store, {}, function(rawData) {
                var keyExpr = store.key();
                var item;
                for (var i = 0, len = rawData.length; i < len; i++) {
                    item = rawData[i];
                    if (dataUtils.keysEqual(keyExpr, store.keyOf(rawData[i]), key)) {
                        pendingDeferred.resolve(item);
                        return
                    }
                }
                pendingDeferred.reject(errors.Error("E4009"))
            })
        }
        var CustomStore = Store.inherit({
            ctor: function(options) {
                options = options || {};
                this.callBase(options);
                this._useDefaultSearch = !!options.useDefaultSearch || "raw" === options.loadMode;
                this._loadMode = options.loadMode;
                this._cacheRawData = false !== options.cacheRawData;
                this._loadFunc = options[LOAD];
                this._totalCountFunc = options[TOTAL_COUNT];
                this._byKeyFunc = options[BY_KEY];
                this._insertFunc = options[INSERT];
                this._updateFunc = options[UPDATE];
                this._removeFunc = options[REMOVE]
            },
            createQuery: function() {
                throw errors.Error("E4010")
            },
            clearRawDataCache: function() {
                delete this.__rawData
            },
            _totalCountImpl: function(options) {
                var d = new Deferred;
                if ("raw" === this._loadMode && !this._totalCountFunc) {
                    runRawLoadWithQuery(d, this, options, true)
                } else {
                    invokeUserTotalCountFunc(this, options).done(function(count) {
                        d.resolve(Number(count))
                    }).fail(createUserFuncFailureHandler(d));
                    d = this._addFailHandlers(d)
                }
                return d.promise()
            },
            _pushImpl: function(changes) {
                if (this.__rawData) {
                    arrayUtils.applyBatch(this, this.__rawData, changes)
                }
            },
            _loadImpl: function(options) {
                var d = new Deferred;
                if ("raw" === this._loadMode) {
                    runRawLoadWithQuery(d, this, options, false)
                } else {
                    invokeUserLoad(this, options).done(function(data, extra) {
                        d.resolve(data, extra)
                    }).fail(createUserFuncFailureHandler(d));
                    d = this._addFailHandlers(d)
                }
                return d.promise()
            },
            _byKeyImpl: function(key, extraOptions) {
                var d = new Deferred;
                if (this._byKeyViaLoad()) {
                    this._requireKey();
                    runRawLoadWithKey(d, this, key)
                } else {
                    invokeUserByKeyFunc(this, key, extraOptions).done(function(obj) {
                        d.resolve(obj)
                    }).fail(createUserFuncFailureHandler(d))
                }
                return d.promise()
            },
            _byKeyViaLoad: function() {
                return "raw" === this._loadMode && !this._byKeyFunc
            },
            _insertImpl: function(values) {
                var that = this;
                var userFunc = that._insertFunc;
                var userResult;
                var d = new Deferred;
                ensureRequiredFuncOption(INSERT, userFunc);
                userResult = userFunc.apply(that, [values]);
                if (!isPromise(userResult)) {
                    userResult = trivialPromise(userResult)
                }
                fromPromise(userResult).done(function(serverResponse) {
                    if (config().useLegacyStoreResult) {
                        d.resolve(values, serverResponse)
                    } else {
                        d.resolve(serverResponse || values, that.keyOf(serverResponse))
                    }
                }).fail(createUserFuncFailureHandler(d));
                return d.promise()
            },
            _updateImpl: function(key, values) {
                var userFunc = this._updateFunc;
                var userResult;
                var d = new Deferred;
                ensureRequiredFuncOption(UPDATE, userFunc);
                userResult = userFunc.apply(this, [key, values]);
                if (!isPromise(userResult)) {
                    userResult = trivialPromise(userResult)
                }
                fromPromise(userResult).done(function(serverResponse) {
                    if (config().useLegacyStoreResult) {
                        d.resolve(key, values)
                    } else {
                        d.resolve(serverResponse || values, key)
                    }
                }).fail(createUserFuncFailureHandler(d));
                return d.promise()
            },
            _removeImpl: function(key) {
                var userFunc = this._removeFunc;
                var userResult;
                var d = new Deferred;
                ensureRequiredFuncOption(REMOVE, userFunc);
                userResult = userFunc.apply(this, [key]);
                if (!isPromise(userResult)) {
                    userResult = trivialPromise()
                }
                fromPromise(userResult).done(function() {
                    d.resolve(key)
                }).fail(createUserFuncFailureHandler(d));
                return d.promise()
            }
        });
        module.exports = CustomStore
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/popover.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var translator = __webpack_require__( /*! ../animation/translator */ 28);
        var positionUtils = __webpack_require__( /*! ../animation/position */ 74);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var mathUtils = __webpack_require__( /*! ../core/utils/math */ 31);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var Popup = __webpack_require__( /*! ./popup */ 44);
        var getBoundingRect = __webpack_require__( /*! ../core/utils/position */ 21).getBoundingRect;
        var POPOVER_CLASS = "dx-popover";
        var POPOVER_WRAPPER_CLASS = "dx-popover-wrapper";
        var POPOVER_ARROW_CLASS = "dx-popover-arrow";
        var POPOVER_WITHOUT_TITLE_CLASS = "dx-popover-without-title";
        var POSITION_FLIP_MAP = {
            left: "right",
            top: "bottom",
            right: "left",
            bottom: "top",
            center: "center"
        };
        var WEIGHT_OF_SIDES = {
            left: -1,
            top: -1,
            center: 0,
            right: 1,
            bottom: 1
        };
        var POSITION_ALIASES = {
            top: {
                my: "bottom center",
                at: "top center",
                collision: "fit flip"
            },
            bottom: {
                my: "top center",
                at: "bottom center",
                collision: "fit flip"
            },
            right: {
                my: "left center",
                at: "right center",
                collision: "flip fit"
            },
            left: {
                my: "right center",
                at: "left center",
                collision: "flip fit"
            }
        };
        var SIDE_BORDER_WIDTH_STYLES = {
            left: "borderLeftWidth",
            top: "borderTopWidth",
            right: "borderRightWidth",
            bottom: "borderBottomWidth"
        };
        var getEventNameByOption = function(optionValue) {
            return typeUtils.isObject(optionValue) ? optionValue.name : optionValue
        };
        var getEventName = function(that, optionName) {
            var optionValue = that.option(optionName);
            return getEventNameByOption(optionValue)
        };
        var getEventDelay = function(that, optionName) {
            var optionValue = that.option(optionName);
            return typeUtils.isObject(optionValue) && optionValue.delay
        };
        var attachEvent = function(that, name) {
            var target = that.option("target");
            var isSelector = typeUtils.isString(target);
            var event = getEventName(that, name + "Event");
            if (!event || that.option("disabled")) {
                return
            }
            var eventName = eventUtils.addNamespace(event, that.NAME);
            var action = that._createAction(function() {
                var delay = getEventDelay(that, name + "Event");
                this._clearEventsTimeouts();
                if (delay) {
                    this._timeouts[name] = setTimeout(function() {
                        that[name]()
                    }, delay)
                } else {
                    that[name]()
                }
            }.bind(that), {
                validatingTargetName: "target"
            });
            var handler = function(e) {
                action({
                    event: e,
                    target: $(e.currentTarget)
                })
            };
            var EVENT_HANDLER_NAME = "_" + name + "EventHandler";
            if (isSelector) {
                that[EVENT_HANDLER_NAME] = handler;
                eventsEngine.on(domAdapter.getDocument(), eventName, target, handler)
            } else {
                var targetElement = getPublicElement($(target));
                that[EVENT_HANDLER_NAME] = void 0;
                eventsEngine.on(targetElement, eventName, handler)
            }
        };
        var detachEvent = function(that, target, name, event) {
            var eventName = event || getEventName(that, name + "Event");
            if (!eventName) {
                return
            }
            eventName = eventUtils.addNamespace(eventName, that.NAME);
            var EVENT_HANDLER_NAME = "_" + name + "EventHandler";
            if (that[EVENT_HANDLER_NAME]) {
                eventsEngine.off(domAdapter.getDocument(), eventName, target, that[EVENT_HANDLER_NAME])
            } else {
                eventsEngine.off(getPublicElement($(target)), eventName)
            }
        };
        var Popover = Popup.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    target: window,
                    shading: false,
                    position: "bottom",
                    closeOnOutsideClick: true,
                    animation: {
                        show: {
                            type: "fade",
                            from: 0,
                            to: 1
                        },
                        hide: {
                            type: "fade",
                            to: 0
                        }
                    },
                    showTitle: false,
                    width: "auto",
                    height: "auto",
                    dragEnabled: false,
                    resizeEnabled: false,
                    fullScreen: false,
                    closeOnTargetScroll: true,
                    arrowPosition: "",
                    arrowOffset: 0,
                    boundaryOffset: {
                        h: 10,
                        v: 10
                    }
                })
            },
            _defaultOptionsRules: function() {
                return [{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        arrowPosition: {
                            boundaryOffset: {
                                h: 20,
                                v: -10
                            },
                            collision: "fit"
                        }
                    }
                }, {
                    device: function() {
                        return !windowUtils.hasWindow()
                    },
                    options: {
                        animation: null
                    }
                }]
            },
            _init: function() {
                this.callBase();
                this._renderArrow();
                this._timeouts = {};
                this.$element().addClass(POPOVER_CLASS);
                this._wrapper().addClass(POPOVER_WRAPPER_CLASS)
            },
            _render: function() {
                this.callBase.apply(this, arguments);
                this._detachEvents(this.option("target"));
                this._attachEvents()
            },
            _detachEvents: function(target) {
                detachEvent(this, target, "show");
                detachEvent(this, target, "hide")
            },
            _attachEvents: function() {
                attachEvent(this, "show");
                attachEvent(this, "hide")
            },
            _renderArrow: function() {
                this._$arrow = $("<div>").addClass(POPOVER_ARROW_CLASS).prependTo(this.overlayContent())
            },
            _documentDownHandler: function(e) {
                if (this._isOutsideClick(e)) {
                    return this.callBase(e)
                }
                return true
            },
            _isOutsideClick: function(e) {
                return !$(e.target).closest(this.option("target")).length
            },
            _animate: function(animation) {
                if (animation && animation.to && "object" === _typeof(animation.to)) {
                    extend(animation.to, {
                        position: this._getContainerPosition()
                    })
                }
                this.callBase.apply(this, arguments)
            },
            _stopAnimation: function() {
                this.callBase.apply(this, arguments)
            },
            _renderTitle: function() {
                this._wrapper().toggleClass(POPOVER_WITHOUT_TITLE_CLASS, !this.option("showTitle"));
                this.callBase()
            },
            _renderPosition: function() {
                this.callBase();
                this._renderOverlayPosition()
            },
            _renderOverlayBoundaryOffset: commonUtils.noop,
            _renderOverlayPosition: function() {
                this._resetOverlayPosition();
                this._updateContentSize();
                var contentPosition = this._getContainerPosition();
                var resultLocation = positionUtils.setup(this._$content, contentPosition);
                var positionSide = this._getSideByLocation(resultLocation);
                this._togglePositionClass("dx-position-" + positionSide);
                this._toggleFlippedClass(resultLocation.h.flip, resultLocation.v.flip);
                var isArrowVisible = this._isHorizontalSide() || this._isVerticalSide();
                if (isArrowVisible) {
                    this._renderArrowPosition(positionSide)
                }
            },
            _resetOverlayPosition: function() {
                this._setContentHeight(true);
                this._togglePositionClass("dx-position-" + this._positionSide);
                translator.move(this._$content, {
                    left: 0,
                    top: 0
                });
                this._$arrow.css({
                    top: "auto",
                    right: "auto",
                    bottom: "auto",
                    left: "auto"
                })
            },
            _updateContentSize: function() {
                if (!this._$popupContent) {
                    return
                }
                var containerLocation = positionUtils.calculate(this._$content, this._getContainerPosition());
                if (containerLocation.h.oversize > 0 && this._isHorizontalSide() && !containerLocation.h.fit) {
                    var newContainerWidth = this._$content.width() - containerLocation.h.oversize;
                    this._$content.width(newContainerWidth)
                }
                if (containerLocation.v.oversize > 0 && this._isVerticalSide() && !containerLocation.v.fit) {
                    var newOverlayContentHeight = this._$content.height() - containerLocation.v.oversize;
                    var newPopupContentHeight = this._$popupContent.height() - containerLocation.v.oversize;
                    this._$content.height(newOverlayContentHeight);
                    this._$popupContent.height(newPopupContentHeight)
                }
            },
            _getContainerPosition: function() {
                var offset = commonUtils.pairToObject(this._position.offset || "");
                var hOffset = offset.h;
                var vOffset = offset.v;
                var isVerticalSide = this._isVerticalSide();
                var isHorizontalSide = this._isHorizontalSide();
                if (isVerticalSide || isHorizontalSide) {
                    var isPopoverInside = this._isPopoverInside();
                    var sign = (isPopoverInside ? -1 : 1) * WEIGHT_OF_SIDES[this._positionSide];
                    var arrowSize = isVerticalSide ? this._$arrow.height() : this._$arrow.width();
                    var arrowSizeCorrection = this._getContentBorderWidth(this._positionSide);
                    var arrowOffset = sign * (arrowSize - arrowSizeCorrection);
                    isVerticalSide ? vOffset += arrowOffset : hOffset += arrowOffset
                }
                return extend({}, this._position, {
                    offset: hOffset + " " + vOffset
                })
            },
            _getContentBorderWidth: function(side) {
                var borderWidth = this._$content.css(SIDE_BORDER_WIDTH_STYLES[side]);
                return parseInt(borderWidth) || 0
            },
            _getSideByLocation: function(location) {
                var isFlippedByVertical = location.v.flip;
                var isFlippedByHorizontal = location.h.flip;
                return this._isVerticalSide() && isFlippedByVertical || this._isHorizontalSide() && isFlippedByHorizontal || this._isPopoverInside() ? POSITION_FLIP_MAP[this._positionSide] : this._positionSide
            },
            _togglePositionClass: function(positionClass) {
                this._$wrapper.removeClass("dx-position-left dx-position-right dx-position-top dx-position-bottom").addClass(positionClass)
            },
            _toggleFlippedClass: function(isFlippedHorizontal, isFlippedVertical) {
                this._$wrapper.toggleClass("dx-popover-flipped-horizontal", isFlippedHorizontal).toggleClass("dx-popover-flipped-vertical", isFlippedVertical)
            },
            _renderArrowPosition: function(side) {
                var arrowRect = getBoundingRect(this._$arrow.get(0));
                var arrowFlip = -(this._isVerticalSide(side) ? arrowRect.height : arrowRect.width);
                this._$arrow.css(POSITION_FLIP_MAP[side], arrowFlip);
                var axis = this._isVerticalSide(side) ? "left" : "top";
                var sizeProperty = this._isVerticalSide(side) ? "width" : "height";
                var $target = $(this._position.of);
                var targetOffset = positionUtils.offset($target) || {
                    top: 0,
                    left: 0
                };
                var contentOffset = positionUtils.offset(this._$content);
                var arrowSize = arrowRect[sizeProperty];
                var contentLocation = contentOffset[axis];
                var contentSize = getBoundingRect(this._$content.get(0))[sizeProperty];
                var targetLocation = targetOffset[axis];
                var targetSize = $target.get(0).preventDefault ? 0 : getBoundingRect($target.get(0))[sizeProperty];
                var min = Math.max(contentLocation, targetLocation);
                var max = Math.min(contentLocation + contentSize, targetLocation + targetSize);
                var arrowLocation;
                if ("start" === this.option("arrowPosition")) {
                    arrowLocation = min - contentLocation
                } else {
                    if ("end" === this.option("arrowPosition")) {
                        arrowLocation = max - contentLocation - arrowSize
                    } else {
                        arrowLocation = (min + max) / 2 - contentLocation - arrowSize / 2
                    }
                }
                var borderWidth = this._getContentBorderWidth(side);
                var finalArrowLocation = mathUtils.fitIntoRange(arrowLocation - borderWidth + this.option("arrowOffset"), borderWidth, contentSize - arrowSize - 2 * borderWidth);
                this._$arrow.css(axis, finalArrowLocation)
            },
            _isPopoverInside: function() {
                var position = this._transformStringPosition(this.option("position"), POSITION_ALIASES);
                var my = positionUtils.setup.normalizeAlign(position.my);
                var at = positionUtils.setup.normalizeAlign(position.at);
                return my.h === at.h && my.v === at.v
            },
            _setContentHeight: function(fullUpdate) {
                if (fullUpdate) {
                    this.callBase()
                }
            },
            _renderWrapperPosition: function() {
                if (this.option("shading")) {
                    this._$wrapper.css({
                        top: 0,
                        left: 0
                    })
                }
            },
            _renderWrapperDimensions: function() {
                if (this.option("shading")) {
                    this._$wrapper.css({
                        width: "100%",
                        height: "100%"
                    })
                }
            },
            _normalizePosition: function() {
                var position = extend({}, this._transformStringPosition(this.option("position"), POSITION_ALIASES));
                if (!position.of) {
                    position.of = this.option("target")
                }
                if (!position.collision) {
                    position.collision = "flip"
                }
                if (!position.boundaryOffset) {
                    position.boundaryOffset = this.option("boundaryOffset")
                }
                this._positionSide = this._getDisplaySide(position);
                this._position = position
            },
            _getDisplaySide: function(position) {
                var my = positionUtils.setup.normalizeAlign(position.my);
                var at = positionUtils.setup.normalizeAlign(position.at);
                var weightSign = WEIGHT_OF_SIDES[my.h] === WEIGHT_OF_SIDES[at.h] && WEIGHT_OF_SIDES[my.v] === WEIGHT_OF_SIDES[at.v] ? -1 : 1;
                var horizontalWeight = Math.abs(WEIGHT_OF_SIDES[my.h] - weightSign * WEIGHT_OF_SIDES[at.h]);
                var verticalWeight = Math.abs(WEIGHT_OF_SIDES[my.v] - weightSign * WEIGHT_OF_SIDES[at.v]);
                return horizontalWeight > verticalWeight ? at.h : at.v
            },
            _isVerticalSide: function(side) {
                side = side || this._positionSide;
                return "top" === side || "bottom" === side
            },
            _isHorizontalSide: function(side) {
                side = side || this._positionSide;
                return "left" === side || "right" === side
            },
            _clearEventTimeout: function(name) {
                clearTimeout(this._timeouts[name])
            },
            _clearEventsTimeouts: function() {
                this._clearEventTimeout("show");
                this._clearEventTimeout("hide")
            },
            _clean: function() {
                this._detachEvents(this.option("target"));
                this.callBase.apply(this, arguments)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "boundaryOffset":
                    case "arrowPosition":
                    case "arrowOffset":
                        this._renderGeometry();
                        break;
                    case "fullScreen":
                        if (args.value) {
                            this.option("fullScreen", false)
                        }
                        break;
                    case "target":
                        args.previousValue && this._detachEvents(args.previousValue);
                        this.callBase(args);
                        break;
                    case "showEvent":
                    case "hideEvent":
                        var name = args.name.substring(0, 4);
                        var event = getEventNameByOption(args.previousValue);
                        this.hide();
                        detachEvent(this, this.option("target"), name, event);
                        attachEvent(this, name);
                        break;
                    case "visible":
                        this._clearEventTimeout(args.value ? "show" : "hide");
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            show: function(target) {
                if (target) {
                    this.option("target", target)
                }
                return this.callBase()
            }
        });
        registerComponent("dxPopover", Popover);
        module.exports = Popover
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/check_box.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var Editor = __webpack_require__( /*! ./editor/editor */ 48);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var clickEvent = __webpack_require__( /*! ../events/click */ 19);
        var CHECKBOX_CLASS = "dx-checkbox";
        var CHECKBOX_ICON_CLASS = "dx-checkbox-icon";
        var CHECKBOX_CHECKED_CLASS = "dx-checkbox-checked";
        var CHECKBOX_CONTAINER_CLASS = "dx-checkbox-container";
        var CHECKBOX_TEXT_CLASS = "dx-checkbox-text";
        var CHECKBOX_HAS_TEXT_CLASS = "dx-checkbox-has-text";
        var CHECKBOX_INDETERMINATE_CLASS = "dx-checkbox-indeterminate";
        var CHECKBOX_FEEDBACK_HIDE_TIMEOUT = 100;
        var CheckBox = Editor.inherit({
            _supportedKeys: function() {
                var click = function(e) {
                    e.preventDefault();
                    this._clickAction({
                        event: e
                    })
                };
                return extend(this.callBase(), {
                    space: click
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    value: false,
                    text: "",
                    useInkRipple: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _canValueBeChangedByClick: function() {
                return true
            },
            _feedbackHideTimeout: CHECKBOX_FEEDBACK_HIDE_TIMEOUT,
            _initMarkup: function() {
                this._renderSubmitElement();
                this._$container = $("<div>").addClass(CHECKBOX_CONTAINER_CLASS);
                this.setAria("role", "checkbox");
                this.$element().addClass(CHECKBOX_CLASS);
                this._renderValue();
                this._renderIcon();
                this._renderText();
                this.option("useInkRipple") && this._renderInkRipple();
                this.$element().append(this._$container);
                this.callBase()
            },
            _render: function() {
                this._renderClick();
                this.callBase()
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render({
                    waveSizeCoefficient: 2.5,
                    useHoldAnimation: false,
                    wavesNumber: 2,
                    isCentered: true
                })
            },
            _renderInkWave: function(element, dxEvent, doRender, waveIndex) {
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: element,
                    event: dxEvent,
                    wave: waveIndex
                };
                if (doRender) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _updateFocusState: function(e, value) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$icon, e, value, 0)
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$icon, e, value, 1)
            },
            _renderIcon: function() {
                this._$icon = $("<span>").addClass(CHECKBOX_ICON_CLASS).prependTo(this._$container)
            },
            _renderText: function() {
                var textValue = this.option("text");
                if (!textValue) {
                    if (this._$text) {
                        this._$text.remove();
                        this.$element().removeClass(CHECKBOX_HAS_TEXT_CLASS)
                    }
                    return
                }
                if (!this._$text) {
                    this._$text = $("<span>").addClass(CHECKBOX_TEXT_CLASS)
                }
                this._$text.text(textValue);
                this._$container.append(this._$text);
                this.$element().addClass(CHECKBOX_HAS_TEXT_CLASS)
            },
            _renderClick: function() {
                var that = this;
                var eventName = eventUtils.addNamespace(clickEvent.name, that.NAME);
                that._clickAction = that._createAction(that._clickHandler);
                eventsEngine.off(that.$element(), eventName);
                eventsEngine.on(that.$element(), eventName, function(e) {
                    that._clickAction({
                        event: e
                    })
                })
            },
            _clickHandler: function(args) {
                var that = args.component;
                that._saveValueChangeEvent(args.event);
                that.option("value", !that.option("value"))
            },
            _renderValue: function() {
                var $element = this.$element();
                var checked = this.option("value");
                var indeterminate = void 0 === checked;
                $element.toggleClass(CHECKBOX_CHECKED_CLASS, Boolean(checked));
                $element.toggleClass(CHECKBOX_INDETERMINATE_CLASS, indeterminate);
                this._getSubmitElement().val(checked);
                this.setAria("checked", indeterminate ? "mixed" : checked || "false")
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "value":
                        this._renderValue();
                        this.callBase(args);
                        break;
                    case "text":
                        this._renderText();
                        this._renderDimensions();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxCheckBox", CheckBox);
        module.exports = CheckBox
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/number_box.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./number_box/number_box */ 556)
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_utils.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var isDate = __webpack_require__( /*! ../../core/utils/type */ 1).isDate;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var dateComponents = function() {
            return ["year", "day", "month", "day"]
        };
        var ONE_MINUTE = 6e4;
        var ONE_DAY = 60 * ONE_MINUTE * 24;
        var ONE_YEAR = 365 * ONE_DAY;
        var getStringFormat = function(format) {
            var formatType = _typeof(format);
            if ("string" === formatType) {
                return "format"
            }
            if ("object" === formatType && void 0 !== format.type) {
                return format.type
            }
            return null
        };
        var dateUtils = {
            SUPPORTED_FORMATS: ["date", "time", "datetime"],
            DATE_COMPONENT_TEXT_FORMATTER: function(value, name) {
                var $container = $("<div>").addClass("dx-dateview-formatter-container");
                $("<span>").text(value).addClass("dx-dateview-value-formatter").appendTo($container);
                $("<span>").text(name).addClass("dx-dateview-name-formatter").appendTo($container);
                return $container
            },
            ONE_MINUTE: ONE_MINUTE,
            ONE_DAY: ONE_DAY,
            ONE_YEAR: ONE_YEAR,
            MIN_DATEVIEW_DEFAULT_DATE: new Date(1900, 0, 1),
            MAX_DATEVIEW_DEFAULT_DATE: function() {
                var newDate = new Date;
                return new Date(newDate.getFullYear() + 50, newDate.getMonth(), newDate.getDate(), 23, 59, 59)
            }(),
            FORMATS_INFO: {
                date: {
                    getStandardPattern: function() {
                        return "yyyy-MM-dd"
                    },
                    components: dateComponents()
                },
                time: {
                    getStandardPattern: function() {
                        return "HH:mm"
                    },
                    components: ["hours", "minutes", "seconds", "milliseconds"]
                },
                datetime: {
                    getStandardPattern: function() {
                        var standardPattern;
                        ! function() {
                            var androidFormatPattern = "yyyy-MM-ddTHH:mmZ";
                            var testDateString = "2000-01-01T01:01Z";
                            var $input = $("<input>").attr("type", "datetime");
                            $input.val(testDateString);
                            if ($input.val()) {
                                standardPattern = androidFormatPattern
                            }
                        }();
                        if (!standardPattern) {
                            standardPattern = "yyyy-MM-ddTHH:mm:ssZ"
                        }
                        dateUtils.FORMATS_INFO.datetime.getStandardPattern = function() {
                            return standardPattern
                        };
                        return standardPattern
                    },
                    components: dateComponents().concat(["hours", "minutes", "seconds", "milliseconds"])
                },
                "datetime-local": {
                    getStandardPattern: function() {
                        return "yyyy-MM-ddTHH:mm:ss"
                    },
                    components: dateComponents().concat(["hours", "minutes", "seconds"])
                }
            },
            FORMATS_MAP: {
                date: "shortdate",
                time: "shorttime",
                datetime: "shortdateshorttime"
            },
            SUBMIT_FORMATS_MAP: {
                date: "date",
                time: "time",
                datetime: "datetime-local"
            },
            toStandardDateFormat: function(date, type) {
                var pattern = dateUtils.FORMATS_INFO[type].getStandardPattern();
                return dateSerialization.serializeDate(date, pattern)
            },
            fromStandardDateFormat: function(text) {
                var date = dateSerialization.dateParser(text);
                return isDate(date) ? date : void 0
            },
            getMaxMonthDay: function(year, month) {
                return new Date(year, month + 1, 0).getDate()
            },
            mergeDates: function(oldValue, newValue, format) {
                if (!newValue) {
                    return newValue || null
                }
                if (!oldValue || isNaN(oldValue.getTime())) {
                    var now = new Date(null);
                    oldValue = new Date(now.getFullYear(), now.getMonth(), now.getDate())
                }
                var result = new Date(oldValue.valueOf());
                var formatInfo = dateUtils.FORMATS_INFO[format];
                each(formatInfo.components, function() {
                    var componentInfo = dateUtils.DATE_COMPONENTS_INFO[this];
                    result[componentInfo.setter](newValue[componentInfo.getter]())
                });
                return result
            },
            getLongestCaptionIndex: function(captionArray) {
                var longestIndex = 0;
                var longestCaptionLength = 0;
                var i;
                for (i = 0; i < captionArray.length; ++i) {
                    if (captionArray[i].length > longestCaptionLength) {
                        longestIndex = i;
                        longestCaptionLength = captionArray[i].length
                    }
                }
                return longestIndex
            },
            formatUsesMonthName: function(format) {
                return dateLocalization.formatUsesMonthName(format)
            },
            formatUsesDayName: function(format) {
                return dateLocalization.formatUsesDayName(format)
            },
            getLongestDate: function(format, monthNames, dayNames) {
                var stringFormat = getStringFormat(format);
                var month = 9;
                if (!stringFormat || dateUtils.formatUsesMonthName(stringFormat)) {
                    month = dateUtils.getLongestCaptionIndex(monthNames)
                }
                var longestDate = new Date(1888, month, 21, 23, 59, 59, 999);
                if (!stringFormat || dateUtils.formatUsesDayName(stringFormat)) {
                    var date = longestDate.getDate() - longestDate.getDay() + dateUtils.getLongestCaptionIndex(dayNames);
                    longestDate.setDate(date)
                }
                return longestDate
            },
            normalizeTime: function(date) {
                date.setSeconds(0);
                date.setMilliseconds(0)
            }
        };
        dateUtils.DATE_COMPONENTS_INFO = {
            year: {
                getter: "getFullYear",
                setter: "setFullYear",
                formatter: function(value, date) {
                    var formatDate = new Date(date.getTime());
                    formatDate.setFullYear(value);
                    return dateLocalization.format(formatDate, "yyyy")
                },
                startValue: void 0,
                endValue: void 0
            },
            day: {
                getter: "getDate",
                setter: "setDate",
                formatter: function(value, date) {
                    var formatDate = new Date(date.getTime());
                    formatDate.setDate(value);
                    return dateLocalization.format(formatDate, "d")
                },
                startValue: 1,
                endValue: void 0
            },
            month: {
                getter: "getMonth",
                setter: "setMonth",
                formatter: function(value) {
                    return dateLocalization.getMonthNames()[value]
                },
                startValue: 0,
                endValue: 11
            },
            hours: {
                getter: "getHours",
                setter: "setHours",
                formatter: function(value) {
                    return dateLocalization.format(new Date(0, 0, 0, value), "hour")
                },
                startValue: 0,
                endValue: 23
            },
            minutes: {
                getter: "getMinutes",
                setter: "setMinutes",
                formatter: function(value) {
                    return dateLocalization.format(new Date(0, 0, 0, 0, value), "minute")
                },
                startValue: 0,
                endValue: 59
            },
            seconds: {
                getter: "getSeconds",
                setter: "setSeconds",
                formatter: function(value) {
                    return dateLocalization.format(new Date(0, 0, 0, 0, 0, value), "second")
                },
                startValue: 0,
                endValue: 59
            },
            milliseconds: {
                getter: "getMilliseconds",
                setter: "setMilliseconds",
                formatter: function(value) {
                    return dateLocalization.format(new Date(0, 0, 0, 0, 0, 0, value), "millisecond")
                },
                startValue: 0,
                endValue: 999
            }
        };
        module.exports = dateUtils
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.publisher_mixin.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var publisherMixin = {
            notifyObserver: function(subject, args) {
                var observer = this.option("observer");
                if (observer) {
                    observer.fire(subject, args)
                }
            },
            invoke: function() {
                var observer = this.option("observer");
                if (observer) {
                    return observer.fire.apply(observer, arguments)
                }
            }
        };
        module.exports = publisherMixin
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.commands_manager.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);
        var _file_saver = __webpack_require__( /*! ../../exporter/file_saver */ 176);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SEPARATOR = "separator";
        var SEPARATOR_COMMAND = {
            widget: SEPARATOR
        };
        var CSS_CLASSES = {
            SMALL_EDITOR_ITEM: "dx-diagram-sm-edit-item",
            MEDIUM_EDITOR_ITEM: "dx-diagram-md-edit-item",
            LARGE_EDITOR_ITEM: "dx-diagram-lg-edit-item",
            IMAGE_DROPDOWN_ITEM: "dx-diagram-image-dropdown-item",
            COLOR_EDITOR_ITEM: "dx-diagram-color-edit-item",
            LARGE_ICON_ITEM: "dx-diagram-lg-icon-item"
        };
        var DiagramCommandsManager = {
            SHOW_TOOLBOX_COMMAND_NAME: "toolbox",
            SHOW_PROPERTIES_PANEL_COMMAND_NAME: "propertiesPanel",
            getAllCommands: function() {
                var _this = this;
                var _getDiagram = (0, _diagram.getDiagram)(),
                    DiagramCommand = _getDiagram.DiagramCommand;
                return this._allCommands || (this._allCommands = {
                    separator: SEPARATOR_COMMAND,
                    exportSvg: {
                        command: DiagramCommand.ExportSvg,
                        text: _message2.default.format("dxDiagram-commandExportToSvg"),
                        getParameter: function(widget) {
                            return function(dataURI) {
                                return _this._exportTo(widget, dataURI, "SVG", "image/svg+xml")
                            }
                        }
                    },
                    exportPng: {
                        command: DiagramCommand.ExportPng,
                        text: _message2.default.format("dxDiagram-commandExportToPng"),
                        getParameter: function(widget) {
                            return function(dataURI) {
                                return _this._exportTo(widget, dataURI, "PNG", "image/png")
                            }
                        }
                    },
                    exportJpg: {
                        command: DiagramCommand.ExportJpg,
                        text: _message2.default.format("dxDiagram-commandExportToJpg"),
                        getParameter: function(widget) {
                            return function(dataURI) {
                                return _this._exportTo(widget, dataURI, "JPEG", "image/jpeg")
                            }
                        }
                    },
                    undo: {
                        command: DiagramCommand.Undo,
                        hint: _message2.default.format("dxDiagram-commandUndo"),
                        text: _message2.default.format("dxDiagram-commandUndo"),
                        icon: "undo",
                        menuIcon: "undo"
                    },
                    redo: {
                        command: DiagramCommand.Redo,
                        hint: _message2.default.format("dxDiagram-commandRedo"),
                        text: _message2.default.format("dxDiagram-commandRedo"),
                        icon: "redo",
                        menuIcon: "redo"
                    },
                    cut: {
                        command: DiagramCommand.Cut,
                        hint: _message2.default.format("dxDiagram-commandCut"),
                        text: _message2.default.format("dxDiagram-commandCut"),
                        icon: "cut",
                        menuIcon: "cut"
                    },
                    copy: {
                        command: DiagramCommand.Copy,
                        hint: _message2.default.format("dxDiagram-commandCopy"),
                        text: _message2.default.format("dxDiagram-commandCopy"),
                        icon: "copy",
                        menuIcon: "copy"
                    },
                    paste: {
                        command: DiagramCommand.PasteInPosition,
                        hint: _message2.default.format("dxDiagram-commandPaste"),
                        text: _message2.default.format("dxDiagram-commandPaste"),
                        icon: "paste",
                        menuIcon: "paste"
                    },
                    selectAll: {
                        command: DiagramCommand.SelectAll,
                        hint: _message2.default.format("dxDiagram-commandSelectAll"),
                        text: _message2.default.format("dxDiagram-commandSelectAll"),
                        icon: "dx-diagram-i-button-select-all dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-select-all dx-diagram-i"
                    },
                    "delete": {
                        command: DiagramCommand.Delete,
                        hint: _message2.default.format("dxDiagram-commandDelete"),
                        text: _message2.default.format("dxDiagram-commandDelete"),
                        icon: "remove",
                        menuIcon: "remove"
                    },
                    fontName: {
                        command: DiagramCommand.FontName,
                        hint: _message2.default.format("dxDiagram-commandFontName"),
                        text: _message2.default.format("dxDiagram-commandFontName"),
                        widget: "dxSelectBox",
                        items: ["Arial", "Arial Black", "Helvetica", "Times New Roman", "Courier New", "Courier", "Verdana", "Georgia", "Comic Sans MS", "Trebuchet MS"].map(function(item) {
                            return {
                                text: item,
                                value: item
                            }
                        }),
                        cssClass: CSS_CLASSES.MEDIUM_EDITOR_ITEM
                    },
                    fontSize: {
                        command: DiagramCommand.FontSize,
                        hint: _message2.default.format("dxDiagram-commandFontSize"),
                        text: _message2.default.format("dxDiagram-commandFontSize"),
                        widget: "dxSelectBox",
                        items: [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72].map(function(item) {
                            return {
                                text: item + "pt",
                                value: item + "pt"
                            }
                        }),
                        cssClass: CSS_CLASSES.SMALL_EDITOR_ITEM
                    },
                    bold: {
                        command: DiagramCommand.Bold,
                        hint: _message2.default.format("dxDiagram-commandBold"),
                        text: _message2.default.format("dxDiagram-commandBold"),
                        icon: "bold",
                        menuIcon: "bold"
                    },
                    italic: {
                        command: DiagramCommand.Italic,
                        hint: _message2.default.format("dxDiagram-commandItalic"),
                        text: _message2.default.format("dxDiagram-commandItalic"),
                        icon: "italic",
                        menuIcon: "italic"
                    },
                    underline: {
                        command: DiagramCommand.Underline,
                        hint: _message2.default.format("dxDiagram-commandUnderline"),
                        text: _message2.default.format("dxDiagram-commandUnderline"),
                        icon: "underline",
                        menuIcon: "underline"
                    },
                    fontColor: {
                        command: DiagramCommand.FontColor,
                        text: _message2.default.format("dxDiagram-commandTextColor"),
                        hint: _message2.default.format("dxDiagram-commandTextColor"),
                        widget: "dxColorBox",
                        icon: "dx-icon dx-icon-color",
                        menuIcon: "dx-icon dx-icon-color",
                        cssClass: CSS_CLASSES.COLOR_EDITOR_ITEM
                    },
                    lineColor: {
                        command: DiagramCommand.StrokeColor,
                        text: _message2.default.format("dxDiagram-commandLineColor"),
                        hint: _message2.default.format("dxDiagram-commandLineColor"),
                        widget: "dxColorBox",
                        icon: "dx-icon dx-icon-background",
                        menuIcon: "dx-icon dx-icon-background",
                        cssClass: CSS_CLASSES.COLOR_EDITOR_ITEM
                    },
                    lineWidth: {
                        command: DiagramCommand.StrokeWidth,
                        text: _message2.default.format("dxDiagram-commandLineWidth"),
                        hint: _message2.default.format("dxDiagram-commandLineWidth"),
                        widget: "dxSelectBox",
                        items: [1, 2, 3, 4, 5, 6, 7, 8].map(function(item) {
                            return {
                                text: item + "px",
                                value: item.toString()
                            }
                        }),
                        cssClass: CSS_CLASSES.SMALL_EDITOR_ITEM
                    },
                    lineStyle: {
                        command: DiagramCommand.StrokeStyle,
                        text: _message2.default.format("dxDiagram-commandLineStyle"),
                        hint: _message2.default.format("dxDiagram-commandLineStyle"),
                        widget: "dxSelectBox",
                        items: [{
                            value: "",
                            menuIcon: "dx-diagram-i-line-solid dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandLineStyleSolid")
                        }, {
                            value: "2,2",
                            menuIcon: "dx-diagram-i-line-dotted dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandLineStyleDotted")
                        }, {
                            value: "6,2",
                            menuIcon: "dx-diagram-i-line-dashed dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandLineStyleDashed")
                        }],
                        cssClass: CSS_CLASSES.IMAGE_DROPDOWN_ITEM
                    },
                    fillColor: {
                        command: DiagramCommand.FillColor,
                        text: _message2.default.format("dxDiagram-commandFillColor"),
                        hint: _message2.default.format("dxDiagram-commandFillColor"),
                        widget: "dxColorBox",
                        icon: "dx-diagram-i dx-diagram-i-button-fill",
                        menuIcon: "dx-diagram-i dx-diagram-i-menu-fill",
                        cssClass: CSS_CLASSES.COLOR_EDITOR_ITEM
                    },
                    textAlignLeft: {
                        command: DiagramCommand.TextLeftAlign,
                        hint: _message2.default.format("dxDiagram-commandAlignLeft"),
                        text: _message2.default.format("dxDiagram-commandAlignLeft"),
                        icon: "alignleft",
                        menuIcon: "alignleft"
                    },
                    textAlignCenter: {
                        command: DiagramCommand.TextCenterAlign,
                        hint: _message2.default.format("dxDiagram-commandAlignCenter"),
                        text: _message2.default.format("dxDiagram-commandAlignCenter"),
                        icon: "aligncenter",
                        menuIcon: "aligncenter"
                    },
                    textAlignRight: {
                        command: DiagramCommand.TextRightAlign,
                        hint: _message2.default.format("dxDiagram-commandAlignRight"),
                        text: _message2.default.format("dxDiagram-commandAlignRight"),
                        icon: "alignright",
                        menu: "alignright"
                    },
                    lock: {
                        command: DiagramCommand.Lock,
                        hint: _message2.default.format("dxDiagram-commandLock"),
                        text: _message2.default.format("dxDiagram-commandLock"),
                        icon: "dx-diagram-i-button-lock dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-lock dx-diagram-i"
                    },
                    unlock: {
                        command: DiagramCommand.Unlock,
                        hint: _message2.default.format("dxDiagram-commandUnlock"),
                        text: _message2.default.format("dxDiagram-commandUnlock"),
                        icon: "dx-diagram-i-button-unlock dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-unlock dx-diagram-i"
                    },
                    bringToFront: {
                        command: DiagramCommand.BringToFront,
                        hint: _message2.default.format("dxDiagram-commandBringToFront"),
                        text: _message2.default.format("dxDiagram-commandBringToFront"),
                        icon: "dx-diagram-i-button-bring-to-front dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-bring-to-front dx-diagram-i"
                    },
                    sendToBack: {
                        command: DiagramCommand.SendToBack,
                        hint: _message2.default.format("dxDiagram-commandSendToBack"),
                        text: _message2.default.format("dxDiagram-commandSendToBack"),
                        icon: "dx-diagram-i-button-send-to-back dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-send-to-back dx-diagram-i"
                    },
                    insertShapeImage: {
                        command: DiagramCommand.InsertShapeImage,
                        text: _message2.default.format("dxDiagram-commandInsertShapeImage"),
                        icon: "dx-diagram-i-button-image-insert dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-image-insert dx-diagram-i"
                    },
                    editShapeImage: {
                        command: DiagramCommand.EditShapeImage,
                        text: _message2.default.format("dxDiagram-commandEditShapeImage"),
                        icon: "dx-diagram-i-button-image-edit dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-image-edit dx-diagram-i"
                    },
                    deleteShapeImage: {
                        command: DiagramCommand.DeleteShapeImage,
                        text: _message2.default.format("dxDiagram-commandDeleteShapeImage"),
                        icon: "dx-diagram-i-button-image-delete dx-diagram-i",
                        menuIcon: "dx-diagram-i-menu-image-delete dx-diagram-i"
                    },
                    connectorLineType: {
                        command: DiagramCommand.ConnectorLineOption,
                        widget: "dxSelectBox",
                        hint: _message2.default.format("dxDiagram-commandConnectorLineType"),
                        items: [{
                            value: 0,
                            menuIcon: "dx-diagram-i-connector-straight dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineStraight")
                        }, {
                            value: 1,
                            menuIcon: "dx-diagram-i-connector-orthogonal dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineOrthogonal")
                        }],
                        cssClass: CSS_CLASSES.IMAGE_DROPDOWN_ITEM
                    },
                    connectorLineStart: {
                        command: DiagramCommand.ConnectorStartLineEnding,
                        widget: "dxSelectBox",
                        items: [{
                            value: 0,
                            menuIcon: "dx-diagram-i-connector-begin-none dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineNone")
                        }, {
                            value: 1,
                            menuIcon: "dx-diagram-i-connector-begin-arrow dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }, {
                            value: 2,
                            menuIcon: "dx-diagram-i-connector-begin-outlined-triangle dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }, {
                            value: 3,
                            menuIcon: "dx-diagram-i-connector-begin-filled-triangle dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }],
                        hint: _message2.default.format("dxDiagram-commandConnectorLineStart"),
                        cssClass: CSS_CLASSES.IMAGE_DROPDOWN_ITEM
                    },
                    connectorLineEnd: {
                        command: DiagramCommand.ConnectorEndLineEnding,
                        widget: "dxSelectBox",
                        items: [{
                            value: 0,
                            menuIcon: "dx-diagram-i-connector-end-none dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineNone")
                        }, {
                            value: 1,
                            menuIcon: "dx-diagram-i-connector-end-arrow dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }, {
                            value: 2,
                            menuIcon: "dx-diagram-i-connector-end-outlined-triangle dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }, {
                            value: 3,
                            menuIcon: "dx-diagram-i-connector-end-filled-triangle dx-diagram-i",
                            hint: _message2.default.format("dxDiagram-commandConnectorLineArrow")
                        }],
                        hint: _message2.default.format("dxDiagram-commandConnectorLineEnd"),
                        cssClass: CSS_CLASSES.IMAGE_DROPDOWN_ITEM
                    },
                    layoutTreeTopToBottom: {
                        command: DiagramCommand.AutoLayoutTreeVertical,
                        text: _message2.default.format("dxDiagram-commandLayoutTopToBottom"),
                        hint: _message2.default.format("dxDiagram-commandLayoutTopToBottom"),
                        icon: "dx-diagram-i-button-layout-tree-tb dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutTreeBottomToTop: {
                        command: DiagramCommand.AutoLayoutTreeVerticalBottomToTop,
                        text: _message2.default.format("dxDiagram-commandLayoutBottomToTop"),
                        hint: _message2.default.format("dxDiagram-commandLayoutBottomToTop"),
                        icon: "dx-diagram-i-button-layout-tree-bt dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutTreeLeftToRight: {
                        command: DiagramCommand.AutoLayoutTreeHorizontal,
                        text: _message2.default.format("dxDiagram-commandLayoutLeftToRight"),
                        hint: _message2.default.format("dxDiagram-commandLayoutLeftToRight"),
                        icon: "dx-diagram-i-button-layout-tree-lr dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutTreeRightToLeft: {
                        command: DiagramCommand.AutoLayoutTreeHorizontalRightToLeft,
                        text: _message2.default.format("dxDiagram-commandLayoutRightToLeft"),
                        hint: _message2.default.format("dxDiagram-commandLayoutRightToLeft"),
                        icon: "dx-diagram-i-button-layout-tree-rl dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutLayeredTopToBottom: {
                        command: DiagramCommand.AutoLayoutLayeredVertical,
                        text: _message2.default.format("dxDiagram-commandLayoutTopToBottom"),
                        hint: _message2.default.format("dxDiagram-commandLayoutTopToBottom"),
                        icon: "dx-diagram-i-button-layout-layered-tb dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutLayeredBottomToTop: {
                        command: DiagramCommand.AutoLayoutLayeredVerticalBottomToTop,
                        text: _message2.default.format("dxDiagram-commandLayoutBottomToTop"),
                        hint: _message2.default.format("dxDiagram-commandLayoutBottomToTop"),
                        icon: "dx-diagram-i-button-layout-layered-bt dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutLayeredLeftToRight: {
                        command: DiagramCommand.AutoLayoutLayeredHorizontal,
                        text: _message2.default.format("dxDiagram-commandLayoutLeftToRight"),
                        hint: _message2.default.format("dxDiagram-commandLayoutLeftToRight"),
                        icon: "dx-diagram-i-button-layout-layered-lr dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    layoutLayeredRightToLeft: {
                        command: DiagramCommand.AutoLayoutLayeredHorizontalRightToLeft,
                        text: _message2.default.format("dxDiagram-commandLayoutRightToLeft"),
                        hint: _message2.default.format("dxDiagram-commandLayoutRightToLeft"),
                        icon: "dx-diagram-i-button-layout-layered-rl dx-diagram-i",
                        cssClass: CSS_CLASSES.LARGE_ICON_ITEM
                    },
                    fullScreen: {
                        command: DiagramCommand.Fullscreen,
                        hint: _message2.default.format("dxDiagram-commandFullscreen"),
                        text: _message2.default.format("dxDiagram-commandFullscreen"),
                        icon: "dx-diagram-i dx-diagram-i-button-fullscreen",
                        menuIcon: "dx-diagram-i dx-diagram-i-menu-fullscreen",
                        cssClass: CSS_CLASSES.COLOR_EDITOR_ITEM
                    },
                    units: {
                        command: DiagramCommand.ViewUnits,
                        hint: _message2.default.format("dxDiagram-commandUnits"),
                        text: _message2.default.format("dxDiagram-commandUnits"),
                        widget: "dxSelectBox"
                    },
                    simpleView: {
                        command: DiagramCommand.ToggleSimpleView,
                        hint: _message2.default.format("dxDiagram-commandSimpleView"),
                        text: _message2.default.format("dxDiagram-commandSimpleView"),
                        widget: "dxCheckBox"
                    },
                    showGrid: {
                        command: DiagramCommand.ShowGrid,
                        hint: _message2.default.format("dxDiagram-commandShowGrid"),
                        text: _message2.default.format("dxDiagram-commandShowGrid"),
                        widget: "dxCheckBox"
                    },
                    snapToGrid: {
                        command: DiagramCommand.SnapToGrid,
                        hint: _message2.default.format("dxDiagram-commandSnapToGrid"),
                        text: _message2.default.format("dxDiagram-commandSnapToGrid"),
                        widget: "dxCheckBox"
                    },
                    gridSize: {
                        command: DiagramCommand.GridSize,
                        hint: _message2.default.format("dxDiagram-commandGridSize"),
                        text: _message2.default.format("dxDiagram-commandGridSize"),
                        widget: "dxSelectBox"
                    },
                    pageSize: {
                        command: DiagramCommand.PageSize,
                        hint: _message2.default.format("dxDiagram-commandPageSize"),
                        text: _message2.default.format("dxDiagram-commandPageSize"),
                        widget: "dxSelectBox",
                        cssClass: CSS_CLASSES.LARGE_EDITOR_ITEM,
                        getCommandValue: function(v) {
                            return JSON.parse(v)
                        },
                        getEditorValue: function(v) {
                            return JSON.stringify(v)
                        }
                    },
                    pageOrientation: {
                        command: DiagramCommand.PageLandscape,
                        hint: _message2.default.format("dxDiagram-commandPageOrientation"),
                        text: _message2.default.format("dxDiagram-commandPageOrientation"),
                        widget: "dxSelectBox",
                        items: [{
                            value: true,
                            text: _message2.default.format("dxDiagram-commandPageOrientationLandscape")
                        }, {
                            value: false,
                            text: _message2.default.format("dxDiagram-commandPageOrientationPortrait")
                        }],
                        cssClass: CSS_CLASSES.MEDIUM_EDITOR_ITEM
                    },
                    pageColor: {
                        command: DiagramCommand.PageColor,
                        hint: _message2.default.format("dxDiagram-commandPageColor"),
                        text: _message2.default.format("dxDiagram-commandPageColor"),
                        widget: "dxColorBox",
                        icon: "dx-diagram-i dx-diagram-i-button-fill",
                        menuIcon: "dx-diagram-i dx-diagram-i-menu-fill",
                        cssClass: CSS_CLASSES.COLOR_EDITOR_ITEM
                    },
                    zoomLevel: {
                        command: DiagramCommand.ZoomLevel,
                        hint: _message2.default.format("dxDiagram-commandZoomLevel"),
                        text: _message2.default.format("dxDiagram-commandZoomLevel"),
                        widget: "dxTextBox",
                        items: [SEPARATOR_COMMAND, {
                            command: DiagramCommand.FitToScreen,
                            hint: _message2.default.format("dxDiagram-commandFitToContent"),
                            text: _message2.default.format("dxDiagram-commandFitToContent")
                        }, {
                            command: DiagramCommand.FitToWidth,
                            hint: _message2.default.format("dxDiagram-commandFitToWidth"),
                            text: _message2.default.format("dxDiagram-commandFitToWidth")
                        }, SEPARATOR_COMMAND, {
                            command: DiagramCommand.AutoZoomToContent,
                            hint: _message2.default.format("dxDiagram-commandAutoZoomByContent"),
                            text: _message2.default.format("dxDiagram-commandAutoZoomByContent")
                        }, {
                            command: DiagramCommand.AutoZoomToWidth,
                            hint: _message2.default.format("dxDiagram-commandAutoZoomByWidth"),
                            text: _message2.default.format("dxDiagram-commandAutoZoomByWidth")
                        }],
                        getEditorDisplayValue: function(v) {
                            return Math.round(100 * v) + "%"
                        },
                        cssClass: CSS_CLASSES.SMALL_EDITOR_ITEM
                    },
                    toolbox: {
                        command: this.SHOW_TOOLBOX_COMMAND_NAME,
                        iconChecked: "dx-diagram-i dx-diagram-i-button-toolbox-close",
                        iconUnchecked: "dx-diagram-i dx-diagram-i-button-toolbox-open",
                        hint: _message2.default.format("dxDiagram-uiShowToolbox"),
                        text: _message2.default.format("dxDiagram-uiShowToolbox")
                    },
                    propertiesPanel: {
                        command: this.SHOW_PROPERTIES_PANEL_COMMAND_NAME,
                        iconChecked: "close",
                        iconUnchecked: "dx-diagram-i dx-diagram-i-button-properties-panel-open",
                        hint: _message2.default.format("dxDiagram-uiProperties"),
                        text: _message2.default.format("dxDiagram-uiProperties")
                    }
                })
            },
            getMainToolbarCommands: function(commands, excludeCommands) {
                var allCommands = this.getAllCommands();
                var mainToolbarCommands = commands ? this._getPreparedCommands(allCommands, commands) : this._getDefaultMainToolbarCommands(allCommands);
                return this._prepareToolbarCommands(mainToolbarCommands, excludeCommands)
            },
            _getDefaultMainToolbarCommands: function(allCommands) {
                return this._defaultMainToolbarCommands || (this._defaultMainToolbarCommands = [allCommands.undo, allCommands.redo, allCommands.separator, allCommands.fontName, allCommands.fontSize, allCommands.bold, allCommands.italic, allCommands.underline, allCommands.separator, allCommands.lineWidth, allCommands.lineStyle, allCommands.separator, allCommands.fontColor, allCommands.lineColor, allCommands.fillColor, allCommands.separator, allCommands.textAlignLeft, allCommands.textAlignCenter, allCommands.textAlignRight, allCommands.separator, allCommands.connectorLineType, allCommands.connectorLineStart, allCommands.connectorLineEnd, allCommands.separator, {
                    text: _message2.default.format("dxDiagram-uiLayout"),
                    showText: "always",
                    items: [{
                        text: _message2.default.format("dxDiagram-uiLayoutTree"),
                        items: [allCommands.layoutTreeTopToBottom, allCommands.layoutTreeBottomToTop, allCommands.layoutTreeLeftToRight, allCommands.layoutTreeRightToLeft]
                    }, {
                        text: _message2.default.format("dxDiagram-uiLayoutLayered"),
                        items: [allCommands.layoutLayeredTopToBottom, allCommands.layoutLayeredBottomToTop, allCommands.layoutLayeredLeftToRight, allCommands.layoutLayeredRightToLeft]
                    }]
                }])
            },
            getHistoryToolbarCommands: function(commands, excludeCommands) {
                var allCommands = this.getAllCommands();
                var historyToolbarCommands = commands ? this._getPreparedCommands(allCommands, commands) : this._getDefaultHistoryToolbarCommands(allCommands);
                return this._prepareToolbarCommands(historyToolbarCommands, excludeCommands)
            },
            _getDefaultHistoryToolbarCommands: function(allCommands) {
                return this._defaultHistoryToolbarCommands || (this._defaultHistoryToolbarCommands = [allCommands.undo, allCommands.redo, allCommands.separator, allCommands.toolbox])
            },
            getViewToolbarCommands: function(commands, excludeCommands) {
                var allCommands = this.getAllCommands();
                var viewToolbarCommands = commands ? this._getPreparedCommands(allCommands, commands) : this._getDefaultViewToolbarCommands(allCommands);
                return this._prepareToolbarCommands(viewToolbarCommands, excludeCommands)
            },
            _getDefaultViewToolbarCommands: function(allCommands) {
                return this._defaultViewToolbarCommands || (this._defaultViewToolbarCommands = [allCommands.zoomLevel, allCommands.separator, allCommands.fullScreen, allCommands.separator, {
                    widget: "dxButton",
                    icon: "export",
                    text: _message2.default.format("dxDiagram-uiExport"),
                    hint: _message2.default.format("dxDiagram-uiExport"),
                    items: [allCommands.exportSvg, allCommands.exportPng, allCommands.exportJpg]
                }, {
                    icon: "preferences",
                    hint: _message2.default.format("dxDiagram-uiSettings"),
                    text: _message2.default.format("dxDiagram-uiSettings"),
                    items: [allCommands.units, allCommands.separator, allCommands.showGrid, allCommands.snapToGrid, allCommands.gridSize, allCommands.separator, allCommands.simpleView, allCommands.toolbox]
                }])
            },
            getPropertiesToolbarCommands: function(commands, excludeCommands) {
                var allCommands = this.getAllCommands();
                var propertiesCommands = commands ? this._getPreparedCommands(allCommands, commands) : this._getDefaultPropertiesToolbarCommands(allCommands);
                return this._prepareToolbarCommands(propertiesCommands, excludeCommands)
            },
            _getDefaultPropertiesToolbarCommands: function(allCommands) {
                return this._defaultPropertiesToolbarCommands || (this._defaultPropertiesToolbarCommands = [allCommands.propertiesPanel])
            },
            _getDefaultPropertyPanelCommandGroups: function() {
                return this._defaultPropertyPanelCommandGroups || (this._defaultPropertyPanelCommandGroups = [{
                    title: _message2.default.format("dxDiagram-uiStyle"),
                    groups: [{
                        title: _message2.default.format("dxDiagram-uiText"),
                        commands: ["fontName", "fontSize", "bold", "italic", "underline", "textAlignLeft", "textAlignCenter", "textAlignRight", "fontColor"]
                    }, {
                        title: _message2.default.format("dxDiagram-uiObject"),
                        commands: ["lineStyle", "lineWidth", "lineColor", "fillColor"]
                    }, {
                        title: _message2.default.format("dxDiagram-uiConnector"),
                        commands: ["connectorLineType", "connectorLineStart", "connectorLineEnd"]
                    }]
                }, {
                    title: _message2.default.format("dxDiagram-uiLayout"),
                    groups: [{
                        title: _message2.default.format("dxDiagram-uiLayoutLayered"),
                        commands: ["layoutLayeredTopToBottom", "layoutLayeredBottomToTop", "layoutLayeredLeftToRight", "layoutLayeredRightToLeft"]
                    }, {
                        title: _message2.default.format("dxDiagram-uiLayoutTree"),
                        commands: ["layoutTreeTopToBottom", "layoutTreeBottomToTop", "layoutTreeLeftToRight", "layoutTreeRightToLeft"]
                    }]
                }, {
                    title: _message2.default.format("dxDiagram-uiDiagram"),
                    groups: [{
                        title: _message2.default.format("dxDiagram-uiPage"),
                        commands: ["pageSize", "pageOrientation", "pageColor"]
                    }]
                }])
            },
            _preparePropertyPanelGroups: function(groups) {
                var _this2 = this;
                var allCommands = this.getAllCommands();
                var result = [];
                groups.forEach(function(g) {
                    var commands = g.commands;
                    if (commands) {
                        commands = _this2._getPreparedCommands(allCommands, commands);
                        commands = _this2._prepareToolbarCommands(commands)
                    }
                    var subGroups;
                    if (g.groups) {
                        subGroups = [];
                        g.groups.forEach(function(sg) {
                            var subCommands = sg.commands;
                            if (subCommands) {
                                subCommands = _this2._getPreparedCommands(allCommands, subCommands);
                                subCommands = _this2._prepareToolbarCommands(subCommands)
                            }
                            subGroups.push({
                                title: sg.title,
                                commands: subCommands
                            })
                        })
                    }
                    result.push({
                        title: g.title,
                        commands: commands,
                        groups: subGroups
                    })
                });
                return result
            },
            getPropertyPanelCommandTabs: function(commandGroups) {
                commandGroups = commandGroups || this._getDefaultPropertyPanelCommandGroups();
                return this._preparePropertyPanelGroups(commandGroups)
            },
            getContextMenuCommands: function(commands) {
                var allCommands = this.getAllCommands();
                var contextMenuCommands = commands ? this._getPreparedCommands(allCommands, commands) : this._getDefaultContextMenuCommands(allCommands);
                return this._prepareContextMenuCommands(contextMenuCommands)
            },
            _getDefaultContextMenuCommands: function(allCommands) {
                return this._defaultContextMenuCommands || (this._defaultContextMenuCommands = [allCommands.cut, allCommands.copy, allCommands.paste, allCommands.delete, allCommands.separator, allCommands.selectAll, allCommands.separator, allCommands.bringToFront, allCommands.sendToBack, allCommands.separator, allCommands.lock, allCommands.unlock, allCommands.separator, allCommands.insertShapeImage, allCommands.editShapeImage, allCommands.deleteShapeImage])
            },
            _getPreparedCommands: function(allCommands, commands) {
                var _this3 = this;
                return commands.map(function(c) {
                    if (allCommands[c]) {
                        return allCommands[c]
                    } else {
                        if (c.text || c.icon || c.name) {
                            var internalCommand = c.name && allCommands[c.name];
                            var command = {
                                command: internalCommand && internalCommand.command,
                                name: c.name,
                                text: c.text || internalCommand && internalCommand.text,
                                hint: c.text || internalCommand && internalCommand.hint,
                                icon: c.icon || internalCommand && internalCommand.icon,
                                menuIcon: c.icon || internalCommand && internalCommand.menuIcon,
                                widget: internalCommand && internalCommand.widget,
                                cssClass: internalCommand && internalCommand.cssClass,
                                getParameter: internalCommand && internalCommand.getParameter
                            };
                            if (Array.isArray(c.items)) {
                                command.items = _this3._getPreparedCommands(allCommands, c.items)
                            } else {
                                command.items = internalCommand && internalCommand.items
                            }
                            return command
                        }
                    }
                }).filter(function(c) {
                    return c
                })
            },
            _prepareContextMenuCommands: function(commands, excludeCommands, rootCommand) {
                var _this4 = this;
                var beginGroup = false;
                return commands.map(function(c) {
                    if (!_this4._isValidCommand(c, excludeCommands)) {
                        return
                    }
                    if (c === SEPARATOR_COMMAND) {
                        beginGroup = true
                    } else {
                        var command = _this4._cloneCommand(c, excludeCommands);
                        command.icon = command.menuIcon;
                        command.beginGroup = beginGroup;
                        command.rootCommand = !command.command ? rootCommand && rootCommand.command : void 0;
                        beginGroup = false;
                        return command
                    }
                }).filter(function(c) {
                    return c
                })
            },
            _prepareToolbarCommands: function(commands, excludeCommands) {
                var _this5 = this;
                return commands.map(function(c) {
                    if (_this5._isValidCommand(c, excludeCommands)) {
                        return _this5._cloneCommand(c, excludeCommands)
                    }
                }).filter(function(c) {
                    return c
                }).filter(function(c, index, arr) {
                    if (c.widget === SEPARATOR && index === arr.length - 1) {
                        return false
                    }
                    return c
                })
            },
            _cloneCommand: function(c, excludeCommands) {
                var command = (0, _extend.extend)({}, c);
                if (Array.isArray(c.items)) {
                    command.items = this._prepareContextMenuCommands(c.items, excludeCommands, command)
                }
                return command
            },
            _isValidCommand: function(c, excludeCommands) {
                excludeCommands = excludeCommands || [];
                return excludeCommands.indexOf(c.command) === -1
            },
            _exportTo: function(widget, dataURI, format, mimeString) {
                var window = (0, _window.getWindow)();
                if (window && window.atob && (0, _type.isFunction)(window.Blob)) {
                    var blob = this._getBlobByDataURI(window, dataURI, mimeString);
                    var options = widget.option("export");
                    _file_saver.fileSaver.saveAs(options.fileName || "foo", format, blob, options.proxyURL)
                }
            },
            _getBlobByDataURI: function(window, dataURI, mimeString) {
                var byteString = window.atob(dataURI.split(",")[1]);
                var ia = new Uint8Array(byteString.length);
                for (var i = 0; i < byteString.length; i++) {
                    ia[i] = byteString.charCodeAt(i)
                }
                return new window.Blob([ia.buffer], {
                    type: mimeString
                })
            }
        };
        module.exports = DiagramCommandsManager
    }, , , , , ,
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/events/core/event_registrator_callbacks.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _memorized_callbacks = __webpack_require__( /*! ../../core/memorized_callbacks */ 185);
        var _memorized_callbacks2 = _interopRequireDefault(_memorized_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.default = new _memorized_callbacks2.default
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/localization/currency.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        module.exports = {
            _formatNumberCore: function(value, format, formatConfig) {
                if ("currency" === format) {
                    formatConfig.precision = formatConfig.precision || 0;
                    var result = this.format(value, (0, _extend.extend)({}, formatConfig, {
                        type: "fixedpoint"
                    }));
                    var currencyPart = this.getCurrencySymbol().symbol.replace("$", "$$$$");
                    result = result.replace(/^(\D*)(\d.*)/, "$1" + currencyPart + "$2");
                    return result
                }
                return this.callBase.apply(this, arguments)
            },
            getCurrencySymbol: function() {
                return {
                    symbol: "$"
                }
            },
            getOpenXmlCurrencyFormat: function() {
                return "$#,##0{0}_);\\($#,##0{0}\\)"
            }
        }
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/events/core/emitter.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var Emitter = Class.inherit({
            ctor: function(element) {
                this._$element = $(element);
                this._cancelCallback = Callbacks();
                this._acceptCallback = Callbacks()
            },
            getElement: function() {
                return this._$element
            },
            validate: function(e) {
                return !eventUtils.isDxMouseWheelEvent(e)
            },
            validatePointers: function(e) {
                return 1 === eventUtils.hasTouches(e)
            },
            allowInterruptionByMouseWheel: function() {
                return true
            },
            configure: function(data) {
                extend(this, data)
            },
            addCancelCallback: function(callback) {
                this._cancelCallback.add(callback)
            },
            removeCancelCallback: function() {
                this._cancelCallback.empty()
            },
            _cancel: function(e) {
                this._cancelCallback.fire(this, e)
            },
            addAcceptCallback: function(callback) {
                this._acceptCallback.add(callback)
            },
            removeAcceptCallback: function() {
                this._acceptCallback.empty()
            },
            _accept: function(e) {
                this._acceptCallback.fire(this, e)
            },
            _requestAccept: function(e) {
                this._acceptRequestEvent = e
            },
            _forgetAccept: function() {
                this._accept(this._acceptRequestEvent);
                this._acceptRequestEvent = null
            },
            start: noop,
            move: noop,
            end: noop,
            cancel: noop,
            reset: function() {
                if (this._acceptRequestEvent) {
                    this._accept(this._acceptRequestEvent)
                }
            },
            _fireEvent: function(eventName, e, params) {
                var eventData = extend({
                    type: eventName,
                    originalEvent: e,
                    target: this._getEmitterTarget(e),
                    delegateTarget: this.getElement().get(0)
                }, params);
                e = eventUtils.fireEvent(eventData);
                if (e.cancel) {
                    this._cancel(e)
                }
                return e
            },
            _getEmitterTarget: function(e) {
                return (this.delegateSelector ? $(e.target).closest(this.delegateSelector) : this.getElement()).get(0)
            },
            dispose: noop
        });
        module.exports = Emitter
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/events/core/wheel.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _event_registrator = __webpack_require__( /*! ./event_registrator */ 77);
        var _event_registrator2 = _interopRequireDefault(_event_registrator);
        var _utils = __webpack_require__( /*! ../utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var EVENT_NAME = "dxmousewheel";
        var EVENT_NAMESPACE = "dxWheel";
        var NATIVE_EVENT_NAME = "wheel";
        var PIXEL_MODE = 0;
        var DELTA_MUTLIPLIER = 30;
        var wheel = {
            setup: function(element) {
                var $element = (0, _renderer2.default)(element);
                _events_engine2.default.on($element, (0, _utils.addNamespace)(NATIVE_EVENT_NAME, EVENT_NAMESPACE), wheel._wheelHandler.bind(wheel))
            },
            teardown: function(element) {
                _events_engine2.default.off(element, ".".concat(EVENT_NAMESPACE))
            },
            _wheelHandler: function(e) {
                var _e$originalEvent = e.originalEvent,
                    deltaMode = _e$originalEvent.deltaMode,
                    deltaY = _e$originalEvent.deltaY,
                    deltaX = _e$originalEvent.deltaX,
                    deltaZ = _e$originalEvent.deltaZ;
                (0, _utils.fireEvent)({
                    type: EVENT_NAME,
                    originalEvent: e,
                    delta: this._normalizeDelta(deltaY, deltaMode),
                    deltaX: deltaX,
                    deltaY: deltaY,
                    deltaZ: deltaZ,
                    deltaMode: deltaMode,
                    pointerType: "mouse"
                });
                e.stopPropagation()
            },
            _normalizeDelta: function(delta) {
                var deltaMode = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : PIXEL_MODE;
                if (deltaMode === PIXEL_MODE) {
                    return -delta
                } else {
                    return -DELTA_MUTLIPLIER * delta
                }
            }
        };
        (0, _event_registrator2.default)(EVENT_NAME, wheel);
        exports.name = EVENT_NAME
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/events/core/emitter.feedback.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var contains = __webpack_require__( /*! ../../core/utils/dom */ 11).contains;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../pointer */ 23);
        var Emitter = __webpack_require__( /*! ./emitter */ 132);
        var registerEmitter = __webpack_require__( /*! ./emitter_registrator */ 101);
        var ACTIVE_EVENT_NAME = "dxactive";
        var INACTIVE_EVENT_NAME = "dxinactive";
        var ACTIVE_TIMEOUT = 30;
        var INACTIVE_TIMEOUT = 400;
        var FeedbackEvent = Class.inherit({
            ctor: function(timeout, fire) {
                this._timeout = timeout;
                this._fire = fire
            },
            start: function() {
                var that = this;
                this._schedule(function() {
                    that.force()
                })
            },
            _schedule: function(fn) {
                this.stop();
                this._timer = setTimeout(fn, this._timeout)
            },
            stop: function() {
                clearTimeout(this._timer)
            },
            force: function() {
                if (this._fired) {
                    return
                }
                this.stop();
                this._fire();
                this._fired = true
            },
            fired: function() {
                return this._fired
            }
        });
        var activeFeedback;
        var FeedbackEmitter = Emitter.inherit({
            ctor: function() {
                this.callBase.apply(this, arguments);
                this._active = new FeedbackEvent(0, commonUtils.noop);
                this._inactive = new FeedbackEvent(0, commonUtils.noop)
            },
            configure: function(data, eventName) {
                switch (eventName) {
                    case ACTIVE_EVENT_NAME:
                        data.activeTimeout = data.timeout;
                        break;
                    case INACTIVE_EVENT_NAME:
                        data.inactiveTimeout = data.timeout
                }
                this.callBase(data)
            },
            start: function(e) {
                if (activeFeedback) {
                    var activeChildExists = contains(this.getElement().get(0), activeFeedback.getElement().get(0));
                    var childJustActivated = !activeFeedback._active.fired();
                    if (activeChildExists && childJustActivated) {
                        this._cancel();
                        return
                    }
                    activeFeedback._inactive.force()
                }
                activeFeedback = this;
                this._initEvents(e);
                this._active.start()
            },
            _initEvents: function(e) {
                var that = this;
                var eventTarget = this._getEmitterTarget(e);
                var mouseEvent = eventUtils.isMouseEvent(e);
                var isSimulator = devices.isSimulator();
                var deferFeedback = isSimulator || !mouseEvent;
                var activeTimeout = commonUtils.ensureDefined(this.activeTimeout, ACTIVE_TIMEOUT);
                var inactiveTimeout = commonUtils.ensureDefined(this.inactiveTimeout, INACTIVE_TIMEOUT);
                this._active = new FeedbackEvent(deferFeedback ? activeTimeout : 0, function() {
                    that._fireEvent(ACTIVE_EVENT_NAME, e, {
                        target: eventTarget
                    })
                });
                this._inactive = new FeedbackEvent(deferFeedback ? inactiveTimeout : 0, function() {
                    that._fireEvent(INACTIVE_EVENT_NAME, e, {
                        target: eventTarget
                    });
                    activeFeedback = null
                })
            },
            cancel: function(e) {
                this.end(e)
            },
            end: function(e) {
                var skipTimers = e.type !== pointerEvents.up;
                if (skipTimers) {
                    this._active.stop()
                } else {
                    this._active.force()
                }
                this._inactive.start();
                if (skipTimers) {
                    this._inactive.force()
                }
            },
            dispose: function() {
                this._active.stop();
                this._inactive.stop();
                this.callBase()
            },
            lockInactive: function() {
                this._active.force();
                this._inactive.stop();
                activeFeedback = null;
                this._cancel();
                return this._inactive.force.bind(this._inactive)
            }
        });
        FeedbackEmitter.lock = function(deferred) {
            var lockInactive = activeFeedback ? activeFeedback.lockInactive() : commonUtils.noop;
            deferred.done(lockInactive)
        };
        registerEmitter({
            emitter: FeedbackEmitter,
            events: [ACTIVE_EVENT_NAME, INACTIVE_EVENT_NAME]
        });
        exports.lock = FeedbackEmitter.lock;
        exports.active = ACTIVE_EVENT_NAME;
        exports.inactive = INACTIVE_EVENT_NAME
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/item.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var publicComponentUtils = __webpack_require__( /*! ../../core/utils/public_component */ 139);
        var INVISIBLE_STATE_CLASS = "dx-state-invisible";
        var DISABLED_STATE_CLASS = "dx-state-disabled";
        var ITEM_CONTENT_PLACEHOLDER_CLASS = "dx-item-content-placeholder";
        var forcibleWatcher = function(watchMethod, fn, callback) {
            var filteredCallback = function() {
                var oldValue;
                return function(value) {
                    if (oldValue !== value) {
                        callback(value, oldValue);
                        oldValue = value
                    }
                }
            }();
            return {
                dispose: watchMethod(fn, filteredCallback),
                force: function() {
                    filteredCallback(fn())
                }
            }
        };
        var CollectionItem = Class.inherit({
            ctor: function($element, options, rawData) {
                this._$element = $element;
                this._options = options;
                this._rawData = rawData;
                publicComponentUtils.attachInstanceToElement($element, this, this._dispose);
                this._render()
            },
            _render: function() {
                var $placeholder = $("<div>").addClass(ITEM_CONTENT_PLACEHOLDER_CLASS);
                this._$element.append($placeholder);
                this._watchers = [];
                this._renderWatchers()
            },
            _renderWatchers: function() {
                this._startWatcher("disabled", this._renderDisabled.bind(this));
                this._startWatcher("visible", this._renderVisible.bind(this))
            },
            _startWatcher: function(field, render) {
                var rawData = this._rawData;
                var exprGetter = this._options.fieldGetter(field);
                var watcher = forcibleWatcher(this._options.watchMethod(), function() {
                    return exprGetter(rawData)
                }, function(value, oldValue) {
                    this._dirty = true;
                    render(value, oldValue)
                }.bind(this));
                this._watchers.push(watcher)
            },
            setDataField: function() {
                this._dirty = false;
                each(this._watchers, function(_, watcher) {
                    watcher.force()
                });
                if (this._dirty) {
                    return true
                }
            },
            _renderDisabled: function(value, oldValue) {
                this._$element.toggleClass(DISABLED_STATE_CLASS, !!value);
                this._updateOwnerFocus(value)
            },
            _updateOwnerFocus: function(isDisabled) {
                var ownerComponent = this._options.owner;
                if (ownerComponent && isDisabled) {
                    ownerComponent._resetItemFocus(this._$element)
                }
            },
            _renderVisible: function(value, oldValue) {
                this._$element.toggleClass(INVISIBLE_STATE_CLASS, void 0 !== value && !value)
            },
            _dispose: function() {
                each(this._watchers, function(_, watcher) {
                    watcher.dispose()
                })
            }
        });
        CollectionItem.getInstance = function($element) {
            return publicComponentUtils.getInstanceByElement($element, this)
        };
        module.exports = CollectionItem
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/core.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _globalize = __webpack_require__( /*! globalize */ 79);
        var _globalize2 = _interopRequireDefault(_globalize);
        var _core = __webpack_require__( /*! ../core */ 83);
        var _core2 = _interopRequireDefault(_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        if (_globalize2.default && _globalize2.default.load) {
            var likelySubtags = {
                supplemental: {
                    version: {
                        _cldrVersion: "28",
                        _unicodeVersion: "8.0.0",
                        _number: "$Revision: 11965 $"
                    },
                    likelySubtags: {
                        en: "en-Latn-US",
                        de: "de-Latn-DE",
                        ru: "ru-Cyrl-RU",
                        ja: "ja-Jpan-JP"
                    }
                }
            };
            if (!_globalize2.default.locale()) {
                _globalize2.default.load(likelySubtags);
                _globalize2.default.locale("en")
            }
            _core2.default.inject({
                locale: function(_locale) {
                    if (!_locale) {
                        return _globalize2.default.locale().locale
                    }
                    _globalize2.default.locale(_locale)
                }
            })
        }
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/events/double_click.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var domUtils = __webpack_require__( /*! ../core/utils/dom */ 11);
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var registerEvent = __webpack_require__( /*! ./core/event_registrator */ 77);
        var clickEvent = __webpack_require__( /*! ./click */ 19);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var DBLCLICK_EVENT_NAME = "dxdblclick";
        var DBLCLICK_NAMESPACE = "dxDblClick";
        var NAMESPACED_CLICK_EVENT = eventUtils.addNamespace(clickEvent.name, DBLCLICK_NAMESPACE);
        var DBLCLICK_TIMEOUT = 300;
        var DblClick = Class.inherit({
            ctor: function() {
                this._handlerCount = 0;
                this._forgetLastClick()
            },
            _forgetLastClick: function() {
                this._firstClickTarget = null;
                this._lastClickTimeStamp = -DBLCLICK_TIMEOUT
            },
            add: function() {
                if (this._handlerCount <= 0) {
                    eventsEngine.on(domAdapter.getDocument(), NAMESPACED_CLICK_EVENT, this._clickHandler.bind(this))
                }
                this._handlerCount++
            },
            _clickHandler: function(e) {
                var timeStamp = e.timeStamp || Date.now();
                if (timeStamp - this._lastClickTimeStamp < DBLCLICK_TIMEOUT) {
                    eventUtils.fireEvent({
                        type: DBLCLICK_EVENT_NAME,
                        target: domUtils.closestCommonParent(this._firstClickTarget, e.target),
                        originalEvent: e
                    });
                    this._forgetLastClick()
                } else {
                    this._firstClickTarget = e.target;
                    this._lastClickTimeStamp = timeStamp
                }
            },
            remove: function() {
                this._handlerCount--;
                if (this._handlerCount <= 0) {
                    this._forgetLastClick();
                    eventsEngine.off(domAdapter.getDocument(), NAMESPACED_CLICK_EVENT)
                }
            }
        });
        registerEvent(DBLCLICK_EVENT_NAME, new DblClick);
        exports.name = DBLCLICK_EVENT_NAME
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/error.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ./extend */ 0).extend;
        var consoleUtils = __webpack_require__( /*! ./console */ 65);
        var stringUtils = __webpack_require__( /*! ./string */ 43);
        var version = __webpack_require__( /*! ../version */ 164);
        var ERROR_URL = "http://js.devexpress.com/error/" + version.split(".").slice(0, 2).join("_") + "/";
        module.exports = function(baseErrors, errors) {
            var exports = {
                ERROR_MESSAGES: extend(errors, baseErrors),
                Error: function() {
                    return makeError([].slice.call(arguments))
                },
                log: function(id) {
                    var method = "log";
                    if (/^E\d+$/.test(id)) {
                        method = "error"
                    } else {
                        if (/^W\d+$/.test(id)) {
                            method = "warn"
                        }
                    }
                    consoleUtils.logger[method]("log" === method ? id : combineMessage([].slice.call(arguments)))
                }
            };

            function combineMessage(args) {
                var id = args[0];
                args = args.slice(1);
                return formatMessage(id, formatDetails(id, args))
            }

            function formatDetails(id, args) {
                args = [exports.ERROR_MESSAGES[id]].concat(args);
                return stringUtils.format.apply(this, args).replace(/\.*\s*?$/, "")
            }

            function formatMessage(id, details) {
                return stringUtils.format.apply(this, ["{0} - {1}. See:\n{2}", id, details, getErrorUrl(id)])
            }

            function makeError(args) {
                var id = args[0];
                args = args.slice(1);
                var details = formatDetails(id, args);
                var url = getErrorUrl(id);
                var message = formatMessage(id, details);
                return extend(new Error(message), {
                    __id: id,
                    __details: details,
                    url: url
                })
            }

            function getErrorUrl(id) {
                return ERROR_URL + id
            }
            return exports
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/public_component.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ../../core/element_data */ 41);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var WeakMap = __webpack_require__( /*! ../polyfills/weak_map */ 184);
        var isDefined = __webpack_require__( /*! ./type */ 1).isDefined;
        var removeEvent = __webpack_require__( /*! ../remove_event */ 140);
        var COMPONENT_NAMES_DATA_KEY = "dxComponents";
        var ANONYMOUS_COMPONENT_DATA_KEY = "dxPrivateComponent";
        var componentNames = new WeakMap;
        var nextAnonymousComponent = 0;
        var getName = exports.name = function(componentClass, newName) {
            if (isDefined(newName)) {
                componentNames.set(componentClass, newName);
                return
            }
            if (!componentNames.has(componentClass)) {
                var generatedName = ANONYMOUS_COMPONENT_DATA_KEY + nextAnonymousComponent++;
                componentNames.set(componentClass, generatedName);
                return generatedName
            }
            return componentNames.get(componentClass)
        };
        exports.attachInstanceToElement = function($element, componentInstance, disposeFn) {
            var data = dataUtils.data($element.get(0));
            var name = getName(componentInstance.constructor);
            data[name] = componentInstance;
            if (disposeFn) {
                eventsEngine.one($element, removeEvent, function() {
                    disposeFn.call(componentInstance)
                })
            }
            if (!data[COMPONENT_NAMES_DATA_KEY]) {
                data[COMPONENT_NAMES_DATA_KEY] = []
            }
            data[COMPONENT_NAMES_DATA_KEY].push(name)
        };
        exports.getInstanceByElement = function($element, componentClass) {
            var name = getName(componentClass);
            return dataUtils.data($element.get(0), name)
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/remove_event.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ./renderer */ 2);
        var beforeCleanData = __webpack_require__( /*! ./element_data */ 41).beforeCleanData;
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var registerEvent = __webpack_require__( /*! ../events/core/event_registrator */ 77);
        var eventName = "dxremove";
        var eventPropName = "dxRemoveEvent";
        beforeCleanData(function(elements) {
            elements = [].slice.call(elements);
            for (var i = 0; i < elements.length; i++) {
                var $element = $(elements[i]);
                if ($element.prop(eventPropName)) {
                    $element[0][eventPropName] = null;
                    eventsEngine.triggerHandler($element, eventName)
                }
            }
        });
        registerEvent(eventName, {
            noBubble: true,
            setup: function(element) {
                $(element).prop(eventPropName, true)
            }
        });
        module.exports = eventName
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/child_default_template.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.ChildDefaultTemplate = void 0;
        var _template_base = __webpack_require__( /*! ./template_base */ 78);

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        exports.ChildDefaultTemplate = function(_TemplateBase) {
            _inherits(ChildDefaultTemplate, _TemplateBase);
            var _super = _createSuper(ChildDefaultTemplate);

            function ChildDefaultTemplate(name) {
                var _this;
                _classCallCheck(this, ChildDefaultTemplate);
                _this = _super.call(this);
                _this.name = name;
                return _this
            }
            return ChildDefaultTemplate
        }(_template_base.TemplateBase)
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/array_utils.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _config = __webpack_require__( /*! ../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _errors = __webpack_require__( /*! ./errors */ 38);
        var _object = __webpack_require__( /*! ../core/utils/object */ 47);
        var _object2 = _interopRequireDefault(_object);
        var _utils = __webpack_require__( /*! ./utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function hasKey(target, keyOrKeys) {
            var key;
            var keys = "string" === typeof keyOrKeys ? keyOrKeys.split() : keyOrKeys.slice();
            while (keys.length) {
                key = keys.shift();
                if (key in target) {
                    return true
                }
            }
            return false
        }

        function findItems(keyInfo, items, key, groupCount) {
            var childItems;
            var result;
            if (groupCount) {
                for (var i = 0; i < items.length; i++) {
                    childItems = items[i].items || items[i].collapsedItems || [];
                    result = findItems(keyInfo, childItems || [], key, groupCount - 1);
                    if (result) {
                        return result
                    }
                }
            } else {
                if (indexByKey(keyInfo, items, key) >= 0) {
                    return items
                }
            }
        }

        function getItems(keyInfo, items, key, groupCount) {
            if (groupCount) {
                return findItems(keyInfo, items, key, groupCount) || []
            }
            return items
        }

        function generateDataByKeyMap(keyInfo, array) {
            if (keyInfo.key() && (!array._dataByKeyMap || array._dataByKeyMapLength !== array.length)) {
                var dataByKeyMap = {};
                var arrayLength = array.length;
                for (var i = 0; i < arrayLength; i++) {
                    dataByKeyMap[JSON.stringify(keyInfo.keyOf(array[i]))] = array[i]
                }
                array._dataByKeyMap = dataByKeyMap;
                array._dataByKeyMapLength = arrayLength
            }
        }

        function getCacheValue(array, key) {
            if (array._dataByKeyMap) {
                return array._dataByKeyMap[JSON.stringify(key)]
            }
        }

        function getHasKeyCacheValue(array, key) {
            if (array._dataByKeyMap) {
                return array._dataByKeyMap[JSON.stringify(key)]
            }
            return true
        }

        function setDataByKeyMapValue(array, key, data) {
            if (array._dataByKeyMap) {
                array._dataByKeyMap[JSON.stringify(key)] = data
            }
        }

        function applyBatch(keyInfo, array, batchData, groupCount, useInsertIndex) {
            batchData.forEach(function(item) {
                var items = "insert" === item.type ? array : getItems(keyInfo, array, item.key, groupCount);
                generateDataByKeyMap(keyInfo, items);
                switch (item.type) {
                    case "update":
                        update(keyInfo, items, item.key, item.data, true);
                        break;
                    case "insert":
                        insert(keyInfo, items, item.data, useInsertIndex && (0, _type.isDefined)(item.index) ? item.index : -1, true);
                        break;
                    case "remove":
                        remove(keyInfo, items, item.key, true)
                }
            })
        }

        function update(keyInfo, array, key, data, isBatch) {
            var target;
            var extendComplexObject = true;
            var keyExpr = keyInfo.key();
            if (keyExpr) {
                if (hasKey(data, keyExpr) && !(0, _utils.keysEqual)(keyExpr, key, keyInfo.keyOf(data))) {
                    return !isBatch && (0, _utils.rejectedPromise)(_errors.errors.Error("E4017"))
                }
                target = getCacheValue(array, key);
                if (!target) {
                    var index = indexByKey(keyInfo, array, key);
                    if (index < 0) {
                        return !isBatch && (0, _utils.rejectedPromise)(_errors.errors.Error("E4009"))
                    }
                    target = array[index]
                }
            } else {
                target = key
            }
            _object2.default.deepExtendArraySafe(target, data, extendComplexObject);
            if (!isBatch) {
                if ((0, _config2.default)().useLegacyStoreResult) {
                    return (0, _utils.trivialPromise)(key, data)
                } else {
                    return (0, _utils.trivialPromise)(target, key)
                }
            }
        }

        function insert(keyInfo, array, data, index, isBatch) {
            var keyValue;
            var keyExpr = keyInfo.key();
            var obj = (0, _type.isPlainObject)(data) ? (0, _extend.extend)({}, data) : data;
            if (keyExpr) {
                keyValue = keyInfo.keyOf(obj);
                if (void 0 === keyValue || "object" === _typeof(keyValue) && (0, _type.isEmptyObject)(keyValue)) {
                    if (Array.isArray(keyExpr)) {
                        throw _errors.errors.Error("E4007")
                    }
                    keyValue = obj[keyExpr] = String(new _guid2.default)
                } else {
                    if (void 0 !== array[indexByKey(keyInfo, array, keyValue)]) {
                        return !isBatch && (0, _utils.rejectedPromise)(_errors.errors.Error("E4008"))
                    }
                }
            } else {
                keyValue = obj
            }
            if (index >= 0) {
                array.splice(index, 0, obj)
            } else {
                array.push(obj)
            }
            setDataByKeyMapValue(array, keyValue, obj);
            if (!isBatch) {
                return (0, _utils.trivialPromise)((0, _config2.default)().useLegacyStoreResult ? data : obj, keyValue)
            }
        }

        function remove(keyInfo, array, key, isBatch) {
            var index = indexByKey(keyInfo, array, key);
            if (index > -1) {
                array.splice(index, 1)
            }
            if (!isBatch) {
                return (0, _utils.trivialPromise)(key)
            }
        }

        function indexByKey(keyInfo, array, key) {
            var keyExpr = keyInfo.key();
            if (!getHasKeyCacheValue(array, key)) {
                return -1
            }
            for (var i = 0, arrayLength = array.length; i < arrayLength; i++) {
                if ((0, _utils.keysEqual)(keyExpr, keyInfo.keyOf(array[i]), key)) {
                    return i
                }
            }
            return -1
        }
        module.exports.applyBatch = applyBatch;
        module.exports.update = update;
        module.exports.insert = insert;
        module.exports.remove = remove;
        module.exports.indexByKey = indexByKey
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var swipeEvents = __webpack_require__( /*! ../../events/swipe */ 183);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator";
        var SWIPE_START_EVENT_NAME = eventUtils.addNamespace(swipeEvents.start, LIST_EDIT_DECORATOR);
        var SWIPE_UPDATE_EVENT_NAME = eventUtils.addNamespace(swipeEvents.swipe, LIST_EDIT_DECORATOR);
        var SWIPE_END_EVENT_NAME = eventUtils.addNamespace(swipeEvents.end, LIST_EDIT_DECORATOR);
        var EditDecorator = Class.inherit({
            ctor: function(list) {
                this._list = list;
                this._init()
            },
            _init: noop,
            _shouldHandleSwipe: false,
            _attachSwipeEvent: function(config) {
                var swipeConfig = {
                    itemSizeFunc: function() {
                        if (this._clearSwipeCache) {
                            this._itemWidthCache = this._list.$element().width();
                            this._clearSwipeCache = false
                        }
                        return this._itemWidthCache
                    }.bind(this)
                };
                eventsEngine.on(config.$itemElement, SWIPE_START_EVENT_NAME, swipeConfig, this._itemSwipeStartHandler.bind(this));
                eventsEngine.on(config.$itemElement, SWIPE_UPDATE_EVENT_NAME, this._itemSwipeUpdateHandler.bind(this));
                eventsEngine.on(config.$itemElement, SWIPE_END_EVENT_NAME, this._itemSwipeEndHandler.bind(this))
            },
            _itemSwipeStartHandler: function(e) {
                var $itemElement = $(e.currentTarget);
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    e.cancel = true;
                    return
                }
                clearTimeout(this._list._inkRippleTimer);
                this._swipeStartHandler($itemElement, e)
            },
            _itemSwipeUpdateHandler: function(e) {
                var $itemElement = $(e.currentTarget);
                this._swipeUpdateHandler($itemElement, e)
            },
            _itemSwipeEndHandler: function(e) {
                var $itemElement = $(e.currentTarget);
                this._swipeEndHandler($itemElement, e);
                this._clearSwipeCache = true
            },
            beforeBag: noop,
            afterBag: noop,
            _commonOptions: function() {
                return {
                    activeStateEnabled: this._list.option("activeStateEnabled"),
                    hoverStateEnabled: this._list.option("hoverStateEnabled"),
                    focusStateEnabled: this._list.option("focusStateEnabled")
                }
            },
            modifyElement: function(config) {
                if (this._shouldHandleSwipe) {
                    this._attachSwipeEvent(config);
                    this._clearSwipeCache = true
                }
            },
            afterRender: noop,
            handleClick: noop,
            handleKeyboardEvents: noop,
            handleEnterPressing: noop,
            handleContextMenu: noop,
            _swipeStartHandler: noop,
            _swipeUpdateHandler: noop,
            _swipeEndHandler: noop,
            visibilityChange: noop,
            getExcludedSelectors: noop,
            dispose: noop
        });
        module.exports = EditDecorator
    },
    /*!*****************************************!*\
      !*** ./artifacts/transpiled/ui/form.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./form/ui.form */ 579)
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var themes = __webpack_require__( /*! ./themes */ 32);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var grep = __webpack_require__( /*! ../core/utils/common */ 3).grep;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var arrayUtils = __webpack_require__( /*! ../core/utils/array */ 14);
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var ActionSheetStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.action_sheet */ 596);
        var DropDownMenuStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.drop_down_menu */ 597);
        var ToolbarBase = __webpack_require__( /*! ./toolbar/ui.toolbar.base */ 306);
        var ChildDefaultTemplate = __webpack_require__( /*! ../core/templates/child_default_template */ 141).ChildDefaultTemplate;
        var STRATEGIES = {
            actionSheet: ActionSheetStrategy,
            dropDownMenu: DropDownMenuStrategy
        };
        var TOOLBAR_AUTO_HIDE_ITEM_CLASS = "dx-toolbar-item-auto-hide";
        var TOOLBAR_AUTO_HIDE_TEXT_CLASS = "dx-toolbar-text-auto-hide";
        var TOOLBAR_HIDDEN_ITEM = "dx-toolbar-item-invisible";
        var Toolbar = ToolbarBase.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    menuItemTemplate: "menuItem",
                    submenuType: "dropDownMenu",
                    menuContainer: void 0
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return themes.isIos7(themeName)
                    },
                    options: {
                        submenuType: "actionSheet"
                    }
                }])
            },
            _dimensionChanged: function(dimension) {
                if ("height" === dimension) {
                    return
                }
                this._menuStrategy.toggleMenuVisibility(false, true);
                this.callBase();
                this._menuStrategy.renderMenuItems()
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    actionSheetItem: new ChildDefaultTemplate("item")
                })
            },
            _initMarkup: function() {
                this.callBase();
                this._renderMenu()
            },
            _postProcessRenderItems: function() {
                this._hideOverflowItems();
                this._menuStrategy._updateMenuVisibility();
                this.callBase();
                this._menuStrategy.renderMenuItems()
            },
            _renderItem: function(index, item, itemContainer, $after) {
                var itemElement = this.callBase(index, item, itemContainer, $after);
                if ("auto" === item.locateInMenu) {
                    itemElement.addClass(TOOLBAR_AUTO_HIDE_ITEM_CLASS)
                }
                if ("dxButton" === item.widget && "inMenu" === item.showText) {
                    itemElement.toggleClass(TOOLBAR_AUTO_HIDE_TEXT_CLASS)
                }
                return itemElement
            },
            _getItemsWidth: function() {
                return this._getSummaryItemsWidth([this._$beforeSection, this._$centerSection, this._$afterSection])
            },
            _hideOverflowItems: function(elementWidth) {
                var overflowItems = this.$element().find("." + TOOLBAR_AUTO_HIDE_ITEM_CLASS);
                if (!overflowItems.length) {
                    return
                }
                elementWidth = elementWidth || this.$element().width();
                $(overflowItems).removeClass(TOOLBAR_HIDDEN_ITEM);
                var itemsWidth = this._getItemsWidth();
                while (overflowItems.length && elementWidth < itemsWidth) {
                    var $item = overflowItems.eq(-1);
                    itemsWidth -= $item.outerWidth();
                    $item.addClass(TOOLBAR_HIDDEN_ITEM);
                    overflowItems.splice(-1, 1)
                }
            },
            _getMenuItems: function() {
                var that = this;
                var menuItems = grep(this.option("items") || [], function(item) {
                    return that._isMenuItem(item)
                });
                var $hiddenItems = this._itemContainer().children("." + TOOLBAR_AUTO_HIDE_ITEM_CLASS + "." + TOOLBAR_HIDDEN_ITEM).not(".dx-state-invisible");
                this._restoreItems = this._restoreItems || [];
                var overflowItems = [].slice.call($hiddenItems).map(function(item) {
                    var itemData = that._getItemData(item);
                    var $itemContainer = $(item).children();
                    var $itemMarkup = $itemContainer.children();
                    return extend({
                        menuItemTemplate: function() {
                            that._restoreItems.push({
                                container: $itemContainer,
                                item: $itemMarkup
                            });
                            var $container = $("<div>").addClass(TOOLBAR_AUTO_HIDE_ITEM_CLASS);
                            return $container.append($itemMarkup)
                        }
                    }, itemData)
                });
                return arrayUtils.merge(overflowItems, menuItems)
            },
            _getToolbarItems: function() {
                var that = this;
                return grep(this.option("items") || [], function(item) {
                    return !that._isMenuItem(item)
                })
            },
            _renderMenu: function() {
                this._renderMenuStrategy();
                this._menuStrategy.render()
            },
            _renderMenuStrategy: function() {
                var strategyName = this.option("submenuType");
                if (this._requireDropDownStrategy()) {
                    strategyName = "dropDownMenu"
                }
                var strategy = STRATEGIES[strategyName];
                if (!(this._menuStrategy && this._menuStrategy.NAME === strategyName)) {
                    this._menuStrategy = new strategy(this)
                }
            },
            _requireDropDownStrategy: function() {
                var items = this.option("items") || [];
                var result = false;
                iteratorUtils.each(items, function(index, item) {
                    if ("auto" === item.locateInMenu) {
                        result = true
                    } else {
                        if ("always" === item.locateInMenu && item.widget) {
                            result = true
                        }
                    }
                });
                return result
            },
            _arrangeItems: function() {
                if (this.$element().is(":hidden")) {
                    return
                }
                this._$centerSection.css({
                    margin: "0 auto",
                    "float": "none"
                });
                iteratorUtils.each(this._restoreItems || [], function(_, obj) {
                    $(obj.container).append(obj.item)
                });
                this._restoreItems = [];
                var elementWidth = this.$element().width();
                this._hideOverflowItems(elementWidth);
                this.callBase(elementWidth)
            },
            _itemOptionChanged: function(item, property, value) {
                if (this._isMenuItem(item)) {
                    this._menuStrategy.renderMenuItems()
                } else {
                    if (this._isToolbarItem(item)) {
                        this.callBase(item, property, value)
                    } else {
                        this.callBase(item, property, value);
                        this._menuStrategy.renderMenuItems()
                    }
                }
                if ("location" === property) {
                    this.repaint()
                }
            },
            _isMenuItem: function(itemData) {
                return "menu" === itemData.location || "always" === itemData.locateInMenu
            },
            _isToolbarItem: function(itemData) {
                return void 0 === itemData.location || "never" === itemData.locateInMenu
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "submenuType":
                        this._invalidate();
                        break;
                    case "visible":
                        this.callBase.apply(this, arguments);
                        this._menuStrategy.handleToolbarVisibilityChange(value);
                        break;
                    case "menuItemTemplate":
                        this._changeMenuOption("itemTemplate", this._getTemplate(value));
                        break;
                    case "onItemClick":
                        this._changeMenuOption(name, value);
                        this.callBase.apply(this, arguments);
                        break;
                    case "menuContainer":
                        this._changeMenuOption("container", value);
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            _changeMenuOption: function(name, value) {
                this._menuStrategy.widgetOption(name, value)
            }
        });
        registerComponent("dxToolbar", Toolbar);
        module.exports = Toolbar
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tree_view.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./tree_view/ui.tree_view.search */ 363)
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/utils.recurrence.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../../core/errors */ 22);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var dateUtils = __webpack_require__( /*! ../../core/utils/date */ 24);
        var toMs = dateUtils.dateToMilliseconds;
        var leastDaysInWeek = 4;
        var ruleNames = ["freq", "interval", "byday", "byweekno", "byyearday", "bymonth", "bymonthday", "count", "until", "byhour", "byminute", "bysecond", "bysetpos", "wkst"];
        var freqNames = ["DAILY", "WEEKLY", "MONTHLY", "YEARLY", "SECONDLY", "MINUTELY", "HOURLY"];
        var days = {
            SU: 0,
            MO: 1,
            TU: 2,
            WE: 3,
            TH: 4,
            FR: 5,
            SA: 6
        };
        var daysNames = {
            0: "SU",
            1: "MO",
            2: "TU",
            3: "WE",
            4: "TH",
            5: "FR",
            6: "SA"
        };
        var intervalMap = {
            secondly: "seconds",
            minutely: "minutes",
            hourly: "hours",
            daily: "days",
            weekly: "weeks",
            monthly: "months",
            yearly: "years"
        };
        var resultUtils = {};
        var dateSetterMap = {
            bysecond: function(date, value) {
                date.setSeconds(value)
            },
            byminute: function(date, value) {
                date.setMinutes(value)
            },
            byhour: function(date, value) {
                date.setHours(value)
            },
            bymonth: function(date, value) {
                date.setMonth(value)
            },
            bymonthday: function(date, value) {
                if (value < 0) {
                    var initialDate = new Date(date);
                    setDateByNegativeValue(initialDate, 1, -1);
                    var daysInMonth = initialDate.getDate();
                    if (daysInMonth >= Math.abs(value)) {
                        setDateByNegativeValue(date, 1, value)
                    } else {
                        setDateByNegativeValue(date, 2, value)
                    }
                } else {
                    if (value <= dateUtils.getLastMonthDay(date)) {
                        date.setDate(value)
                    } else {
                        markWrongDate(date)
                    }
                }
            },
            byday: function(date, byDay, appointmentWeekStart, frequency, firstDayOfWeek) {
                var appointmentDayOfWeek = date.getDay();
                var weekStart = days[appointmentWeekStart];
                byDay += byDay >= weekStart === weekStart > appointmentDayOfWeek ? 7 : 0;
                date.setDate(date.getDate() - appointmentDayOfWeek + byDay)
            },
            byweekno: function(date, weekNumber, weekStart) {
                var initialDate = new Date(date);
                var firstYearDate = new Date(initialDate.setMonth(0, 1));
                var dayShift = firstYearDate.getDay() - days[weekStart];
                var firstDayOfYear = firstYearDate.getTime() - dayShift * toMs("day");
                var newFirstYearDate = dayShift + 1;
                if (newFirstYearDate > leastDaysInWeek) {
                    date.setTime(firstDayOfYear + 7 * weekNumber * toMs("day"))
                } else {
                    date.setTime(firstDayOfYear + 7 * (weekNumber - 1) * toMs("day"))
                }
                var timezoneDiff = (date.getTimezoneOffset() - firstYearDate.getTimezoneOffset()) * toMs("minute");
                timezoneDiff && date.setTime(date.getTime() + timezoneDiff)
            },
            byyearday: function(date, dayOfYear) {
                date.setMonth(0, 1);
                date.setDate(dayOfYear)
            }
        };

        function setDateByNegativeValue(date, month, value) {
            var initialDate = new Date(date);
            date.setMonth(date.getMonth() + month);
            if (date.getMonth() - initialDate.getMonth() > month) {
                date.setDate(value + 1)
            }
            date.setDate(value + 1)
        }
        var dateGetterMap = {
            bysecond: function(date) {
                return date.getSeconds()
            },
            byminute: function(date) {
                return date.getMinutes()
            },
            byhour: function(date) {
                return date.getHours()
            },
            bymonth: function(date) {
                return date.getMonth()
            },
            bymonthday: function(date) {
                return date.getDate()
            },
            byday: function(date) {
                return date.getDay()
            },
            byweekno: function(date, weekStart) {
                var current = new Date(date);
                var diff = leastDaysInWeek - current.getDay() + days[weekStart] - 1;
                var dayInMilliseconds = toMs("day");
                if (date.getDay() < days[weekStart]) {
                    diff -= 7
                }
                current.setHours(0, 0, 0);
                current.setDate(current.getDate() + diff);
                var yearStart = new Date(current.getFullYear(), 0, 1);
                var timezoneDiff = (yearStart.getTimezoneOffset() - current.getTimezoneOffset()) * toMs("minute");
                var daysFromYearStart = 1 + (current - yearStart + timezoneDiff) / dayInMilliseconds;
                return Math.ceil(daysFromYearStart / 7)
            },
            byyearday: function(date) {
                var yearStart = new Date(date.getFullYear(), 0, 0);
                var timezoneDiff = date.getTimezoneOffset() - yearStart.getTimezoneOffset();
                var diff = date - yearStart - timezoneDiff * toMs("minute");
                var dayLength = toMs("day");
                return Math.floor(diff / dayLength)
            }
        };

        function getTimeZoneOffset() {
            return (new Date).getTimezoneOffset()
        }
        var dateInRecurrenceRange = function(options) {
            var result = [];
            if (options.rule) {
                result = getDatesByRecurrence(options)
            }
            return !!result.length
        };
        var normalizeInterval = function(rule) {
            var interval = rule.interval;
            var freq = rule.freq;
            var intervalObject = {};
            var intervalField = intervalMap[freq.toLowerCase()];
            if ("MONTHLY" === freq && rule.byday) {
                intervalField = intervalMap.daily
            }
            intervalObject[intervalField] = interval;
            return intervalObject
        };
        var getDatesByRecurrenceException = function(ruleValues, date) {
            var result = [];
            for (var i = 0, len = ruleValues.length; i < len; i++) {
                result[i] = getDateByAsciiString(ruleValues[i], date)
            }
            return result
        };
        var dateIsRecurrenceException = function(date, recurrenceException) {
            var result = false;
            if (!recurrenceException) {
                return result
            }
            var splitDates = recurrenceException.split(",");
            var exceptDates = getDatesByRecurrenceException(splitDates, date);
            var shortFormat = /\d{8}$/;
            for (var i = 0, len = exceptDates.length; i < len; i++) {
                if (splitDates[i].match(shortFormat)) {
                    var diffs = getDatePartDiffs(date, exceptDates[i]);
                    if (0 === diffs.years && 0 === diffs.months && 0 === diffs.days) {
                        result = true
                    }
                } else {
                    if (date.getTime() === exceptDates[i].getTime()) {
                        result = true
                    }
                }
            }
            return result
        };
        var doNextIteration = function(date, startIntervalDate, endIntervalDate, recurrenceRule, iterationCount) {
            var matchCountIsCorrect = true;
            endIntervalDate = endIntervalDate.getTime();
            if (recurrenceRule.until) {
                if (recurrenceRule.until.getTime() < endIntervalDate) {
                    endIntervalDate = recurrenceRule.until.getTime()
                }
            }
            if (recurrenceRule.count) {
                if (iterationCount === recurrenceRule.count) {
                    matchCountIsCorrect = false
                }
            }
            var dateInInterval = date.getTime() <= endIntervalDate;
            return dateInInterval && matchCountIsCorrect
        };

        function getDatesByRecurrence(options) {
            var result = [];
            var recurrenceRule = getRecurrenceRule(options.rule);
            var iterationResult = {};
            var rule = recurrenceRule.rule;
            var recurrenceStartDate = options.start;
            var maxDate = correctMaxDate(options.max, rule);
            if (!recurrenceRule.isValid || !rule.freq) {
                return result
            }
            rule.interval = normalizeInterval(rule);
            var dateRules = splitDateRules(rule, options.firstDayOfWeek);
            var duration = options.end ? options.end.getTime() - options.start.getTime() : toMs("day");
            var config = {
                exception: options.exception,
                min: options.min,
                dateRules: dateRules,
                rule: rule,
                recurrenceStartDate: recurrenceStartDate,
                recurrenceEndDate: options.end,
                duration: duration
            };
            if (dateRules.length && rule.count) {
                var iteration = 0;
                getDatesByCount(dateRules, new Date(recurrenceStartDate), new Date(recurrenceStartDate), rule).forEach(function(currentDate, i) {
                    if (currentDate < maxDate) {
                        iteration++;
                        iterationResult = pushToResult(iteration, iterationResult, currentDate, i, config, true)
                    }
                })
            } else {
                getDatesByRules(dateRules, new Date(recurrenceStartDate), rule).forEach(function(currentDate, i) {
                    var iteration = 0;
                    while (doNextIteration(currentDate, recurrenceStartDate, maxDate, rule, iteration)) {
                        iteration++;
                        iterationResult = pushToResult(iteration, iterationResult, currentDate, i, config);
                        currentDate = incrementDate(currentDate, recurrenceStartDate, rule, i)
                    }
                })
            }
            if (rule.bysetpos) {
                each(iterationResult, function(iterationIndex, iterationDates) {
                    iterationResult[iterationIndex] = filterDatesBySetPos(iterationDates, rule.bysetpos)
                })
            }
            each(iterationResult, function(_, iterationDates) {
                result = result.concat(iterationDates)
            });
            result = result.filter(function(date) {
                return date <= options.max
            });
            result.sort(function(a, b) {
                return a - b
            });
            return result
        }

        function pushToResult(iteration, iterationResult, currentDate, i, config, verifiedField) {
            if (!iterationResult[iteration]) {
                iterationResult[iteration] = []
            }
            if (checkDate(currentDate, i, config, verifiedField)) {
                iterationResult[iteration].push(currentDate)
            }
            return iterationResult
        }

        function checkDate(currentDate, i, config, verifiedField) {
            if (!dateIsRecurrenceException(currentDate, config.exception)) {
                var duration = dateUtils.sameDate(currentDate, config.recurrenceEndDate) && config.recurrenceEndDate.getTime() > currentDate.getTime() ? config.recurrenceEndDate.getTime() - currentDate.getTime() : config.duration;
                if (currentDate.getTime() >= config.recurrenceStartDate.getTime() && currentDate.getTime() + duration > config.min.getTime()) {
                    return verifiedField || checkDateByRule(currentDate, [config.dateRules[i]], config.rule.wkst)
                }
            }
            return false
        }

        function filterDatesBySetPos(dates, bySetPos) {
            var resultArray = [];
            bySetPos.split(",").forEach(function(index) {
                index = Number(index);
                var dateIndex = index > 0 ? index - 1 : dates.length + index;
                if (dates[dateIndex]) {
                    resultArray.push(dates[dateIndex])
                }
            });
            return resultArray
        }

        function correctMaxDate(maxDate, rule) {
            var newMaxDate = new Date(maxDate);
            switch (rule.freq) {
                case "MONTHLY":
                    newMaxDate.setMonth(newMaxDate.getMonth() + 1);
                    break;
                case "YEARLY":
                    newMaxDate.setYear(newMaxDate.getYear() + 1)
            }
            return newMaxDate > maxDate ? newMaxDate : maxDate
        }

        function correctDate(originalDate, date) {
            if (originalDate.getDate() !== date) {
                originalDate.setDate(date)
            }
        }

        function incrementDate(date, originalStartDate, rule, iterationStep) {
            var initialDate = new Date(date);
            var needCorrect = true;
            date = dateUtils.addInterval(date, rule.interval);
            if ("DAILY" === rule.freq && !isDefined(rule.byhour) && originalStartDate.getHours() !== date.getHours()) {
                date = new Date(date.getTime() - (initialDate.getHours() - originalStartDate.getHours()) * toMs("hour"))
            }
            if ("MONTHLY" === rule.freq && !rule.byday) {
                var expectedDate = originalStartDate.getDate();
                if (rule.bymonthday) {
                    expectedDate = Number(rule.bymonthday.split(",")[iterationStep]);
                    if (expectedDate < 0) {
                        initialDate.setMonth(initialDate.getMonth() + 1, 1);
                        dateSetterMap.bymonthday(initialDate, expectedDate);
                        date = initialDate;
                        needCorrect = false
                    }
                }
                needCorrect && correctDate(date, expectedDate)
            }
            if ("YEARLY" === rule.freq) {
                if (rule.byyearday) {
                    var dayNumber = Number(rule.byyearday.split(",")[iterationStep]);
                    dateSetterMap.byyearday(date, dayNumber)
                }
                var dateRules = splitDateRules(rule);
                for (var field in dateRules[iterationStep]) {
                    dateSetterMap[field] && dateSetterMap[field](date, dateRules[iterationStep][field], rule.wkst)
                }
            }
            return date
        }

        function getDatePartDiffs(date1, date2) {
            return {
                years: date1.getFullYear() - date2.getFullYear(),
                months: date1.getMonth() - date2.getMonth(),
                days: date1.getDate() - date2.getDate(),
                hours: date1.getHours() - date2.getHours(),
                minutes: date1.getMinutes() - date2.getMinutes(),
                seconds: date1.getSeconds() - date2.getSeconds()
            }
        }

        function getRecurrenceRule(recurrence) {
            var result = {
                rule: {},
                isValid: false
            };
            if (recurrence) {
                result.rule = parseRecurrenceRule(recurrence);
                result.isValid = validateRRule(result.rule, recurrence)
            }
            return result
        }
        var loggedWarnings = [];

        function validateRRule(rule, recurrence) {
            if (brokenRuleNameExists(rule) || inArray(rule.freq, freqNames) === -1 || wrongCountRule(rule) || wrongIntervalRule(rule) || wrongDayOfWeek(rule) || wrongByMonthDayRule(rule) || wrongByMonth(rule) || wrongUntilRule(rule)) {
                logBrokenRule(recurrence);
                return false
            }
            return true
        }

        function wrongUntilRule(rule) {
            var wrongUntil = false;
            var until = rule.until;
            if (void 0 !== until && !(until instanceof Date)) {
                wrongUntil = true
            }
            return wrongUntil
        }

        function wrongCountRule(rule) {
            var wrongCount = false;
            var count = rule.count;
            if (count && "string" === typeof count) {
                wrongCount = true
            }
            return wrongCount
        }

        function wrongByMonthDayRule(rule) {
            var wrongByMonthDay = false;
            var byMonthDay = rule.bymonthday;
            if (byMonthDay && isNaN(parseInt(byMonthDay))) {
                wrongByMonthDay = true
            }
            return wrongByMonthDay
        }

        function wrongByMonth(rule) {
            var wrongByMonth = false;
            var byMonth = rule.bymonth;
            if (byMonth && isNaN(parseInt(byMonth))) {
                wrongByMonth = true
            }
            return wrongByMonth
        }

        function wrongIntervalRule(rule) {
            var wrongInterval = false;
            var interval = rule.interval;
            if (interval && "string" === typeof interval) {
                wrongInterval = true
            }
            return wrongInterval
        }

        function wrongDayOfWeek(rule) {
            var daysByRule = daysFromByDayRule(rule);
            var brokenDaysExist = false;
            each(daysByRule, function(_, day) {
                if (!Object.prototype.hasOwnProperty.call(days, day)) {
                    brokenDaysExist = true;
                    return false
                }
            });
            return brokenDaysExist
        }

        function brokenRuleNameExists(rule) {
            var brokenRuleExists = false;
            each(rule, function(ruleName) {
                if (inArray(ruleName, ruleNames) === -1) {
                    brokenRuleExists = true;
                    return false
                }
            });
            return brokenRuleExists
        }

        function logBrokenRule(recurrence) {
            if (inArray(recurrence, loggedWarnings) === -1) {
                errors.log("W0006", recurrence);
                loggedWarnings.push(recurrence)
            }
        }

        function parseRecurrenceRule(recurrence) {
            var ruleObject = {};
            var ruleParts = recurrence.split(";");
            for (var i = 0, len = ruleParts.length; i < len; i++) {
                var rule = ruleParts[i].split("=");
                var ruleName = rule[0].toLowerCase();
                var ruleValue = rule[1];
                ruleObject[ruleName] = ruleValue
            }
            var count = parseInt(ruleObject.count);
            if (!isNaN(count)) {
                ruleObject.count = count
            }
            if (ruleObject.interval) {
                var interval = parseInt(ruleObject.interval);
                if (!isNaN(interval)) {
                    ruleObject.interval = interval
                }
            } else {
                ruleObject.interval = 1
            }
            if (ruleObject.freq && ruleObject.until) {
                ruleObject.until = getDateByAsciiString(ruleObject.until)
            }
            return ruleObject
        }

        function getDateByAsciiString(string, initialDate) {
            if ("string" !== typeof string) {
                return string
            }
            var arrayDate = string.match(/(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2}))?(Z)?/);
            if (!arrayDate) {
                return null
            }
            var isUTC = void 0 !== arrayDate[8];
            var currentOffset = initialDate ? initialDate.getTimezoneOffset() : resultUtils.getTimeZoneOffset();
            var date = new(Function.prototype.bind.apply(Date, prepareDateArrayToParse(arrayDate)));
            currentOffset = 6e4 * currentOffset;
            if (isUTC) {
                date = new Date(date.getTime() - currentOffset)
            }
            return date
        }

        function prepareDateArrayToParse(arrayDate) {
            arrayDate.shift();
            if (void 0 === arrayDate[3]) {
                arrayDate.splice(3)
            } else {
                arrayDate.splice(3, 1);
                arrayDate.splice(6)
            }
            arrayDate[1]--;
            arrayDate.unshift(null);
            return arrayDate
        }

        function daysFromByDayRule(rule) {
            var result = [];
            if (rule.byday) {
                if (Array.isArray(rule.byday)) {
                    result = rule.byday
                } else {
                    result = rule.byday.split(",")
                }
            }
            return result
        }

        function getAsciiStringByDate(date) {
            var currentOffset = 6e4 * resultUtils.getTimeZoneOffset();
            date = new Date(date.getTime() + currentOffset);
            return date.getFullYear() + ("0" + (date.getMonth() + 1)).slice(-2) + ("0" + date.getDate()).slice(-2) + "T" + ("0" + date.getHours()).slice(-2) + ("0" + date.getMinutes()).slice(-2) + ("0" + date.getSeconds()).slice(-2) + "Z"
        }

        function splitDateRules(rule) {
            var firstDayOfWeek = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
            var result = [];
            if (isDefined(firstDayOfWeek)) {
                rule.fdow = firstDayOfWeek
            }
            if (!rule.wkst) {
                rule.wkst = isDefined(firstDayOfWeek) ? daysNames[firstDayOfWeek] : "MO"
            }
            if (rule.byweekno && !rule.byday) {
                var dayNames = Object.keys(days);
                for (var i = 0; i < days[rule.wkst]; i++) {
                    dayNames.push(dayNames.shift())
                }
                rule.byday = dayNames.join(",")
            }
            for (var field in dateSetterMap) {
                if (!rule[field]) {
                    continue
                }
                var ruleFieldValues = rule[field].split(",");
                var ruleArray = getDateRuleArray(field, ruleFieldValues);
                result = result.length ? extendObjectArray(ruleArray, result) : ruleArray
            }
            return result
        }

        function getDateRuleArray(field, values) {
            var result = [];
            for (var i = 0, length = values.length; i < length; i++) {
                var dateRule = {};
                dateRule[field] = handleRuleFieldValue(field, values[i]);
                result.push(dateRule)
            }
            return result
        }

        function handleRuleFieldValue(field, value) {
            var result = parseInt(value);
            if ("bymonth" === field) {
                result -= 1
            }
            if ("byday" === field) {
                result = days[value]
            }
            return result
        }

        function extendObjectArray(firstArray, secondArray) {
            var result = [];
            for (var i = 0, firstArrayLength = firstArray.length; i < firstArrayLength; i++) {
                for (var j = 0, secondArrayLength = secondArray.length; j < secondArrayLength; j++) {
                    result.push(extend({}, firstArray[i], secondArray[j]))
                }
            }
            return result
        }

        function getDatesByRules(dateRules, startDate, rule) {
            var result = [];
            for (var i = 0, len = dateRules.length; i < len; i++) {
                var current = dateRules[i];
                var updatedDate = prepareDate(startDate, dateRules, rule.wkst);
                for (var field in current) {
                    dateSetterMap[field] && dateSetterMap[field](updatedDate, current[field], rule.wkst, rule.freq, rule.fdow)
                }
                if (Array.isArray(updatedDate)) {
                    result = result.concat(updatedDate)
                } else {
                    var date = !isWrongDate(updatedDate) ? new Date(updatedDate) : updatedDate;
                    result.push(date)
                }
            }
            if (!result.length) {
                result.push(startDate)
            }
            return result
        }

        function getDatesByCount(dateRules, startDate, recurrenceStartDate, rule) {
            var result = [];
            var count = rule.count;
            var counter = 0;
            var date = prepareDate(startDate, dateRules, rule.wkst);
            var _loop = function() {
                var dates = getDatesByRules(dateRules, date, rule);
                var checkedDates = [];
                dates.forEach(function(checkedDate) {
                    if (!isWrongDate(checkedDate)) {
                        if (checkedDate.getTime() >= recurrenceStartDate.getTime()) {
                            checkedDates.push(checkedDate)
                        }
                    }
                });
                var length = checkedDates.length;
                counter += length;
                var delCount = counter - count;
                if (counter > count) {
                    checkedDates.splice(length - delCount, delCount)
                }
                checkedDates.forEach(function(checkedDate) {
                    return result.push(checkedDate)
                });
                var interval = rule.interval;
                if ("days" === Object.keys(interval)[0]) {
                    interval = {
                        weeks: 1
                    }
                }
                date = dateUtils.addInterval(date, interval)
            };
            while (counter < count) {
                _loop()
            }
            return result
        }

        function prepareDate(startDate, dateRules, weekStartRule) {
            var date = new Date(startDate);
            var day = date.getDay();
            if (dateRules.length && isDefined(dateRules[0].byday)) {
                date.setDate(date.getDate() - day + days[weekStartRule] - (day < days[weekStartRule] ? 7 : 0))
            } else {
                date.setDate(1)
            }
            return date
        }

        function checkDateByRule(date, rules, weekStart) {
            var result = false;
            for (var i = 0; i < rules.length; i++) {
                var current = rules[i];
                var currentRuleResult = true;
                for (var field in current) {
                    var processNegative = "bymonthday" === field && current[field] < 0;
                    if (dateGetterMap[field] && !processNegative && current[field] !== dateGetterMap[field](date, weekStart)) {
                        currentRuleResult = false
                    }
                }
                result = result || currentRuleResult
            }
            return result || !rules.length
        }

        function markWrongDate(date) {
            date.isWrongDate = true
        }

        function isWrongDate(date) {
            return date.isWrongDate
        }
        var getRecurrenceString = function(object) {
            if (!object || !object.freq) {
                return
            }
            var result = "";
            for (var field in object) {
                var value = object[field];
                if ("interval" === field && value < 2) {
                    continue
                }
                if ("until" === field) {
                    value = getAsciiStringByDate(value)
                }
                result += field + "=" + value + ";"
            }
            result = result.substring(0, result.length - 1);
            return result.toUpperCase()
        };
        extend(resultUtils, {
            getRecurrenceString: getRecurrenceString,
            getRecurrenceRule: getRecurrenceRule,
            getAsciiStringByDate: getAsciiStringByDate,
            getDatesByRecurrence: getDatesByRecurrence,
            dateInRecurrenceRange: dateInRecurrenceRange,
            getDateByAsciiString: getDateByAsciiString,
            daysFromByDayRule: daysFromByDayRule,
            getTimeZoneOffset: getTimeZoneOffset
        });
        module.exports = resultUtils
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/utils.timeZone.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _uiScheduler = __webpack_require__( /*! ./timezones/ui.scheduler.timezones */ 397);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var toMs = _date2.default.dateToMilliseconds;
        var MINUTES_IN_HOUR = 60;
        var getTimezoneOffsetChangeInMinutes = function(startDate, endDate, updatedStartDate, updatedEndDate) {
            return getDaylightOffset(updatedStartDate, updatedEndDate) - getDaylightOffset(startDate, endDate)
        };
        var getTimezoneOffsetChangeInMs = function(startDate, endDate, updatedStartDate, updatedEndDate) {
            return getTimezoneOffsetChangeInMinutes(startDate, endDate, updatedStartDate, updatedEndDate) * toMs("minute")
        };
        var getDaylightOffset = function(startDate, endDate) {
            return new Date(startDate).getTimezoneOffset() - new Date(endDate).getTimezoneOffset()
        };
        var getDaylightOffsetInMs = function(startDate, endDate) {
            return getDaylightOffset(startDate, endDate) * toMs("minute")
        };
        var calculateTimezoneByValue = function(timezone, date) {
            if ("string" === typeof timezone) {
                date = date || new Date;
                var dateUtc = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes());
                timezone = _uiScheduler2.default.getTimezoneOffsetById(timezone, dateUtc)
            }
            return timezone
        };
        var _getDaylightOffsetByTimezone = function(startDate, endDate, timeZone) {
            return calculateTimezoneByValue(timeZone, startDate) - calculateTimezoneByValue(timeZone, endDate)
        };
        var getCorrectedDateByDaylightOffsets = function(convertedOriginalStartDate, convertedDate, date, timeZone, startDateTimezone) {
            var daylightOffsetByCommonTimezone = _getDaylightOffsetByTimezone(convertedOriginalStartDate, convertedDate, timeZone);
            var daylightOffsetByAppointmentTimezone = _getDaylightOffsetByTimezone(convertedOriginalStartDate, convertedDate, startDateTimezone);
            var diff = daylightOffsetByCommonTimezone - daylightOffsetByAppointmentTimezone;
            return new Date(date.getTime() - diff * toMs("hour"))
        };
        var correctRecurrenceExceptionByTimezone = function(exception, exceptionByStartDate, timeZone, startDateTimeZone) {
            var timezoneOffset = (exception.getTimezoneOffset() - exceptionByStartDate.getTimezoneOffset()) / MINUTES_IN_HOUR;
            if (startDateTimeZone) {
                timezoneOffset = _getDaylightOffsetByTimezone(exceptionByStartDate, exception, startDateTimeZone)
            } else {
                if (timeZone) {
                    timezoneOffset = _getDaylightOffsetByTimezone(exceptionByStartDate, exception, timeZone)
                }
            }
            return new Date(exception.getTime() + timezoneOffset * toMs("hour"))
        };
        var isTimezoneChangeInDate = function(date) {
            var startDayDate = new Date(new Date(date).setHours(0, 0, 0, 0));
            var endDayDate = new Date(new Date(date).setHours(23, 59, 59, 0));
            return startDayDate.getTimezoneOffset() - endDayDate.getTimezoneOffset() !== 0
        };
        var isSameAppointmentDates = function(startDate, endDate) {
            endDate = new Date(endDate.getTime() - 1);
            return _date2.default.sameDate(startDate, endDate)
        };
        var utils = {
            getDaylightOffset: getDaylightOffset,
            getDaylightOffsetInMs: getDaylightOffsetInMs,
            getTimezoneOffsetChangeInMinutes: getTimezoneOffsetChangeInMinutes,
            getTimezoneOffsetChangeInMs: getTimezoneOffsetChangeInMs,
            calculateTimezoneByValue: calculateTimezoneByValue,
            getCorrectedDateByDaylightOffsets: getCorrectedDateByDaylightOffsets,
            isTimezoneChangeInDate: isTimezoneChangeInDate,
            isSameAppointmentDates: isSameAppointmentDates,
            correctRecurrenceExceptionByTimezone: correctRecurrenceExceptionByTimezone
        };
        module.exports = utils
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.common.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var whenSome = function(arg, onSuccess, onError) {
            onSuccess = onSuccess || _common.noop;
            onError = onError || _common.noop;
            if (!Array.isArray(arg)) {
                arg = [arg]
            }
            var deferreds = arg.map(function(item, index) {
                return (0, _deferred.when)(item).then(function(result) {
                    _type2.default.isFunction(onSuccess) && onSuccess({
                        item: item,
                        index: index,
                        result: result
                    });
                    return result
                }, function(error) {
                    if (!error) {
                        error = {}
                    }
                    error.index = index;
                    _type2.default.isFunction(onError) && onError(error);
                    return (new _deferred.Deferred).resolve().promise()
                })
            });
            return _deferred.when.apply(null, deferreds)
        };
        var getDisplayFileSize = function(byteSize) {
            var sizesTitles = ["B", "KB", "MB", "GB", "TB"];
            var index = 0;
            var displaySize = byteSize;
            while (displaySize >= 1024 && index <= sizesTitles.length - 1) {
                displaySize /= 1024;
                index++
            }
            displaySize = Math.round(10 * displaySize) / 10;
            return "".concat(displaySize, " ").concat(sizesTitles[index])
        };
        var extendAttributes = function(targetObject, sourceObject, objectKeysArray) {
            objectKeysArray.forEach(function(objectKey) {
                (0, _extend.extend)(true, targetObject, _type2.default.isDefined(sourceObject[objectKey]) ? _defineProperty({}, objectKey, sourceObject[objectKey]) : {})
            });
            return targetObject
        };
        var findItemsByKeys = function(itemInfos, keys) {
            var itemMap = {};
            keys.forEach(function(key) {
                itemMap[key] = null
            });
            itemInfos.forEach(function(itemInfo) {
                var key = itemInfo.fileItem.key;
                if (Object.prototype.hasOwnProperty.call(itemMap, key)) {
                    itemMap[key] = itemInfo
                }
            });
            var result = [];
            keys.forEach(function(key) {
                var itemInfo = itemMap[key];
                if (itemInfo) {
                    result.push(itemInfo)
                }
            });
            return result
        };
        module.exports = whenSome;
        module.exports.getDisplayFileSize = getDisplayFileSize;
        module.exports.extendAttributes = extendAttributes;
        module.exports.findItemsByKeys = findItemsByKeys
    }, , , , , ,
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/core.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var DevExpress = window.DevExpress = window.DevExpress || {};
        var errors = DevExpress.errors = __webpack_require__( /*! ../../core/errors */ 22);
        if (DevExpress._DEVEXTREME_BUNDLE_INITIALIZED) {
            throw errors.Error("E0024")
        }
        DevExpress._DEVEXTREME_BUNDLE_INITIALIZED = true;
        DevExpress.clientExporter = __webpack_require__( /*! ../../exporter */ 179);
        DevExpress.excelExporter = __webpack_require__( /*! ../../excel_exporter */ 465);
        DevExpress.VERSION = __webpack_require__( /*! ../../core/version */ 164);
        DevExpress.Class = __webpack_require__( /*! ../../core/class */ 16);
        DevExpress.DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 68);
        DevExpress.Component = __webpack_require__( /*! ../../core/component */ 115);
        DevExpress.registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        DevExpress.devices = __webpack_require__( /*! ../../core/devices */ 15);
        DevExpress.Color = __webpack_require__( /*! ../../color */ 91);
        var animationFrame = __webpack_require__( /*! ../../animation/frame */ 117);
        DevExpress.utils = {};
        DevExpress.utils.requestAnimationFrame = animationFrame.requestAnimationFrame;
        DevExpress.utils.cancelAnimationFrame = animationFrame.cancelAnimationFrame;
        DevExpress.utils.initMobileViewport = __webpack_require__( /*! ../../mobile/init_mobile_viewport/init_mobile_viewport */ 477).initMobileViewport;
        DevExpress.utils.extendFromObject = __webpack_require__( /*! ../../core/utils/extend */ 0).extendFromObject;
        DevExpress.utils.createComponents = __webpack_require__( /*! ../../core/utils/dom */ 11).createComponents;
        DevExpress.utils.triggerShownEvent = __webpack_require__( /*! ../../core/utils/dom */ 11).triggerShownEvent;
        DevExpress.utils.triggerHidingEvent = __webpack_require__( /*! ../../core/utils/dom */ 11).triggerHidingEvent;
        DevExpress.utils.resetActiveElement = __webpack_require__( /*! ../../core/utils/dom */ 11).resetActiveElement;
        DevExpress.utils.findBestMatches = __webpack_require__( /*! ../../core/utils/common */ 3).findBestMatches;
        DevExpress.createQueue = __webpack_require__( /*! ../../core/utils/queue */ 280).create;
        DevExpress.utils.dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        DevExpress.utils.common = __webpack_require__( /*! ../../core/utils/common */ 3);
        DevExpress.utils.date = __webpack_require__( /*! ../../core/utils/date */ 24);
        DevExpress.utils.browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        DevExpress.utils.inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        DevExpress.utils.iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        DevExpress.utils.readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        DevExpress.utils.resizeCallbacks = __webpack_require__( /*! ../../core/utils/resize_callbacks */ 114);
        DevExpress.utils.console = __webpack_require__( /*! ../../core/utils/console */ 65);
        DevExpress.utils.string = __webpack_require__( /*! ../../core/utils/string */ 43);
        DevExpress.utils.support = __webpack_require__( /*! ../../core/utils/support */ 46);
        DevExpress.utils.ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        DevExpress.viewPort = __webpack_require__( /*! ../../core/utils/view_port */ 76).value;
        DevExpress.hideTopOverlay = __webpack_require__( /*! ../../mobile/hide_top_overlay */ 220);
        DevExpress.formatHelper = __webpack_require__( /*! ../../format_helper */ 63);
        DevExpress.config = __webpack_require__( /*! ../../core/config */ 30);
        DevExpress.animationPresets = __webpack_require__( /*! ../../animation/presets/presets */ 188).presets;
        DevExpress.fx = __webpack_require__( /*! ../../animation/fx */ 40);
        DevExpress.TransitionExecutor = __webpack_require__( /*! ../../animation/transition_executor/transition_executor */ 300).TransitionExecutor;
        DevExpress.AnimationPresetCollection = __webpack_require__( /*! ../../animation/presets/presets */ 188).PresetCollection;
        DevExpress.events = __webpack_require__( /*! ../../events */ 478);
        DevExpress.events.click = __webpack_require__( /*! ../../events/click */ 19);
        DevExpress.events.utils = __webpack_require__( /*! ../../events/utils */ 8);
        DevExpress.events.GestureEmitter = __webpack_require__( /*! ../../events/gesture/emitter.gesture */ 166);
        DevExpress.localization = __webpack_require__( /*! ../../localization */ 481);
        DevExpress.templateRendered = __webpack_require__( /*! ../../core/templates/template_base */ 78).renderedCallbacks;
        DevExpress.setTemplateEngine = __webpack_require__( /*! ../../core/templates/template_engine_registry */ 165).setTemplateEngine;
        module.exports = DevExpress
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/hover.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var dataUtils = __webpack_require__( /*! ../core/element_data */ 41);
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var registerEvent = __webpack_require__( /*! ./core/event_registrator */ 77);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var pointerEvents = __webpack_require__( /*! ./pointer */ 23);
        var HOVERSTART_NAMESPACE = "dxHoverStart";
        var HOVERSTART = "dxhoverstart";
        var POINTERENTER_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(pointerEvents.enter, HOVERSTART_NAMESPACE);
        var HOVEREND_NAMESPACE = "dxHoverEnd";
        var HOVEREND = "dxhoverend";
        var POINTERLEAVE_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(pointerEvents.leave, HOVEREND_NAMESPACE);
        var Hover = Class.inherit({
            noBubble: true,
            ctor: function() {
                this._handlerArrayKeyPath = this._eventNamespace + "_HandlerStore"
            },
            setup: function(element) {
                dataUtils.data(element, this._handlerArrayKeyPath, {})
            },
            add: function(element, handleObj) {
                var that = this;
                var handler = function(e) {
                    that._handler(e)
                };
                eventsEngine.on(element, this._originalEventName, handleObj.selector, handler);
                dataUtils.data(element, this._handlerArrayKeyPath)[handleObj.guid] = handler
            },
            _handler: function(e) {
                if (eventUtils.isTouchEvent(e) || devices.isSimulator()) {
                    return
                }
                eventUtils.fireEvent({
                    type: this._eventName,
                    originalEvent: e,
                    delegateTarget: e.delegateTarget
                })
            },
            remove: function(element, handleObj) {
                var handler = dataUtils.data(element, this._handlerArrayKeyPath)[handleObj.guid];
                eventsEngine.off(element, this._originalEventName, handleObj.selector, handler)
            },
            teardown: function(element) {
                dataUtils.removeData(element, this._handlerArrayKeyPath)
            }
        });
        var HoverStart = Hover.inherit({
            ctor: function() {
                this._eventNamespace = HOVERSTART_NAMESPACE;
                this._eventName = HOVERSTART;
                this._originalEventName = POINTERENTER_NAMESPACED_EVENT_NAME;
                this.callBase()
            },
            _handler: function(e) {
                var pointers = e.pointers || [];
                if (!pointers.length) {
                    this.callBase(e)
                }
            }
        });
        var HoverEnd = Hover.inherit({
            ctor: function() {
                this._eventNamespace = HOVEREND_NAMESPACE;
                this._eventName = HOVEREND;
                this._originalEventName = POINTERLEAVE_NAMESPACED_EVENT_NAME;
                this.callBase()
            }
        });
        registerEvent(HOVERSTART, new HoverStart);
        registerEvent(HOVEREND, new HoverEnd);
        exports.start = HOVERSTART;
        exports.end = HOVEREND
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/swatch_container.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var viewPortUtils = __webpack_require__( /*! ../../core/utils/view_port */ 76);
        var SWATCH_CONTAINER_CLASS_PREFIX = "dx-swatch-";
        var getSwatchContainer = function(element) {
            var $element = $(element);
            var swatchContainer = $element.closest('[class^="'.concat(SWATCH_CONTAINER_CLASS_PREFIX, '"], [class*=" ').concat(SWATCH_CONTAINER_CLASS_PREFIX, '"]'));
            var viewport = viewPortUtils.value();
            if (!swatchContainer.length) {
                return viewport
            }
            var swatchClassRegex = new RegExp("(\\s|^)(".concat(SWATCH_CONTAINER_CLASS_PREFIX, ".*?)(\\s|$)"));
            var swatchClass = swatchContainer[0].className.match(swatchClassRegex)[2];
            var viewportSwatchContainer = viewport.children("." + swatchClass);
            if (!viewportSwatchContainer.length) {
                viewportSwatchContainer = $("<div>").addClass(swatchClass).appendTo(viewport)
            }
            return viewportSwatchContainer
        };
        module.exports = {
            getSwatchContainer: getSwatchContainer
        }
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/events/gesture/swipeable.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var swipeEvents = __webpack_require__( /*! ../swipe */ 183);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 68);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var publicComponentUtils = __webpack_require__( /*! ../../core/utils/public_component */ 139);
        var DX_SWIPEABLE = "dxSwipeable";
        var SWIPEABLE_CLASS = "dx-swipeable";
        var ACTION_TO_EVENT_MAP = {
            onStart: swipeEvents.start,
            onUpdated: swipeEvents.swipe,
            onEnd: swipeEvents.end,
            onCancel: "dxswipecancel"
        };
        var Swipeable = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    elastic: true,
                    immediate: false,
                    direction: "horizontal",
                    itemSizeFunc: null,
                    onStart: null,
                    onUpdated: null,
                    onEnd: null,
                    onCancel: null
                })
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(SWIPEABLE_CLASS);
                this._attachEventHandlers()
            },
            _attachEventHandlers: function() {
                this._detachEventHandlers();
                if (this.option("disabled")) {
                    return
                }
                var NAME = this.NAME;
                this._createEventData();
                each(ACTION_TO_EVENT_MAP, function(actionName, eventName) {
                    var action = this._createActionByOption(actionName, {
                        context: this
                    });
                    eventName = eventUtils.addNamespace(eventName, NAME);
                    eventsEngine.on(this.$element(), eventName, this._eventData, function(e) {
                        return action({
                            event: e
                        })
                    })
                }.bind(this))
            },
            _createEventData: function() {
                this._eventData = {
                    elastic: this.option("elastic"),
                    itemSizeFunc: this.option("itemSizeFunc"),
                    direction: this.option("direction"),
                    immediate: this.option("immediate")
                }
            },
            _detachEventHandlers: function() {
                eventsEngine.off(this.$element(), "." + DX_SWIPEABLE)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "disabled":
                    case "onStart":
                    case "onUpdated":
                    case "onEnd":
                    case "onCancel":
                    case "elastic":
                    case "immediate":
                    case "itemSizeFunc":
                    case "direction":
                        this._detachEventHandlers();
                        this._attachEventHandlers();
                        break;
                    case "rtlEnabled":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _useTemplates: function() {
                return false
            }
        });
        publicComponentUtils.name(Swipeable, DX_SWIPEABLE);
        module.exports = Swipeable
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/core/component_registrator_callbacks.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _memorized_callbacks = __webpack_require__( /*! ./memorized_callbacks */ 185);
        var _memorized_callbacks2 = _interopRequireDefault(_memorized_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.default = new _memorized_callbacks2.default
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/base.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var POINTER_EVENTS_NAMESPACE = "dxPointerEvents";
        var BaseStrategy = Class.inherit({
            ctor: function(eventName, originalEvents) {
                this._eventName = eventName;
                this._originalEvents = eventUtils.addNamespace(originalEvents, POINTER_EVENTS_NAMESPACE);
                this._handlerCount = 0;
                this.noBubble = this._isNoBubble()
            },
            _isNoBubble: function() {
                var eventName = this._eventName;
                return "dxpointerenter" === eventName || "dxpointerleave" === eventName
            },
            _handler: function(e) {
                var delegateTarget = this._getDelegateTarget(e);
                return this._fireEvent({
                    type: this._eventName,
                    pointerType: e.pointerType || eventUtils.eventSource(e),
                    originalEvent: e,
                    delegateTarget: delegateTarget,
                    timeStamp: browser.mozilla ? (new Date).getTime() : e.timeStamp
                })
            },
            _getDelegateTarget: function(e) {
                var delegateTarget;
                if (this.noBubble) {
                    delegateTarget = e.delegateTarget
                }
                return delegateTarget
            },
            _fireEvent: function(args) {
                return eventUtils.fireEvent(args)
            },
            _setSelector: function(handleObj) {
                this._selector = this.noBubble && handleObj ? handleObj.selector : null
            },
            _getSelector: function() {
                return this._selector
            },
            setup: function() {
                return true
            },
            add: function(element, handleObj) {
                if (this._handlerCount <= 0 || this.noBubble) {
                    element = this.noBubble ? element : domAdapter.getDocument();
                    this._setSelector(handleObj);
                    var that = this;
                    eventsEngine.on(element, this._originalEvents, this._getSelector(), function(e) {
                        that._handler(e)
                    })
                }
                if (!this.noBubble) {
                    this._handlerCount++
                }
            },
            remove: function(handleObj) {
                this._setSelector(handleObj);
                if (!this.noBubble) {
                    this._handlerCount--
                }
            },
            teardown: function(element) {
                if (this._handlerCount && !this.noBubble) {
                    return
                }
                element = this.noBubble ? element : domAdapter.getDocument();
                if (this._originalEvents !== "." + POINTER_EVENTS_NAMESPACE) {
                    eventsEngine.off(element, this._originalEvents, this._getSelector())
                }
            },
            dispose: function(element) {
                element = this.noBubble ? element : domAdapter.getDocument();
                eventsEngine.off(element, this._originalEvents)
            }
        });
        module.exports = BaseStrategy
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/array_query.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var compileGetter = __webpack_require__( /*! ../core/utils/data */ 20).compileGetter;
        var toComparable = __webpack_require__( /*! ../core/utils/data */ 20).toComparable;
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var errorsModule = __webpack_require__( /*! ./errors */ 38);
        var dataUtils = __webpack_require__( /*! ./utils */ 42);
        var Iterator = Class.inherit({
            toArray: function() {
                var result = [];
                this.reset();
                while (this.next()) {
                    result.push(this.current())
                }
                return result
            },
            countable: function() {
                return false
            }
        });
        var ArrayIterator = Iterator.inherit({
            ctor: function(array) {
                this.array = array;
                this.index = -1
            },
            next: function() {
                if (this.index + 1 < this.array.length) {
                    this.index++;
                    return true
                }
                return false
            },
            current: function() {
                return this.array[this.index]
            },
            reset: function() {
                this.index = -1
            },
            toArray: function() {
                return this.array.slice(0)
            },
            countable: function() {
                return true
            },
            count: function() {
                return this.array.length
            }
        });
        var WrappedIterator = Iterator.inherit({
            ctor: function(iter) {
                this.iter = iter
            },
            next: function() {
                return this.iter.next()
            },
            current: function() {
                return this.iter.current()
            },
            reset: function() {
                return this.iter.reset()
            }
        });
        var MapIterator = WrappedIterator.inherit({
            ctor: function(iter, mapper) {
                this.callBase(iter);
                this.index = -1;
                this.mapper = mapper
            },
            current: function() {
                return this.mapper(this.callBase(), this.index)
            },
            next: function() {
                var hasNext = this.callBase();
                if (hasNext) {
                    this.index++
                }
                return hasNext
            }
        });
        var defaultCompare = function(xValue, yValue) {
            xValue = toComparable(xValue);
            yValue = toComparable(yValue);
            if (null === xValue && null !== yValue) {
                return -1
            }
            if (null !== xValue && null === yValue) {
                return 1
            }
            if (void 0 === xValue && void 0 !== yValue) {
                return 1
            }
            if (void 0 !== xValue && void 0 === yValue) {
                return -1
            }
            if (xValue < yValue) {
                return -1
            }
            if (xValue > yValue) {
                return 1
            }
            return 0
        };
        var SortIterator = Iterator.inherit({
            ctor: function(iter, getter, desc, compare) {
                if (!(iter instanceof MapIterator)) {
                    iter = new MapIterator(iter, this._wrap)
                }
                this.iter = iter;
                this.rules = [{
                    getter: getter,
                    desc: desc,
                    compare: compare
                }]
            },
            thenBy: function(getter, desc, compare) {
                var result = new SortIterator(this.sortedIter || this.iter, getter, desc, compare);
                if (!this.sortedIter) {
                    result.rules = this.rules.concat(result.rules)
                }
                return result
            },
            next: function() {
                this._ensureSorted();
                return this.sortedIter.next()
            },
            current: function() {
                this._ensureSorted();
                return this.sortedIter.current()
            },
            reset: function() {
                delete this.sortedIter
            },
            countable: function() {
                return this.sortedIter || this.iter.countable()
            },
            count: function() {
                if (this.sortedIter) {
                    return this.sortedIter.count()
                }
                return this.iter.count()
            },
            _ensureSorted: function() {
                var that = this;
                if (that.sortedIter) {
                    return
                }
                iteratorUtils.each(that.rules, function() {
                    this.getter = compileGetter(this.getter)
                });
                that.sortedIter = new MapIterator(new ArrayIterator(this.iter.toArray().sort(function(x, y) {
                    return that._compare(x, y)
                })), that._unwrap)
            },
            _wrap: function(record, index) {
                return {
                    index: index,
                    value: record
                }
            },
            _unwrap: function(wrappedItem) {
                return wrappedItem.value
            },
            _compare: function(x, y) {
                var xIndex = x.index;
                var yIndex = y.index;
                x = x.value;
                y = y.value;
                if (x === y) {
                    return xIndex - yIndex
                }
                for (var i = 0, rulesCount = this.rules.length; i < rulesCount; i++) {
                    var rule = this.rules[i];
                    var xValue = rule.getter(x);
                    var yValue = rule.getter(y);
                    var compare = rule.compare || defaultCompare;
                    var compareResult = compare(xValue, yValue);
                    if (compareResult) {
                        return rule.desc ? -compareResult : compareResult
                    }
                }
                return xIndex - yIndex
            }
        });
        var compileCriteria = function() {
            var compileGroup = function(crit) {
                var ops = [];
                var isConjunctiveOperator = false;
                var isConjunctiveNextOperator = false;
                iteratorUtils.each(crit, function() {
                    if (Array.isArray(this) || typeUtils.isFunction(this)) {
                        if (ops.length > 1 && isConjunctiveOperator !== isConjunctiveNextOperator) {
                            throw new errorsModule.errors.Error("E4019")
                        }
                        ops.push(compileCriteria(this));
                        isConjunctiveOperator = isConjunctiveNextOperator;
                        isConjunctiveNextOperator = true
                    } else {
                        isConjunctiveNextOperator = dataUtils.isConjunctiveOperator(this)
                    }
                });
                return function(d) {
                    var result = isConjunctiveOperator;
                    for (var i = 0; i < ops.length; i++) {
                        if (ops[i](d) !== isConjunctiveOperator) {
                            result = !isConjunctiveOperator;
                            break
                        }
                    }
                    return result
                }
            };
            var toString = function(value) {
                return typeUtils.isDefined(value) ? value.toString() : ""
            };
            var compileBinary = function(crit) {
                crit = dataUtils.normalizeBinaryCriterion(crit);
                var getter = compileGetter(crit[0]);
                var op = crit[1];
                var value = crit[2];
                value = toComparable(value);
                switch (op.toLowerCase()) {
                    case "=":
                        return compileEquals(getter, value);
                    case "<>":
                        return compileEquals(getter, value, true);
                    case ">":
                        return function(obj) {
                            return toComparable(getter(obj)) > value
                        };
                    case "<":
                        return function(obj) {
                            return toComparable(getter(obj)) < value
                        };
                    case ">=":
                        return function(obj) {
                            return toComparable(getter(obj)) >= value
                        };
                    case "<=":
                        return function(obj) {
                            return toComparable(getter(obj)) <= value
                        };
                    case "startswith":
                        return function(obj) {
                            return 0 === toComparable(toString(getter(obj))).indexOf(value)
                        };
                    case "endswith":
                        return function(obj) {
                            var getterValue = toComparable(toString(getter(obj)));
                            var searchValue = toString(value);
                            if (getterValue.length < searchValue.length) {
                                return false
                            }
                            return getterValue.lastIndexOf(value) === getterValue.length - value.length
                        };
                    case "contains":
                        return function(obj) {
                            return toComparable(toString(getter(obj))).indexOf(value) > -1
                        };
                    case "notcontains":
                        return function(obj) {
                            return toComparable(toString(getter(obj))).indexOf(value) === -1
                        }
                }
                throw errorsModule.errors.Error("E4003", op)
            };

            function compileEquals(getter, value, negate) {
                return function(obj) {
                    obj = toComparable(getter(obj));
                    var result = useStrictComparison(value) ? obj === value : obj == value;
                    if (negate) {
                        result = !result
                    }
                    return result
                }
            }

            function useStrictComparison(value) {
                return "" === value || 0 === value || false === value
            }

            function compileUnary(crit) {
                var op = crit[0];
                var criteria = compileCriteria(crit[1]);
                if ("!" === op) {
                    return function(obj) {
                        return !criteria(obj)
                    }
                }
                throw errorsModule.errors.Error("E4003", op)
            }
            return function(crit) {
                if (typeUtils.isFunction(crit)) {
                    return crit
                }
                if (dataUtils.isGroupCriterion(crit)) {
                    return compileGroup(crit)
                }
                if (dataUtils.isUnaryOperation(crit)) {
                    return compileUnary(crit)
                }
                return compileBinary(crit)
            }
        }();
        var FilterIterator = WrappedIterator.inherit({
            ctor: function(iter, criteria) {
                this.callBase(iter);
                this.criteria = compileCriteria(criteria)
            },
            next: function() {
                while (this.iter.next()) {
                    if (this.criteria(this.current())) {
                        return true
                    }
                }
                return false
            }
        });
        var GroupIterator = Iterator.inherit({
            ctor: function(iter, getter) {
                this.iter = iter;
                this.getter = getter
            },
            next: function() {
                this._ensureGrouped();
                return this.groupedIter.next()
            },
            current: function() {
                this._ensureGrouped();
                return this.groupedIter.current()
            },
            reset: function() {
                delete this.groupedIter
            },
            countable: function() {
                return !!this.groupedIter
            },
            count: function() {
                return this.groupedIter.count()
            },
            _ensureGrouped: function() {
                if (this.groupedIter) {
                    return
                }
                var hash = {};
                var keys = [];
                var iter = this.iter;
                var getter = compileGetter(this.getter);
                iter.reset();
                while (iter.next()) {
                    var current = iter.current();
                    var key = getter(current);
                    if (key in hash) {
                        hash[key].push(current)
                    } else {
                        hash[key] = [current];
                        keys.push(key)
                    }
                }
                this.groupedIter = new ArrayIterator(iteratorUtils.map(keys, function(key) {
                    return {
                        key: key,
                        items: hash[key]
                    }
                }))
            }
        });
        var SelectIterator = WrappedIterator.inherit({
            ctor: function(iter, getter) {
                this.callBase(iter);
                this.getter = compileGetter(getter)
            },
            current: function() {
                return this.getter(this.callBase())
            },
            countable: function() {
                return this.iter.countable()
            },
            count: function() {
                return this.iter.count()
            }
        });
        var SliceIterator = WrappedIterator.inherit({
            ctor: function(iter, skip, take) {
                this.callBase(iter);
                this.skip = Math.max(0, skip);
                this.take = Math.max(0, take);
                this.pos = 0
            },
            next: function() {
                if (this.pos >= this.skip + this.take) {
                    return false
                }
                while (this.pos < this.skip && this.iter.next()) {
                    this.pos++
                }
                this.pos++;
                return this.iter.next()
            },
            reset: function() {
                this.callBase();
                this.pos = 0
            },
            countable: function() {
                return this.iter.countable()
            },
            count: function() {
                return Math.min(this.iter.count() - this.skip, this.take)
            }
        });
        var arrayQueryImpl = function arrayQueryImpl(iter, queryOptions) {
            queryOptions = queryOptions || {};
            if (!(iter instanceof Iterator)) {
                iter = new ArrayIterator(iter)
            }
            var handleError = function(error) {
                var handler = queryOptions.errorHandler;
                if (handler) {
                    handler(error)
                }
                errorsModule._errorHandler(error)
            };
            var aggregateCore = function(aggregator) {
                var d = (new Deferred).fail(handleError);
                var seed;
                var step = aggregator.step;
                var finalize = aggregator.finalize;
                try {
                    iter.reset();
                    if ("seed" in aggregator) {
                        seed = aggregator.seed
                    } else {
                        seed = iter.next() ? iter.current() : NaN
                    }
                    var accumulator = seed;
                    while (iter.next()) {
                        accumulator = step(accumulator, iter.current())
                    }
                    d.resolve(finalize ? finalize(accumulator) : accumulator)
                } catch (x) {
                    d.reject(x)
                }
                return d.promise()
            };
            var aggregate = function(seed, step, finalize) {
                if (arguments.length < 2) {
                    return aggregateCore({
                        step: arguments[0]
                    })
                }
                return aggregateCore({
                    seed: seed,
                    step: step,
                    finalize: finalize
                })
            };
            var standardAggregate = function(name) {
                return aggregateCore(dataUtils.aggregators[name])
            };
            var select = function(getter) {
                if (!typeUtils.isFunction(getter) && !Array.isArray(getter)) {
                    getter = [].slice.call(arguments)
                }
                return chainQuery(new SelectIterator(iter, getter))
            };
            var selectProp = function(name) {
                return select(compileGetter(name))
            };

            function chainQuery(iter) {
                return arrayQueryImpl(iter, queryOptions)
            }
            return {
                toArray: function() {
                    return iter.toArray()
                },
                enumerate: function() {
                    var d = (new Deferred).fail(handleError);
                    try {
                        d.resolve(iter.toArray())
                    } catch (x) {
                        d.reject(x)
                    }
                    return d.promise()
                },
                sortBy: function(getter, desc, compare) {
                    return chainQuery(new SortIterator(iter, getter, desc, compare))
                },
                thenBy: function(getter, desc, compare) {
                    if (iter instanceof SortIterator) {
                        return chainQuery(iter.thenBy(getter, desc, compare))
                    }
                    throw errorsModule.errors.Error("E4004")
                },
                filter: function(criteria) {
                    if (!Array.isArray(criteria)) {
                        criteria = [].slice.call(arguments)
                    }
                    return chainQuery(new FilterIterator(iter, criteria))
                },
                slice: function(skip, take) {
                    if (void 0 === take) {
                        take = Number.MAX_VALUE
                    }
                    return chainQuery(new SliceIterator(iter, skip, take))
                },
                select: select,
                groupBy: function(getter) {
                    return chainQuery(new GroupIterator(iter, getter))
                },
                aggregate: aggregate,
                count: function() {
                    if (iter.countable()) {
                        var d = (new Deferred).fail(handleError);
                        try {
                            d.resolve(iter.count())
                        } catch (x) {
                            d.reject(x)
                        }
                        return d.promise()
                    }
                    return standardAggregate("count")
                },
                sum: function(getter) {
                    if (getter) {
                        return selectProp(getter).sum()
                    }
                    return standardAggregate("sum")
                },
                min: function(getter) {
                    if (getter) {
                        return selectProp(getter).min()
                    }
                    return standardAggregate("min")
                },
                max: function(getter) {
                    if (getter) {
                        return selectProp(getter).max()
                    }
                    return standardAggregate("max")
                },
                avg: function(getter) {
                    if (getter) {
                        return selectProp(getter).avg()
                    }
                    return standardAggregate("avg")
                }
            }
        };
        module.exports = arrayQueryImpl
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/data/odata/query_adapter.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.odata = void 0;
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _query_adapters = __webpack_require__( /*! ../query_adapters */ 190);
        var _query_adapters2 = _interopRequireDefault(_query_adapters);
        var _utils = __webpack_require__( /*! ./utils */ 96);
        var _errors = __webpack_require__( /*! ../errors */ 38);
        var _utils2 = __webpack_require__( /*! ../utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_PROTOCOL_VERSION = 2;
        var STRING_FUNCTIONS = ["contains", "notcontains", "startswith", "endswith"];
        var compileCriteria = function() {
            var protocolVersion;
            var forceLowerCase;
            var fieldTypes;
            var createBinaryOperationFormatter = function(op) {
                return function(prop, val) {
                    return "".concat(prop, " ").concat(op, " ").concat(val)
                }
            };
            var createStringFuncFormatter = function(op, reverse) {
                return function(prop, val) {
                    var bag = [op, "("];
                    if (forceLowerCase) {
                        prop = prop.indexOf("tolower(") === -1 ? "tolower(".concat(prop, ")") : prop;
                        val = val.toLowerCase()
                    }
                    if (reverse) {
                        bag.push(val, ",", prop)
                    } else {
                        bag.push(prop, ",", val)
                    }
                    bag.push(")");
                    return bag.join("")
                }
            };
            var isStringFunction = function(name) {
                return STRING_FUNCTIONS.some(function(funcName) {
                    return funcName === name
                })
            };
            var formatters = {
                "=": createBinaryOperationFormatter("eq"),
                "<>": createBinaryOperationFormatter("ne"),
                ">": createBinaryOperationFormatter("gt"),
                ">=": createBinaryOperationFormatter("ge"),
                "<": createBinaryOperationFormatter("lt"),
                "<=": createBinaryOperationFormatter("le"),
                startswith: createStringFuncFormatter("startswith"),
                endswith: createStringFuncFormatter("endswith")
            };
            var formattersV2 = (0, _extend.extend)({}, formatters, {
                contains: createStringFuncFormatter("substringof", true),
                notcontains: createStringFuncFormatter("not substringof", true)
            });
            var formattersV4 = (0, _extend.extend)({}, formatters, {
                contains: createStringFuncFormatter("contains"),
                notcontains: createStringFuncFormatter("not contains")
            });
            var compileBinary = function(criteria) {
                var _fieldTypes;
                criteria = (0, _utils2.normalizeBinaryCriterion)(criteria);
                var op = criteria[1];
                var fieldName = criteria[0];
                var fieldType = fieldTypes && fieldTypes[fieldName];
                if (fieldType && isStringFunction(op) && "String" !== fieldType) {
                    throw new _errors.errors.Error("E4024", op, fieldName, fieldType)
                }
                var formatters = 4 === protocolVersion ? formattersV4 : formattersV2;
                var formatter = formatters[op.toLowerCase()];
                if (!formatter) {
                    throw _errors.errors.Error("E4003", op)
                }
                var value = criteria[2];
                if (null === (_fieldTypes = fieldTypes) || void 0 === _fieldTypes ? void 0 : _fieldTypes[fieldName]) {
                    value = (0, _utils.convertPrimitiveValue)(fieldTypes[fieldName], value)
                }
                return formatter((0, _utils.serializePropName)(fieldName), (0, _utils.serializeValue)(value, protocolVersion))
            };
            var compileUnary = function(criteria) {
                var op = criteria[0];
                var crit = compileCore(criteria[1]);
                if ("!" === op) {
                    return "not (".concat(crit, ")")
                }
                throw _errors.errors.Error("E4003", op)
            };
            var compileGroup = function(criteria) {
                var bag = [];
                var groupOperator;
                var nextGroupOperator;
                (0, _iterator.each)(criteria, function(index, criterion) {
                    if (Array.isArray(criterion)) {
                        if (bag.length > 1 && groupOperator !== nextGroupOperator) {
                            throw new _errors.errors.Error("E4019")
                        }
                        bag.push("(".concat(compileCore(criterion), ")"));
                        groupOperator = nextGroupOperator;
                        nextGroupOperator = "and"
                    } else {
                        nextGroupOperator = (0, _utils2.isConjunctiveOperator)(this) ? "and" : "or"
                    }
                });
                return bag.join(" ".concat(groupOperator, " "))
            };
            var compileCore = function(criteria) {
                if (Array.isArray(criteria[0])) {
                    return compileGroup(criteria)
                }
                if ((0, _utils2.isUnaryOperation)(criteria)) {
                    return compileUnary(criteria)
                }
                return compileBinary(criteria)
            };
            return function(criteria, version, types, filterToLower) {
                fieldTypes = types;
                forceLowerCase = null !== filterToLower && void 0 !== filterToLower ? filterToLower : (0, _config2.default)().oDataFilterToLower;
                protocolVersion = version;
                return compileCore(criteria)
            }
        }();
        var createODataQueryAdapter = function(queryOptions) {
            var _sorting = [];
            var _criteria = [];
            var _expand = queryOptions.expand;
            var _select;
            var _skip;
            var _take;
            var _countQuery;
            var _oDataVersion = queryOptions.version || DEFAULT_PROTOCOL_VERSION;
            var hasSlice = function() {
                return _skip || void 0 !== _take
            };
            var hasFunction = function hasFunction(criterion) {
                for (var i = 0; i < criterion.length; i++) {
                    if ((0, _type.isFunction)(criterion[i])) {
                        return true
                    }
                    if (Array.isArray(criterion[i]) && hasFunction(criterion[i])) {
                        return true
                    }
                }
                return false
            };
            var requestData = function() {
                var result = {};
                if (!_countQuery) {
                    if (_sorting.length) {
                        result.$orderby = _sorting.join(",")
                    }
                    if (_skip) {
                        result.$skip = _skip
                    }
                    if (void 0 !== _take) {
                        result.$top = _take
                    }
                    result.$select = (0, _utils.generateSelect)(_oDataVersion, _select) || void 0;
                    result.$expand = (0, _utils.generateExpand)(_oDataVersion, _expand, _select) || void 0
                }
                if (_criteria.length) {
                    var criteria = _criteria.length < 2 ? _criteria[0] : _criteria;
                    var fieldTypes = null === queryOptions || void 0 === queryOptions ? void 0 : queryOptions.fieldTypes;
                    var filterToLower = null === queryOptions || void 0 === queryOptions ? void 0 : queryOptions.filterToLower;
                    result.$filter = compileCriteria(criteria, _oDataVersion, fieldTypes, filterToLower)
                }
                if (_countQuery) {
                    result.$top = 0
                }
                if (queryOptions.requireTotalCount || _countQuery) {
                    if (4 !== _oDataVersion) {
                        result.$inlinecount = "allpages"
                    } else {
                        result.$count = "true"
                    }
                }
                return result
            };
            var tryLiftSelect = function(tasks) {
                var selectIndex = -1;
                for (var i = 0; i < tasks.length; i++) {
                    if ("select" === tasks[i].name) {
                        selectIndex = i;
                        break
                    }
                }
                if (selectIndex < 0 || !(0, _type.isFunction)(tasks[selectIndex].args[0])) {
                    return
                }
                var nextTask = tasks[1 + selectIndex];
                if (!nextTask || "slice" !== nextTask.name) {
                    return
                }
                tasks[1 + selectIndex] = tasks[selectIndex];
                tasks[selectIndex] = nextTask
            };
            return {
                optimize: tryLiftSelect,
                exec: function(url) {
                    return (0, _utils.sendRequest)(_oDataVersion, {
                        url: url,
                        params: (0, _extend.extend)(requestData(), null === queryOptions || void 0 === queryOptions ? void 0 : queryOptions.params)
                    }, {
                        beforeSend: queryOptions.beforeSend,
                        jsonp: queryOptions.jsonp,
                        withCredentials: queryOptions.withCredentials,
                        countOnly: _countQuery,
                        deserializeDates: queryOptions.deserializeDates,
                        fieldTypes: queryOptions.fieldTypes,
                        isPaged: isFinite(_take)
                    })
                },
                multiSort: function(args) {
                    var rules;
                    if (hasSlice()) {
                        return false
                    }
                    for (var i = 0; i < args.length; i++) {
                        var getter = args[i][0];
                        var desc = !!args[i][1];
                        var rule = void 0;
                        if ("string" !== typeof getter) {
                            return false
                        }
                        rule = (0, _utils.serializePropName)(getter);
                        if (desc) {
                            rule += " desc"
                        }
                        rules = rules || [];
                        rules.push(rule)
                    }
                    _sorting = rules
                },
                slice: function(skipCount, takeCount) {
                    if (hasSlice()) {
                        return false
                    }
                    _skip = skipCount;
                    _take = takeCount
                },
                filter: function(criterion) {
                    if (hasSlice()) {
                        return false
                    }
                    if (!Array.isArray(criterion)) {
                        criterion = [].slice.call(arguments)
                    }
                    if (hasFunction(criterion)) {
                        return false
                    }
                    if (_criteria.length) {
                        _criteria.push("and")
                    }
                    _criteria.push(criterion)
                },
                select: function(expr) {
                    if (_select || (0, _type.isFunction)(expr)) {
                        return false
                    }
                    if (!Array.isArray(expr)) {
                        expr = [].slice.call(arguments)
                    }
                    _select = expr
                },
                count: function() {
                    return _countQuery = true
                }
            }
        };
        _query_adapters2.default.odata = createODataQueryAdapter;
        exports.odata = createODataQueryAdapter
    }, ,
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/core/version.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = "20.1.4"
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/template_engine_registry.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.registerTemplateEngine = registerTemplateEngine;
        exports.setTemplateEngine = setTemplateEngine;
        exports.getCurrentTemplateEngine = getCurrentTemplateEngine;
        var _type = __webpack_require__( /*! ../utils/type */ 1);
        var _errors = __webpack_require__( /*! ../errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var templateEngines = {};
        var currentTemplateEngine;

        function registerTemplateEngine(name, templateEngine) {
            templateEngines[name] = templateEngine
        }

        function setTemplateEngine(templateEngine) {
            if ((0, _type.isString)(templateEngine)) {
                currentTemplateEngine = templateEngines[templateEngine];
                if (!currentTemplateEngine) {
                    throw _errors2.default.Error("E0020", templateEngine)
                }
            } else {
                currentTemplateEngine = templateEngine
            }
        }

        function getCurrentTemplateEngine() {
            return currentTemplateEngine
        }
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/events/gesture/emitter.gesture.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var styleUtils = __webpack_require__( /*! ../../core/utils/style */ 93);
        var callOnce = __webpack_require__( /*! ../../core/utils/call_once */ 80);
        var domUtils = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        var ready = readyCallbacks.add;
        var mathUtils = __webpack_require__( /*! ../../core/utils/math */ 31);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var Emitter = __webpack_require__( /*! ../core/emitter */ 132);
        var sign = mathUtils.sign;
        var abs = Math.abs;
        var SLEEP = 0;
        var INITED = 1;
        var STARTED = 2;
        var TOUCH_BOUNDARY = 10;
        var IMMEDIATE_TOUCH_BOUNDARY = 0;
        var IMMEDIATE_TIMEOUT = 180;
        var supportPointerEvents = function() {
            return styleUtils.styleProp("pointer-events")
        };
        var setGestureCover = callOnce(function() {
            var GESTURE_COVER_CLASS = "dx-gesture-cover";
            var isDesktop = "desktop" === devices.real().deviceType;
            if (!supportPointerEvents() || !isDesktop) {
                return noop
            }
            var $cover = $("<div>").addClass(GESTURE_COVER_CLASS).css("pointerEvents", "none");
            eventsEngine.subscribeGlobal($cover, "dxmousewheel", function(e) {
                e.preventDefault()
            });
            ready(function() {
                $cover.appendTo("body")
            });
            return function(toggle, cursor) {
                $cover.css("pointerEvents", toggle ? "all" : "none");
                toggle && $cover.css("cursor", cursor)
            }
        });
        var gestureCover = function(toggle, cursor) {
            var gestureCoverStrategy = setGestureCover();
            gestureCoverStrategy(toggle, cursor)
        };
        var GestureEmitter = Emitter.inherit({
            gesture: true,
            configure: function(data) {
                this.getElement().css("msTouchAction", data.immediate ? "pinch-zoom" : "");
                this.callBase(data)
            },
            allowInterruptionByMouseWheel: function() {
                return this._stage !== STARTED
            },
            getDirection: function() {
                return this.direction
            },
            _cancel: function() {
                this.callBase.apply(this, arguments);
                this._toggleGestureCover(false);
                this._stage = SLEEP
            },
            start: function(e) {
                if (e._needSkipEvent || eventUtils.needSkipEvent(e)) {
                    this._cancel(e);
                    return
                }
                this._startEvent = eventUtils.createEvent(e);
                this._startEventData = eventUtils.eventData(e);
                this._stage = INITED;
                this._init(e);
                this._setupImmediateTimer()
            },
            _setupImmediateTimer: function() {
                clearTimeout(this._immediateTimer);
                this._immediateAccepted = false;
                if (!this.immediate) {
                    return
                }
                this._immediateTimer = setTimeout(function() {
                    this._immediateAccepted = true
                }.bind(this), IMMEDIATE_TIMEOUT)
            },
            move: function(e) {
                if (this._stage === INITED && this._directionConfirmed(e)) {
                    this._stage = STARTED;
                    this._resetActiveElement();
                    this._toggleGestureCover(true);
                    this._clearSelection(e);
                    this._adjustStartEvent(e);
                    this._start(this._startEvent);
                    if (this._stage === SLEEP) {
                        return
                    }
                    this._requestAccept(e);
                    this._move(e);
                    this._forgetAccept()
                } else {
                    if (this._stage === STARTED) {
                        this._clearSelection(e);
                        this._move(e)
                    }
                }
            },
            _directionConfirmed: function(e) {
                var touchBoundary = this._getTouchBoundary(e);
                var delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e));
                var deltaX = abs(delta.x);
                var deltaY = abs(delta.y);
                var horizontalMove = this._validateMove(touchBoundary, deltaX, deltaY);
                var verticalMove = this._validateMove(touchBoundary, deltaY, deltaX);
                var direction = this.getDirection(e);
                var bothAccepted = "both" === direction && (horizontalMove || verticalMove);
                var horizontalAccepted = "horizontal" === direction && horizontalMove;
                var verticalAccepted = "vertical" === direction && verticalMove;
                return bothAccepted || horizontalAccepted || verticalAccepted || this._immediateAccepted
            },
            _validateMove: function(touchBoundary, mainAxis, crossAxis) {
                return mainAxis && mainAxis >= touchBoundary && (this.immediate ? mainAxis >= crossAxis : true)
            },
            _getTouchBoundary: function(e) {
                return this.immediate || eventUtils.isDxMouseWheelEvent(e) ? IMMEDIATE_TOUCH_BOUNDARY : TOUCH_BOUNDARY
            },
            _adjustStartEvent: function(e) {
                var touchBoundary = this._getTouchBoundary(e);
                var delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e));
                this._startEvent.pageX += sign(delta.x) * touchBoundary;
                this._startEvent.pageY += sign(delta.y) * touchBoundary
            },
            _resetActiveElement: function() {
                if ("ios" === devices.real().platform && this.getElement().find(":focus").length) {
                    domUtils.resetActiveElement()
                }
            },
            _toggleGestureCover: function(toggle) {
                this._toggleGestureCoverImpl(toggle)
            },
            _toggleGestureCoverImpl: function(toggle) {
                var isStarted = this._stage === STARTED;
                if (isStarted) {
                    gestureCover(toggle, this.getElement().css("cursor"))
                }
            },
            _clearSelection: function(e) {
                if (eventUtils.isDxMouseWheelEvent(e) || eventUtils.isTouchEvent(e)) {
                    return
                }
                domUtils.clearSelection()
            },
            end: function(e) {
                this._toggleGestureCover(false);
                if (this._stage === STARTED) {
                    this._end(e)
                } else {
                    if (this._stage === INITED) {
                        this._stop(e)
                    }
                }
                this._stage = SLEEP
            },
            dispose: function() {
                clearTimeout(this._immediateTimer);
                this.callBase.apply(this, arguments);
                this._toggleGestureCover(false)
            },
            _init: noop,
            _start: noop,
            _move: noop,
            _stop: noop,
            _end: noop
        });
        GestureEmitter.initialTouchBoundary = TOUCH_BOUNDARY;
        GestureEmitter.touchBoundary = function(newBoundary) {
            if (isDefined(newBoundary)) {
                TOUCH_BOUNDARY = newBoundary;
                return
            }
            return TOUCH_BOUNDARY
        };
        module.exports = GestureEmitter
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/load_panel.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var LoadIndicator = __webpack_require__( /*! ./load_indicator */ 72);
        var Overlay = __webpack_require__( /*! ./overlay */ 58);
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var themes = __webpack_require__( /*! ./themes */ 32);
        var LOADPANEL_CLASS = "dx-loadpanel";
        var LOADPANEL_WRAPPER_CLASS = "dx-loadpanel-wrapper";
        var LOADPANEL_INDICATOR_CLASS = "dx-loadpanel-indicator";
        var LOADPANEL_MESSAGE_CLASS = "dx-loadpanel-message";
        var LOADPANEL_CONTENT_CLASS = "dx-loadpanel-content";
        var LOADPANEL_CONTENT_WRAPPER_CLASS = "dx-loadpanel-content-wrapper";
        var LOADPANEL_PANE_HIDDEN_CLASS = "dx-loadpanel-pane-hidden";
        var LoadPanel = Overlay.inherit({
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    escape: noop
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    message: messageLocalization.format("Loading"),
                    width: 222,
                    height: 90,
                    animation: null,
                    showIndicator: true,
                    indicatorSrc: "",
                    showPane: true,
                    delay: 0,
                    hideTopOverlayHandler: null,
                    resizeEnabled: false,
                    focusStateEnabled: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "generic"
                    },
                    options: {
                        shadingColor: "transparent"
                    }
                }, {
                    device: function() {
                        return themes.isMaterial()
                    },
                    options: {
                        message: "",
                        width: 60,
                        height: 60,
                        maxHeight: 60,
                        maxWidth: 60
                    }
                }])
            },
            _init: function() {
                this.callBase.apply(this, arguments)
            },
            _initOptions: function() {
                this.callBase.apply(this, arguments);
                this.option("templatesRenderAsynchronously", false)
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(LOADPANEL_CLASS);
                this._wrapper().addClass(LOADPANEL_WRAPPER_CLASS)
            },
            _renderContentImpl: function() {
                this.callBase();
                this.$content().addClass(LOADPANEL_CONTENT_CLASS);
                this._$contentWrapper = $("<div>").addClass(LOADPANEL_CONTENT_WRAPPER_CLASS);
                this._$contentWrapper.appendTo(this._$content);
                this._togglePaneVisible();
                this._cleanPreviousContent();
                this._renderLoadIndicator();
                this._renderMessage()
            },
            _show: function() {
                var delay = this.option("delay");
                if (!delay) {
                    return this.callBase()
                }
                var deferred = new Deferred;
                var callBase = this.callBase.bind(this);
                this._clearShowTimeout();
                this._showTimeout = setTimeout(function() {
                    callBase().done(function() {
                        deferred.resolve()
                    })
                }, delay);
                return deferred.promise()
            },
            _hide: function() {
                this._clearShowTimeout();
                return this.callBase()
            },
            _clearShowTimeout: function() {
                clearTimeout(this._showTimeout)
            },
            _renderMessage: function() {
                if (!this._$contentWrapper) {
                    return
                }
                var message = this.option("message");
                if (!message) {
                    return
                }
                var $message = $("<div>").addClass(LOADPANEL_MESSAGE_CLASS).text(message);
                this._$contentWrapper.append($message)
            },
            _renderLoadIndicator: function() {
                if (!this._$contentWrapper || !this.option("showIndicator")) {
                    return
                }
                this._$indicator = $("<div>").addClass(LOADPANEL_INDICATOR_CLASS).appendTo(this._$contentWrapper);
                this._createComponent(this._$indicator, LoadIndicator, {
                    indicatorSrc: this.option("indicatorSrc")
                })
            },
            _cleanPreviousContent: function() {
                this.$content().find("." + LOADPANEL_MESSAGE_CLASS).remove();
                this.$content().find("." + LOADPANEL_INDICATOR_CLASS).remove()
            },
            _togglePaneVisible: function() {
                this.$content().toggleClass(LOADPANEL_PANE_HIDDEN_CLASS, !this.option("showPane"))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "delay":
                        break;
                    case "message":
                    case "showIndicator":
                        this._cleanPreviousContent();
                        this._renderLoadIndicator();
                        this._renderMessage();
                        break;
                    case "showPane":
                        this._togglePaneVisible();
                        break;
                    case "indicatorSrc":
                        if (this._$indicator) {
                            this._createComponent(this._$indicator, LoadIndicator, {
                                indicatorSrc: this.option("indicatorSrc")
                            })
                        }
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _dispose: function() {
                this._clearShowTimeout();
                this.callBase()
            }
        });
        registerComponent("dxLoadPanel", LoadPanel);
        module.exports = LoadPanel
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/tooltip.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./tooltip/tooltip */ 339);
        module.exports.show = __webpack_require__( /*! ./tooltip/ui.tooltip */ 243).show;
        module.exports.hide = __webpack_require__( /*! ./tooltip/ui.tooltip */ 243).hide
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/shared/filtering.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var DEFAULT_DATE_INTERVAL = ["year", "month", "day"];
        var DEFAULT_DATETIME_INTERVAL = ["year", "month", "day", "hour", "minute"];
        module.exports = function() {
            var getFilterSelector = function(column, target) {
                var selector = column.dataField || column.selector;
                if ("search" === target) {
                    selector = column.displayField || column.calculateDisplayValue || selector
                }
                return selector
            };
            var isZeroTime = function(date) {
                return date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds() < 1
            };
            var isDateType = function(dataType) {
                return "date" === dataType || "datetime" === dataType
            };
            var getDateValues = function(dateValue) {
                if (typeUtils.isDate(dateValue)) {
                    return [dateValue.getFullYear(), dateValue.getMonth(), dateValue.getDate(), dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds()]
                }
                return iteratorUtils.map(("" + dateValue).split("/"), function(value, index) {
                    return 1 === index ? Number(value) - 1 : Number(value)
                })
            };
            var getFilterExpressionByRange = function(filterValue, target) {
                var column = this;
                var endFilterValue;
                var startFilterExpression;
                var endFilterExpression;
                var selector = getFilterSelector(column, target);
                if (Array.isArray(filterValue) && typeUtils.isDefined(filterValue[0]) && typeUtils.isDefined(filterValue[1])) {
                    startFilterExpression = [selector, ">=", filterValue[0]];
                    endFilterExpression = [selector, "<=", filterValue[1]];
                    if (isDateType(column.dataType) && isZeroTime(filterValue[1])) {
                        endFilterValue = new Date(filterValue[1].getTime());
                        if ("date" === column.dataType) {
                            endFilterValue.setDate(filterValue[1].getDate() + 1)
                        }
                        endFilterExpression = [selector, "<", endFilterValue]
                    }
                    return [startFilterExpression, "and", endFilterExpression]
                }
            };
            var getFilterExpressionForDate = function(filterValue, selectedFilterOperation, target) {
                var column = this;
                var dateStart;
                var dateEnd;
                var dateInterval;
                var values = getDateValues(filterValue);
                var selector = getFilterSelector(column, target);
                if ("headerFilter" === target) {
                    dateInterval = module.exports.getGroupInterval(column)[values.length - 1]
                } else {
                    if ("datetime" === column.dataType) {
                        dateInterval = "minute"
                    }
                }
                switch (dateInterval) {
                    case "year":
                        dateStart = new Date(values[0], 0, 1);
                        dateEnd = new Date(values[0] + 1, 0, 1);
                        break;
                    case "month":
                        dateStart = new Date(values[0], values[1], 1);
                        dateEnd = new Date(values[0], values[1] + 1, 1);
                        break;
                    case "quarter":
                        dateStart = new Date(values[0], 3 * values[1], 1);
                        dateEnd = new Date(values[0], 3 * values[1] + 3, 1);
                        break;
                    case "hour":
                        dateStart = new Date(values[0], values[1], values[2], values[3]);
                        dateEnd = new Date(values[0], values[1], values[2], values[3] + 1);
                        break;
                    case "minute":
                        dateStart = new Date(values[0], values[1], values[2], values[3], values[4]);
                        dateEnd = new Date(values[0], values[1], values[2], values[3], values[4] + 1);
                        break;
                    case "second":
                        dateStart = new Date(values[0], values[1], values[2], values[3], values[4], values[5]);
                        dateEnd = new Date(values[0], values[1], values[2], values[3], values[4], values[5] + 1);
                        break;
                    default:
                        dateStart = new Date(values[0], values[1], values[2]);
                        dateEnd = new Date(values[0], values[1], values[2] + 1)
                }
                switch (selectedFilterOperation) {
                    case "<":
                        return [selector, "<", dateStart];
                    case "<=":
                        return [selector, "<", dateEnd];
                    case ">":
                        return [selector, ">=", dateEnd];
                    case ">=":
                        return [selector, ">=", dateStart];
                    case "<>":
                        return [
                            [selector, "<", dateStart], "or", [selector, ">=", dateEnd]
                        ];
                    default:
                        return [
                            [selector, ">=", dateStart], "and", [selector, "<", dateEnd]
                        ]
                }
            };
            var getFilterExpressionForNumber = function(filterValue, selectedFilterOperation, target) {
                var column = this;
                var selector = getFilterSelector(column, target);
                var groupInterval = module.exports.getGroupInterval(column);
                if ("headerFilter" === target && groupInterval && typeUtils.isDefined(filterValue)) {
                    var values = ("" + filterValue).split("/");
                    var value = Number(values[values.length - 1]);
                    var interval = groupInterval[values.length - 1];
                    var startFilterValue = [selector, ">=", value];
                    var endFilterValue = [selector, "<", value + interval];
                    var condition = [startFilterValue, "and", endFilterValue];
                    return condition
                }
                return [selector, selectedFilterOperation || "=", filterValue]
            };
            return {
                defaultCalculateFilterExpression: function(filterValue, selectedFilterOperation, target) {
                    var column = this;
                    var selector = getFilterSelector(column, target);
                    var isSearchByDisplayValue = column.calculateDisplayValue && "search" === target;
                    var dataType = isSearchByDisplayValue && column.lookup && column.lookup.dataType || column.dataType;
                    var filter = null;
                    if (("headerFilter" === target || "filterBuilder" === target) && null === filterValue) {
                        filter = [selector, selectedFilterOperation || "=", null];
                        if ("string" === dataType) {
                            filter = [filter, "=" === selectedFilterOperation ? "or" : "and", [selector, selectedFilterOperation || "=", ""]]
                        }
                    } else {
                        if ("string" === dataType && (!column.lookup || isSearchByDisplayValue)) {
                            filter = [selector, selectedFilterOperation || "contains", filterValue]
                        } else {
                            if ("between" === selectedFilterOperation) {
                                return getFilterExpressionByRange.apply(column, [filterValue, target])
                            } else {
                                if (isDateType(dataType) && typeUtils.isDefined(filterValue)) {
                                    return getFilterExpressionForDate.apply(column, arguments)
                                } else {
                                    if ("number" === dataType) {
                                        return getFilterExpressionForNumber.apply(column, arguments)
                                    } else {
                                        if ("object" !== dataType) {
                                            filter = [selector, selectedFilterOperation || "=", filterValue]
                                        }
                                    }
                                }
                            }
                        }
                    }
                    return filter
                },
                getGroupInterval: function(column) {
                    var index;
                    var result = [];
                    var dateIntervals = ["year", "month", "day", "hour", "minute", "second"];
                    var groupInterval = column.headerFilter && column.headerFilter.groupInterval;
                    var interval = "quarter" === groupInterval ? "month" : groupInterval;
                    if (isDateType(column.dataType) && null !== groupInterval) {
                        result = "datetime" === column.dataType ? DEFAULT_DATETIME_INTERVAL : DEFAULT_DATE_INTERVAL;
                        index = inArray(interval, dateIntervals);
                        if (index >= 0) {
                            result = dateIntervals.slice(0, index);
                            result.push(groupInterval);
                            return result
                        }
                        return result
                    } else {
                        if (typeUtils.isDefined(groupInterval)) {
                            return Array.isArray(groupInterval) ? groupInterval : [groupInterval]
                        }
                    }
                }
            }
        }()
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.columns_view.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _double_click = __webpack_require__( /*! ../../events/double_click */ 137);
        var _double_click2 = _interopRequireDefault(_double_click);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _style = __webpack_require__( /*! ../../core/utils/style */ 93);
        var _style2 = _interopRequireDefault(_style);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = __webpack_require__( /*! ./ui.grid_core.column_state_mixin */ 348);
        var _uiGrid_core5 = _interopRequireDefault(_uiGrid_core4);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCROLL_CONTAINER_CLASS = "scroll-container";
        var GROUP_SPACE_CLASS = "group-space";
        var CONTENT_CLASS = "content";
        var TABLE_CLASS = "table";
        var TABLE_FIXED_CLASS = "table-fixed";
        var CONTENT_FIXED_CLASS = "content-fixed";
        var ROW_CLASS = "dx-row";
        var GROUP_ROW_CLASS = "dx-group-row";
        var DETAIL_ROW_CLASS = "dx-master-detail-row";
        var FILTER_ROW_CLASS = "filter-row";
        var CELL_UPDATED_ANIMATION_CLASS = "cell-updated-animation";
        var HIDDEN_COLUMNS_WIDTH = "0.0001px";
        var CELL_HINT_VISIBLE = "dxCellHintVisible";
        var FORM_FIELD_ITEM_CONTENT_CLASS = "dx-field-item-content";
        var appendElementTemplate = {
            render: function(options) {
                options.container.append(options.content)
            }
        };
        var subscribeToRowEvents = function(that, $table) {
            var touchTarget;
            var touchCurrentTarget;
            var timeoutId;

            function clearTouchTargets(timeout) {
                return setTimeout(function() {
                    touchTarget = touchCurrentTarget = null
                }, timeout)
            }
            _events_engine2.default.on($table, "touchstart touchend", ".dx-row", function(e) {
                clearTimeout(timeoutId);
                if ("touchstart" === e.type) {
                    touchTarget = e.target;
                    touchCurrentTarget = e.currentTarget;
                    timeoutId = clearTouchTargets(1e3)
                } else {
                    timeoutId = clearTouchTargets()
                }
            });
            _events_engine2.default.on($table, [_click2.default.name, _double_click2.default.name, _pointer2.default.down].join(" "), ".dx-row", {
                useNative: that._isNativeClick()
            }, that.createAction(function(e) {
                var event = e.event;
                if (touchTarget) {
                    event.target = touchTarget;
                    event.currentTarget = touchCurrentTarget
                }
                if (!(0, _renderer2.default)(event.target).closest("a").length) {
                    e.rowIndex = that.getRowIndex(event.currentTarget);
                    if (e.rowIndex >= 0) {
                        e.rowElement = (0, _dom.getPublicElement)((0, _renderer2.default)(event.currentTarget));
                        e.columns = that.getColumns();
                        if (event.type === _pointer2.default.down) {
                            that._rowPointerDown(e)
                        } else {
                            if (event.type === _click2.default.name) {
                                that._rowClick(e)
                            } else {
                                that._rowDblClick(e)
                            }
                        }
                    }
                }
            }))
        };
        var getWidthStyle = function(width) {
            if ("auto" === width) {
                return ""
            }
            return _type2.default.isNumeric(width) ? width + "px" : width
        };
        var setCellWidth = function(cell, column, width) {
            cell.style.width = cell.style.maxWidth = "auto" === column.width ? "" : width
        };
        var copyAttributes = function(element, newElement) {
            if (!element || !newElement) {
                return
            }
            var oldAttributes = element.attributes;
            var newAttributes = newElement.attributes;
            var i;
            for (i = 0; i < oldAttributes.length; i++) {
                var name = oldAttributes[i].nodeName;
                if (!newElement.hasAttribute(name)) {
                    element.removeAttribute(name)
                }
            }
            for (i = 0; i < newAttributes.length; i++) {
                element.setAttribute(newAttributes[i].nodeName, newAttributes[i].nodeValue)
            }
        };
        exports.ColumnsView = _uiGrid_core2.default.View.inherit(_uiGrid_core5.default).inherit({
            _createScrollableOptions: function() {
                var that = this;
                var scrollingOptions = that.option("scrolling");
                var useNativeScrolling = that.option("scrolling.useNative");
                var options = (0, _extend.extend)({
                    pushBackValue: 0
                }, scrollingOptions, {
                    direction: "both",
                    bounceEnabled: false,
                    useKeyboard: false
                });
                if (void 0 === useNativeScrolling) {
                    useNativeScrolling = true
                }
                if ("auto" === useNativeScrolling) {
                    delete options.useNative;
                    delete options.useSimulatedScrollbar
                } else {
                    options.useNative = !!useNativeScrolling;
                    options.useSimulatedScrollbar = !useNativeScrolling
                }
                return options
            },
            _updateCell: function($cell, parameters) {
                if (parameters.rowType) {
                    this._cellPrepared($cell, parameters)
                }
            },
            _createCell: function(options) {
                var column = options.column;
                var alignment = column.alignment || (0, _position.getDefaultAlignment)(this.option("rtlEnabled"));
                var cell = _dom_adapter2.default.createElement("td");
                cell.style.textAlign = alignment;
                var $cell = (0, _renderer2.default)(cell);
                if ("data" === options.rowType && column.headerId && !column.type) {
                    if (this.component.option("showColumnHeaders")) {
                        this.setAria("describedby", column.headerId, $cell)
                    }
                }
                if (column.cssClass) {
                    $cell.addClass(column.cssClass)
                }
                if ("expand" === column.command) {
                    $cell.addClass(column.cssClass);
                    $cell.addClass(this.addWidgetPrefix(GROUP_SPACE_CLASS))
                }
                if (column.colspan > 1) {
                    $cell.attr("colSpan", column.colspan)
                } else {
                    if (!column.isBand && "auto" !== column.visibleWidth && !this.option("legacyRendering") && this.option("columnAutoWidth")) {
                        if (column.width || column.minWidth) {
                            cell.style.minWidth = getWidthStyle(column.minWidth || column.width)
                        }
                        if (column.width) {
                            setCellWidth(cell, column, getWidthStyle(column.width))
                        }
                    }
                }
                return $cell
            },
            _createRow: function(rowObject) {
                var $element = (0, _renderer2.default)("<tr>").addClass(ROW_CLASS);
                this.setAria("role", "row", $element);
                return $element
            },
            _isAltRow: function(row) {
                return row && row.dataIndex % 2 === 1
            },
            _createTable: function(columns, isAppend) {
                var that = this;
                var $table = (0, _renderer2.default)("<table>").addClass(that.addWidgetPrefix(TABLE_CLASS)).addClass(that.addWidgetPrefix(TABLE_FIXED_CLASS));
                if (columns && !isAppend) {
                    $table.append(that._createColGroup(columns));
                    if (_browser2.default.safari) {
                        $table.append((0, _renderer2.default)("<thead>").append("<tr>"))
                    }
                    that.setAria("role", "presentation", $table)
                } else {
                    that.setAria("hidden", true, $table)
                }
                this.setAria("role", "presentation", (0, _renderer2.default)("<tbody>").appendTo($table));
                if (isAppend) {
                    return $table
                }
                if (_browser2.default.mozilla) {
                    _events_engine2.default.on($table, "mousedown", "td", function(e) {
                        if (e.ctrlKey) {
                            e.preventDefault()
                        }
                    })
                }
                if (that.option("cellHintEnabled")) {
                    _events_engine2.default.on($table, "mousemove", ".dx-row > td", this.createAction(function(args) {
                        var e = args.event;
                        var $element = (0, _renderer2.default)(e.target);
                        var $cell = (0, _renderer2.default)(e.currentTarget);
                        var $row = $cell.parent();
                        var isDataRow = $row.hasClass("dx-data-row");
                        var isHeaderRow = $row.hasClass("dx-header-row");
                        var isGroupRow = $row.hasClass(GROUP_ROW_CLASS);
                        var isMasterDetailRow = $row.hasClass(DETAIL_ROW_CLASS);
                        var isFilterRow = $row.hasClass(that.addWidgetPrefix(FILTER_ROW_CLASS));
                        var visibleColumns = that._columnsController.getVisibleColumns();
                        var rowOptions = $row.data("options");
                        var columnIndex = $cell.index();
                        var cellOptions = rowOptions && rowOptions.cells && rowOptions.cells[columnIndex];
                        var column = cellOptions ? cellOptions.column : visibleColumns[columnIndex];
                        var msieCorrection = _browser2.default.msie ? 1 : 0;
                        if (!isMasterDetailRow && !isFilterRow && (!isDataRow || isDataRow && column && !column.cellTemplate) && (!isHeaderRow || isHeaderRow && column && !column.headerCellTemplate) && (!isGroupRow || isGroupRow && column && (void 0 === column.groupIndex || !column.groupCellTemplate))) {
                            if ($element.data(CELL_HINT_VISIBLE)) {
                                $element.removeAttr("title");
                                $element.data(CELL_HINT_VISIBLE, false)
                            }
                            var difference = $element[0].scrollWidth - $element[0].clientWidth - msieCorrection;
                            if (difference > 0 && !_type2.default.isDefined($element.attr("title"))) {
                                $element.attr("title", $element.text());
                                $element.data(CELL_HINT_VISIBLE, true)
                            }
                        }
                    }))
                }
                var getOptions = function(event) {
                    var $cell = (0, _renderer2.default)(event.currentTarget);
                    var $fieldItemContent = (0, _renderer2.default)(event.target).closest("." + FORM_FIELD_ITEM_CONTENT_CLASS);
                    var rowOptions = $cell.parent().data("options");
                    var options = rowOptions && rowOptions.cells && rowOptions.cells[$cell.index()];
                    if (!$cell.closest("table").is(event.delegateTarget)) {
                        return
                    }
                    var resultOptions = (0, _extend.extend)({}, options, {
                        cellElement: (0, _dom.getPublicElement)($cell),
                        event: event,
                        eventType: event.type
                    });
                    if ($fieldItemContent.length) {
                        var formItemOptions = $fieldItemContent.data("dx-form-item");
                        if (formItemOptions.column) {
                            resultOptions.column = formItemOptions.column;
                            resultOptions.columnIndex = that._columnsController.getVisibleIndex(resultOptions.column.index)
                        }
                    }
                    return resultOptions
                };
                _events_engine2.default.on($table, "mouseover", ".dx-row > td", function(e) {
                    var options = getOptions(e);
                    options && that.executeAction("onCellHoverChanged", options)
                });
                _events_engine2.default.on($table, "mouseout", ".dx-row > td", function(e) {
                    var options = getOptions(e);
                    options && that.executeAction("onCellHoverChanged", options)
                });
                _events_engine2.default.on($table, _click2.default.name, ".dx-row > td", function(e) {
                    var options = getOptions(e);
                    options && that.executeAction("onCellClick", options)
                });
                _events_engine2.default.on($table, _double_click2.default.name, ".dx-row > td", function(e) {
                    var options = getOptions(e);
                    options && that.executeAction("onCellDblClick", options)
                });
                subscribeToRowEvents(that, $table);
                return $table
            },
            _isNativeClick: _common.noop,
            _rowPointerDown: _common.noop,
            _rowClick: _common.noop,
            _rowDblClick: _common.noop,
            _createColGroup: function(columns) {
                var colgroupElement = (0, _renderer2.default)("<colgroup>");
                for (var i = 0; i < columns.length; i++) {
                    var colspan = columns[i].colspan || 1;
                    for (var j = 0; j < colspan; j++) {
                        colgroupElement.append(this._createCol(columns[i]))
                    }
                }
                return colgroupElement
            },
            _createCol: function(column) {
                var width = column.visibleWidth || column.width;
                if ("adaptiveHidden" === width) {
                    width = HIDDEN_COLUMNS_WIDTH
                }
                var col = (0, _renderer2.default)("<col>");
                _style2.default.setWidth(col, width);
                return col
            },
            renderDelayedTemplates: function() {
                var delayedTemplates = this._delayedTemplates;
                var syncTemplates = delayedTemplates.filter(function(template) {
                    return !template.async
                });
                var asyncTemplates = delayedTemplates.filter(function(template) {
                    return template.async
                });
                this._delayedTemplates = [];
                this._renderDelayedTemplatesCore(syncTemplates);
                this._renderDelayedTemplatesCoreAsync(asyncTemplates)
            },
            _renderDelayedTemplatesCoreAsync: function(templates) {
                var that = this;
                if (templates.length) {
                    (0, _window.getWindow)().setTimeout(function() {
                        that._renderDelayedTemplatesCore(templates, true)
                    })
                }
            },
            _renderDelayedTemplatesCore: function(templates, isAsync) {
                var date = new Date;
                while (templates.length) {
                    var templateParameters = templates.shift();
                    var options = templateParameters.options;
                    var doc = _dom_adapter2.default.getDocument();
                    if (!isAsync || (0, _renderer2.default)(options.container).closest(doc).length) {
                        templateParameters.template.render(options)
                    }
                    if (isAsync && new Date - date > 30) {
                        this._renderDelayedTemplatesCoreAsync(templates);
                        break
                    }
                }
                if (!templates.length && this._delayedTemplates.length) {
                    this.renderDelayedTemplates()
                }
            },
            _processTemplate: function(template) {
                var that = this;
                var renderingTemplate;
                if (template && template.render && !_type2.default.isRenderer(template)) {
                    renderingTemplate = {
                        allowRenderToDetachedContainer: template.allowRenderToDetachedContainer,
                        render: function(options) {
                            template.render(options.container, options.model);
                            options.deferred && options.deferred.resolve()
                        }
                    }
                } else {
                    if (_type2.default.isFunction(template)) {
                        renderingTemplate = {
                            render: function(options) {
                                var renderedTemplate = template((0, _dom.getPublicElement)(options.container), options.model);
                                if (renderedTemplate && (renderedTemplate.nodeType || _type2.default.isRenderer(renderedTemplate))) {
                                    options.container.append(renderedTemplate)
                                }
                                options.deferred && options.deferred.resolve()
                            }
                        }
                    } else {
                        var templateID = _type2.default.isString(template) ? template : (0, _renderer2.default)(template).attr("id");
                        if (!templateID) {
                            renderingTemplate = that.getTemplate(template)
                        } else {
                            if (!that._templatesCache[templateID]) {
                                that._templatesCache[templateID] = that.getTemplate(template)
                            }
                            renderingTemplate = that._templatesCache[templateID]
                        }
                    }
                }
                return renderingTemplate
            },
            renderTemplate: function(container, template, options, allowRenderToDetachedContainer) {
                var that = this;
                var renderingTemplate = that._processTemplate(template, options);
                var column = options.column;
                var isDataRow = "data" === options.rowType;
                var templateDeferred = new _deferred.Deferred;
                var templateOptions = {
                    container: container,
                    model: options,
                    deferred: templateDeferred,
                    onRendered: function() {
                        templateDeferred.resolve()
                    }
                };
                if (renderingTemplate) {
                    options.component = that.component;
                    var async = column && (column.renderAsync && isDataRow || that.option("renderAsync") && (false !== column.renderAsync && (column.command || column.showEditorAlways) && isDataRow || "filter" === options.rowType));
                    if ((renderingTemplate.allowRenderToDetachedContainer || allowRenderToDetachedContainer) && !async) {
                        renderingTemplate.render(templateOptions)
                    } else {
                        that._delayedTemplates.push({
                            template: renderingTemplate,
                            options: templateOptions,
                            async: async
                        })
                    }
                } else {
                    templateDeferred.reject()
                }
                return templateDeferred.promise()
            },
            _getBodies: function(tableElement) {
                return (0, _renderer2.default)(tableElement).children("tbody").not(".dx-header").not(".dx-footer")
            },
            _wrapRowIfNeed: function($table, $row) {
                var $tBodies = this.option("rowTemplate") && this._getBodies(this._tableElement || $table);
                if ($tBodies && $tBodies.filter("." + ROW_CLASS).length) {
                    var $tbody = (0, _renderer2.default)("<tbody>").addClass($row.attr("class"));
                    this.setAria("role", "presentation", $tbody);
                    return $tbody.append($row)
                }
                return $row
            },
            _appendRow: function($table, $row, appendTemplate) {
                appendTemplate = appendTemplate || appendElementTemplate;
                appendTemplate.render({
                    content: $row,
                    container: $table
                })
            },
            _resizeCore: function() {
                var scrollLeft = this._scrollLeft;
                if (scrollLeft >= 0) {
                    this._scrollLeft = 0;
                    this.scrollTo({
                        left: scrollLeft
                    })
                }
            },
            _renderCore: function(e) {
                var $root = this.element().parent();
                if (!$root || $root.parent().length) {
                    this.renderDelayedTemplates(e)
                }
            },
            _renderTable: function(options) {
                options = options || {};
                options.columns = this._columnsController.getVisibleColumns();
                var changeType = options.change && options.change.changeType;
                var $table = this._createTable(options.columns, "append" === changeType || "prepend" === changeType || "update" === changeType);
                this._renderRows($table, options);
                return $table
            },
            _renderRows: function($table, options) {
                var that = this;
                var rows = that._getRows(options.change);
                var columnIndices = options.change && options.change.columnIndices || [];
                var changeTypes = options.change && options.change.changeTypes || [];
                for (var i = 0; i < rows.length; i++) {
                    that._renderRow($table, (0, _extend.extend)({
                        row: rows[i],
                        columnIndices: columnIndices[i],
                        changeType: changeTypes[i]
                    }, options))
                }
            },
            _renderRow: function($table, options) {
                if (!options.columnIndices) {
                    options.row.cells = []
                }
                var $row = this._createRow(options.row);
                var $wrappedRow = this._wrapRowIfNeed($table, $row);
                if ("remove" !== options.changeType) {
                    this._renderCells($row, options)
                }
                this._appendRow($table, $wrappedRow);
                var rowOptions = (0, _extend.extend)({
                    columns: options.columns
                }, options.row);
                this._addWatchMethod(rowOptions, options.row);
                this._rowPrepared($wrappedRow, rowOptions, options.row)
            },
            _needRenderCell: function(columnIndex, columnIndices) {
                return !columnIndices || columnIndices.indexOf(columnIndex) >= 0
            },
            _renderCells: function($row, options) {
                var that = this;
                var columnIndex = 0;
                var row = options.row;
                var columns = options.columns;
                for (var i = 0; i < columns.length; i++) {
                    if (this._needRenderCell(i, options.columnIndices)) {
                        that._renderCell($row, (0, _extend.extend)({
                            column: columns[i],
                            columnIndex: columnIndex,
                            value: row.values && row.values[columnIndex],
                            oldValue: row.oldValues && row.oldValues[columnIndex]
                        }, options))
                    }
                    if (columns[i].colspan > 1) {
                        columnIndex += columns[i].colspan
                    } else {
                        columnIndex++
                    }
                }
            },
            _updateCells: function($rowElement, $newRowElement, columnIndices) {
                var $cells = $rowElement.children();
                var $newCells = $newRowElement.children();
                var highlightChanges = this.option("highlightChanges");
                var cellUpdatedClass = this.addWidgetPrefix(CELL_UPDATED_ANIMATION_CLASS);
                columnIndices.forEach(function(columnIndex, index) {
                    var $cell = $cells.eq(columnIndex);
                    var $newCell = $newCells.eq(index);
                    $cell.replaceWith($newCell);
                    if (highlightChanges && !$newCell.hasClass("dx-command-expand")) {
                        $newCell.addClass(cellUpdatedClass)
                    }
                });
                copyAttributes($rowElement.get(0), $newRowElement.get(0))
            },
            _setCellAriaAttributes: function($cell, cellOptions) {
                if ("freeSpace" !== cellOptions.rowType) {
                    this.setAria("selected", false, $cell);
                    this.setAria("role", "gridcell", $cell);
                    this.setAria("colindex", cellOptions.columnIndex + 1, $cell)
                }
            },
            _renderCell: function($row, options) {
                var cellOptions = this._getCellOptions(options);
                if (options.columnIndices) {
                    if (options.row.cells) {
                        options.row.cells[cellOptions.columnIndex] = cellOptions
                    }
                } else {
                    options.row.cells.push(cellOptions)
                }
                var $cell = this._createCell(cellOptions);
                this._setCellAriaAttributes($cell, cellOptions);
                this._renderCellContent($cell, cellOptions);
                $row.get(0).appendChild($cell.get(0));
                return $cell
            },
            _renderCellContent: function($cell, options) {
                var _this = this;
                var template = this._getCellTemplate(options);
                (0, _deferred.when)(!template || this.renderTemplate($cell, template, options)).done(function() {
                    _this._updateCell($cell, options)
                })
            },
            _getCellTemplate: function() {},
            _getRows: function() {
                return []
            },
            _getCellOptions: function(options) {
                var cellOptions = {
                    column: options.column,
                    columnIndex: options.columnIndex,
                    rowType: options.row.rowType,
                    isAltRow: this._isAltRow(options.row)
                };
                this._addWatchMethod(cellOptions);
                return cellOptions
            },
            _addWatchMethod: function(options, source) {
                if (!this.option("repaintChangesOnly")) {
                    return
                }
                var watchers = [];
                source = source || options;
                source.watch = source.watch || function(getter, updateFunc) {
                    var oldValue = getter(source.data);
                    var watcher = function(row) {
                        var newValue = getter(source.data);
                        if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
                            if (row) {
                                updateFunc(newValue, oldValue)
                            }
                            oldValue = newValue
                        }
                    };
                    watchers.push(watcher);
                    var stopWatch = function() {
                        var index = watchers.indexOf(watcher);
                        if (index >= 0) {
                            watchers.splice(index, 1)
                        }
                    };
                    return stopWatch
                };
                source.update = source.update || function(row) {
                    if (row) {
                        this.data = options.data = row.data;
                        this.rowIndex = options.rowIndex = row.rowIndex;
                        this.dataIndex = options.dataIndex = row.dataIndex;
                        this.isExpanded = options.isExpanded = row.isExpanded;
                        if (options.row) {
                            options.row = row
                        }
                    }
                    watchers.forEach(function(watcher) {
                        watcher(row)
                    })
                };
                if (source !== options) {
                    options.watch = source.watch.bind(source)
                }
                return options
            },
            _cellPrepared: function(cell, options) {
                options.cellElement = (0, _dom.getPublicElement)((0, _renderer2.default)(cell));
                this.executeAction("onCellPrepared", options)
            },
            _rowPrepared: function($row, options) {
                _element_data2.default.data($row.get(0), "options", options);
                options.rowElement = (0, _dom.getPublicElement)($row);
                this.executeAction("onRowPrepared", options)
            },
            _columnOptionChanged: function(e) {
                var optionNames = e.optionNames;
                if ((0, _uiGrid_core3.checkChanges)(optionNames, ["width", "visibleWidth"])) {
                    var visibleColumns = this._columnsController.getVisibleColumns();
                    var widths = _iterator2.default.map(visibleColumns, function(column) {
                        var width = column.visibleWidth || column.width;
                        return _type2.default.isDefined(width) ? width : "auto"
                    });
                    this.setColumnWidths({
                        widths: widths,
                        optionNames: optionNames
                    });
                    return
                }
                if (!this._requireReady) {
                    this.render()
                }
            },
            getCellIndex: function($cell) {
                var cellIndex = $cell.length ? $cell[0].cellIndex : -1;
                return cellIndex
            },
            getTableElements: function() {
                return this._tableElement || (0, _renderer2.default)()
            },
            _getTableElement: function() {
                return this._tableElement
            },
            _setTableElement: function(tableElement) {
                this._tableElement = tableElement
            },
            optionChanged: function(args) {
                this.callBase(args);
                switch (args.name) {
                    case "cellHintEnabled":
                    case "onCellPrepared":
                    case "onRowPrepared":
                    case "onCellHoverChanged":
                        this._invalidate(true, true);
                        args.handled = true
                }
            },
            init: function() {
                var that = this;
                that._scrollLeft = -1;
                that._columnsController = that.getController("columns");
                that._dataController = that.getController("data");
                that._delayedTemplates = [];
                that._templatesCache = {};
                that.createAction("onCellClick");
                that.createAction("onRowClick");
                that.createAction("onCellDblClick");
                that.createAction("onRowDblClick");
                that.createAction("onCellHoverChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                });
                that.createAction("onCellPrepared", {
                    excludeValidators: ["disabled", "readOnly"],
                    category: "rendering"
                });
                that.createAction("onRowPrepared", {
                    excludeValidators: ["disabled", "readOnly"],
                    category: "rendering",
                    afterExecute: function(e) {
                        that._afterRowPrepared(e)
                    }
                });
                that._columnsController.columnsChanged.add(that._columnOptionChanged.bind(that));
                that._dataController && that._dataController.changed.add(that._handleDataChanged.bind(that))
            },
            _afterRowPrepared: _common.noop,
            _handleDataChanged: function() {},
            callbackNames: function() {
                return ["scrollChanged"]
            },
            scrollTo: function(pos) {
                var $element = this.element();
                var $scrollContainer = $element && $element.children("." + this.addWidgetPrefix(SCROLL_CONTAINER_CLASS)).not("." + this.addWidgetPrefix(CONTENT_FIXED_CLASS));
                if (_type2.default.isDefined(pos) && _type2.default.isDefined(pos.left) && this._scrollLeft !== pos.left) {
                    this._scrollLeft = pos.left;
                    $scrollContainer && $scrollContainer.scrollLeft(pos.left)
                }
            },
            _wrapTableInScrollContainer: function($table) {
                var _this2 = this;
                var $scrollContainer = (0, _renderer2.default)("<div>");
                _events_engine2.default.on($scrollContainer, "scroll", function() {
                    var scrollLeft = $scrollContainer.scrollLeft();
                    if (scrollLeft !== _this2._scrollLeft) {
                        _this2.scrollChanged.fire({
                            left: scrollLeft
                        }, _this2.name)
                    }
                });
                $scrollContainer.addClass(this.addWidgetPrefix(CONTENT_CLASS)).addClass(this.addWidgetPrefix(SCROLL_CONTAINER_CLASS)).append($table).appendTo(this.element());
                this.setAria("role", "presentation", $scrollContainer);
                return $scrollContainer
            },
            _updateContent: function($newTableElement) {
                this._setTableElement($newTableElement);
                this._wrapTableInScrollContainer($newTableElement)
            },
            _findContentElement: _common.noop,
            _getWidths: function($cellElements) {
                var result = [];
                var legacyRendering = this.option("legacyRendering");
                var width;
                if ($cellElements) {
                    _iterator2.default.each($cellElements, function(index, item) {
                        width = item.offsetWidth;
                        if (item.getBoundingClientRect) {
                            var clientRect = (0, _position.getBoundingRect)(item);
                            if (clientRect.width > width - 1) {
                                width = legacyRendering ? Math.ceil(clientRect.width) : clientRect.width
                            }
                        }
                        result.push(width)
                    })
                }
                return result
            },
            getColumnWidths: function($tableElement) {
                var that = this;
                var result = [];
                var $rows;
                var $cells;
                (this.option("forceApplyBindings") || _common.noop)();
                $tableElement = $tableElement || that._getTableElement();
                if ($tableElement) {
                    $rows = $tableElement.children("tbody").children();
                    for (var i = 0; i < $rows.length; i++) {
                        var $row = $rows.eq(i);
                        var isRowVisible = "none" !== $row.get(0).style.display && !$row.hasClass("dx-state-invisible");
                        if (!$row.is("." + GROUP_ROW_CLASS) && !$row.is("." + DETAIL_ROW_CLASS) && isRowVisible) {
                            $cells = $row.children("td");
                            break
                        }
                    }
                    result = that._getWidths($cells)
                }
                return result
            },
            getVisibleColumnIndex: function(columnIndex, rowIndex) {
                return columnIndex
            },
            setColumnWidths: function(_ref) {
                var widths = _ref.widths,
                    $tableElement = _ref.$tableElement,
                    columns = _ref.columns,
                    fixed = _ref.fixed;
                var $cols;
                var width;
                var minWidth;
                var columnIndex;
                var columnAutoWidth = this.option("columnAutoWidth");
                var legacyRendering = this.option("legacyRendering");
                $tableElement = $tableElement || this._getTableElement();
                if ($tableElement && $tableElement.length && widths) {
                    columnIndex = 0;
                    $cols = $tableElement.children("colgroup").children("col");
                    _style2.default.setWidth($cols, "auto");
                    columns = columns || this.getColumns(null, $tableElement);
                    for (var i = 0; i < columns.length; i++) {
                        if (!legacyRendering && columnAutoWidth && !fixed) {
                            width = columns[i].width;
                            if (width && !columns[i].command) {
                                width = columns[i].visibleWidth || width;
                                width = getWidthStyle(width);
                                minWidth = getWidthStyle(columns[i].minWidth || width);
                                var $rows = $rows || $tableElement.children().children(".dx-row").not("." + GROUP_ROW_CLASS).not("." + DETAIL_ROW_CLASS);
                                for (var rowIndex = 0; rowIndex < $rows.length; rowIndex++) {
                                    var visibleIndex = this.getVisibleColumnIndex(i, rowIndex);
                                    var cell = $rows[rowIndex].cells[visibleIndex];
                                    if (cell) {
                                        setCellWidth(cell, columns[i], width);
                                        cell.style.minWidth = minWidth
                                    }
                                }
                            }
                        }
                        if (columns[i].colspan) {
                            columnIndex += columns[i].colspan;
                            continue
                        }
                        width = widths[columnIndex];
                        if ("adaptiveHidden" === width) {
                            width = HIDDEN_COLUMNS_WIDTH
                        }
                        if ("number" === typeof width) {
                            width = width.toFixed(3) + "px"
                        }
                        _style2.default.setWidth($cols.eq(columnIndex), _type2.default.isDefined(width) ? width : "auto");
                        columnIndex++
                    }
                }
            },
            getCellElements: function(rowIndex) {
                return this._getCellElementsCore(rowIndex)
            },
            _getCellElementsCore: function(rowIndex) {
                var $row = this._getRowElements().eq(rowIndex);
                return $row.children()
            },
            _getCellElement: function(rowIndex, columnIdentifier) {
                var that = this;
                var $cell;
                var $cells = that.getCellElements(rowIndex);
                var columnVisibleIndex = that._getVisibleColumnIndex($cells, rowIndex, columnIdentifier);
                if ($cells.length && columnVisibleIndex >= 0) {
                    $cell = $cells.eq(columnVisibleIndex)
                }
                if ($cell && $cell.length) {
                    return $cell
                }
            },
            _getRowElement: function(rowIndex) {
                var that = this;
                var $rowElement = (0, _renderer2.default)();
                var $tableElements = that.getTableElements();
                _iterator2.default.each($tableElements, function(_, tableElement) {
                    $rowElement = $rowElement.add(that._getRowElements((0, _renderer2.default)(tableElement)).eq(rowIndex))
                });
                if ($rowElement.length) {
                    return $rowElement
                }
            },
            getCellElement: function(rowIndex, columnIdentifier) {
                return (0, _dom.getPublicElement)(this._getCellElement(rowIndex, columnIdentifier))
            },
            getRowElement: function(rowIndex) {
                var $rows = this._getRowElement(rowIndex);
                var elements = [];
                if ($rows && !(0, _dom.getPublicElement)($rows).get) {
                    for (var i = 0; i < $rows.length; i++) {
                        elements.push($rows[i])
                    }
                } else {
                    elements = $rows
                }
                return elements
            },
            _getVisibleColumnIndex: function($cells, rowIndex, columnIdentifier) {
                if (_type2.default.isString(columnIdentifier)) {
                    var columnIndex = this._columnsController.columnOption(columnIdentifier, "index");
                    return this._columnsController.getVisibleIndex(columnIndex)
                }
                return columnIdentifier
            },
            getColumnElements: function() {},
            getColumns: function(rowIndex) {
                return this._columnsController.getVisibleColumns(rowIndex)
            },
            getCell: function(cellPosition, rows) {
                var $rows = rows || this._getRowElements();
                var $cells;
                if ($rows.length > 0 && cellPosition.rowIndex >= 0) {
                    if ("virtual" !== this.option("scrolling.mode")) {
                        cellPosition.rowIndex = cellPosition.rowIndex < $rows.length ? cellPosition.rowIndex : $rows.length - 1
                    }
                    $cells = this.getCellElements(cellPosition.rowIndex);
                    if ($cells && $cells.length > 0) {
                        return $cells.eq($cells.length > cellPosition.columnIndex ? cellPosition.columnIndex : $cells.length - 1)
                    }
                }
            },
            getRowsCount: function() {
                var tableElement = this._getTableElement();
                if (tableElement && 1 === tableElement.length) {
                    return tableElement[0].rows.length
                }
                return 0
            },
            _getRowElementsCore: function(tableElement) {
                tableElement = tableElement || this._getTableElement();
                if (tableElement) {
                    var tBodies = this.option("rowTemplate") && tableElement.find("> tbody." + ROW_CLASS);
                    return tBodies && tBodies.length ? tBodies : tableElement.find("> tbody > ." + ROW_CLASS + ", > ." + ROW_CLASS)
                }
                return (0, _renderer2.default)()
            },
            _getRowElements: function(tableElement) {
                return this._getRowElementsCore(tableElement)
            },
            getRowIndex: function($row) {
                return this._getRowElements().index($row)
            },
            getBoundingRect: function() {},
            getName: function() {},
            setScrollerSpacing: function(width) {
                var that = this;
                var $element = that.element();
                var rtlEnabled = that.option("rtlEnabled");
                $element && $element.css({
                    paddingLeft: rtlEnabled ? width : "",
                    paddingRight: !rtlEnabled ? width : ""
                })
            },
            isScrollbarVisible: function(isHorizontal) {
                var $element = this.element();
                var $tableElement = this._tableElement;
                if ($element && $tableElement) {
                    return isHorizontal ? $tableElement.outerWidth() - $element.width() > 0 : $tableElement.outerHeight() - $element.height() > 0
                }
                return false
            }
        })
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/constants.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.LIST_ITEM_DATA_KEY = "dxListItemData";
        exports.FIXED_CONTAINER_CLASS = "dx-scheduler-fixed-appointments";
        exports.LIST_ITEM_CLASS = "dx-list-item";
        exports.REDUCED_APPOINTMENT_CLASS = "dx-scheduler-appointment-reduced";
        exports.REDUCED_APPOINTMENT_ICON = "dx-scheduler-appointment-reduced-icon";
        exports.RECURRENCE_APPOINTMENT_CLASS = "dx-scheduler-appointment-recurrence";
        exports.EMPTY_APPOINTMENT_CLASS = "dx-scheduler-appointment-empty";
        exports.ALL_DAY_APPOINTMENT_CLASS = "dx-scheduler-all-day-appointment";
        exports.REDUCED_APPOINTMENT_PARTS_CLASSES = {
            head: "dx-scheduler-appointment-head",
            body: "dx-scheduler-appointment-body",
            tail: "dx-scheduler-appointment-tail"
        };
        exports.DIRECTION_APPOINTMENT_CLASSES = {
            horizontal: "dx-scheduler-appointment-horizontal",
            vertical: "dx-scheduler-appointment-vertical"
        };
        exports.AGENDA_LAST_IN_DATE_APPOINTMENT_CLASS = "dx-scheduler-last-in-date-agenda-appointment"
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.toolbar.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _toolbar = __webpack_require__( /*! ../toolbar */ 145);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _diagram = __webpack_require__( /*! ./diagram.bar */ 254);
        var _diagram2 = _interopRequireDefault(_diagram);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.panel */ 413);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _uiDiagram3 = __webpack_require__( /*! ./ui.diagram.menu_helper */ 414);
        var _uiDiagram4 = _interopRequireDefault(_uiDiagram3);
        var _diagram3 = __webpack_require__( /*! ./diagram.importer */ 90);
        __webpack_require__( /*! ../select_box */ 97);
        __webpack_require__( /*! ../color_box */ 321);
        __webpack_require__( /*! ../check_box */ 120);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ACTIVE_FORMAT_CLASS = "dx-format-active";
        var DIAGRAM_TOOLBAR_CLASS = "dx-diagram-toolbar";
        var DIAGRAM_TOOLBAR_SEPARATOR_CLASS = "dx-diagram-toolbar-separator";
        var DIAGRAM_TOOLBAR_MENU_SEPARATOR_CLASS = "dx-diagram-toolbar-menu-separator";
        var DIAGRAM_MOBILE_TOOLBAR_COLOR_BOX_OPENED_CLASS = "dx-diagram-mobile-toolbar-color-box-opened";
        var DiagramToolbar = function(_DiagramPanel) {
            _inherits(DiagramToolbar, _DiagramPanel);
            var _super = _createSuper(DiagramToolbar);

            function DiagramToolbar() {
                _classCallCheck(this, DiagramToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramToolbar, [{
                key: "_init",
                value: function() {
                    this._commands = [];
                    this._itemHelpers = {};
                    this._commandContextMenus = {};
                    this._contextMenuList = [];
                    this._valueConverters = {};
                    this.bar = new DiagramToolbarBar(this);
                    this._createOnInternalCommand();
                    this._createOnCustomCommand();
                    this._createOnSubMenuVisibilityChangingAction();
                    _get(_getPrototypeOf(DiagramToolbar.prototype), "_init", this).call(this)
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(DiagramToolbar.prototype), "_initMarkup", this).call(this);
                    var isServerSide = !(0, _window.hasWindow)();
                    if (!this.option("skipAdjustSize") && !isServerSide) {
                        this.$element().width("")
                    }
                    this._commands = this._getCommands();
                    this._itemHelpers = {};
                    this._commandContextMenus = {};
                    this._contextMenuList = [];
                    var $toolbar = this._createMainElement();
                    this._renderToolbar($toolbar);
                    if (!this.option("skipAdjustSize") && !isServerSide) {
                        var $toolbarContent = this.$element().find(".dx-toolbar-before");
                        this.$element().width($toolbarContent.width())
                    }
                }
            }, {
                key: "_createMainElement",
                value: function() {
                    return (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOOLBAR_CLASS).appendTo(this._$element)
                }
            }, {
                key: "_getCommands",
                value: function() {
                    return this.option("commands") || []
                }
            }, {
                key: "_renderToolbar",
                value: function($toolbar) {
                    var beforeCommands = this._commands.filter(function(command) {
                        return ["after", "center"].indexOf(command.position) === -1
                    });
                    var centerCommands = this._commands.filter(function(command) {
                        return "center" === command.position
                    });
                    var afterCommands = this._commands.filter(function(command) {
                        return "after" === command.position
                    });
                    var dataSource = [].concat(this._prepareToolbarItems(beforeCommands, "before", this._executeCommand)).concat(this._prepareToolbarItems(centerCommands, "center", this._executeCommand)).concat(this._prepareToolbarItems(afterCommands, "after", this._executeCommand));
                    this._toolbarInstance = this._createComponent($toolbar, _toolbar2.default, {
                        dataSource: dataSource
                    })
                }
            }, {
                key: "_prepareToolbarItems",
                value: function(items, location, actionHandler) {
                    var _this = this;
                    return items.map(function(item) {
                        return (0, _extend.extend)(true, {
                            location: location,
                            locateInMenu: _this.option("locateInMenu")
                        }, _this._createItem(item, location, actionHandler), _this._createItemOptions(item), _this._createItemActionOptions(item, actionHandler))
                    })
                }
            }, {
                key: "_createItem",
                value: function(item, location, actionHandler) {
                    var _this2 = this;
                    if (item.getCommandValue || item.getEditorValue || item.getEditorDisplayValue) {
                        this._valueConverters[item.command] = {
                            getCommandValue: item.getCommandValue,
                            getEditorValue: item.getEditorValue,
                            getEditorDisplayValue: item.getEditorDisplayValue
                        }
                    }
                    if ("separator" === item.widget) {
                        return {
                            template: function(data, index, element) {
                                (0, _renderer2.default)(element).addClass(DIAGRAM_TOOLBAR_SEPARATOR_CLASS)
                            },
                            menuItemTemplate: function(data, index, element) {
                                (0, _renderer2.default)(element).addClass(DIAGRAM_TOOLBAR_MENU_SEPARATOR_CLASS)
                            }
                        }
                    }
                    return {
                        widget: item.widget || "dxButton",
                        cssClass: item.cssClass,
                        options: {
                            stylingMode: this.option("buttonStylingMode"),
                            type: this.option("buttonType"),
                            text: item.text,
                            hint: item.hint,
                            icon: item.icon || item.iconUnchecked || item.iconChecked,
                            iconChecked: item.iconChecked,
                            iconUnchecked: item.iconUnchecked,
                            onInitialized: function(e) {
                                return _this2._onItemInitialized(e.component, item)
                            },
                            onContentReady: function(e) {
                                return _this2._onItemContentReady(e.component, item, actionHandler)
                            }
                        }
                    }
                }
            }, {
                key: "_createItemOptions",
                value: function(_ref) {
                    var widget = _ref.widget,
                        command = _ref.command,
                        items = _ref.items,
                        valueExpr = _ref.valueExpr,
                        displayExpr = _ref.displayExpr,
                        showText = _ref.showText,
                        hint = _ref.hint,
                        icon = _ref.icon;
                    if ("dxSelectBox" === widget) {
                        return this._createSelectBoxItemOptions(command, hint, items, valueExpr, displayExpr)
                    } else {
                        if ("dxTextBox" === widget) {
                            return this._createTextBoxItemOptions(command, hint)
                        } else {
                            if ("dxColorBox" === widget) {
                                return this._createColorBoxItemOptions(command, hint, icon)
                            } else {
                                if (!widget || "dxButton" === widget) {
                                    return {
                                        showText: showText || "inMenu"
                                    }
                                }
                            }
                        }
                    }
                }
            }, {
                key: "_createSelectBoxItemOptions",
                value: function(command, hint, items, valueExpr, displayExpr) {
                    var options = this._createTextEditorItemOptions(hint);
                    options = (0, _extend.extend)(true, options, {
                        options: {
                            dataSource: items,
                            displayExpr: displayExpr || "text",
                            valueExpr: valueExpr || "value"
                        }
                    });
                    var isSelectButton = items && items.every(function(i) {
                        return void 0 !== i.icon
                    });
                    if (isSelectButton) {
                        options = (0, _extend.extend)(true, options, {
                            options: {
                                fieldTemplate: function(data, container) {
                                    (0, _renderer2.default)("<i>").addClass(data && data.icon).appendTo(container);
                                    (0, _renderer2.default)("<div>").dxTextBox({
                                        readOnly: true,
                                        stylingMode: "outlined"
                                    }).appendTo(container)
                                },
                                itemTemplate: function(data, index, container) {
                                    (0, _renderer2.default)(container).attr("title", data.hint);
                                    return '<i class="'.concat(data.icon, '"></i>')
                                }
                            }
                        })
                    }
                    return options
                }
            }, {
                key: "_createTextBoxItemOptions",
                value: function(command, hint) {
                    var _this3 = this;
                    var options = this._createTextEditorItemOptions(hint);
                    options = (0, _extend.extend)(true, options, {
                        options: {
                            readOnly: true,
                            focusStateEnabled: false,
                            hoverStateEnabled: false,
                            buttons: [{
                                name: "dropDown",
                                location: "after",
                                options: {
                                    icon: "spindown",
                                    disabled: false,
                                    stylingMode: "text",
                                    onClick: function(e) {
                                        var contextMenu = _this3._commandContextMenus[command];
                                        if (contextMenu) {
                                            _this3._toggleContextMenu(contextMenu)
                                        }
                                    }
                                }
                            }]
                        }
                    });
                    return options
                }
            }, {
                key: "_createColorBoxItemOptions",
                value: function(command, hint, icon) {
                    var _this4 = this;
                    var options = this._createTextEditorItemOptions(hint);
                    if (icon) {
                        options = (0, _extend.extend)(true, options, {
                            options: {
                                openOnFieldClick: true,
                                fieldTemplate: function(data, container) {
                                    (0, _renderer2.default)("<i>").addClass(icon).css("borderBottomColor", data).appendTo(container);
                                    (0, _renderer2.default)("<div>").dxTextBox({
                                        readOnly: true,
                                        stylingMode: "outlined"
                                    }).appendTo(container)
                                }
                            }
                        })
                    }
                    options = (0, _extend.extend)(true, options, {
                        options: {
                            onOpened: function() {
                                if (_this4.option("isMobileView")) {
                                    (0, _renderer2.default)("body").addClass(DIAGRAM_MOBILE_TOOLBAR_COLOR_BOX_OPENED_CLASS)
                                }
                            },
                            onClosed: function() {
                                (0, _renderer2.default)("body").removeClass(DIAGRAM_MOBILE_TOOLBAR_COLOR_BOX_OPENED_CLASS)
                            }
                        }
                    });
                    return options
                }
            }, {
                key: "_createTextEditorItemOptions",
                value: function(hint) {
                    return {
                        options: {
                            stylingMode: this.option("editorStylingMode"),
                            hint: hint
                        }
                    }
                }
            }, {
                key: "_createItemActionOptions",
                value: function(item, handler) {
                    var _this5 = this;
                    switch (item.widget) {
                        case "dxSelectBox":
                        case "dxColorBox":
                        case "dxCheckBox":
                            return {
                                options: {
                                    onValueChanged: function(e) {
                                        var parameter = _uiDiagram4.default.getItemCommandParameter(_this5, item, e.component.option("value"));
                                        handler.call(_this5, item.command, item.name, parameter)
                                    }
                                }
                            };
                        case "dxTextBox":
                            return {};
                        default:
                            return {
                                options: {
                                    onClick: function(e) {
                                        if (!item.items) {
                                            var parameter = _uiDiagram4.default.getItemCommandParameter(_this5, item);
                                            handler.call(_this5, item.command, item.name, parameter)
                                        } else {
                                            var contextMenu = e.component._contextMenu;
                                            if (contextMenu) {
                                                _this5._toggleContextMenu(contextMenu)
                                            }
                                        }
                                    }
                                }
                            }
                    }
                }
            }, {
                key: "_toggleContextMenu",
                value: function(contextMenu) {
                    this._contextMenuList.forEach(function(cm) {
                        if (contextMenu !== cm) {
                            cm.hide()
                        }
                    });
                    contextMenu.toggle()
                }
            }, {
                key: "_onItemInitialized",
                value: function(widget, item) {
                    this._addItemHelper(item.command, new DiagramToolbarItemHelper(widget))
                }
            }, {
                key: "_onItemContentReady",
                value: function(widget, item, actionHandler) {
                    var _this6 = this;
                    var _getDiagram = (0, _diagram3.getDiagram)(),
                        Browser = _getDiagram.Browser;
                    if (("dxButton" === widget.NAME || "dxTextBox" === widget.NAME) && item.items) {
                        var $menuContainer = (0, _renderer2.default)("<div>").appendTo(this.$element());
                        widget._contextMenu = this._createComponent($menuContainer, _context_menu2.default, {
                            items: item.items,
                            target: widget.$element(),
                            cssClass: _uiDiagram4.default.getContextMenuCssClass(),
                            showEvent: "",
                            closeOnOutsideClick: !Browser.TouchUI,
                            focusStateEnabled: false,
                            position: {
                                at: "left bottom"
                            },
                            itemTemplate: function(itemData, itemIndex, itemElement) {
                                _uiDiagram4.default.getContextMenuItemTemplate(this, itemData, itemIndex, itemElement)
                            },
                            onItemClick: function(_ref2) {
                                var component = _ref2.component,
                                    itemData = _ref2.itemData;
                                _uiDiagram4.default.onContextMenuItemClick(_this6, itemData, actionHandler.bind(_this6));
                                if (!itemData.items || !itemData.items.length) {
                                    component.hide()
                                }
                            },
                            onShowing: function(e) {
                                if (_this6._showingSubMenu) {
                                    return
                                }
                                _this6._showingSubMenu = e.component;
                                _this6._onSubMenuVisibilityChangingAction({
                                    visible: true,
                                    component: _this6
                                });
                                e.component.option("items", e.component.option("items"));
                                delete _this6._showingSubMenu
                            },
                            onInitialized: function(_ref3) {
                                var component = _ref3.component;
                                return _this6._onContextMenuInitialized(component, item, widget)
                            },
                            onDisposing: function(_ref4) {
                                var component = _ref4.component;
                                return _this6._onContextMenuDisposing(component, item)
                            }
                        })
                    }
                }
            }, {
                key: "_onContextMenuInitialized",
                value: function(widget, item, rootWidget) {
                    this._contextMenuList.push(widget);
                    if (item.command) {
                        this._commandContextMenus[item.command] = widget
                    }
                    this._addContextMenuHelper(item, widget, [], rootWidget)
                }
            }, {
                key: "_addItemHelper",
                value: function(command, helper) {
                    if (void 0 !== command) {
                        if (this._itemHelpers[command]) {
                            throw new Error("Toolbar cannot contain duplicated commands.")
                        }
                        this._itemHelpers[command] = helper
                    }
                }
            }, {
                key: "_addContextMenuHelper",
                value: function(item, widget, indexPath, rootWidget) {
                    var _this7 = this;
                    if (item.items) {
                        item.items.forEach(function(subItem, index) {
                            var itemIndexPath = indexPath.concat(index);
                            _this7._addItemHelper(subItem.command, new DiagramToolbarSubItemHelper(widget, itemIndexPath, subItem.command, rootWidget));
                            _this7._addContextMenuHelper(subItem, widget, itemIndexPath, rootWidget)
                        })
                    }
                }
            }, {
                key: "_onContextMenuDisposing",
                value: function(widget, item) {
                    this._contextMenuList.splice(this._contextMenuList.indexOf(widget), 1);
                    delete this._commandContextMenus[item.command]
                }
            }, {
                key: "_executeCommand",
                value: function(command, name, value) {
                    if (this._updateLocked) {
                        return
                    }
                    if ("number" === typeof command) {
                        var valueConverter = this._valueConverters[command];
                        if (valueConverter && valueConverter.getCommandValue) {
                            value = valueConverter.getCommandValue(value)
                        }
                        this.bar.raiseBarCommandExecuted(command, value)
                    } else {
                        if ("string" === typeof command) {
                            this._onInternalCommandAction({
                                command: command
                            })
                        }
                    }
                    if (void 0 !== name) {
                        this._onCustomCommandAction({
                            name: name
                        })
                    }
                }
            }, {
                key: "_createOnInternalCommand",
                value: function() {
                    this._onInternalCommandAction = this._createActionByOption("onInternalCommand")
                }
            }, {
                key: "_createOnCustomCommand",
                value: function() {
                    this._onCustomCommandAction = this._createActionByOption("onCustomCommand")
                }
            }, {
                key: "_setItemEnabled",
                value: function(command, enabled) {
                    if (command in this._itemHelpers) {
                        var helper = this._itemHelpers[command];
                        if (helper.canUpdate(this._showingSubMenu)) {
                            helper.setEnabled(enabled)
                        }
                    }
                }
            }, {
                key: "_setEnabled",
                value: function(enabled) {
                    this._toolbarInstance.option("disabled", !enabled);
                    this._contextMenuList.forEach(function(contextMenu) {
                        contextMenu.option("disabled", !enabled)
                    })
                }
            }, {
                key: "_setItemValue",
                value: function(command, value) {
                    try {
                        this._updateLocked = true;
                        if (command in this._itemHelpers) {
                            var helper = this._itemHelpers[command];
                            if (helper.canUpdate(this._showingSubMenu)) {
                                var valueConverter = this._valueConverters[command];
                                if (valueConverter && valueConverter.getEditorValue) {
                                    value = valueConverter.getEditorValue(value)
                                }
                                var displayValue;
                                if (valueConverter && valueConverter.getEditorDisplayValue) {
                                    displayValue = valueConverter.getEditorDisplayValue(value)
                                }
                                var contextMenu = this._commandContextMenus[command];
                                helper.setValue(value, displayValue, contextMenu, contextMenu && command)
                            }
                        }
                    } finally {
                        this._updateLocked = false
                    }
                }
            }, {
                key: "_setItemSubItems",
                value: function(command, items) {
                    this._updateLocked = true;
                    if (command in this._itemHelpers) {
                        var helper = this._itemHelpers[command];
                        if (helper.canUpdate(this._showingSubMenu)) {
                            var contextMenu = this._commandContextMenus[command];
                            helper.setItems(items, contextMenu, contextMenu && command)
                        }
                    }
                    this._updateLocked = false
                }
            }, {
                key: "_createOnSubMenuVisibilityChangingAction",
                value: function() {
                    this._onSubMenuVisibilityChangingAction = this._createActionByOption("onSubMenuVisibilityChanging")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "isMobileView":
                            (0, _renderer2.default)("body").removeClass(DIAGRAM_MOBILE_TOOLBAR_COLOR_BOX_OPENED_CLASS);
                            this._invalidate();
                            break;
                        case "onSubMenuVisibilityChanging":
                            this._createOnSubMenuVisibilityChangingAction();
                            break;
                        case "onInternalCommand":
                            this._createOnInternalCommand();
                            break;
                        case "onCustomCommand":
                            this._createOnCustomCommand();
                            break;
                        case "commands":
                            this._invalidate();
                            break;
                        case "export":
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramToolbar.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(DiagramToolbar.prototype), "_getDefaultOptions", this).call(this), {
                        isMobileView: false,
                        "export": {
                            fileName: "Diagram",
                            proxyUrl: void 0
                        },
                        locateInMenu: "auto",
                        buttonStylingMode: "text",
                        buttonType: "normal",
                        editorStylingMode: "filled",
                        skipAdjustSize: false
                    })
                }
            }, {
                key: "setCommandChecked",
                value: function(command, checked) {
                    this._setItemValue(command, checked)
                }
            }, {
                key: "setCommandEnabled",
                value: function(command, enabled) {
                    this._setItemEnabled(command, enabled)
                }
            }]);
            return DiagramToolbar
        }(_uiDiagram2.default);
        var DiagramToolbarBar = function(_DiagramBar) {
            _inherits(DiagramToolbarBar, _DiagramBar);
            var _super2 = _createSuper(DiagramToolbarBar);

            function DiagramToolbarBar() {
                _classCallCheck(this, DiagramToolbarBar);
                return _super2.apply(this, arguments)
            }
            _createClass(DiagramToolbarBar, [{
                key: "getCommandKeys",
                value: function() {
                    return this._getKeys(this._owner._commands)
                }
            }, {
                key: "setItemValue",
                value: function(key, value) {
                    this._owner._setItemValue(key, value)
                }
            }, {
                key: "setItemEnabled",
                value: function(key, enabled) {
                    this._owner._setItemEnabled(key, enabled)
                }
            }, {
                key: "setEnabled",
                value: function(enabled) {
                    this._owner._setEnabled(enabled)
                }
            }, {
                key: "setItemSubItems",
                value: function(key, items) {
                    this._owner._setItemSubItems(key, items)
                }
            }]);
            return DiagramToolbarBar
        }(_diagram2.default);
        var DiagramToolbarItemHelper = function() {
            function DiagramToolbarItemHelper(widget) {
                _classCallCheck(this, DiagramToolbarItemHelper);
                this._widget = widget
            }
            _createClass(DiagramToolbarItemHelper, [{
                key: "canUpdate",
                value: function(showingSubMenu) {
                    return void 0 === showingSubMenu
                }
            }, {
                key: "setEnabled",
                value: function(enabled) {
                    this._widget.option("disabled", !enabled)
                }
            }, {
                key: "setValue",
                value: function(value, displayValue, contextMenu, rootCommandKey) {
                    if ("value" in this._widget.option()) {
                        this._updateEditorValue(value, displayValue)
                    } else {
                        if (void 0 !== value) {
                            this._updateButtonValue(value)
                        }
                    }
                    if (contextMenu) {
                        this._updateContextMenuItemValue(contextMenu, "", rootCommandKey, value)
                    }
                }
            }, {
                key: "setItems",
                value: function(items, contextMenu, rootCommandKey) {
                    if (contextMenu) {
                        this._updateContextMenuItems(contextMenu, "", rootCommandKey, items)
                    } else {
                        this._updateEditorItems(items)
                    }
                }
            }, {
                key: "_updateContextMenuItems",
                value: function(contextMenu, itemOptionText, rootCommandKey, items) {
                    _uiDiagram4.default.updateContextMenuItems(contextMenu, itemOptionText, rootCommandKey, items)
                }
            }, {
                key: "_updateEditorItems",
                value: function(items) {
                    if ("items" in this._widget.option()) {
                        this._widget.option("items", items.map(function(item) {
                            return {
                                value: _uiDiagram4.default.getItemValue(item),
                                text: item.text
                            }
                        }))
                    }
                }
            }, {
                key: "_updateEditorValue",
                value: function(value, displayValue) {
                    this._widget.option("value", value);
                    if (!this._widget.option("selectedItem") && displayValue) {
                        this._widget.option("value", displayValue)
                    }
                }
            }, {
                key: "_updateButtonValue",
                value: function(value) {
                    if (this._widget.option("iconChecked") && this._widget.option("iconUnchecked")) {
                        this._widget.option("icon", value ? this._widget.option("iconChecked") : this._widget.option("iconUnchecked"))
                    } else {
                        this._widget.$element().toggleClass(ACTIVE_FORMAT_CLASS, value)
                    }
                }
            }, {
                key: "_updateContextMenuItemValue",
                value: function(contextMenu, itemOptionText, rootCommandKey, value) {
                    _uiDiagram4.default.updateContextMenuItemValue(contextMenu, itemOptionText, rootCommandKey, value)
                }
            }]);
            return DiagramToolbarItemHelper
        }();
        var DiagramToolbarSubItemHelper = function(_DiagramToolbarItemHe) {
            _inherits(DiagramToolbarSubItemHelper, _DiagramToolbarItemHe);
            var _super3 = _createSuper(DiagramToolbarSubItemHelper);

            function DiagramToolbarSubItemHelper(widget, indexPath, rootCommandKey, rootWidget) {
                var _this8;
                _classCallCheck(this, DiagramToolbarSubItemHelper);
                _this8 = _super3.call(this, widget);
                _this8._indexPath = indexPath;
                _this8._rootCommandKey = rootCommandKey;
                _this8._rootWidget = rootWidget;
                return _this8
            }
            _createClass(DiagramToolbarSubItemHelper, [{
                key: "canUpdate",
                value: function(showingSubMenu) {
                    return _get(_getPrototypeOf(DiagramToolbarSubItemHelper.prototype), "canUpdate", this).call(this, showingSubMenu) || showingSubMenu === this._widget
                }
            }, {
                key: "setEnabled",
                value: function(enabled) {
                    this._widget.option(this._getItemOptionText() + "disabled", !enabled);
                    var rootEnabled = this._hasEnabledCommandItems(this._widget.option("items"));
                    this._rootWidget.option("disabled", !rootEnabled)
                }
            }, {
                key: "_hasEnabledCommandItems",
                value: function(items) {
                    var _this9 = this;
                    if (items) {
                        return items.some(function(item) {
                            return void 0 !== item.command && !item.disabled || _this9._hasEnabledCommandItems(item.items)
                        })
                    }
                    return false
                }
            }, {
                key: "setValue",
                value: function(value) {
                    this._updateContextMenuItemValue(this._widget, this._getItemOptionText(), this._rootCommandKey, value)
                }
            }, {
                key: "setItems",
                value: function(items) {
                    this._updateContextMenuItems(this._widget, this._getItemOptionText(), this._rootCommandKey, items)
                }
            }, {
                key: "_getItemOptionText",
                value: function() {
                    return _uiDiagram4.default.getItemOptionText(this._widget, this._indexPath)
                }
            }]);
            return DiagramToolbarSubItemHelper
        }(DiagramToolbarItemHelper);
        module.exports = DiagramToolbar
    }, , , ,
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/exporter/file_saver.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _ui = __webpack_require__( /*! ../ui/widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _console = __webpack_require__( /*! ../core/utils/console */ 65);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var window = _window2.default.getWindow();
        var navigator = _window2.default.getNavigator();
        var FILE_EXTESIONS = {
            EXCEL: "xlsx",
            CSS: "css",
            PNG: "png",
            JPEG: "jpeg",
            GIF: "gif",
            SVG: "svg",
            PDF: "pdf"
        };
        var MIME_TYPES = exports.MIME_TYPES = {
            CSS: "text/css",
            EXCEL: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            PNG: "image/png",
            JPEG: "image/jpeg",
            GIF: "image/gif",
            SVG: "image/svg+xml",
            PDF: "application/pdf"
        };
        exports.fileSaver = {
            _revokeObjectURLTimeout: 3e4,
            _getDataUri: function(format, data) {
                var mimeType = this._getMimeType(format);
                return "data:".concat(mimeType, ";base64,").concat(data)
            },
            _getMimeType: function(format) {
                return MIME_TYPES[format] || "application/octet-stream"
            },
            _linkDownloader: function(fileName, href) {
                var exportLinkElement = _dom_adapter2.default.createElement("a");
                exportLinkElement.download = fileName;
                exportLinkElement.href = href;
                exportLinkElement.target = "_blank";
                return exportLinkElement
            },
            _formDownloader: function(proxyUrl, fileName, contentType, data) {
                var formAttributes = {
                    method: "post",
                    action: proxyUrl,
                    enctype: "multipart/form-data"
                };
                var exportForm = (0, _renderer2.default)("<form>").css({
                    display: "none"
                }).attr(formAttributes);
                exportForm.append('<input type="hidden" name="fileName" value="' + fileName + '" />');
                exportForm.append('<input type="hidden" name="contentType" value="' + contentType + '" />');
                exportForm.append('<input type="hidden" name="data" value="' + data + '" />');
                exportForm.appendTo("body");
                _events_engine2.default.trigger(exportForm, "submit");
                if (_events_engine2.default.trigger(exportForm, "submit")) {
                    exportForm.remove()
                }
                return exportForm
            },
            _saveByProxy: function(proxyUrl, fileName, format, data) {
                var contentType = this._getMimeType(format);
                return this._formDownloader(proxyUrl, fileName, contentType, data)
            },
            _winJSBlobSave: function(blob, fileName, format) {
                var savePicker = new Windows.Storage.Pickers.FileSavePicker;
                savePicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.documentsLibrary;
                var fileExtension = FILE_EXTESIONS[format];
                if (fileExtension) {
                    var mimeType = this._getMimeType(format);
                    savePicker.fileTypeChoices.insert(mimeType, ["." + fileExtension])
                }
                savePicker.suggestedFileName = fileName;
                savePicker.pickSaveFileAsync().then(function(file) {
                    if (file) {
                        file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(function(outputStream) {
                            var inputStream = blob.msDetachStream();
                            Windows.Storage.Streams.RandomAccessStream.copyAsync(inputStream, outputStream).then(function() {
                                outputStream.flushAsync().done(function() {
                                    inputStream.close();
                                    outputStream.close()
                                })
                            })
                        })
                    }
                })
            },
            _click: function(link) {
                try {
                    link.dispatchEvent(new MouseEvent("click", {
                        cancelable: true
                    }))
                } catch (e) {
                    var event = _dom_adapter2.default.getDocument().createEvent("MouseEvents");
                    event.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
                    link.dispatchEvent(event)
                }
            },
            _saveBlobAs: function(fileName, format, data) {
                var _this = this;
                this._blobSaved = false;
                if (_type2.default.isDefined(navigator.msSaveOrOpenBlob)) {
                    navigator.msSaveOrOpenBlob(data, fileName);
                    this._blobSaved = true
                } else {
                    if (_type2.default.isDefined(window.WinJS)) {
                        this._winJSBlobSave(data, fileName, format);
                        this._blobSaved = true
                    } else {
                        var URL = window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL;
                        if (_type2.default.isDefined(URL)) {
                            var objectURL = URL.createObjectURL(data);
                            var downloadLink = this._linkDownloader(fileName, objectURL);
                            setTimeout(function() {
                                URL.revokeObjectURL(objectURL);
                                _this._objectUrlRevoked = true
                            }, this._revokeObjectURLTimeout);
                            this._click(downloadLink)
                        } else {
                            _console.logger.warn("window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL is not defined")
                        }
                    }
                }
            },
            saveAs: function(fileName, format, data, proxyURL, forceProxy) {
                var fileExtension = FILE_EXTESIONS[format];
                if (fileExtension) {
                    fileName += "." + fileExtension
                }
                if (_type2.default.isDefined(proxyURL)) {
                    _ui2.default.log("W0001", "Export", "proxyURL", "19.2", "This option is no longer required")
                }
                if (forceProxy) {
                    this._saveByProxy(proxyURL, fileName, format, data)
                } else {
                    if (_type2.default.isFunction(window.Blob)) {
                        this._saveBlobAs(fileName, format, data)
                    } else {
                        if (_type2.default.isDefined(proxyURL) && !_type2.default.isDefined(navigator.userAgent.match(/iPad/i))) {
                            this._saveByProxy(proxyURL, fileName, format, data)
                        } else {
                            if (!_type2.default.isDefined(navigator.userAgent.match(/iPad/i))) {
                                _ui2.default.log("E1034")
                            }
                            var downloadLink = this._linkDownloader(fileName, this._getDataUri(format, data));
                            this._click(downloadLink)
                        }
                    }
                }
            }
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/events/contextmenu.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var support = __webpack_require__( /*! ../core/utils/support */ 46);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var registerEvent = __webpack_require__( /*! ./core/event_registrator */ 77);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var holdEvent = __webpack_require__( /*! ./hold */ 95);
        var CONTEXTMENU_NAMESPACE = "dxContexMenu";
        var CONTEXTMENU_NAMESPACED_EVENT_NAME = eventUtils.addNamespace("contextmenu", CONTEXTMENU_NAMESPACE);
        var HOLD_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(holdEvent.name, CONTEXTMENU_NAMESPACE);
        var CONTEXTMENU_EVENT_NAME = "dxcontextmenu";
        var ContextMenu = Class.inherit({
            setup: function(element) {
                var $element = $(element);
                eventsEngine.on($element, CONTEXTMENU_NAMESPACED_EVENT_NAME, this._contextMenuHandler.bind(this));
                if (support.touch || devices.isSimulator()) {
                    eventsEngine.on($element, HOLD_NAMESPACED_EVENT_NAME, this._holdHandler.bind(this))
                }
            },
            _holdHandler: function(e) {
                if (eventUtils.isMouseEvent(e) && !devices.isSimulator()) {
                    return
                }
                this._fireContextMenu(e)
            },
            _contextMenuHandler: function(e) {
                this._fireContextMenu(e)
            },
            _fireContextMenu: function(e) {
                return eventUtils.fireEvent({
                    type: CONTEXTMENU_EVENT_NAME,
                    originalEvent: e
                })
            },
            teardown: function(element) {
                eventsEngine.off(element, "." + CONTEXTMENU_NAMESPACE)
            }
        });
        registerEvent(CONTEXTMENU_EVENT_NAME, new ContextMenu);
        exports.name = CONTEXTMENU_EVENT_NAME
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_editor/ui.drop_down_editor.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _position2 = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _ui3 = __webpack_require__( /*! ./ui.drop_down_button */ 526);
        var _ui4 = _interopRequireDefault(_ui3);
        var _ui5 = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui6 = _interopRequireDefault(_ui5);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _text_box = __webpack_require__( /*! ../text_box */ 88);
        var _text_box2 = _interopRequireDefault(_text_box);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _function_template = __webpack_require__( /*! ../../core/templates/function_template */ 113);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DROP_DOWN_EDITOR_CLASS = "dx-dropdowneditor";
        var DROP_DOWN_EDITOR_INPUT_WRAPPER = "dx-dropdowneditor-input-wrapper";
        var DROP_DOWN_EDITOR_BUTTON_ICON = "dx-dropdowneditor-icon";
        var DROP_DOWN_EDITOR_OVERLAY = "dx-dropdowneditor-overlay";
        var DROP_DOWN_EDITOR_OVERLAY_FLIPPED = "dx-dropdowneditor-overlay-flipped";
        var DROP_DOWN_EDITOR_ACTIVE = "dx-dropdowneditor-active";
        var DROP_DOWN_EDITOR_FIELD_CLICKABLE = "dx-dropdowneditor-field-clickable";
        var DROP_DOWN_EDITOR_FIELD_TEMPLATE_WRAPPER = "dx-dropdowneditor-field-template-wrapper";
        var isIOs = "ios" === _devices2.default.current().platform;
        var DropDownEditor = _text_box2.default.inherit({
            _supportedKeys: function() {
                return (0, _extend.extend)({}, this.callBase(), {
                    tab: function(e) {
                        if (!this.option("opened")) {
                            return
                        }
                        if ("instantly" === this.option("applyValueMode")) {
                            this.close();
                            return
                        }
                        var $focusableElement = e.shiftKey ? this._getLastPopupElement() : this._getFirstPopupElement();
                        $focusableElement && _events_engine2.default.trigger($focusableElement, "focus");
                        e.preventDefault()
                    },
                    escape: function(e) {
                        if (this.option("opened")) {
                            e.preventDefault()
                        }
                        this.close();
                        return true
                    },
                    upArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.altKey) {
                            this.close();
                            return false
                        }
                        return true
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.altKey) {
                            this._validatedOpening();
                            return false
                        }
                        return true
                    },
                    enter: function(e) {
                        if (this.option("opened")) {
                            e.preventDefault();
                            this._valueChangeEventHandler(e)
                        }
                        return true
                    }
                })
            },
            _getDefaultButtons: function() {
                return this.callBase().concat([{
                    name: "dropDown",
                    Ctor: _ui4.default
                }])
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    value: null,
                    onOpened: null,
                    onClosed: null,
                    opened: false,
                    acceptCustomValue: true,
                    applyValueMode: "instantly",
                    deferRendering: true,
                    activeStateEnabled: true,
                    dropDownButtonTemplate: "dropDownButton",
                    fieldTemplate: null,
                    openOnFieldClick: false,
                    showDropDownButton: true,
                    buttons: void 0,
                    dropDownOptions: {
                        showTitle: false
                    },
                    popupPosition: this._getDefaultPopupPosition(),
                    onPopupInitialized: null,
                    applyButtonText: (0, _message.format)("OK"),
                    cancelButtonText: (0, _message.format)("Cancel"),
                    buttonsLocation: "default",
                    useHiddenSubmitElement: false
                })
            },
            _getDefaultPopupPosition: function(isRtlEnabled) {
                var position = (0, _position2.getDefaultAlignment)(isRtlEnabled);
                return {
                    offset: {
                        h: 0,
                        v: -1
                    },
                    my: position + " top",
                    at: position + " bottom",
                    collision: "flip flip"
                }
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        var isGeneric = "generic" === _device.platform;
                        return isGeneric
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                v: 0
                            }
                        }
                    }
                }])
            },
            _inputWrapper: function() {
                return this.$element().find("." + DROP_DOWN_EDITOR_INPUT_WRAPPER)
            },
            _init: function() {
                this.callBase();
                this._initVisibilityActions();
                this._initPopupInitializedAction();
                this._updatePopupPosition(this.option("rtlEnabled"));
                this._options.cache("dropDownOptions", this.option("dropDownOptions"))
            },
            _updatePopupPosition: function(isRtlEnabled) {
                var _this$_getDefaultPopu = this._getDefaultPopupPosition(isRtlEnabled),
                    my = _this$_getDefaultPopu.my,
                    at = _this$_getDefaultPopu.at;
                var currentPosition = this.option("popupPosition");
                this.option("popupPosition", (0, _extend.extend)({}, currentPosition, {
                    my: my,
                    at: at
                }))
            },
            _initVisibilityActions: function() {
                this._openAction = this._createActionByOption("onOpened", {
                    excludeValidators: ["disabled", "readOnly"]
                });
                this._closeAction = this._createActionByOption("onClosed", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _initPopupInitializedAction: function() {
                this._popupInitializedAction = this._createActionByOption("onPopupInitialized", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _initMarkup: function() {
                this._renderSubmitElement();
                this.callBase();
                this.$element().addClass(DROP_DOWN_EDITOR_CLASS);
                this.setAria("role", "combobox")
            },
            _render: function() {
                this.callBase();
                this._renderOpenHandler();
                this._attachFocusOutHandler();
                this._renderOpenedState()
            },
            _renderContentImpl: function() {
                if (!this.option("deferRendering")) {
                    this._createPopup()
                }
            },
            _renderInput: function() {
                this.callBase();
                this.$element().wrapInner((0, _renderer2.default)("<div>").addClass(DROP_DOWN_EDITOR_INPUT_WRAPPER));
                this._$container = this.$element().children().eq(0);
                this._setDefaultAria()
            },
            _setDefaultAria: function() {
                this.setAria({
                    haspopup: "true",
                    autocomplete: "list"
                })
            },
            _readOnlyPropValue: function() {
                return !this.option("acceptCustomValue") || this.callBase()
            },
            _cleanFocusState: function() {
                this.callBase();
                if (this.option("fieldTemplate")) {
                    this._detachFocusEvents()
                }
            },
            _getFieldTemplate: function() {
                return this.option("fieldTemplate") && this._getTemplateByOption("fieldTemplate")
            },
            _renderMask: function() {
                if (this.option("fieldTemplate")) {
                    return
                }
                this.callBase()
            },
            _renderField: function() {
                var fieldTemplate = this._getFieldTemplate();
                fieldTemplate && this._renderTemplatedField(fieldTemplate, this._fieldRenderData())
            },
            _renderPlaceholder: function() {
                var hasFieldTemplate = !!this._getFieldTemplate();
                if (!hasFieldTemplate) {
                    this.callBase()
                }
            },
            _renderValue: function() {
                if (this.option("useHiddenSubmitElement")) {
                    this._setSubmitValue()
                }
                var promise = this.callBase();
                promise.always(this._renderField.bind(this))
            },
            _renderTemplatedField: function(fieldTemplate, data) {
                var _this = this;
                var isFocused = (0, _selectors.focused)(this._input());
                var $container = this._$container;
                this._detachKeyboardEvents();
                var beforeButtonsContainerParent = this._$beforeButtonsContainer && this._$beforeButtonsContainer[0].parentNode;
                var afterButtonsContainerParent = this._$afterButtonsContainer && this._$afterButtonsContainer[0].parentNode;
                beforeButtonsContainerParent && beforeButtonsContainerParent.removeChild(this._$beforeButtonsContainer[0]);
                afterButtonsContainerParent && afterButtonsContainerParent.removeChild(this._$afterButtonsContainer[0]);
                this._detachFocusEvents();
                $container.empty();
                var $templateWrapper = (0, _renderer2.default)("<div>").addClass(DROP_DOWN_EDITOR_FIELD_TEMPLATE_WRAPPER).appendTo($container);
                fieldTemplate.render({
                    model: data,
                    container: (0, _dom.getPublicElement)($templateWrapper),
                    onRendered: function() {
                        var $input = _this._input();
                        if (!$input.length) {
                            throw _ui2.default.Error("E1010")
                        }
                        _this._refreshEvents();
                        _this._refreshValueChangeEvent();
                        _this._renderFocusState();
                        isFocused && _events_engine2.default.trigger($input, "focus")
                    }
                });
                $container.prepend(this._$beforeButtonsContainer);
                $container.append(this._$afterButtonsContainer)
            },
            _fieldRenderData: function() {
                return this.option("value")
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates({
                    dropDownButton: new _function_template.FunctionTemplate(function(options) {
                        var $icon = (0, _renderer2.default)("<div>").addClass(DROP_DOWN_EDITOR_BUTTON_ICON);
                        (0, _renderer2.default)(options.container).append($icon)
                    })
                });
                this.callBase()
            },
            _renderOpenHandler: function() {
                var $inputWrapper = this._inputWrapper();
                var eventName = (0, _utils.addNamespace)(_click2.default.name, this.NAME);
                var openOnFieldClick = this.option("openOnFieldClick");
                _events_engine2.default.off($inputWrapper, eventName);
                _events_engine2.default.on($inputWrapper, eventName, this._getInputClickHandler(openOnFieldClick));
                this.$element().toggleClass(DROP_DOWN_EDITOR_FIELD_CLICKABLE, openOnFieldClick);
                if (openOnFieldClick) {
                    this._openOnFieldClickAction = this._createAction(this._openHandler.bind(this))
                }
            },
            _attachFocusOutHandler: function() {
                var _this2 = this;
                if (isIOs) {
                    this._detachFocusOutEvents();
                    _events_engine2.default.on(this._inputWrapper(), (0, _utils.addNamespace)("focusout", this.NAME), function(event) {
                        var newTarget = event.relatedTarget;
                        var popupWrapper = _this2.content ? (0, _renderer2.default)(_this2.content()).closest("." + DROP_DOWN_EDITOR_OVERLAY) : _this2._$popup;
                        if (newTarget && _this2.option("opened")) {
                            var isNewTargetOutside = 0 === (0, _renderer2.default)(newTarget).closest("." + DROP_DOWN_EDITOR_OVERLAY, popupWrapper).length;
                            if (isNewTargetOutside) {
                                _this2.close()
                            }
                        }
                    })
                }
            },
            _detachFocusOutEvents: function() {
                isIOs && _events_engine2.default.off(this._inputWrapper(), (0, _utils.addNamespace)("focusout", this.NAME))
            },
            _getInputClickHandler: function(openOnFieldClick) {
                var _this3 = this;
                return openOnFieldClick ? function(e) {
                    _this3._executeOpenAction(e)
                } : function(e) {
                    _this3._focusInput()
                }
            },
            _openHandler: function() {
                this._toggleOpenState()
            },
            _executeOpenAction: function(e) {
                this._openOnFieldClickAction({
                    event: e
                })
            },
            _keyboardEventBindingTarget: function() {
                return this._input()
            },
            _focusInput: function() {
                if (this.option("disabled")) {
                    return false
                }
                if (this.option("focusStateEnabled") && !(0, _selectors.focused)(this._input())) {
                    _events_engine2.default.trigger(this._input(), "focus")
                }
                return true
            },
            _toggleOpenState: function(isVisible) {
                if (!this._focusInput()) {
                    return
                }
                if (!this.option("readOnly")) {
                    isVisible = arguments.length ? isVisible : !this.option("opened");
                    this.option("opened", isVisible)
                }
            },
            _renderOpenedState: function() {
                var opened = this.option("opened");
                if (opened) {
                    this._createPopup()
                }
                this.$element().toggleClass(DROP_DOWN_EDITOR_ACTIVE, opened);
                this._setPopupOption("visible", opened);
                this.setAria({
                    expanded: opened
                });
                this.setAria("owns", (opened || void 0) && this._popupContentId, this.$element())
            },
            _createPopup: function() {
                if (this._$popup) {
                    return
                }
                this._$popup = (0, _renderer2.default)("<div>").addClass(DROP_DOWN_EDITOR_OVERLAY).addClass(this.option("customOverlayCssClass")).appendTo(this.$element());
                this._renderPopup();
                this._renderPopupContent()
            },
            _renderPopupContent: _common.noop,
            _renderPopup: function() {
                this._popup = this._createComponent(this._$popup, _popup2.default, (0, _extend.extend)(this._popupConfig(), this._options.cache("dropDownOptions")));
                this._popup.on({
                    showing: this._popupShowingHandler.bind(this),
                    shown: this._popupShownHandler.bind(this),
                    hiding: this._popupHidingHandler.bind(this),
                    hidden: this._popupHiddenHandler.bind(this),
                    contentReady: this._contentReadyHandler.bind(this)
                });
                this._contentReadyHandler();
                this._setPopupContentId(this._popup.$content());
                this._bindInnerWidgetOptions(this._popup, "dropDownOptions")
            },
            _setPopupContentId: function($popupContent) {
                this._popupContentId = "dx-" + new _guid2.default;
                this.setAria("id", this._popupContentId, $popupContent)
            },
            _contentReadyHandler: _common.noop,
            _popupConfig: function() {
                return {
                    onInitialized: this._popupInitializedHandler(),
                    position: (0, _extend.extend)(this.option("popupPosition"), {
                        of: this.$element()
                    }),
                    showTitle: this.option("dropDownOptions.showTitle"),
                    width: "auto",
                    height: "auto",
                    shading: false,
                    closeOnTargetScroll: true,
                    closeOnOutsideClick: this._closeOutsideDropDownHandler.bind(this),
                    animation: {
                        show: {
                            type: "fade",
                            duration: 0,
                            from: 0,
                            to: 1
                        },
                        hide: {
                            type: "fade",
                            duration: 400,
                            from: 1,
                            to: 0
                        }
                    },
                    deferRendering: false,
                    focusStateEnabled: false,
                    showCloseButton: false,
                    toolbarItems: this._getPopupToolbarItems(),
                    onPositioned: this._popupPositionedHandler.bind(this),
                    fullScreen: false,
                    contentTemplate: null
                }
            },
            _popupInitializedHandler: function() {
                var _this4 = this;
                if (!this.option("onPopupInitialized")) {
                    return
                }
                return function(e) {
                    _this4._popupInitializedAction({
                        popup: e.component
                    })
                }
            },
            _popupPositionedHandler: function(e) {
                e.position && this._popup.overlayContent().toggleClass(DROP_DOWN_EDITOR_OVERLAY_FLIPPED, e.position.v.flip)
            },
            _popupShowingHandler: _common.noop,
            _popupHidingHandler: function() {
                this.option("opened", false)
            },
            _popupShownHandler: function() {
                this._openAction();
                if (this._$validationMessage) {
                    this._$validationMessage.dxOverlay("option", "position", this._getValidationMessagePosition())
                }
            },
            _popupHiddenHandler: function() {
                this._closeAction();
                if (this._$validationMessage) {
                    this._$validationMessage.dxOverlay("option", "position", this._getValidationMessagePosition())
                }
            },
            _getValidationMessagePosition: function() {
                var positionRequest = "below";
                if (this._popup && this._popup.option("visible")) {
                    var _setupPosition = (0, _position.setup)(this.$element()),
                        myTop = _setupPosition.top;
                    var _setupPosition2 = (0, _position.setup)(this._popup.$content()),
                        popupTop = _setupPosition2.top;
                    positionRequest = myTop + this.option("popupPosition").offset.v > popupTop ? "below" : "above"
                }
                return this.callBase(positionRequest)
            },
            _closeOutsideDropDownHandler: function(_ref) {
                var target = _ref.target;
                var $target = (0, _renderer2.default)(target);
                var dropDownButton = this.getButton("dropDown");
                var $dropDownButton = dropDownButton && dropDownButton.$element();
                var isInputClicked = !!$target.closest(this.$element()).length;
                var isDropDownButtonClicked = !!$target.closest($dropDownButton).length;
                var isOutsideClick = !isInputClicked && !isDropDownButtonClicked;
                return isOutsideClick
            },
            _clean: function() {
                delete this._openOnFieldClickAction;
                if (this._$popup) {
                    this._$popup.remove();
                    delete this._$popup;
                    delete this._popup
                }
                this.callBase()
            },
            _setPopupOption: function(optionName, value) {
                this._setWidgetOption("_popup", arguments)
            },
            _validatedOpening: function() {
                if (!this.option("readOnly")) {
                    this._toggleOpenState(true)
                }
            },
            _getPopupToolbarItems: function() {
                return "useButtons" === this.option("applyValueMode") ? this._popupToolbarItemsConfig() : []
            },
            _getFirstPopupElement: function() {
                return this._popup._wrapper().find(".dx-popup-done.dx-button")
            },
            _getLastPopupElement: function() {
                return this._popup._wrapper().find(".dx-popup-cancel.dx-button")
            },
            _popupElementTabHandler: function(e) {
                var $element = (0, _renderer2.default)(e.currentTarget);
                if (e.shiftKey && $element.is(this._getFirstPopupElement()) || !e.shiftKey && $element.is(this._getLastPopupElement())) {
                    _events_engine2.default.trigger(this._input(), "focus");
                    e.preventDefault()
                }
            },
            _popupElementEscHandler: function() {
                _events_engine2.default.trigger(this._input(), "focus");
                this.close()
            },
            _popupButtonInitializedHandler: function(e) {
                e.component.registerKeyHandler("tab", this._popupElementTabHandler.bind(this));
                e.component.registerKeyHandler("escape", this._popupElementEscHandler.bind(this))
            },
            _popupToolbarItemsConfig: function() {
                var buttonsConfig = [{
                    shortcut: "done",
                    options: {
                        onClick: this._applyButtonHandler.bind(this),
                        text: this.option("applyButtonText"),
                        onInitialized: this._popupButtonInitializedHandler.bind(this)
                    }
                }, {
                    shortcut: "cancel",
                    options: {
                        onClick: this._cancelButtonHandler.bind(this),
                        text: this.option("cancelButtonText"),
                        onInitialized: this._popupButtonInitializedHandler.bind(this)
                    }
                }];
                return this._applyButtonsLocation(buttonsConfig)
            },
            _applyButtonsLocation: function(buttonsConfig) {
                var buttonsLocation = this.option("buttonsLocation");
                var resultConfig = buttonsConfig;
                if ("default" !== buttonsLocation) {
                    var position = (0, _common.splitPair)(buttonsLocation);
                    (0, _iterator.each)(resultConfig, function(_, element) {
                        (0, _extend.extend)(element, {
                            toolbar: position[0],
                            location: position[1]
                        })
                    })
                }
                return resultConfig
            },
            _applyButtonHandler: function() {
                this.close();
                this.option("focusStateEnabled") && this.focus()
            },
            _cancelButtonHandler: function() {
                this.close();
                this.option("focusStateEnabled") && this.focus()
            },
            _updatePopupWidth: _common.noop,
            _popupOptionChanged: function(args) {
                var options = _ui6.default.getOptionsFromContainer(args);
                this._setPopupOption(options);
                if (Object.keys(options).indexOf("width") !== -1 && void 0 === options.width) {
                    this._updatePopupWidth()
                }
            },
            _renderSubmitElement: function() {
                if (this.option("useHiddenSubmitElement")) {
                    this._$submitElement = (0, _renderer2.default)("<input>").attr("type", "hidden").appendTo(this.$element())
                }
            },
            _setSubmitValue: function() {
                this._getSubmitElement().val(this.option("value"))
            },
            _getSubmitElement: function() {
                if (this.option("useHiddenSubmitElement")) {
                    return this._$submitElement
                } else {
                    return this.callBase()
                }
            },
            _dispose: function() {
                this._detachFocusOutEvents();
                this.callBase()
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    showPopupTitle: {
                        since: "20.1",
                        alias: "dropDownOptions.showTitle"
                    }
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "opened":
                        this._renderOpenedState();
                        break;
                    case "onOpened":
                    case "onClosed":
                        this._initVisibilityActions();
                        break;
                    case "onPopupInitialized":
                        this._initPopupInitializedAction();
                        break;
                    case "fieldTemplate":
                        if ((0, _type.isDefined)(args.value)) {
                            this._renderField()
                        } else {
                            this._invalidate()
                        }
                        break;
                    case "acceptCustomValue":
                    case "openOnFieldClick":
                        this._invalidate();
                        break;
                    case "dropDownButtonTemplate":
                    case "showDropDownButton":
                        this._updateButtons(["dropDown"]);
                        break;
                    case "dropDownOptions":
                        this._popupOptionChanged(args);
                        this._options.cache("dropDownOptions", this.option("dropDownOptions"));
                        break;
                    case "popupPosition":
                    case "deferRendering":
                        break;
                    case "applyValueMode":
                    case "applyButtonText":
                    case "cancelButtonText":
                    case "buttonsLocation":
                        this._setPopupOption("toolbarItems", this._getPopupToolbarItems());
                        break;
                    case "showPopupTitle":
                        this._setPopupOption("showTitle", args.value);
                        break;
                    case "useHiddenSubmitElement":
                        if (this._$submitElement) {
                            this._$submitElement.remove();
                            this._$submitElement = void 0
                        }
                        this._renderSubmitElement();
                        break;
                    case "rtlEnabled":
                        this._updatePopupPosition(args.value);
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            open: function() {
                this.option("opened", true)
            },
            close: function() {
                this.option("opened", false)
            },
            field: function() {
                return (0, _dom.getPublicElement)(this._input())
            },
            content: function() {
                return this._popup ? this._popup.content() : null
            }
        });
        (0, _component_registrator2.default)("dxDropDownEditor", DropDownEditor);
        module.exports = DropDownEditor
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/exporter.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var fileSaver = __webpack_require__( /*! ./exporter/file_saver */ 176).fileSaver;
        var excelCreator = __webpack_require__( /*! ./exporter/excel_creator */ 450);
        var imageCreator = __webpack_require__( /*! ./exporter/image_creator */ 278);
        var svgCreator = __webpack_require__( /*! ./exporter/svg_creator */ 462);
        var _isFunction = __webpack_require__( /*! ./core/utils/type */ 1).isFunction;
        var Deferred = __webpack_require__( /*! ./core/utils/deferred */ 6).Deferred;
        exports.export = function(data, options, getData) {
            if (!data) {
                return (new Deferred).resolve()
            }
            var exportingAction = options.exportingAction;
            var exportedAction = options.exportedAction;
            var fileSavingAction = options.fileSavingAction;
            var eventArgs = {
                fileName: options.fileName,
                format: options.format,
                cancel: false
            };
            _isFunction(exportingAction) && exportingAction(eventArgs);
            if (!eventArgs.cancel) {
                return getData(data, options).then(function(blob) {
                    _isFunction(exportedAction) && exportedAction();
                    if (_isFunction(fileSavingAction)) {
                        eventArgs.data = blob;
                        fileSavingAction(eventArgs)
                    }
                    if (!eventArgs.cancel) {
                        fileSaver.saveAs(eventArgs.fileName, options.format, blob, options.proxyUrl, options.forceProxy)
                    }
                })
            }
            return (new Deferred).resolve()
        };
        exports.fileSaver = fileSaver;
        exports.excel = {
            creator: excelCreator.ExcelCreator,
            getData: excelCreator.getData,
            formatConverter: __webpack_require__( /*! ./exporter/excel_format_converter */ 186)
        };
        exports.excel.__internals = excelCreator.__internals;
        exports.image = {
            creator: imageCreator.imageCreator,
            getData: imageCreator.getData,
            testFormats: imageCreator.testFormats
        };
        exports.pdf = {
            getData: __webpack_require__( /*! ./exporter/pdf_creator */ 464).getData
        };
        exports.svg = {
            creator: svgCreator.svgCreator,
            getData: svgCreator.getData
        }
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/size.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var typeUtils = __webpack_require__( /*! ../utils/type */ 1);
        var SPECIAL_HEIGHT_VALUES = ["auto", "none", "inherit", "initial"];
        var getSizeByStyles = function(elementStyles, styles) {
            var result = 0;
            styles.forEach(function(style) {
                result += parseFloat(elementStyles[style]) || 0
            });
            return result
        };
        var getElementBoxParams = function(name, elementStyles) {
            var beforeName = "width" === name ? "Left" : "Top";
            var afterName = "width" === name ? "Right" : "Bottom";
            return {
                padding: getSizeByStyles(elementStyles, ["padding" + beforeName, "padding" + afterName]),
                border: getSizeByStyles(elementStyles, ["border" + beforeName + "Width", "border" + afterName + "Width"]),
                margin: getSizeByStyles(elementStyles, ["margin" + beforeName, "margin" + afterName])
            }
        };
        var getBoxSizingOffset = function(name, elementStyles, boxParams) {
            var size = elementStyles[name];
            if ("border-box" === elementStyles.boxSizing && size.length && "%" !== size[size.length - 1]) {
                return boxParams.border + boxParams.padding
            }
            return 0
        };
        var getSize = function(element, name, include) {
            var elementStyles = window.getComputedStyle(element);
            var boxParams = getElementBoxParams(name, elementStyles);
            var clientRect = element.getClientRects().length;
            var boundingClientRect = element.getBoundingClientRect()[name];
            var result = clientRect ? boundingClientRect : 0;
            if (result <= 0) {
                result = parseFloat(elementStyles[name] || element.style[name]) || 0;
                result -= getBoxSizingOffset(name, elementStyles, boxParams)
            } else {
                result -= boxParams.padding + boxParams.border
            }
            if (include.paddings) {
                result += boxParams.padding
            }
            if (include.borders) {
                result += boxParams.border
            }
            if (include.margins) {
                result += boxParams.margin
            }
            return result
        };
        var getContainerHeight = function(container) {
            return typeUtils.isWindow(container) ? container.innerHeight : container.offsetHeight
        };
        var parseHeight = function(value, container) {
            if (value.indexOf("px") > 0) {
                value = parseInt(value.replace("px", ""))
            } else {
                if (value.indexOf("%") > 0) {
                    value = parseInt(value.replace("%", "")) * getContainerHeight(container) / 100
                } else {
                    if (!isNaN(value)) {
                        value = parseInt(value)
                    }
                }
            }
            return value
        };
        var getHeightWithOffset = function(value, offset, container) {
            if (!value) {
                return null
            }
            if (SPECIAL_HEIGHT_VALUES.indexOf(value) > -1) {
                return offset ? null : value
            }
            if (typeUtils.isString(value)) {
                value = parseHeight(value, container)
            }
            if (typeUtils.isNumeric(value)) {
                return Math.max(0, value + offset)
            }
            var operationString = offset < 0 ? " - " : " ";
            return "calc(" + value + operationString + Math.abs(offset) + "px)"
        };
        var addOffsetToMaxHeight = function(value, offset, container) {
            var maxHeight = getHeightWithOffset(value, offset, container);
            return null !== maxHeight ? maxHeight : "none"
        };
        var addOffsetToMinHeight = function(value, offset, container) {
            var minHeight = getHeightWithOffset(value, offset, container);
            return null !== minHeight ? minHeight : 0
        };
        var getVerticalOffsets = function(element, withMargins) {
            if (!element) {
                return 0
            }
            var boxParams = getElementBoxParams("height", window.getComputedStyle(element));
            return boxParams.padding + boxParams.border + (withMargins ? boxParams.margin : 0)
        };
        var getVisibleHeight = function(element) {
            if (element) {
                var boundingClientRect = element.getBoundingClientRect();
                if (boundingClientRect.height) {
                    return boundingClientRect.height
                }
            }
            return 0
        };
        exports.getSize = getSize;
        exports.getElementBoxParams = getElementBoxParams;
        exports.addOffsetToMaxHeight = addOffsetToMaxHeight;
        exports.addOffsetToMinHeight = addOffsetToMinHeight;
        exports.getVerticalOffsets = getVerticalOffsets;
        exports.getVisibleHeight = getVisibleHeight;
        exports.parseHeight = parseHeight
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/resizable.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _translator = __webpack_require__( /*! ../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom_component = __webpack_require__( /*! ../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _math = __webpack_require__( /*! ../core/utils/math */ 31);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _drag = __webpack_require__( /*! ../events/drag */ 69);
        var _drag2 = _interopRequireDefault(_drag);
        var _position = __webpack_require__( /*! ../core/utils/position */ 21);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var isPlainObject = _type2.default.isPlainObject;
        var isFunction = _type2.default.isFunction;
        var RESIZABLE = "dxResizable";
        var RESIZABLE_CLASS = "dx-resizable";
        var RESIZABLE_RESIZING_CLASS = "dx-resizable-resizing";
        var RESIZABLE_HANDLE_CLASS = "dx-resizable-handle";
        var RESIZABLE_HANDLE_TOP_CLASS = "dx-resizable-handle-top";
        var RESIZABLE_HANDLE_BOTTOM_CLASS = "dx-resizable-handle-bottom";
        var RESIZABLE_HANDLE_LEFT_CLASS = "dx-resizable-handle-left";
        var RESIZABLE_HANDLE_RIGHT_CLASS = "dx-resizable-handle-right";
        var RESIZABLE_HANDLE_CORNER_CLASS = "dx-resizable-handle-corner";
        var DRAGSTART_START_EVENT_NAME = (0, _utils.addNamespace)(_drag2.default.start, RESIZABLE);
        var DRAGSTART_EVENT_NAME = (0, _utils.addNamespace)(_drag2.default.move, RESIZABLE);
        var DRAGSTART_END_EVENT_NAME = (0, _utils.addNamespace)(_drag2.default.end, RESIZABLE);
        var SIDE_BORDER_WIDTH_STYLES = {
            left: "borderLeftWidth",
            top: "borderTopWidth",
            right: "borderRightWidth",
            bottom: "borderBottomWidth"
        };
        var Resizable = _dom_component2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    handles: "all",
                    step: "1",
                    stepPrecision: "simple",
                    area: void 0,
                    minWidth: 30,
                    maxWidth: 1 / 0,
                    minHeight: 30,
                    maxHeight: 1 / 0,
                    onResizeStart: null,
                    onResize: null,
                    onResizeEnd: null,
                    roundStepValue: true
                })
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(RESIZABLE_CLASS)
            },
            _initMarkup: function() {
                this.callBase();
                this._renderHandles()
            },
            _render: function() {
                this.callBase();
                this._renderActions()
            },
            _renderActions: function() {
                this._resizeStartAction = this._createActionByOption("onResizeStart");
                this._resizeEndAction = this._createActionByOption("onResizeEnd");
                this._resizeAction = this._createActionByOption("onResize")
            },
            _renderHandles: function() {
                this._handles = [];
                var handles = this.option("handles");
                if ("none" === handles) {
                    return
                }
                var directions = "all" === handles ? ["top", "bottom", "left", "right"] : handles.split(" ");
                (0, _iterator.each)(directions, function(index, handleName) {
                    this._renderHandle(handleName)
                }.bind(this));
                (0, _array.inArray)("bottom", directions) + 1 && (0, _array.inArray)("right", directions) + 1 && this._renderHandle("corner-bottom-right");
                (0, _array.inArray)("bottom", directions) + 1 && (0, _array.inArray)("left", directions) + 1 && this._renderHandle("corner-bottom-left");
                (0, _array.inArray)("top", directions) + 1 && (0, _array.inArray)("right", directions) + 1 && this._renderHandle("corner-top-right");
                (0, _array.inArray)("top", directions) + 1 && (0, _array.inArray)("left", directions) + 1 && this._renderHandle("corner-top-left");
                this._attachEventHandlers()
            },
            _renderHandle: function(handleName) {
                var $handle = (0, _renderer2.default)("<div>").addClass(RESIZABLE_HANDLE_CLASS).addClass(RESIZABLE_HANDLE_CLASS + "-" + handleName).appendTo(this.$element());
                this._handles.push($handle)
            },
            _attachEventHandlers: function() {
                if (this.option("disabled")) {
                    return
                }
                var handlers = {};
                handlers[DRAGSTART_START_EVENT_NAME] = this._dragStartHandler.bind(this);
                handlers[DRAGSTART_EVENT_NAME] = this._dragHandler.bind(this);
                handlers[DRAGSTART_END_EVENT_NAME] = this._dragEndHandler.bind(this);
                this._handles.forEach(function(handleElement) {
                    _events_engine2.default.on(handleElement, handlers, {
                        direction: "both",
                        immediate: true
                    })
                })
            },
            _detachEventHandlers: function() {
                this._handles.forEach(function(handleElement) {
                    _events_engine2.default.off(handleElement)
                })
            },
            _toggleEventHandlers: function(shouldAttachEvents) {
                shouldAttachEvents ? this._attachEventHandlers() : this._detachEventHandlers()
            },
            _dragStartHandler: function(e) {
                var $element = this.$element();
                if ($element.is(".dx-state-disabled, .dx-state-disabled *")) {
                    e.cancel = true;
                    return
                }
                this._toggleResizingClass(true);
                this._movingSides = this._getMovingSides(e);
                this._elementLocation = _translator2.default.locate($element);
                var elementRect = (0, _position.getBoundingRect)($element.get(0));
                this._elementSize = {
                    width: elementRect.width,
                    height: elementRect.height
                };
                this._renderDragOffsets(e);
                this._resizeStartAction({
                    event: e,
                    width: this._elementSize.width,
                    height: this._elementSize.height,
                    handles: this._movingSides
                });
                e.targetElements = null
            },
            _toggleResizingClass: function(value) {
                this.$element().toggleClass(RESIZABLE_RESIZING_CLASS, value)
            },
            _renderDragOffsets: function(e) {
                var area = this._getArea();
                if (!area) {
                    return
                }
                var $handle = (0, _renderer2.default)(e.target).closest("." + RESIZABLE_HANDLE_CLASS);
                var handleWidth = $handle.outerWidth();
                var handleHeight = $handle.outerHeight();
                var handleOffset = $handle.offset();
                var areaOffset = area.offset;
                var scrollOffset = this._getAreaScrollOffset();
                e.maxLeftOffset = handleOffset.left - areaOffset.left - scrollOffset.scrollX;
                e.maxRightOffset = areaOffset.left + area.width - handleOffset.left - handleWidth + scrollOffset.scrollX;
                e.maxTopOffset = handleOffset.top - areaOffset.top - scrollOffset.scrollY;
                e.maxBottomOffset = areaOffset.top + area.height - handleOffset.top - handleHeight + scrollOffset.scrollY
            },
            _getBorderWidth: function($element, direction) {
                if (_type2.default.isWindow($element.get(0))) {
                    return 0
                }
                var borderWidth = $element.css(SIDE_BORDER_WIDTH_STYLES[direction]);
                return parseInt(borderWidth) || 0
            },
            _dragHandler: function(e) {
                var $element = this.$element();
                var sides = this._movingSides;
                var location = this._elementLocation;
                var size = this._elementSize;
                var offset = this._getOffset(e);
                var width = size.width + offset.x * (sides.left ? -1 : 1);
                var height = size.height + offset.y * (sides.top ? -1 : 1);
                if (offset.x || "strict" === this.option("stepPrecision")) {
                    this._renderWidth(width)
                }
                if (offset.y || "strict" === this.option("stepPrecision")) {
                    this._renderHeight(height)
                }
                var elementRect = (0, _position.getBoundingRect)($element.get(0));
                var offsetTop = offset.y - ((elementRect.height || height) - height);
                var offsetLeft = offset.x - ((elementRect.width || width) - width);
                _translator2.default.move($element, {
                    top: location.top + (sides.top ? offsetTop : 0),
                    left: location.left + (sides.left ? offsetLeft : 0)
                });
                this._resizeAction({
                    event: e,
                    width: this.option("width") || width,
                    height: this.option("height") || height,
                    handles: this._movingSides
                });
                _dom2.default.triggerResizeEvent($element)
            },
            _getOffset: function(e) {
                var offset = e.offset;
                var steps = _common2.default.pairToObject(this.option("step"), !this.option("roundStepValue"));
                var sides = this._getMovingSides(e);
                var strictPrecision = "strict" === this.option("stepPrecision");
                if (!sides.left && !sides.right) {
                    offset.x = 0
                }
                if (!sides.top && !sides.bottom) {
                    offset.y = 0
                }
                return strictPrecision ? this._getStrictOffset(offset, steps, sides) : this._getSimpleOffset(offset, steps)
            },
            _getSimpleOffset: function(offset, steps) {
                return {
                    x: offset.x - offset.x % steps.h,
                    y: offset.y - offset.y % steps.v
                }
            },
            _getStrictOffset: function(offset, steps, sides) {
                var location = this._elementLocation;
                var size = this._elementSize;
                var xPos = sides.left ? location.left : location.left + size.width;
                var yPos = sides.top ? location.top : location.top + size.height;
                var newXShift = (xPos + offset.x) % steps.h;
                var newYShift = (yPos + offset.y) % steps.v;
                var sign = Math.sign || function(x) {
                    x = +x;
                    if (0 === x || isNaN(x)) {
                        return x
                    }
                    return x > 0 ? 1 : -1
                };
                var separatorOffset = function(steps, offset) {
                    return (1 + .2 * sign(offset)) % 1 * steps
                };
                var isSmallOffset = function(offset, steps) {
                    return Math.abs(offset) < .2 * steps
                };
                var newOffsetX = offset.x - newXShift;
                var newOffsetY = offset.y - newYShift;
                if (newXShift > separatorOffset(steps.h, offset.x)) {
                    newOffsetX += steps.h
                }
                if (newYShift > separatorOffset(steps.v, offset.y)) {
                    newOffsetY += steps.v
                }
                return {
                    x: (sides.left || sides.right) && !isSmallOffset(offset.x, steps.h) ? newOffsetX : 0,
                    y: (sides.top || sides.bottom) && !isSmallOffset(offset.y, steps.v) ? newOffsetY : 0
                }
            },
            _getMovingSides: function(e) {
                var $target = (0, _renderer2.default)(e.target);
                var hasCornerTopLeftClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-top-left");
                var hasCornerTopRightClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-top-right");
                var hasCornerBottomLeftClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-bottom-left");
                var hasCornerBottomRightClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-bottom-right");
                return {
                    top: $target.hasClass(RESIZABLE_HANDLE_TOP_CLASS) || hasCornerTopLeftClass || hasCornerTopRightClass,
                    left: $target.hasClass(RESIZABLE_HANDLE_LEFT_CLASS) || hasCornerTopLeftClass || hasCornerBottomLeftClass,
                    bottom: $target.hasClass(RESIZABLE_HANDLE_BOTTOM_CLASS) || hasCornerBottomLeftClass || hasCornerBottomRightClass,
                    right: $target.hasClass(RESIZABLE_HANDLE_RIGHT_CLASS) || hasCornerTopRightClass || hasCornerBottomRightClass
                }
            },
            _getArea: function() {
                var area = this.option("area");
                if (isFunction(area)) {
                    area = area.call(this)
                }
                if (isPlainObject(area)) {
                    return this._getAreaFromObject(area)
                }
                return this._getAreaFromElement(area)
            },
            _getAreaScrollOffset: function() {
                var area = this.option("area");
                var isElement = !isFunction(area) && !isPlainObject(area);
                var scrollOffset = {
                    scrollY: 0,
                    scrollX: 0
                };
                if (isElement) {
                    var areaElement = (0, _renderer2.default)(area)[0];
                    if (_type2.default.isWindow(areaElement)) {
                        scrollOffset.scrollX = areaElement.pageXOffset;
                        scrollOffset.scrollY = areaElement.pageYOffset
                    }
                }
                return scrollOffset
            },
            _getAreaFromObject: function(area) {
                var result = {
                    width: area.right - area.left,
                    height: area.bottom - area.top,
                    offset: {
                        left: area.left,
                        top: area.top
                    }
                };
                this._correctAreaGeometry(result);
                return result
            },
            _getAreaFromElement: function(area) {
                var $area = (0, _renderer2.default)(area);
                var result;
                if ($area.length) {
                    result = {
                        width: $area.innerWidth(),
                        height: $area.innerHeight(),
                        offset: (0, _extend.extend)({
                            top: 0,
                            left: 0
                        }, _type2.default.isWindow($area[0]) ? {} : $area.offset())
                    };
                    this._correctAreaGeometry(result, $area)
                }
                return result
            },
            _correctAreaGeometry: function(result, $area) {
                var areaBorderLeft = $area ? this._getBorderWidth($area, "left") : 0;
                var areaBorderTop = $area ? this._getBorderWidth($area, "top") : 0;
                result.offset.left += areaBorderLeft + this._getBorderWidth(this.$element(), "left");
                result.offset.top += areaBorderTop + this._getBorderWidth(this.$element(), "top");
                result.width -= this.$element().outerWidth() - this.$element().innerWidth();
                result.height -= this.$element().outerHeight() - this.$element().innerHeight()
            },
            _dragEndHandler: function(e) {
                var $element = this.$element();
                this._resizeEndAction({
                    event: e,
                    width: $element.outerWidth(),
                    height: $element.outerHeight(),
                    handles: this._movingSides
                });
                this._toggleResizingClass(false)
            },
            _renderWidth: function(width) {
                this.option("width", (0, _math.fitIntoRange)(width, this.option("minWidth"), this.option("maxWidth")))
            },
            _renderHeight: function(height) {
                this.option("height", (0, _math.fitIntoRange)(height, this.option("minHeight"), this.option("maxHeight")))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "disabled":
                        this._toggleEventHandlers(!args.value);
                        this.callBase(args);
                        break;
                    case "handles":
                        this._invalidate();
                        break;
                    case "minWidth":
                    case "maxWidth":
                        _window2.default.hasWindow() && this._renderWidth(this.$element().outerWidth());
                        break;
                    case "minHeight":
                    case "maxHeight":
                        _window2.default.hasWindow() && this._renderHeight(this.$element().outerHeight());
                        break;
                    case "onResize":
                    case "onResizeStart":
                    case "onResizeEnd":
                        this._renderActions();
                        break;
                    case "area":
                    case "stepPrecision":
                    case "step":
                    case "roundStepValue":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                this.$element().find("." + RESIZABLE_HANDLE_CLASS).remove()
            },
            _useTemplates: function() {
                return false
            }
        });
        (0, _component_registrator2.default)(RESIZABLE, Resizable);
        module.exports = Resizable
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/overlay/z_index.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.clearStack = exports.remove = exports.create = exports.base = void 0;
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var baseZIndex = 1500;
        var zIndexStack = [];
        exports.base = function(ZIndex) {
            baseZIndex = (0, _common.ensureDefined)(ZIndex, baseZIndex);
            return baseZIndex
        };
        exports.create = function() {
            var baseIndex = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : baseZIndex;
            var length = zIndexStack.length;
            var index = (length ? zIndexStack[length - 1] : baseIndex) + 1;
            zIndexStack.push(index);
            return index
        };
        exports.remove = function(zIndex) {
            var position = zIndexStack.indexOf(zIndex);
            if (position >= 0) {
                zIndexStack.splice(position, 1)
            }
        };
        exports.clearStack = function() {
            zIndexStack = []
        }
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/swipe.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var GestureEmitter = __webpack_require__( /*! ./gesture/emitter.gesture */ 166);
        var registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 101);
        var SWIPE_START_EVENT = "dxswipestart";
        var SWIPE_EVENT = "dxswipe";
        var SWIPE_END_EVENT = "dxswipeend";
        var HorizontalStrategy = {
            defaultItemSizeFunc: function() {
                return this.getElement().width()
            },
            getBounds: function() {
                return [this._maxLeftOffset, this._maxRightOffset]
            },
            calcOffsetRatio: function(e) {
                var endEventData = eventUtils.eventData(e);
                return (endEventData.x - (this._savedEventData && this._savedEventData.x || 0)) / this._itemSizeFunc().call(this, e)
            },
            isFastSwipe: function(e) {
                var endEventData = eventUtils.eventData(e);
                return this.FAST_SWIPE_SPEED_LIMIT * Math.abs(endEventData.x - this._tickData.x) >= endEventData.time - this._tickData.time
            }
        };
        var VerticalStrategy = {
            defaultItemSizeFunc: function() {
                return this.getElement().height()
            },
            getBounds: function() {
                return [this._maxTopOffset, this._maxBottomOffset]
            },
            calcOffsetRatio: function(e) {
                var endEventData = eventUtils.eventData(e);
                return (endEventData.y - (this._savedEventData && this._savedEventData.y || 0)) / this._itemSizeFunc().call(this, e)
            },
            isFastSwipe: function(e) {
                var endEventData = eventUtils.eventData(e);
                return this.FAST_SWIPE_SPEED_LIMIT * Math.abs(endEventData.y - this._tickData.y) >= endEventData.time - this._tickData.time
            }
        };
        var STRATEGIES = {
            horizontal: HorizontalStrategy,
            vertical: VerticalStrategy
        };
        var SwipeEmitter = GestureEmitter.inherit({
            TICK_INTERVAL: 300,
            FAST_SWIPE_SPEED_LIMIT: 10,
            ctor: function(element) {
                this.callBase(element);
                this.direction = "horizontal";
                this.elastic = true
            },
            _getStrategy: function() {
                return STRATEGIES[this.direction]
            },
            _defaultItemSizeFunc: function() {
                return this._getStrategy().defaultItemSizeFunc.call(this)
            },
            _itemSizeFunc: function() {
                return this.itemSizeFunc || this._defaultItemSizeFunc
            },
            _init: function(e) {
                this._tickData = eventUtils.eventData(e)
            },
            _start: function(e) {
                this._savedEventData = eventUtils.eventData(e);
                e = this._fireEvent(SWIPE_START_EVENT, e);
                if (!e.cancel) {
                    this._maxLeftOffset = e.maxLeftOffset;
                    this._maxRightOffset = e.maxRightOffset;
                    this._maxTopOffset = e.maxTopOffset;
                    this._maxBottomOffset = e.maxBottomOffset
                }
            },
            _move: function(e) {
                var strategy = this._getStrategy();
                var moveEventData = eventUtils.eventData(e);
                var offset = strategy.calcOffsetRatio.call(this, e);
                offset = this._fitOffset(offset, this.elastic);
                if (moveEventData.time - this._tickData.time > this.TICK_INTERVAL) {
                    this._tickData = moveEventData
                }
                this._fireEvent(SWIPE_EVENT, e, {
                    offset: offset
                });
                e.preventDefault()
            },
            _end: function(e) {
                var strategy = this._getStrategy();
                var offsetRatio = strategy.calcOffsetRatio.call(this, e);
                var isFast = strategy.isFastSwipe.call(this, e);
                var startOffset = offsetRatio;
                var targetOffset = this._calcTargetOffset(offsetRatio, isFast);
                startOffset = this._fitOffset(startOffset, this.elastic);
                targetOffset = this._fitOffset(targetOffset, false);
                this._fireEvent(SWIPE_END_EVENT, e, {
                    offset: startOffset,
                    targetOffset: targetOffset
                })
            },
            _fitOffset: function(offset, elastic) {
                var strategy = this._getStrategy();
                var bounds = strategy.getBounds.call(this);
                if (offset < -bounds[0]) {
                    return elastic ? (-2 * bounds[0] + offset) / 3 : -bounds[0]
                }
                if (offset > bounds[1]) {
                    return elastic ? (2 * bounds[1] + offset) / 3 : bounds[1]
                }
                return offset
            },
            _calcTargetOffset: function(offsetRatio, isFast) {
                var result;
                if (isFast) {
                    result = Math.ceil(Math.abs(offsetRatio));
                    if (offsetRatio < 0) {
                        result = -result
                    }
                } else {
                    result = Math.round(offsetRatio)
                }
                return result
            }
        });
        registerEmitter({
            emitter: SwipeEmitter,
            events: [SWIPE_START_EVENT, SWIPE_EVENT, SWIPE_END_EVENT]
        });
        exports.swipe = SWIPE_EVENT;
        exports.start = SWIPE_START_EVENT;
        exports.end = SWIPE_END_EVENT
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/core/polyfills/weak_map.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var weakMap = windowUtils.hasWindow() ? windowUtils.getWindow().WeakMap : WeakMap;
        if (!weakMap) {
            weakMap = function() {
                var keys = [];
                var values = [];
                this.set = function(key, value) {
                    var index = inArray(key, keys);
                    if (index === -1) {
                        keys.push(key);
                        values.push(value)
                    } else {
                        values[index] = value
                    }
                };
                this.get = function(key) {
                    var index = inArray(key, keys);
                    if (index === -1) {
                        return
                    }
                    return values[index]
                };
                this.has = function(key) {
                    var index = inArray(key, keys);
                    if (index === -1) {
                        return false
                    }
                    return true
                };
                this.delete = function(key) {
                    var index = inArray(key, keys);
                    if (index === -1) {
                        return
                    }
                    keys.splice(index, 1);
                    values.splice(index, 1)
                }
            }
        }
        module.exports = weakMap
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/core/memorized_callbacks.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _callbacks = __webpack_require__( /*! ./utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var MemorizedCallbacks = function() {
            function MemorizedCallbacks() {
                _classCallCheck(this, MemorizedCallbacks);
                this.memory = [];
                this.callbacks = (0, _callbacks2.default)()
            }
            _createClass(MemorizedCallbacks, [{
                key: "add",
                value: function(fn) {
                    (0, _iterator.each)(this.memory, function(_, item) {
                        return fn.apply(fn, item)
                    });
                    this.callbacks.add(fn)
                }
            }, {
                key: "remove",
                value: function(fn) {
                    this.callbacks.remove(fn)
                }
            }, {
                key: "fire",
                value: function() {
                    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                        args[_key] = arguments[_key]
                    }
                    this.memory.push(args);
                    this.callbacks.fire.apply(this.callbacks, args)
                }
            }]);
            return MemorizedCallbacks
        }();
        exports.default = MemorizedCallbacks
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel_format_converter.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _string = __webpack_require__( /*! ../core/utils/string */ 43);
        var _string2 = _interopRequireDefault(_string);
        var _number = __webpack_require__( /*! ../localization/number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _date = __webpack_require__( /*! ../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _date3 = __webpack_require__( /*! ../localization/ldml/date.format */ 215);
        var _language_codes = __webpack_require__( /*! ../localization/language_codes */ 298);
        __webpack_require__( /*! ../localization/currency */ 131);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ARABIC_ZERO_CODE = 1632;
        var DEFINED_NUMBER_FORMTATS = {
            thousands: "#,##0{0},&quot;K&quot;",
            millions: "#,##0{0},,&quot;M&quot;",
            billions: "#,##0{0},,,&quot;B&quot;",
            trillions: "#,##0{0},,,,&quot;T&quot;",
            percent: "0{0}%",
            decimal: "#{0}",
            fixedpoint: "#,##0{0}",
            exponential: "0{0}E+00",
            currency: " "
        };
        var PERIOD_REGEXP = /a+/g;
        var DAY_REGEXP = /E/g;
        var DO_REGEXP = /dE+/g;
        var STANDALONE_MONTH_REGEXP = /L/g;
        var HOUR_REGEXP = /h/g;
        var SLASH_REGEXP = /\//g;
        var SQUARE_OPEN_BRACKET_REGEXP = /\[/g;
        var SQUARE_CLOSE_BRACKET_REGEXP = /]/g;
        var ANY_REGEXP = /./g;
        var excelFormatConverter = module.exports = {
            _applyPrecision: function(format, precision) {
                var result;
                var i;
                if (precision > 0) {
                    result = "decimal" !== format ? "." : "";
                    for (i = 0; i < precision; i++) {
                        result += "0"
                    }
                    return result
                }
                return ""
            },
            _hasArabicDigits: function(text) {
                var code;
                for (var i = 0; i < text.length; i++) {
                    code = text.charCodeAt(i);
                    if (code >= ARABIC_ZERO_CODE && code < ARABIC_ZERO_CODE + 10) {
                        return true
                    }
                }
                return false
            },
            _convertDateFormatToOpenXml: function(format) {
                return format.replace(SLASH_REGEXP, "\\/").split("'").map(function(datePart, index) {
                    if (index % 2 === 0) {
                        return datePart.replace(PERIOD_REGEXP, "AM/PM").replace(DO_REGEXP, "d").replace(DAY_REGEXP, "d").replace(STANDALONE_MONTH_REGEXP, "M").replace(HOUR_REGEXP, "H").replace(SQUARE_OPEN_BRACKET_REGEXP, "\\[").replace(SQUARE_CLOSE_BRACKET_REGEXP, "\\]")
                    }
                    if (datePart) {
                        return datePart.replace(ANY_REGEXP, "\\$&")
                    }
                    return "'"
                }).join("")
            },
            _convertDateFormat: function(format) {
                var formattedValue = (_date2.default.format(new Date(2009, 8, 8, 6, 5, 4), format) || "").toString();
                var result = (0, _date3.getFormat)(function(value) {
                    return _date2.default.format(value, format)
                });
                if (result) {
                    result = this._convertDateFormatToOpenXml(result);
                    result = this._getLanguageInfo(formattedValue) + result
                }
                return result
            },
            _getLanguageInfo: function(defaultPattern) {
                var languageID = (0, _language_codes.getLanguageId)();
                var languageIDStr = languageID ? languageID.toString(16) : "";
                var languageInfo = "";
                if (this._hasArabicDigits(defaultPattern)) {
                    while (languageIDStr.length < 3) {
                        languageIDStr = "0" + languageIDStr
                    }
                    languageInfo = "[$-2010" + languageIDStr + "]"
                } else {
                    if (languageIDStr) {
                        languageInfo = "[$-" + languageIDStr + "]"
                    }
                }
                return languageInfo
            },
            _convertNumberFormat: function(format, precision, currency) {
                var result;
                var excelFormat;
                if ("currency" === format) {
                    excelFormat = _number2.default.getOpenXmlCurrencyFormat(currency)
                } else {
                    excelFormat = DEFINED_NUMBER_FORMTATS[format.toLowerCase()]
                }
                if (excelFormat) {
                    result = _string2.default.format(excelFormat, this._applyPrecision(format, precision))
                }
                return result
            },
            convertFormat: function(format, precision, type, currency) {
                if ((0, _type.isDefined)(format)) {
                    if ("date" === type) {
                        return excelFormatConverter._convertDateFormat(format)
                    } else {
                        if ((0, _type.isString)(format) && DEFINED_NUMBER_FORMTATS[format.toLowerCase()]) {
                            return excelFormatConverter._convertNumberFormat(format, precision, currency)
                        }
                    }
                }
            }
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/options/utils.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.getNestedOptionValue = exports.getParentName = exports.getFieldName = exports.deviceMatch = exports.normalizeOptions = exports.convertRulesToOptions = void 0;
        var _devices = __webpack_require__( /*! ../devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _type = __webpack_require__( /*! ../utils/type */ 1);
        var _common = __webpack_require__( /*! ../utils/common */ 3);
        var _extend = __webpack_require__( /*! ../utils/extend */ 0);
        var _data = __webpack_require__( /*! ../utils/data */ 20);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var cachedGetters = {};
        exports.convertRulesToOptions = function(rules) {
            var currentDevice = _devices2.default.current();
            return rules.reduce(function(options, _ref) {
                var device = _ref.device,
                    ruleOptions = _ref.options;
                var deviceFilter = device || {};
                var match = (0, _type.isFunction)(deviceFilter) ? deviceFilter(currentDevice) : deviceMatch(currentDevice, deviceFilter);
                if (match) {
                    (0, _extend.extend)(true, options, ruleOptions)
                }
                return options
            }, {})
        };
        exports.normalizeOptions = function(options, value) {
            return "string" !== typeof options ? options : _defineProperty({}, options, value)
        };
        var deviceMatch = exports.deviceMatch = function(device, filter) {
            return (0, _type.isEmptyObject)(filter) || (0, _common.findBestMatches)(device, [filter]).length > 0
        };
        exports.getFieldName = function(fullName) {
            return fullName.substr(fullName.lastIndexOf(".") + 1)
        };
        exports.getParentName = function(fullName) {
            return fullName.substr(0, fullName.lastIndexOf("."))
        };
        exports.getNestedOptionValue = function(optionsObject, name) {
            cachedGetters[name] = cachedGetters[name] || (0, _data.compileGetter)(name);
            return cachedGetters[name](optionsObject, {
                functionsAsIs: true
            })
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/animation/presets/presets.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Component = __webpack_require__( /*! ../../core/component */ 115);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var fx = __webpack_require__( /*! ../fx */ 40);
        var directionPostfixes = {
            forward: " dx-forward",
            backward: " dx-backward",
            none: " dx-no-direction",
            undefined: " dx-no-direction"
        };
        var optionPrefix = "preset_";
        var AnimationPresetCollection = Component.inherit({
            ctor: function() {
                this.callBase.apply(this, arguments);
                this._registeredPresets = [];
                this.resetToDefaults()
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    defaultAnimationDuration: 400,
                    defaultAnimationDelay: 0,
                    defaultStaggerAnimationDuration: 300,
                    defaultStaggerAnimationDelay: 40,
                    defaultStaggerAnimationStartDelay: 500
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return _device.phone
                    },
                    options: {
                        defaultStaggerAnimationDuration: 350,
                        defaultStaggerAnimationDelay: 50,
                        defaultStaggerAnimationStartDelay: 0
                    }
                }, {
                    device: function() {
                        return devices.current().android || devices.real.android
                    },
                    options: {
                        defaultAnimationDelay: 100
                    }
                }])
            },
            _getPresetOptionName: function(animationName) {
                return optionPrefix + animationName
            },
            _createAndroidSlideAnimationConfig: function(throughOpacity, widthMultiplier) {
                var that = this;
                var createBaseConfig = function(configModifier) {
                    return {
                        type: "slide",
                        delay: void 0 === configModifier.delay ? that.option("defaultAnimationDelay") : configModifier.delay,
                        duration: void 0 === configModifier.duration ? that.option("defaultAnimationDuration") : configModifier.duration
                    }
                };
                return {
                    enter: function($element, configModifier) {
                        var width = $element.parent().width() * widthMultiplier;
                        var direction = configModifier.direction;
                        var config = createBaseConfig(configModifier);
                        config.to = {
                            left: 0,
                            opacity: 1
                        };
                        if ("forward" === direction) {
                            config.from = {
                                left: width,
                                opacity: throughOpacity
                            }
                        } else {
                            if ("backward" === direction) {
                                config.from = {
                                    left: -width,
                                    opacity: throughOpacity
                                }
                            } else {
                                config.from = {
                                    left: 0,
                                    opacity: 0
                                }
                            }
                        }
                        return fx.createAnimation($element, config)
                    },
                    leave: function($element, configModifier) {
                        var width = $element.parent().width() * widthMultiplier;
                        var direction = configModifier.direction;
                        var config = createBaseConfig(configModifier);
                        config.from = {
                            left: 0,
                            opacity: 1
                        };
                        if ("forward" === direction) {
                            config.to = {
                                left: -width,
                                opacity: throughOpacity
                            }
                        } else {
                            if ("backward" === direction) {
                                config.to = {
                                    left: width,
                                    opacity: throughOpacity
                                }
                            } else {
                                config.to = {
                                    left: 0,
                                    opacity: 0
                                }
                            }
                        }
                        return fx.createAnimation($element, config)
                    }
                }
            },
            _createOpenDoorConfig: function() {
                var that = this;
                var createBaseConfig = function(configModifier) {
                    return {
                        type: "css",
                        extraCssClasses: "dx-opendoor-animation",
                        delay: void 0 === configModifier.delay ? that.option("defaultAnimationDelay") : configModifier.delay,
                        duration: void 0 === configModifier.duration ? that.option("defaultAnimationDuration") : configModifier.duration
                    }
                };
                return {
                    enter: function($element, configModifier) {
                        var direction = configModifier.direction;
                        var config = createBaseConfig(configModifier);
                        config.delay = "none" === direction ? config.delay : config.duration;
                        config.from = "dx-enter dx-opendoor-animation" + directionPostfixes[direction];
                        config.to = "dx-enter-active";
                        return fx.createAnimation($element, config)
                    },
                    leave: function($element, configModifier) {
                        var direction = configModifier.direction;
                        var config = createBaseConfig(configModifier);
                        config.from = "dx-leave dx-opendoor-animation" + directionPostfixes[direction];
                        config.to = "dx-leave-active";
                        return fx.createAnimation($element, config)
                    }
                }
            },
            _createWinPopConfig: function() {
                var that = this;
                var baseConfig = {
                    type: "css",
                    extraCssClasses: "dx-win-pop-animation",
                    duration: that.option("defaultAnimationDuration")
                };
                return {
                    enter: function($element, configModifier) {
                        var config = baseConfig;
                        var direction = configModifier.direction;
                        config.delay = "none" === direction ? that.option("defaultAnimationDelay") : that.option("defaultAnimationDuration") / 2;
                        config.from = "dx-enter dx-win-pop-animation" + directionPostfixes[direction];
                        config.to = "dx-enter-active";
                        return fx.createAnimation($element, config)
                    },
                    leave: function($element, configModifier) {
                        var config = baseConfig;
                        var direction = configModifier.direction;
                        config.delay = that.option("defaultAnimationDelay");
                        config.from = "dx-leave dx-win-pop-animation" + directionPostfixes[direction];
                        config.to = "dx-leave-active";
                        return fx.createAnimation($element, config)
                    }
                }
            },
            resetToDefaults: function() {
                this.clear();
                this.registerDefaultPresets();
                this.applyChanges()
            },
            clear: function(name) {
                var that = this;
                var newRegisteredPresets = [];
                each(this._registeredPresets, function(index, preset) {
                    if (!name || name === preset.name) {
                        that.option(that._getPresetOptionName(preset.name), void 0)
                    } else {
                        newRegisteredPresets.push(preset)
                    }
                });
                this._registeredPresets = newRegisteredPresets;
                this.applyChanges()
            },
            registerPreset: function(name, config) {
                this._registeredPresets.push({
                    name: name,
                    config: config
                })
            },
            applyChanges: function() {
                var that = this;
                var customRules = [];
                each(this._registeredPresets, function(index, preset) {
                    var rule = {
                        device: preset.config.device,
                        options: {}
                    };
                    rule.options[that._getPresetOptionName(preset.name)] = preset.config.animation;
                    customRules.push(rule)
                });
                this._setOptionsByDevice(customRules)
            },
            getPreset: function(name) {
                var result = name;
                while ("string" === typeof result) {
                    result = this.option(this._getPresetOptionName(result))
                }
                return result
            },
            registerDefaultPresets: function() {
                this.registerPreset("pop", {
                    animation: {
                        extraCssClasses: "dx-android-pop-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("openDoor", {
                    animation: this._createOpenDoorConfig()
                });
                this.registerPreset("win-pop", {
                    animation: this._createWinPopConfig()
                });
                this.registerPreset("fade", {
                    animation: {
                        extraCssClasses: "dx-fade-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("slide", {
                    device: function() {
                        return devices.current().android || devices.real.android
                    },
                    animation: this._createAndroidSlideAnimationConfig(1, 1)
                });
                this.registerPreset("slide", {
                    device: function() {
                        return !devices.current().android && !devices.real.android
                    },
                    animation: {
                        extraCssClasses: "dx-slide-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("ios7-slide", {
                    animation: {
                        extraCssClasses: "dx-ios7-slide-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("overflow", {
                    animation: {
                        extraCssClasses: "dx-overflow-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("ios7-toolbar", {
                    device: function() {
                        return !devices.current().android && !devices.real.android
                    },
                    animation: {
                        extraCssClasses: "dx-ios7-toolbar-animation",
                        delay: this.option("defaultAnimationDelay"),
                        duration: this.option("defaultAnimationDuration")
                    }
                });
                this.registerPreset("ios7-toolbar", {
                    device: function() {
                        return devices.current().android || devices.real.android
                    },
                    animation: this._createAndroidSlideAnimationConfig(0, .4)
                });
                this.registerPreset("stagger-fade", {
                    animation: {
                        extraCssClasses: "dx-fade-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-slide", {
                    animation: {
                        extraCssClasses: "dx-slide-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-fade-slide", {
                    animation: {
                        extraCssClasses: "dx-fade-slide-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-drop", {
                    animation: {
                        extraCssClasses: "dx-drop-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-fade-drop", {
                    animation: {
                        extraCssClasses: "dx-fade-drop-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-fade-rise", {
                    animation: {
                        extraCssClasses: "dx-fade-rise-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-3d-drop", {
                    animation: {
                        extraCssClasses: "dx-3d-drop-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                });
                this.registerPreset("stagger-fade-zoom", {
                    animation: {
                        extraCssClasses: "dx-fade-zoom-animation",
                        staggerDelay: this.option("defaultStaggerAnimationDelay"),
                        duration: this.option("defaultStaggerAnimationDuration"),
                        delay: this.option("defaultStaggerAnimationStartDelay")
                    }
                })
            }
        });
        exports.PresetCollection = AnimationPresetCollection;
        var animationPresets = new AnimationPresetCollection;
        exports.presets = animationPresets
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/module.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var angular = __webpack_require__( /*! angular */ 287);
        module.exports = angular.module("dx", [])
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/data/query_adapters.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {}
    },
    /*!****************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.edit.strategy.plain.js ***!
      \****************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var EditStrategy = __webpack_require__( /*! ./ui.collection_widget.edit.strategy */ 498);
        var PlainEditStrategy = EditStrategy.inherit({
            _getPlainItems: function() {
                return this._collectionWidget.option("items") || []
            },
            getIndexByItemData: function(itemData) {
                var keyOf = this._collectionWidget.keyOf.bind(this._collectionWidget);
                if (keyOf) {
                    return this.getIndexByKey(keyOf(itemData))
                } else {
                    return inArray(itemData, this._getPlainItems())
                }
            },
            getItemDataByIndex: function(index) {
                return this._getPlainItems()[index]
            },
            deleteItemAtIndex: function(index) {
                this._getPlainItems().splice(index, 1)
            },
            itemsGetter: function() {
                return this._getPlainItems()
            },
            getKeysByItems: function(items) {
                var keyOf = this._collectionWidget.keyOf.bind(this._collectionWidget);
                var result = items;
                if (keyOf) {
                    result = [];
                    for (var i = 0; i < items.length; i++) {
                        result.push(keyOf(items[i]))
                    }
                }
                return result
            },
            getIndexByKey: function(key) {
                var cache = this._cache;
                var keys = cache && cache.keys || this.getKeysByItems(this._getPlainItems());
                if (cache && !cache.keys) {
                    cache.keys = keys
                }
                if ("object" === _typeof(key)) {
                    for (var i = 0, length = keys.length; i < length; i++) {
                        if (this._equalKeys(key, keys[i])) {
                            return i
                        }
                    }
                } else {
                    return keys.indexOf(key)
                }
                return -1
            },
            getItemsByKeys: function(keys, items) {
                return (items || keys).slice()
            },
            moveItemAtIndexToIndex: function(movingIndex, destinationIndex) {
                var items = this._getPlainItems();
                var movedItemData = items[movingIndex];
                items.splice(movingIndex, 1);
                items.splice(destinationIndex, 0, movedItemData)
            },
            _isItemIndex: function(index) {
                return "number" === typeof index && Math.round(index) === index
            },
            _getNormalizedItemIndex: function(itemElement) {
                return this._collectionWidget._itemElements().index(itemElement)
            },
            _normalizeItemIndex: function(index) {
                return index
            },
            _denormalizeItemIndex: function(index) {
                return index
            },
            _getItemByNormalizedIndex: function(index) {
                return index > -1 ? this._collectionWidget._itemElements().eq(index) : null
            },
            _itemsFromSameParent: function() {
                return true
            }
        });
        module.exports = PlainEditStrategy
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/number.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 136);
        var _globalize = __webpack_require__( /*! globalize */ 79);
        var _globalize2 = _interopRequireDefault(_globalize);
        var _number = __webpack_require__( /*! ../number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        __webpack_require__( /*! globalize/number */ 79);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        if (_globalize2.default && _globalize2.default.formatNumber) {
            var enNumbers = {
                main: {
                    en: {
                        identity: {
                            version: {
                                _cldrVersion: "28",
                                _number: "$Revision: 11972 $"
                            },
                            language: "en"
                        },
                        numbers: {
                            defaultNumberingSystem: "latn",
                            otherNumberingSystems: {
                                "native": "latn"
                            },
                            minimumGroupingDigits: "1",
                            "symbols-numberSystem-latn": {
                                decimal: ".",
                                group: ",",
                                list: ";",
                                percentSign: "%",
                                plusSign: "+",
                                minusSign: "-",
                                exponential: "E",
                                superscriptingExponent: "\xd7",
                                perMille: "\u2030",
                                infinity: "\u221e",
                                nan: "NaN",
                                timeSeparator: ":"
                            },
                            "decimalFormats-numberSystem-latn": {
                                standard: "#,##0.###",
                                "long": {
                                    decimalFormat: {
                                        "1000-count-one": "0 thousand",
                                        "1000-count-other": "0 thousand",
                                        "10000-count-one": "00 thousand",
                                        "10000-count-other": "00 thousand",
                                        "100000-count-one": "000 thousand",
                                        "100000-count-other": "000 thousand",
                                        "1000000-count-one": "0 million",
                                        "1000000-count-other": "0 million",
                                        "10000000-count-one": "00 million",
                                        "10000000-count-other": "00 million",
                                        "100000000-count-one": "000 million",
                                        "100000000-count-other": "000 million",
                                        "1000000000-count-one": "0 billion",
                                        "1000000000-count-other": "0 billion",
                                        "10000000000-count-one": "00 billion",
                                        "10000000000-count-other": "00 billion",
                                        "100000000000-count-one": "000 billion",
                                        "100000000000-count-other": "000 billion",
                                        "1000000000000-count-one": "0 trillion",
                                        "1000000000000-count-other": "0 trillion",
                                        "10000000000000-count-one": "00 trillion",
                                        "10000000000000-count-other": "00 trillion",
                                        "100000000000000-count-one": "000 trillion",
                                        "100000000000000-count-other": "000 trillion"
                                    }
                                },
                                "short": {
                                    decimalFormat: {
                                        "1000-count-one": "0K",
                                        "1000-count-other": "0K",
                                        "10000-count-one": "00K",
                                        "10000-count-other": "00K",
                                        "100000-count-one": "000K",
                                        "100000-count-other": "000K",
                                        "1000000-count-one": "0M",
                                        "1000000-count-other": "0M",
                                        "10000000-count-one": "00M",
                                        "10000000-count-other": "00M",
                                        "100000000-count-one": "000M",
                                        "100000000-count-other": "000M",
                                        "1000000000-count-one": "0B",
                                        "1000000000-count-other": "0B",
                                        "10000000000-count-one": "00B",
                                        "10000000000-count-other": "00B",
                                        "100000000000-count-one": "000B",
                                        "100000000000-count-other": "000B",
                                        "1000000000000-count-one": "0T",
                                        "1000000000000-count-other": "0T",
                                        "10000000000000-count-one": "00T",
                                        "10000000000000-count-other": "00T",
                                        "100000000000000-count-one": "000T",
                                        "100000000000000-count-other": "000T"
                                    }
                                }
                            },
                            "scientificFormats-numberSystem-latn": {
                                standard: "#E0"
                            },
                            "percentFormats-numberSystem-latn": {
                                standard: "#,##0%"
                            },
                            "currencyFormats-numberSystem-latn": {
                                currencySpacing: {
                                    beforeCurrency: {
                                        currencyMatch: "[:^S:]",
                                        surroundingMatch: "[:digit:]",
                                        insertBetween: "\xa0"
                                    },
                                    afterCurrency: {
                                        currencyMatch: "[:^S:]",
                                        surroundingMatch: "[:digit:]",
                                        insertBetween: "\xa0"
                                    }
                                },
                                standard: "\xa4#,##0.00",
                                accounting: "\xa4#,##0.00;(\xa4#,##0.00)",
                                "short": {
                                    standard: {
                                        "1000-count-one": "\xa40K",
                                        "1000-count-other": "\xa40K",
                                        "10000-count-one": "\xa400K",
                                        "10000-count-other": "\xa400K",
                                        "100000-count-one": "\xa4000K",
                                        "100000-count-other": "\xa4000K",
                                        "1000000-count-one": "\xa40M",
                                        "1000000-count-other": "\xa40M",
                                        "10000000-count-one": "\xa400M",
                                        "10000000-count-other": "\xa400M",
                                        "100000000-count-one": "\xa4000M",
                                        "100000000-count-other": "\xa4000M",
                                        "1000000000-count-one": "\xa40B",
                                        "1000000000-count-other": "\xa40B",
                                        "10000000000-count-one": "\xa400B",
                                        "10000000000-count-other": "\xa400B",
                                        "100000000000-count-one": "\xa4000B",
                                        "100000000000-count-other": "\xa4000B",
                                        "1000000000000-count-one": "\xa40T",
                                        "1000000000000-count-other": "\xa40T",
                                        "10000000000000-count-one": "\xa400T",
                                        "10000000000000-count-other": "\xa400T",
                                        "100000000000000-count-one": "\xa4000T",
                                        "100000000000000-count-other": "\xa4000T"
                                    }
                                },
                                "unitPattern-count-one": "{0} {1}",
                                "unitPattern-count-other": "{0} {1}"
                            },
                            "miscPatterns-numberSystem-latn": {
                                atLeast: "{0}+",
                                range: "{0}\u2013{1}"
                            }
                        }
                    }
                }
            };
            if ("en" === _globalize2.default.locale().locale) {
                _globalize2.default.load(enNumbers);
                _globalize2.default.locale("en")
            }
            var formattersCache = {};
            var getFormatter = function(format) {
                var formatter;
                var formatCacheKey;
                if ("object" === _typeof(format)) {
                    formatCacheKey = _globalize2.default.locale().locale + ":" + JSON.stringify(format)
                } else {
                    formatCacheKey = _globalize2.default.locale().locale + ":" + format
                }
                formatter = formattersCache[formatCacheKey];
                if (!formatter) {
                    formatter = formattersCache[formatCacheKey] = _globalize2.default.numberFormatter(format)
                }
                return formatter
            };
            var globalizeNumberLocalization = {
                engine: function() {
                    return "globalize"
                },
                _formatNumberCore: function(value, format, formatConfig) {
                    if ("exponential" === format) {
                        return this.callBase.apply(this, arguments)
                    }
                    return getFormatter(this._normalizeFormatConfig(format, formatConfig, value))(value)
                },
                _normalizeFormatConfig: function(format, formatConfig, value) {
                    var config;
                    if ("decimal" === format) {
                        config = {
                            minimumIntegerDigits: formatConfig.precision || 1,
                            useGrouping: false,
                            minimumFractionDigits: 0,
                            maximumFractionDigits: 20,
                            round: value < 0 ? "ceil" : "floor"
                        }
                    } else {
                        config = this._getPrecisionConfig(formatConfig.precision)
                    }
                    if ("percent" === format) {
                        config.style = "percent"
                    }
                    return config
                },
                _getPrecisionConfig: function(precision) {
                    var config;
                    if (null === precision) {
                        config = {
                            minimumFractionDigits: 0,
                            maximumFractionDigits: 20
                        }
                    } else {
                        config = {
                            minimumFractionDigits: precision || 0,
                            maximumFractionDigits: precision || 0
                        }
                    }
                    return config
                },
                format: function(value, _format) {
                    if ("number" !== typeof value) {
                        return value
                    }
                    _format = this._normalizeFormat(_format);
                    if (!_format || "function" !== typeof _format && !_format.type && !_format.formatter) {
                        return getFormatter(_format)(value)
                    }
                    return this.callBase.apply(this, arguments)
                },
                parse: function(text, format) {
                    if (!text) {
                        return
                    }
                    if (format && (format.parser || "string" === typeof format)) {
                        return this.callBase.apply(this, arguments)
                    }
                    if (format) {
                        _errors2.default.log("W0011")
                    }
                    var result = _globalize2.default.parseNumber(text);
                    if (isNaN(result)) {
                        result = this.callBase.apply(this, arguments)
                    }
                    return result
                }
            };
            _number2.default.resetInjection();
            _number2.default.inject(globalizeNumberLocalization)
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/file_management/provider_base.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _data = __webpack_require__( /*! ../core/utils/data */ 20);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _date_serialization = __webpack_require__( /*! ../core/utils/date_serialization */ 54);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _file_system_item = __webpack_require__( /*! ./file_system_item */ 295);
        var _file_system_item2 = _interopRequireDefault(_file_system_item);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DEFAULT_FILE_UPLOAD_CHUNK_SIZE = 2e5;
        var FileSystemProviderBase = function() {
            function FileSystemProviderBase(options) {
                _classCallCheck(this, FileSystemProviderBase);
                options = (0, _common.ensureDefined)(options, {});
                this._keyGetter = (0, _data.compileGetter)(this._getKeyExpr(options));
                this._nameGetter = (0, _data.compileGetter)(this._getNameExpr(options));
                this._isDirGetter = (0, _data.compileGetter)(this._getIsDirExpr(options));
                this._sizeGetter = (0, _data.compileGetter)(this._getSizeExpr(options));
                this._dateModifiedGetter = (0, _data.compileGetter)(this._getDateModifiedExpr(options));
                this._thumbnailGetter = (0, _data.compileGetter)(options.thumbnailExpr || "thumbnail")
            }
            _createClass(FileSystemProviderBase, [{
                key: "getItems",
                value: function(parentDirectory) {
                    return []
                }
            }, {
                key: "renameItem",
                value: function(item, name) {}
            }, {
                key: "createDirectory",
                value: function(parentDirectory, name) {}
            }, {
                key: "deleteItems",
                value: function(items) {}
            }, {
                key: "moveItems",
                value: function(items, destinationDirectory) {}
            }, {
                key: "copyItems",
                value: function(items, destinationDirectory) {}
            }, {
                key: "uploadFileChunk",
                value: function(fileData, chunksInfo, destinationDirectory) {}
            }, {
                key: "abortFileUpload",
                value: function(fileData, chunksInfo, destinationDirectory) {}
            }, {
                key: "downloadItems",
                value: function(items) {}
            }, {
                key: "getItemsContent",
                value: function(items) {}
            }, {
                key: "getFileUploadChunkSize",
                value: function() {
                    return DEFAULT_FILE_UPLOAD_CHUNK_SIZE
                }
            }, {
                key: "_getItemsByType",
                value: function(path, folders) {
                    return this.getItems(path).filter(function(item) {
                        return item.isDirectory === folders
                    })
                }
            }, {
                key: "_convertDataObjectsToFileItems",
                value: function(entries, pathInfo) {
                    var _this = this;
                    var result = [];
                    (0, _iterator.each)(entries, function(_, entry) {
                        var fileItem = _this._createFileItem(entry, pathInfo);
                        result.push(fileItem)
                    });
                    return result
                }
            }, {
                key: "_createFileItem",
                value: function(dataObj, pathInfo) {
                    var fileItem = new _file_system_item2.default(pathInfo, this._nameGetter(dataObj), (!!this._isDirGetter(dataObj)));
                    fileItem.size = this._sizeGetter(dataObj);
                    if (void 0 === fileItem.size) {
                        fileItem.size = 0
                    }
                    fileItem.dateModified = (0, _date_serialization.deserializeDate)(this._dateModifiedGetter(dataObj));
                    if (void 0 === fileItem.dateModified) {
                        fileItem.dateModified = new Date
                    }
                    if (fileItem.isDirectory) {
                        fileItem.hasSubDirectories = this._hasSubDirs(dataObj)
                    }
                    fileItem.key = this._keyGetter(dataObj);
                    if (!fileItem.key) {
                        fileItem.key = fileItem.relativeName
                    }
                    fileItem.thumbnail = this._thumbnailGetter(dataObj) || "";
                    fileItem.dataItem = dataObj;
                    return fileItem
                }
            }, {
                key: "_hasSubDirs",
                value: function(dataObj) {
                    return true
                }
            }, {
                key: "_getKeyExpr",
                value: function(options) {
                    return options.keyExpr || this._defaultKeyExpr
                }
            }, {
                key: "_defaultKeyExpr",
                value: function(fileItem) {
                    if (2 === arguments.length) {
                        fileItem.__KEY__ = arguments[1];
                        return
                    }
                    return Object.prototype.hasOwnProperty.call(fileItem, "__KEY__") ? fileItem.__KEY__ : null
                }
            }, {
                key: "_getNameExpr",
                value: function(options) {
                    return options.nameExpr || "name"
                }
            }, {
                key: "_getIsDirExpr",
                value: function(options) {
                    return options.isDirectoryExpr || "isDirectory"
                }
            }, {
                key: "_getSizeExpr",
                value: function(options) {
                    return options.sizeExpr || "size"
                }
            }, {
                key: "_getDateModifiedExpr",
                value: function(options) {
                    return options.dateModifiedExpr || "dateModified"
                }
            }, {
                key: "_executeActionAsDeferred",
                value: function(action, keepResult) {
                    var deferred = new _deferred.Deferred;
                    try {
                        var result = action();
                        if ((0, _type.isPromise)(result)) {
                            (0, _deferred.fromPromise)(result).done(function(userResult) {
                                return deferred.resolve(keepResult && userResult || void 0)
                            }).fail(function(error) {
                                return deferred.reject(error)
                            })
                        } else {
                            deferred.resolve(keepResult && result || void 0)
                        }
                    } catch (error) {
                        return deferred.reject(error)
                    }
                    return deferred.promise()
                }
            }]);
            return FileSystemProviderBase
        }();
        module.exports = FileSystemProviderBase
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/texteditor_button_collection/button.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var TextEditorButton = function() {
            function TextEditorButton(name, editor, options) {
                _classCallCheck(this, TextEditorButton);
                this.instance = null;
                this.$container = null;
                this.$placeMarker = null;
                this.editor = editor;
                this.name = name;
                this.options = options || {}
            }
            _createClass(TextEditorButton, [{
                key: "_addPlaceMarker",
                value: function($container) {
                    this.$placeMarker = (0, _renderer2.default)("<div>").appendTo($container)
                }
            }, {
                key: "_addToContainer",
                value: function($element) {
                    var $placeMarker = this.$placeMarker,
                        $container = this.$container;
                    $placeMarker ? $placeMarker.replaceWith($element) : $element.appendTo($container)
                }
            }, {
                key: "_attachEvents",
                value: function() {
                    throw "Not implemented"
                }
            }, {
                key: "_create",
                value: function() {
                    throw "Not implemented"
                }
            }, {
                key: "_isRendered",
                value: function() {
                    return !!this.instance
                }
            }, {
                key: "_isVisible",
                value: function() {
                    var editor = this.editor,
                        options = this.options;
                    return options.visible || !editor.option("readOnly")
                }
            }, {
                key: "_isDisabled",
                value: function() {
                    throw "Not implemented"
                }
            }, {
                key: "_shouldRender",
                value: function() {
                    return this._isVisible() && !this._isRendered()
                }
            }, {
                key: "dispose",
                value: function() {
                    var instance = this.instance,
                        $placeMarker = this.$placeMarker;
                    if (instance) {
                        instance.dispose ? instance.dispose() : instance.remove();
                        this.instance = null
                    }
                    $placeMarker && $placeMarker.remove()
                }
            }, {
                key: "render",
                value: function() {
                    var $container = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.$container;
                    this.$container = $container;
                    if (this._isVisible()) {
                        var _this$_create = this._create(),
                            instance = _this$_create.instance,
                            $element = _this$_create.$element;
                        this.instance = instance;
                        this._attachEvents(instance, $element)
                    } else {
                        this._addPlaceMarker($container)
                    }
                }
            }, {
                key: "update",
                value: function() {
                    if (this._shouldRender()) {
                        this.render()
                    }
                    return !!this.instance
                }
            }]);
            return TextEditorButton
        }();
        exports.default = TextEditorButton
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.live_update.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiCollection_widget = __webpack_require__( /*! ./ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array_utils = __webpack_require__( /*! ../../data/array_utils */ 142);
        var _array_utils2 = _interopRequireDefault(_array_utils);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _array_compare = __webpack_require__( /*! ../../core/utils/array_compare */ 319);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var PRIVATE_KEY_FIELD = "__dx_key__";
        exports.default = _uiCollection_widget2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    repaintChangesOnly: false
                })
            },
            ctor: function() {
                var _this = this;
                this.callBase.apply(this, arguments);
                this._customizeStoreLoadOptions = function(e) {
                    var dataSource = _this._dataSource;
                    if (dataSource && !dataSource.isLoaded()) {
                        _this._correctionIndex = 0
                    }
                    if (_this._correctionIndex && e.storeLoadOptions) {
                        e.storeLoadOptions.skip += _this._correctionIndex
                    }
                }, this._dataSource && this._dataSource.on("customizeStoreLoadOptions", this._customizeStoreLoadOptions)
            },
            reload: function() {
                this._correctionIndex = 0
            },
            _init: function() {
                this.callBase();
                this._refreshItemsCache();
                this._correctionIndex = 0
            },
            _findItemElementByKey: function(key) {
                var _this2 = this;
                var result = (0, _renderer2.default)();
                var keyExpr = this.key();
                this.itemElements().each(function(_, item) {
                    var $item = (0, _renderer2.default)(item);
                    var itemData = _this2._getItemData($item);
                    if (keyExpr ? (0, _utils.keysEqual)(keyExpr, _this2.keyOf(itemData), key) : _this2._isItemEquals(itemData, key)) {
                        result = $item;
                        return false
                    }
                });
                return result
            },
            _dataSourceChangedHandler: function(newItems, e) {
                e && e.changes ? this._modifyByChanges(e.changes) : this.callBase(newItems, e)
            },
            _isItemEquals: function(item1, item2) {
                if (item1 && item1[PRIVATE_KEY_FIELD]) {
                    item1 = item1.data
                }
                try {
                    return JSON.stringify(item1) === JSON.stringify(item2)
                } catch (e) {
                    return item1 === item2
                }
            },
            _partialRefresh: function() {
                var _this3 = this;
                if (this.option("repaintChangesOnly")) {
                    var keyOf = function(data) {
                        if (data && void 0 !== data[PRIVATE_KEY_FIELD]) {
                            return data[PRIVATE_KEY_FIELD]
                        }
                        return _this3.keyOf(data)
                    };
                    var result = (0, _array_compare.findChanges)(this._itemsCache, this._editStrategy.itemsGetter(), keyOf, this._isItemEquals);
                    if (result && this._itemsCache.length) {
                        this._modifyByChanges(result, true);
                        this._renderEmptyMessage();
                        return true
                    } else {
                        this._refreshItemsCache()
                    }
                }
                return false
            },
            _refreshItemsCache: function() {
                if (this.option("repaintChangesOnly")) {
                    var items = this._editStrategy.itemsGetter();
                    try {
                        this._itemsCache = (0, _extend.extend)(true, [], items);
                        if (!this.key()) {
                            this._itemsCache = this._itemsCache.map(function(itemCache, index) {
                                var _ref;
                                return _ref = {}, _defineProperty(_ref, PRIVATE_KEY_FIELD, items[index]), _defineProperty(_ref, "data", itemCache), _ref
                            })
                        }
                    } catch (e) {
                        this._itemsCache = (0, _extend.extend)([], items)
                    }
                }
            },
            _dispose: function() {
                this._dataSource && this._dataSource.off("customizeStoreLoadOptions", this._customizeStoreLoadOptions);
                this.callBase()
            },
            _updateByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this4 = this;
                if (isPartialRefresh) {
                    this._renderItem(change.index, change.data, null, this._findItemElementByKey(change.key))
                } else {
                    var changedItem = items[_array_utils2.default.indexByKey(keyInfo, items, change.key)];
                    if (changedItem) {
                        _array_utils2.default.update(keyInfo, items, change.key, change.data).done(function() {
                            _this4._renderItem(items.indexOf(changedItem), changedItem, null, _this4._findItemElementByKey(change.key))
                        })
                    }
                }
            },
            _insertByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this5 = this;
                (0, _deferred.when)(isPartialRefresh || _array_utils2.default.insert(keyInfo, items, change.data, change.index)).done(function() {
                    _this5._beforeItemElementInserted(change);
                    _this5._renderItem((0, _type.isDefined)(change.index) ? change.index : items.length, change.data);
                    _this5._afterItemElementInserted();
                    _this5._correctionIndex++
                })
            },
            _updateSelectionAfterRemoveByChange: function(removeIndex) {
                var selectedIndex = this.option("selectedIndex");
                if (selectedIndex > removeIndex) {
                    this.option("selectedIndex", selectedIndex - 1)
                } else {
                    if (selectedIndex === removeIndex && 1 === this.option("selectedItems").length) {
                        this.option("selectedItems", [])
                    } else {
                        this._normalizeSelectedItems()
                    }
                }
            },
            _beforeItemElementInserted: function(change) {
                var selectedIndex = this.option("selectedIndex");
                if (change.index <= selectedIndex) {
                    this.option("selectedIndex", selectedIndex + 1)
                }
            },
            _afterItemElementInserted: _common.noop,
            _removeByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this6 = this;
                var index = isPartialRefresh ? change.index : _array_utils2.default.indexByKey(keyInfo, items, change.key);
                var removedItem = isPartialRefresh ? change.oldItem : items[index];
                if (removedItem) {
                    var $removedItemElement = this._findItemElementByKey(change.key);
                    var deletedActionArgs = this._extendActionArgs($removedItemElement);
                    this._waitDeletingPrepare($removedItemElement).done(function() {
                        if (isPartialRefresh) {
                            _this6._updateIndicesAfterIndex(index - 1);
                            _this6._afterItemElementDeleted($removedItemElement, deletedActionArgs);
                            _this6._updateSelectionAfterRemoveByChange(index)
                        } else {
                            _this6._deleteItemElementByIndex(index);
                            _this6._afterItemElementDeleted($removedItemElement, deletedActionArgs)
                        }
                    });
                    this._correctionIndex--
                }
            },
            _modifyByChanges: function(changes, isPartialRefresh) {
                var _this7 = this;
                var items = this._editStrategy.itemsGetter();
                var keyInfo = {
                    key: this.key.bind(this),
                    keyOf: this.keyOf.bind(this)
                };
                var dataSource = this._dataSource;
                var paginate = dataSource && dataSource.paginate();
                var group = dataSource && dataSource.group();
                if (paginate || group) {
                    changes = changes.filter(function(item) {
                        return "insert" !== item.type || void 0 !== item.index
                    })
                }
                changes.forEach(function(change) {
                    return _this7["_".concat(change.type, "ByChange")](keyInfo, items, change, isPartialRefresh)
                });
                this._renderedItemsCount = items.length;
                this._refreshItemsCache();
                this._fireContentReadyAction()
            },
            _appendItemToContainer: function($container, $itemFrame, index) {
                var nextSiblingElement = $container.children(this._itemSelector()).get(index);
                (0, _dom_adapter.insertElement)($container.get(0), $itemFrame.get(0), nextSiblingElement)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "items":
                        var isItemsUpdated = this._partialRefresh(args.value);
                        if (!isItemsUpdated) {
                            this.callBase(args)
                        }
                        break;
                    case "dataSource":
                        if (!this.option("repaintChangesOnly") || !args.value) {
                            this.option("items", [])
                        }
                        this.callBase(args);
                        break;
                    case "repaintChangesOnly":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        })
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/draggable.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var stringUtils = __webpack_require__( /*! ../core/utils/string */ 43);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var translator = __webpack_require__( /*! ../animation/translator */ 28);
        var Animator = __webpack_require__( /*! ./scroll_view/animator */ 318);
        var browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var dasherize = __webpack_require__( /*! ../core/utils/inflector */ 34).dasherize;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var DOMComponent = __webpack_require__( /*! ../core/dom_component */ 68);
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../events/pointer */ 23);
        var dragEvents = __webpack_require__( /*! ../events/drag */ 69);
        var positionUtils = __webpack_require__( /*! ../animation/position */ 74);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 76);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var EmptyTemplate = __webpack_require__( /*! ../core/templates/empty_template */ 87).EmptyTemplate;
        var deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var getBoundingRect = __webpack_require__( /*! ../core/utils/position */ 21).getBoundingRect;
        var when = deferredUtils.when;
        var fromPromise = deferredUtils.fromPromise;
        var Deferred = deferredUtils.Deferred;
        var DRAGGABLE = "dxDraggable";
        var DRAGSTART_EVENT_NAME = eventUtils.addNamespace(dragEvents.start, DRAGGABLE);
        var DRAG_EVENT_NAME = eventUtils.addNamespace(dragEvents.move, DRAGGABLE);
        var DRAGEND_EVENT_NAME = eventUtils.addNamespace(dragEvents.end, DRAGGABLE);
        var DRAG_ENTER_EVENT_NAME = eventUtils.addNamespace(dragEvents.enter, DRAGGABLE);
        var DRAGEND_LEAVE_EVENT_NAME = eventUtils.addNamespace(dragEvents.leave, DRAGGABLE);
        var POINTERDOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, DRAGGABLE);
        var CLONE_CLASS = "clone";
        var targetDraggable;
        var sourceDraggable;
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var ScrollHelper = function() {
            function ScrollHelper(orientation, component) {
                _classCallCheck(this, ScrollHelper);
                this._preventScroll = true;
                this._component = component;
                if ("vertical" === orientation) {
                    this._scrollValue = "scrollTop";
                    this._overFlowAttr = "overflowY";
                    this._sizeAttr = "height";
                    this._scrollSizeProp = "scrollHeight";
                    this._limitProps = {
                        start: "top",
                        end: "bottom"
                    }
                } else {
                    this._scrollValue = "scrollLeft";
                    this._overFlowAttr = "overflowX";
                    this._sizeAttr = "width";
                    this._scrollSizeProp = "scrollWidth";
                    this._limitProps = {
                        start: "left",
                        end: "right"
                    }
                }
            }
            _createClass(ScrollHelper, [{
                key: "updateScrollable",
                value: function(elements, mousePosition) {
                    var that = this;
                    if (!elements.some(function(element) {
                            return that._trySetScrollable(element, mousePosition)
                        })) {
                        that._$scrollable = null;
                        that._scrollSpeed = 0
                    }
                }
            }, {
                key: "isScrolling",
                value: function() {
                    return !!this._scrollSpeed
                }
            }, {
                key: "isScrollable",
                value: function($element) {
                    var that = this;
                    return ("auto" === $element.css(that._overFlowAttr) || $element.hasClass("dx-scrollable-container")) && $element.prop(that._scrollSizeProp) > $element[that._sizeAttr]()
                }
            }, {
                key: "_trySetScrollable",
                value: function(element, mousePosition) {
                    var that = this;
                    var $element = $(element);
                    var distanceToBorders;
                    var sensitivity = that._component.option("scrollSensitivity");
                    var isScrollable = that.isScrollable($element);
                    if (isScrollable) {
                        distanceToBorders = that._calculateDistanceToBorders($element, mousePosition);
                        if (sensitivity > distanceToBorders[that._limitProps.start]) {
                            if (!that._preventScroll) {
                                that._scrollSpeed = -that._calculateScrollSpeed(distanceToBorders[that._limitProps.start]);
                                that._$scrollable = $element
                            }
                        } else {
                            if (sensitivity > distanceToBorders[that._limitProps.end]) {
                                if (!that._preventScroll) {
                                    that._scrollSpeed = that._calculateScrollSpeed(distanceToBorders[that._limitProps.end]);
                                    that._$scrollable = $element
                                }
                            } else {
                                isScrollable = false;
                                that._preventScroll = false
                            }
                        }
                    }
                    return isScrollable
                }
            }, {
                key: "_calculateDistanceToBorders",
                value: function($area, mousePosition) {
                    var area = $area.get(0);
                    var areaBoundingRect;
                    if (area) {
                        areaBoundingRect = getBoundingRect(area);
                        return {
                            left: mousePosition.x - areaBoundingRect.left,
                            top: mousePosition.y - areaBoundingRect.top,
                            right: areaBoundingRect.right - mousePosition.x,
                            bottom: areaBoundingRect.bottom - mousePosition.y
                        }
                    } else {
                        return {}
                    }
                }
            }, {
                key: "_calculateScrollSpeed",
                value: function(distance) {
                    var component = this._component;
                    var sensitivity = component.option("scrollSensitivity");
                    var maxSpeed = component.option("scrollSpeed");
                    return Math.ceil(Math.pow((sensitivity - distance) / sensitivity, 2) * maxSpeed)
                }
            }, {
                key: "scrollByStep",
                value: function() {
                    var that = this;
                    var nextScrollPosition;
                    if (that._$scrollable && that._scrollSpeed) {
                        if (that._$scrollable.hasClass("dx-scrollable-container")) {
                            var $scrollable = that._$scrollable.closest(".dx-scrollable");
                            var scrollableInstance = $scrollable.data("dxScrollable") || $scrollable.data("dxScrollView");
                            if (scrollableInstance) {
                                nextScrollPosition = scrollableInstance.scrollOffset();
                                nextScrollPosition[that._limitProps.start] += that._scrollSpeed;
                                scrollableInstance.scrollTo(nextScrollPosition)
                            }
                        } else {
                            nextScrollPosition = that._$scrollable[that._scrollValue]() + that._scrollSpeed;
                            that._$scrollable[that._scrollValue](nextScrollPosition)
                        }
                        var dragMoveArgs = that._component._dragMoveArgs;
                        if (dragMoveArgs) {
                            that._component._dragMoveHandler(dragMoveArgs)
                        }
                    }
                }
            }, {
                key: "reset",
                value: function() {
                    this._$scrollable = null;
                    this._scrollSpeed = 0;
                    this._preventScroll = true
                }
            }, {
                key: "isOutsideScrollable",
                value: function(target, event) {
                    var component = this._component;
                    if (!component._$scrollable || !target.closest(component._$scrollable).length) {
                        return false
                    }
                    var scrollableSize = getBoundingRect(component._$scrollable.get(0));
                    var start = scrollableSize[this._limitProps.start];
                    var size = scrollableSize[this._sizeAttr];
                    var location = "width" === this._sizeAttr ? event.pageX : event.pageY;
                    return location < start || location > start + size
                }
            }]);
            return ScrollHelper
        }();
        var ScrollAnimator = Animator.inherit({
            ctor: function(strategy) {
                this.callBase();
                this._strategy = strategy
            },
            _step: function() {
                var horizontalScrollHelper = this._strategy._horizontalScrollHelper;
                var verticalScrollHelper = this._strategy._verticalScrollHelper;
                horizontalScrollHelper && horizontalScrollHelper.scrollByStep();
                verticalScrollHelper && verticalScrollHelper.scrollByStep()
            }
        });
        var Draggable = DOMComponent.inherit({
            reset: noop,
            dragMove: noop,
            dragEnter: noop,
            dragLeave: noop,
            dragEnd: function(sourceEvent) {
                var sourceDraggable = this._getSourceDraggable();
                sourceDraggable._fireRemoveEvent(sourceEvent);
                return (new Deferred).resolve()
            },
            _fireRemoveEvent: noop,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    onDragStart: null,
                    onDragMove: null,
                    onDragEnd: null,
                    onDrop: null,
                    immediate: true,
                    dragDirection: "both",
                    boundary: void 0,
                    boundOffset: 0,
                    allowMoveByClick: false,
                    itemData: null,
                    container: void 0,
                    dragTemplate: void 0,
                    contentTemplate: "content",
                    handle: "",
                    filter: "",
                    clone: false,
                    autoScroll: true,
                    scrollSpeed: 30,
                    scrollSensitivity: 60,
                    group: void 0,
                    data: void 0
                })
            },
            _setOptionsByReference: function() {
                this.callBase.apply(this, arguments);
                extend(this._optionsByReference, {
                    component: true,
                    group: true,
                    itemData: true,
                    data: true
                })
            },
            _init: function() {
                this.callBase();
                this._attachEventHandlers();
                this._scrollAnimator = new ScrollAnimator(this);
                this._horizontalScrollHelper = new ScrollHelper("horizontal", this);
                this._verticalScrollHelper = new ScrollHelper("vertical", this)
            },
            _normalizeCursorOffset: function(offset) {
                if (typeUtils.isObject(offset)) {
                    offset = {
                        h: offset.x,
                        v: offset.y
                    }
                }
                offset = commonUtils.splitPair(offset).map(function(value) {
                    return parseFloat(value)
                });
                return {
                    left: offset[0],
                    top: 1 === offset.length ? offset[0] : offset[1]
                }
            },
            _getNormalizedCursorOffset: function(offset, options) {
                if (typeUtils.isFunction(offset)) {
                    offset = offset.call(this, options)
                }
                return this._normalizeCursorOffset(offset)
            },
            _calculateElementOffset: function(options) {
                var elementOffset;
                var dragElementOffset;
                var event = options.event;
                var $element = $(options.itemElement);
                var $dragElement = $(options.dragElement);
                var isCloned = this._dragElementIsCloned();
                var cursorOffset = this.option("cursorOffset");
                var normalizedCursorOffset = {
                    left: 0,
                    top: 0
                };
                var currentLocate = this._initialLocate = translator.locate($dragElement);
                if (isCloned || options.initialOffset || cursorOffset) {
                    elementOffset = options.initialOffset || $element.offset();
                    if (cursorOffset) {
                        normalizedCursorOffset = this._getNormalizedCursorOffset(cursorOffset, options);
                        if (isFinite(normalizedCursorOffset.left)) {
                            elementOffset.left = event.pageX
                        }
                        if (isFinite(normalizedCursorOffset.top)) {
                            elementOffset.top = event.pageY
                        }
                    }
                    dragElementOffset = $dragElement.offset();
                    elementOffset.top -= dragElementOffset.top + (normalizedCursorOffset.top || 0) - currentLocate.top;
                    elementOffset.left -= dragElementOffset.left + (normalizedCursorOffset.left || 0) - currentLocate.left
                }
                return elementOffset
            },
            _initPosition: function(options) {
                var $dragElement = $(options.dragElement);
                var elementOffset = this._calculateElementOffset(options);
                if (elementOffset) {
                    this._move(elementOffset, $dragElement)
                }
                this._startPosition = translator.locate($dragElement)
            },
            _startAnimator: function() {
                if (!this._scrollAnimator.inProgress()) {
                    this._scrollAnimator.start()
                }
            },
            _stopAnimator: function() {
                this._scrollAnimator.stop()
            },
            _addWidgetPrefix: function(className) {
                var componentName = this.NAME;
                return dasherize(componentName) + (className ? "-" + className : "")
            },
            _getItemsSelector: function() {
                return this.option("filter") || ""
            },
            _$content: function() {
                var $element = this.$element();
                var $wrapper = $element.children(".dx-template-wrapper");
                return $wrapper.length ? $wrapper : $element
            },
            _attachEventHandlers: function() {
                var _this = this;
                if (this.option("disabled")) {
                    return
                }
                var $element = this._$content();
                var itemsSelector = this._getItemsSelector();
                var allowMoveByClick = this.option("allowMoveByClick");
                var data = {
                    direction: this.option("dragDirection"),
                    immediate: this.option("immediate"),
                    checkDropTarget: function(target, event) {
                        var targetGroup = _this.option("group");
                        var sourceGroup = _this._getSourceDraggable().option("group");
                        if (_this._verticalScrollHelper.isOutsideScrollable(target, event) || _this._horizontalScrollHelper.isOutsideScrollable(target, event)) {
                            return false
                        }
                        return sourceGroup && sourceGroup === targetGroup
                    }
                };
                if (allowMoveByClick) {
                    $element = this._getArea();
                    eventsEngine.on($element, POINTERDOWN_EVENT_NAME, data, this._pointerDownHandler.bind(this))
                }
                if (">" === itemsSelector[0]) {
                    itemsSelector = itemsSelector.slice(1)
                }
                eventsEngine.on($element, DRAGSTART_EVENT_NAME, itemsSelector, data, this._dragStartHandler.bind(this));
                eventsEngine.on($element, DRAG_EVENT_NAME, data, this._dragMoveHandler.bind(this));
                eventsEngine.on($element, DRAGEND_EVENT_NAME, data, this._dragEndHandler.bind(this));
                eventsEngine.on($element, DRAG_ENTER_EVENT_NAME, data, this._dragEnterHandler.bind(this));
                eventsEngine.on($element, DRAGEND_LEAVE_EVENT_NAME, data, this._dragLeaveHandler.bind(this))
            },
            _dragElementIsCloned: function() {
                return this._$dragElement && this._$dragElement.hasClass(this._addWidgetPrefix(CLONE_CLASS))
            },
            _getDragTemplateArgs: function($element, $container) {
                return {
                    container: getPublicElement($container),
                    model: {
                        itemData: this.option("itemData"),
                        itemElement: getPublicElement($element)
                    }
                }
            },
            _createDragElement: function($element) {
                var result = $element;
                var clone = this.option("clone");
                var $container = this._getContainer();
                var template = this.option("dragTemplate");
                if (template) {
                    template = this._getTemplate(template);
                    result = $("<div>").appendTo($container);
                    template.render(this._getDragTemplateArgs($element, result))
                } else {
                    if (clone) {
                        result = $("<div>").appendTo($container);
                        $element.clone().css({
                            width: $element.css("width"),
                            height: $element.css("height")
                        }).appendTo(result)
                    }
                }
                return result.toggleClass(this._addWidgetPrefix(CLONE_CLASS), result.get(0) !== $element.get(0)).toggleClass("dx-rtl", this.option("rtlEnabled"))
            },
            _resetDragElement: function() {
                if (this._dragElementIsCloned()) {
                    this._$dragElement.remove()
                } else {
                    this._toggleDraggingClass(false)
                }
                this._$dragElement = null
            },
            _resetSourceElement: function() {
                this._toggleDragSourceClass(false);
                this._$sourceElement = null
            },
            _detachEventHandlers: function() {
                eventsEngine.off(this._$content(), "." + DRAGGABLE);
                eventsEngine.off(this._getArea(), "." + DRAGGABLE)
            },
            _move: function(position, $element) {
                translator.move($element || this._$dragElement, position)
            },
            _getDraggableElement: function(e) {
                var $sourceElement = this._getSourceElement();
                if ($sourceElement) {
                    return $sourceElement
                }
                var allowMoveByClick = this.option("allowMoveByClick");
                if (allowMoveByClick) {
                    return this.$element()
                }
                var $target = $(e && e.target);
                var itemsSelector = this._getItemsSelector();
                if (">" === itemsSelector[0]) {
                    var $items = this._$content().find(itemsSelector);
                    if (!$items.is($target)) {
                        $target = $target.closest($items)
                    }
                }
                return $target
            },
            _getSourceElement: function() {
                var draggable = this._getSourceDraggable();
                return draggable._$sourceElement
            },
            _pointerDownHandler: function(e) {
                if (eventUtils.needSkipEvent(e)) {
                    return
                }
                var position = {};
                var $element = this.$element();
                var dragDirection = this.option("dragDirection");
                if ("horizontal" === dragDirection || "both" === dragDirection) {
                    position.left = e.pageX - $element.offset().left + translator.locate($element).left - $element.width() / 2
                }
                if ("vertical" === dragDirection || "both" === dragDirection) {
                    position.top = e.pageY - $element.offset().top + translator.locate($element).top - $element.height() / 2
                }
                this._move(position, $element);
                this._getAction("onDragMove")(this._getEventArgs(e))
            },
            _isValidElement: function(event, $element) {
                var handle = this.option("handle");
                var $target = $(event.originalEvent && event.originalEvent.target);
                if (handle && !$target.closest(handle).length) {
                    return false
                }
                if (!$element.length) {
                    return false
                }
                return !$element.is(".dx-state-disabled, .dx-state-disabled *")
            },
            _dragStartHandler: function(e) {
                var $element = this._getDraggableElement(e);
                if (this._$sourceElement) {
                    return
                }
                if (!this._isValidElement(e, $element)) {
                    e.cancel = true;
                    return
                }
                var dragStartArgs = this._getDragStartArgs(e, $element);
                this._getAction("onDragStart")(dragStartArgs);
                if (dragStartArgs.cancel) {
                    e.cancel = true;
                    return
                }
                this.option("itemData", dragStartArgs.itemData);
                this._setSourceDraggable();
                this._$sourceElement = $element;
                var initialOffset = $element.offset();
                var $dragElement = this._$dragElement = this._createDragElement($element);
                this._toggleDraggingClass(true);
                this._toggleDragSourceClass(true);
                var isFixedPosition = "fixed" === $dragElement.css("position");
                this._initPosition(extend({}, dragStartArgs, {
                    dragElement: $dragElement.get(0),
                    initialOffset: isFixedPosition && initialOffset
                }));
                var $area = this._getArea();
                var areaOffset = this._getAreaOffset($area);
                var boundOffset = this._getBoundOffset();
                var areaWidth = $area.outerWidth();
                var areaHeight = $area.outerHeight();
                var elementWidth = $dragElement.width();
                var elementHeight = $dragElement.height();
                var startOffset = {
                    left: $dragElement.offset().left - areaOffset.left,
                    top: $dragElement.offset().top - areaOffset.top
                };
                if ($area.length) {
                    e.maxLeftOffset = startOffset.left - boundOffset.left;
                    e.maxRightOffset = areaWidth - startOffset.left - elementWidth - boundOffset.right;
                    e.maxTopOffset = startOffset.top - boundOffset.top;
                    e.maxBottomOffset = areaHeight - startOffset.top - elementHeight - boundOffset.bottom
                }
                if (this.option("autoScroll")) {
                    this._startAnimator()
                }
            },
            _getAreaOffset: function($area) {
                var offset = $area && positionUtils.offset($area);
                return offset ? offset : {
                    left: 0,
                    top: 0
                }
            },
            _toggleDraggingClass: function(value) {
                this._$dragElement && this._$dragElement.toggleClass(this._addWidgetPrefix("dragging"), value)
            },
            _toggleDragSourceClass: function(value, $element) {
                var $sourceElement = $element || this._$sourceElement;
                $sourceElement && $sourceElement.toggleClass(this._addWidgetPrefix("source"), value)
            },
            _getBoundOffset: function() {
                var boundOffset = this.option("boundOffset");
                if (typeUtils.isFunction(boundOffset)) {
                    boundOffset = boundOffset.call(this)
                }
                return stringUtils.quadToObject(boundOffset)
            },
            _getArea: function() {
                var area = this.option("boundary");
                if (typeUtils.isFunction(area)) {
                    area = area.call(this)
                }
                return $(area)
            },
            _getContainer: function() {
                var container = this.option("container");
                if (void 0 === container) {
                    container = viewPortUtils.value()
                }
                return $(container)
            },
            _dragMoveHandler: function(e) {
                this._dragMoveArgs = e;
                if (!this._$dragElement) {
                    e.cancel = true;
                    return
                }
                var offset = e.offset;
                var startPosition = this._startPosition;
                this._move({
                    left: startPosition.left + offset.x,
                    top: startPosition.top + offset.y
                });
                this._updateScrollable(e);
                var eventArgs = this._getEventArgs(e);
                this._getAction("onDragMove")(eventArgs);
                if (true === eventArgs.cancel) {
                    return
                }
                var targetDraggable = this._getTargetDraggable();
                targetDraggable.dragMove(e)
            },
            _updateScrollable: function(e) {
                var that = this;
                if (that.option("autoScroll")) {
                    var $window = $(window);
                    var mousePosition = {
                        x: e.pageX - $window.scrollLeft(),
                        y: e.pageY - $window.scrollTop()
                    };
                    var allObjects = that.getElementsFromPoint(mousePosition);
                    that._verticalScrollHelper.updateScrollable(allObjects, mousePosition);
                    that._horizontalScrollHelper.updateScrollable(allObjects, mousePosition)
                }
            },
            getElementsFromPoint: function(position, dragElement) {
                var ownerDocument = (dragElement || this._$dragElement.get(0)).ownerDocument;
                if (browser.msie) {
                    var msElements = ownerDocument.msElementsFromPoint(position.x, position.y);
                    if (msElements) {
                        return Array.prototype.slice.call(msElements)
                    }
                    return []
                }
                return ownerDocument.elementsFromPoint(position.x, position.y)
            },
            _defaultActionArgs: function() {
                var args = this.callBase.apply(this, arguments);
                var component = this.option("component");
                if (component) {
                    args.component = component;
                    args.element = component.element()
                }
                return args
            },
            _getEventArgs: function(e) {
                var sourceDraggable = this._getSourceDraggable();
                var targetDraggable = this._getTargetDraggable();
                return {
                    event: e,
                    itemData: sourceDraggable.option("itemData"),
                    itemElement: getPublicElement(sourceDraggable._$sourceElement),
                    fromComponent: sourceDraggable.option("component") || sourceDraggable,
                    toComponent: targetDraggable.option("component") || targetDraggable,
                    fromData: sourceDraggable.option("data"),
                    toData: targetDraggable.option("data")
                }
            },
            _getDragStartArgs: function(e, $itemElement) {
                var args = this._getEventArgs(e);
                return {
                    event: args.event,
                    itemData: args.itemData,
                    itemElement: $itemElement,
                    fromData: args.fromData
                }
            },
            _revertItemToInitialPosition: function() {
                !this._dragElementIsCloned() && this._move(this._initialLocate, this._$sourceElement)
            },
            _dragEndHandler: function(e) {
                var _this2 = this;
                var d = new Deferred;
                var dragEndEventArgs = this._getEventArgs(e);
                var dropEventArgs = this._getEventArgs(e);
                var targetDraggable = this._getTargetDraggable();
                var needRevertPosition = true;
                try {
                    this._getAction("onDragEnd")(dragEndEventArgs)
                } finally {
                    when(fromPromise(dragEndEventArgs.cancel)).done(function(cancel) {
                        if (!cancel) {
                            if (targetDraggable !== _this2) {
                                targetDraggable._getAction("onDrop")(dropEventArgs)
                            }
                            if (!dropEventArgs.cancel) {
                                needRevertPosition = false;
                                when(fromPromise(targetDraggable.dragEnd(dragEndEventArgs))).always(d.resolve);
                                return
                            }
                        }
                        d.resolve()
                    }).fail(d.resolve);
                    d.done(function() {
                        if (needRevertPosition) {
                            _this2._revertItemToInitialPosition()
                        }
                        _this2.reset();
                        targetDraggable.reset();
                        _this2._stopAnimator();
                        _this2._horizontalScrollHelper.reset();
                        _this2._verticalScrollHelper.reset();
                        _this2._resetDragElement();
                        _this2._resetSourceElement();
                        _this2._resetTargetDraggable();
                        _this2._resetSourceDraggable()
                    })
                }
            },
            _isTargetOverAnotherDraggable: function(e) {
                var _this3 = this;
                var sourceDraggable = this._getSourceDraggable();
                if (this === sourceDraggable) {
                    return false
                }
                if (!sourceDraggable._dragElementIsCloned()) {
                    return true
                }
                var $sourceDraggableElement = sourceDraggable.$element();
                var elements = this.getElementsFromPoint({
                    x: e.pageX,
                    y: e.pageY
                }, e.target);
                var firstWidgetElement = elements.filter(function(element) {
                    return $(element).hasClass(_this3._addWidgetPrefix())
                })[0];
                return firstWidgetElement !== $sourceDraggableElement.get(0)
            },
            _dragEnterHandler: function(e) {
                if (this._isTargetOverAnotherDraggable(e)) {
                    this._setTargetDraggable()
                }
                var sourceDraggable = this._getSourceDraggable();
                sourceDraggable.dragEnter(e)
            },
            _dragLeaveHandler: function(e) {
                this._resetTargetDraggable();
                if (this !== this._getSourceDraggable()) {
                    this.reset()
                }
                var sourceDraggable = this._getSourceDraggable();
                sourceDraggable.dragLeave(e)
            },
            _getAction: function(name) {
                return this["_" + name + "Action"] || this._createActionByOption(name)
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                if (!this.option("contentTemplate")) {
                    return
                }
                this._templateManager.addDefaultTemplates({
                    content: new EmptyTemplate
                });
                this.callBase.apply(this, arguments)
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(this._addWidgetPrefix());
                var transclude = this._templateManager.anonymousTemplateName === this.option("contentTemplate");
                var template = this._getTemplateByOption("contentTemplate");
                if (template) {
                    $(template.render({
                        container: this.element(),
                        transclude: transclude
                    }))
                }
            },
            _optionChanged: function(args) {
                var name = args.name;
                switch (name) {
                    case "onDragStart":
                    case "onDragMove":
                    case "onDragEnd":
                    case "onDrop":
                        this["_" + name + "Action"] = this._createActionByOption(name);
                        break;
                    case "dragTemplate":
                    case "contentTemplate":
                    case "container":
                    case "clone":
                        break;
                    case "allowMoveByClick":
                    case "dragDirection":
                    case "disabled":
                    case "boundary":
                    case "filter":
                    case "immediate":
                        this._resetDragElement();
                        this._detachEventHandlers();
                        this._attachEventHandlers();
                        break;
                    case "autoScroll":
                        this._verticalScrollHelper.reset();
                        this._horizontalScrollHelper.reset();
                        break;
                    case "scrollSensitivity":
                    case "scrollSpeed":
                    case "boundOffset":
                    case "handle":
                    case "group":
                    case "data":
                    case "itemData":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getTargetDraggable: function() {
                return targetDraggable || this
            },
            _getSourceDraggable: function() {
                return sourceDraggable || this
            },
            _setTargetDraggable: function() {
                var currentGroup = this.option("group");
                var sourceDraggable = this._getSourceDraggable();
                if (currentGroup && currentGroup === sourceDraggable.option("group")) {
                    targetDraggable = this
                }
            },
            _setSourceDraggable: function() {
                sourceDraggable = this
            },
            _resetSourceDraggable: function() {
                sourceDraggable = null
            },
            _resetTargetDraggable: function() {
                targetDraggable = null
            },
            _dispose: function() {
                this.callBase();
                this._detachEventHandlers();
                this._resetDragElement();
                this._resetTargetDraggable();
                this._resetSourceDraggable();
                this._$sourceElement = null;
                this._stopAnimator()
            }
        });
        registerComponent(DRAGGABLE, Draggable);
        module.exports = Draggable
    },
    /*!****************************************!*\
      !*** ./artifacts/transpiled/ui/box.js ***!
      \****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _style = __webpack_require__( /*! ../core/utils/style */ 93);
        var _style2 = _interopRequireDefault(_style);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _item = __webpack_require__( /*! ./collection/item */ 135);
        var _item2 = _interopRequireDefault(_item);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var BOX_CLASS = "dx-box";
        var BOX_SELECTOR = ".dx-box";
        var BOX_ITEM_CLASS = "dx-box-item";
        var BOX_ITEM_DATA_KEY = "dxBoxItemData";
        var MINSIZE_MAP = {
            row: "minWidth",
            col: "minHeight"
        };
        var MAXSIZE_MAP = {
            row: "maxWidth",
            col: "maxHeight"
        };
        var SHRINK = 1;
        var FLEX_JUSTIFY_CONTENT_MAP = {
            start: "flex-start",
            end: "flex-end",
            center: "center",
            "space-between": "space-between",
            "space-around": "space-around"
        };
        var FLEX_ALIGN_ITEMS_MAP = {
            start: "flex-start",
            end: "flex-end",
            center: "center",
            stretch: "stretch"
        };
        var FLEX_DIRECTION_MAP = {
            row: "row",
            col: "column"
        };
        var setFlexProp = function(element, prop, value) {
            value = _style2.default.normalizeStyleProp(prop, value);
            element.style[_style2.default.styleProp(prop)] = value;
            if (!_window2.default.hasWindow()) {
                if ("" === value || !(0, _type.isDefined)(value)) {
                    return
                }
                var cssName = _inflector2.default.dasherize(prop);
                var styleExpr = cssName + ": " + value + ";";
                if (!element.attributes.style) {
                    element.setAttribute("style", styleExpr)
                } else {
                    if (element.attributes.style.value.indexOf(styleExpr) < 0) {
                        element.attributes.style.value += " " + styleExpr
                    }
                }
            }
        };
        var BOX_EVENTNAMESPACE = "dxBox";
        var UPDATE_EVENT = "dxupdate." + BOX_EVENTNAMESPACE;
        var FALLBACK_BOX_ITEM = "dx-box-fallback-item";
        var FALLBACK_WRAP_MAP = {
            row: "nowrap",
            col: "normal"
        };
        var FALLBACK_MAIN_SIZE_MAP = {
            row: "width",
            col: "height"
        };
        var FALLBACK_CROSS_SIZE_MAP = {
            row: "height",
            col: "width"
        };
        var FALLBACK_PRE_MARGIN_MAP = {
            row: "marginLeft",
            col: "marginTop"
        };
        var FALLBACK_POST_MARGIN_MAP = {
            row: "marginRight",
            col: "marginBottom"
        };
        var FALLBACK_CROSS_PRE_MARGIN_MAP = {
            row: "marginTop",
            col: "marginLeft"
        };
        var FALLBACK_CROSS_POST_MARGIN_MAP = {
            row: "marginBottom",
            col: "marginRight"
        };
        var MARGINS_RTL_FLIP_MAP = {
            marginLeft: "marginRight",
            marginRight: "marginLeft"
        };
        var BoxItem = function(_CollectionWidgetItem) {
            _inherits(BoxItem, _CollectionWidgetItem);
            var _super = _createSuper(BoxItem);

            function BoxItem() {
                _classCallCheck(this, BoxItem);
                return _super.apply(this, arguments)
            }
            _createClass(BoxItem, [{
                key: "_renderVisible",
                value: function(value, oldValue) {
                    _get(_getPrototypeOf(BoxItem.prototype), "_renderVisible", this).call(this, value);
                    if ((0, _type.isDefined)(oldValue)) {
                        this._options.fireItemStateChangedAction({
                            name: "visible",
                            state: value,
                            oldState: oldValue
                        })
                    }
                }
            }]);
            return BoxItem
        }(_item2.default);
        var FlexLayoutStrategy = function() {
            function FlexLayoutStrategy($element, option) {
                _classCallCheck(this, FlexLayoutStrategy);
                this._$element = $element;
                this._option = option;
                this.initSize = _common.noop;
                this.update = _common.noop
            }
            _createClass(FlexLayoutStrategy, [{
                key: "renderBox",
                value: function() {
                    this._$element.css({
                        display: _style2.default.stylePropPrefix("flexDirection") + "flex"
                    });
                    setFlexProp(this._$element.get(0), "flexDirection", FLEX_DIRECTION_MAP[this._option("direction")])
                }
            }, {
                key: "renderAlign",
                value: function() {
                    this._$element.css({
                        justifyContent: this._normalizedAlign()
                    })
                }
            }, {
                key: "_normalizedAlign",
                value: function() {
                    var align = this._option("align");
                    return align in FLEX_JUSTIFY_CONTENT_MAP ? FLEX_JUSTIFY_CONTENT_MAP[align] : align
                }
            }, {
                key: "renderCrossAlign",
                value: function() {
                    this._$element.css({
                        alignItems: this._normalizedCrossAlign()
                    })
                }
            }, {
                key: "_normalizedCrossAlign",
                value: function() {
                    var crossAlign = this._option("crossAlign");
                    return crossAlign in FLEX_ALIGN_ITEMS_MAP ? FLEX_ALIGN_ITEMS_MAP[crossAlign] : crossAlign
                }
            }, {
                key: "renderItems",
                value: function($items) {
                    var flexPropPrefix = _style2.default.stylePropPrefix("flexDirection");
                    var direction = this._option("direction");
                    (0, _iterator.each)($items, function() {
                        var $item = (0, _renderer2.default)(this);
                        var item = $item.data(BOX_ITEM_DATA_KEY);
                        $item.css({
                            display: flexPropPrefix + "flex"
                        }).css(MAXSIZE_MAP[direction], item.maxSize || "none").css(MINSIZE_MAP[direction], item.minSize || "0");
                        setFlexProp($item.get(0), "flexBasis", item.baseSize || 0);
                        setFlexProp($item.get(0), "flexGrow", item.ratio);
                        setFlexProp($item.get(0), "flexShrink", (0, _type.isDefined)(item.shrink) ? item.shrink : SHRINK);
                        $item.children().each(function(_, itemContent) {
                            (0, _renderer2.default)(itemContent).css({
                                width: "auto",
                                height: "auto",
                                display: _style2.default.stylePropPrefix("flexDirection") + "flex",
                                flexBasis: 0
                            });
                            setFlexProp(itemContent, "flexGrow", 1);
                            setFlexProp(itemContent, "flexDirection", (0, _renderer2.default)(itemContent)[0].style.flexDirection || "column")
                        })
                    })
                }
            }]);
            return FlexLayoutStrategy
        }();
        var FallbackLayoutStrategy = function() {
            function FallbackLayoutStrategy($element, option) {
                _classCallCheck(this, FallbackLayoutStrategy);
                this._$element = $element;
                this._option = option
            }
            _createClass(FallbackLayoutStrategy, [{
                key: "renderBox",
                value: function() {
                    this._$element.css({
                        fontSize: 0,
                        whiteSpace: FALLBACK_WRAP_MAP[this._option("direction")],
                        verticalAlign: "top"
                    });
                    _events_engine2.default.off(this._$element, UPDATE_EVENT);
                    _events_engine2.default.on(this._$element, UPDATE_EVENT, this.update.bind(this))
                }
            }, {
                key: "renderAlign",
                value: function() {
                    var $items = this._$items;
                    if (!$items) {
                        return
                    }
                    var align = this._option("align");
                    var totalItemSize = this.totalItemSize;
                    var direction = this._option("direction");
                    var boxSize = this._$element[FALLBACK_MAIN_SIZE_MAP[direction]]();
                    var freeSpace = boxSize - totalItemSize;
                    var shift = 0;
                    this._setItemsMargins($items, direction, 0);
                    switch (align) {
                        case "start":
                            break;
                        case "end":
                            shift = freeSpace;
                            $items.first().css(this._chooseMarginSide(FALLBACK_PRE_MARGIN_MAP[direction]), shift);
                            break;
                        case "center":
                            shift = .5 * freeSpace;
                            $items.first().css(this._chooseMarginSide(FALLBACK_PRE_MARGIN_MAP[direction]), shift);
                            $items.last().css(this._chooseMarginSide(FALLBACK_POST_MARGIN_MAP[direction]), shift);
                            break;
                        case "space-between":
                            shift = .5 * freeSpace / ($items.length - 1);
                            this._setItemsMargins($items, direction, shift);
                            $items.first().css(this._chooseMarginSide(FALLBACK_PRE_MARGIN_MAP[direction]), 0);
                            $items.last().css(this._chooseMarginSide(FALLBACK_POST_MARGIN_MAP[direction]), 0);
                            break;
                        case "space-around":
                            shift = .5 * freeSpace / $items.length;
                            this._setItemsMargins($items, direction, shift)
                    }
                }
            }, {
                key: "_setItemsMargins",
                value: function($items, direction, shift) {
                    $items.css(this._chooseMarginSide(FALLBACK_PRE_MARGIN_MAP[direction]), shift).css(this._chooseMarginSide(FALLBACK_POST_MARGIN_MAP[direction]), shift)
                }
            }, {
                key: "renderCrossAlign",
                value: function() {
                    var $items = this._$items;
                    if (!$items) {
                        return
                    }
                    var crossAlign = this._option("crossAlign");
                    var direction = this._option("direction");
                    var size = this._$element[FALLBACK_CROSS_SIZE_MAP[direction]]();
                    var that = this;
                    switch (crossAlign) {
                        case "start":
                            break;
                        case "end":
                            (0, _iterator.each)($items, function() {
                                var $item = (0, _renderer2.default)(this);
                                var itemSize = $item[FALLBACK_CROSS_SIZE_MAP[direction]]();
                                var shift = size - itemSize;
                                $item.css(that._chooseMarginSide(FALLBACK_CROSS_PRE_MARGIN_MAP[direction]), shift)
                            });
                            break;
                        case "center":
                            (0, _iterator.each)($items, function() {
                                var $item = (0, _renderer2.default)(this);
                                var itemSize = $item[FALLBACK_CROSS_SIZE_MAP[direction]]();
                                var shift = .5 * (size - itemSize);
                                $item.css(that._chooseMarginSide(FALLBACK_CROSS_PRE_MARGIN_MAP[direction]), shift).css(that._chooseMarginSide(FALLBACK_CROSS_POST_MARGIN_MAP[direction]), shift)
                            });
                            break;
                        case "stretch":
                            $items.css(that._chooseMarginSide(FALLBACK_CROSS_PRE_MARGIN_MAP[direction]), 0).css(that._chooseMarginSide(FALLBACK_CROSS_POST_MARGIN_MAP[direction]), 0).css(FALLBACK_CROSS_SIZE_MAP[direction], "100%")
                    }
                }
            }, {
                key: "_chooseMarginSide",
                value: function(value) {
                    if (!this._option("rtlEnabled")) {
                        return value
                    }
                    return MARGINS_RTL_FLIP_MAP[value] || value
                }
            }, {
                key: "renderItems",
                value: function($items) {
                    var _this = this;
                    this._$items = $items;
                    var direction = this._option("direction");
                    var totalRatio = 0;
                    var totalWeightedShrink = 0;
                    var totalBaseSize = 0;
                    (0, _iterator.each)($items, function(_, item) {
                        var $item = (0, _renderer2.default)(item);
                        $item.css({
                            display: "inline-block",
                            verticalAlign: "top"
                        });
                        $item[FALLBACK_MAIN_SIZE_MAP[direction]]("auto");
                        $item.removeClass(FALLBACK_BOX_ITEM);
                        var itemData = $item.data(BOX_ITEM_DATA_KEY);
                        var ratio = itemData.ratio || 0;
                        var size = _this._baseSize($item);
                        var shrink = (0, _type.isDefined)(itemData.shrink) ? itemData.shrink : SHRINK;
                        totalRatio += ratio;
                        totalWeightedShrink += shrink * size;
                        totalBaseSize += size
                    });
                    var freeSpaceSize = this._boxSize() - totalBaseSize;
                    var itemSize = function($item) {
                        var itemData = $item.data(BOX_ITEM_DATA_KEY);
                        var size = _this._baseSize($item);
                        var factor = freeSpaceSize >= 0 ? itemData.ratio || 0 : ((0, _type.isDefined)(itemData.shrink) ? itemData.shrink : SHRINK) * size;
                        var totalFactor = freeSpaceSize >= 0 ? totalRatio : totalWeightedShrink;
                        var shift = totalFactor ? Math.round(freeSpaceSize * factor / totalFactor) : 0;
                        return size + shift
                    };
                    var totalItemSize = 0;
                    (0, _iterator.each)($items, function(_, item) {
                        var $item = (0, _renderer2.default)(item);
                        var itemData = (0, _renderer2.default)(item).data(BOX_ITEM_DATA_KEY);
                        var size = itemSize($item);
                        totalItemSize += size;
                        $item.css(MAXSIZE_MAP[direction], itemData.maxSize || "none").css(MINSIZE_MAP[direction], itemData.minSize || "0").css(FALLBACK_MAIN_SIZE_MAP[direction], size);
                        $item.addClass(FALLBACK_BOX_ITEM)
                    });
                    this.totalItemSize = totalItemSize
                }
            }, {
                key: "_baseSize",
                value: function(item) {
                    var itemData = (0, _renderer2.default)(item).data(BOX_ITEM_DATA_KEY);
                    return null == itemData.baseSize ? 0 : "auto" === itemData.baseSize ? this._contentSize(item) : this._parseSize(itemData.baseSize)
                }
            }, {
                key: "_contentSize",
                value: function(item) {
                    return (0, _renderer2.default)(item)[FALLBACK_MAIN_SIZE_MAP[this._option("direction")]]()
                }
            }, {
                key: "_parseSize",
                value: function(size) {
                    return String(size).match(/.+%$/) ? .01 * parseFloat(size) * this._boxSizeValue : size
                }
            }, {
                key: "_boxSize",
                value: function(value) {
                    if (!arguments.length) {
                        this._boxSizeValue = this._boxSizeValue || this._totalBaseSize();
                        return this._boxSizeValue
                    }
                    this._boxSizeValue = value
                }
            }, {
                key: "_totalBaseSize",
                value: function() {
                    var _this2 = this;
                    var result = 0;
                    (0, _iterator.each)(this._$items, function(_, item) {
                        result += _this2._baseSize(item)
                    });
                    return result
                }
            }, {
                key: "initSize",
                value: function() {
                    this._boxSize(this._$element[FALLBACK_MAIN_SIZE_MAP[this._option("direction")]]())
                }
            }, {
                key: "update",
                value: function() {
                    if (!this._$items || this._$element.is(":hidden")) {
                        return
                    }
                    this._$items.detach();
                    this.initSize();
                    this._$element.append(this._$items);
                    this.renderItems(this._$items);
                    this.renderAlign();
                    this.renderCrossAlign();
                    var element = this._$element.get(0);
                    this._$items.find(BOX_SELECTOR).each(function() {
                        if (element === (0, _renderer2.default)(this).parent().closest(BOX_SELECTOR).get(0)) {
                            _events_engine2.default.triggerHandler(this, UPDATE_EVENT)
                        }
                    })
                }
            }]);
            return FallbackLayoutStrategy
        }();
        var Box = function(_CollectionWidget) {
            _inherits(Box, _CollectionWidget);
            var _super2 = _createSuper(Box);

            function Box() {
                _classCallCheck(this, Box);
                return _super2.apply(this, arguments)
            }
            _createClass(Box, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Box.prototype), "_getDefaultOptions", this).call(this), {
                        direction: "row",
                        align: "start",
                        crossAlign: "stretch",
                        activeStateEnabled: false,
                        focusStateEnabled: false,
                        onItemStateChanged: void 0,
                        _layoutStrategy: "flex",
                        _queue: void 0
                    })
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(Box.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return _browser2.default.msie
                        },
                        options: {
                            _layoutStrategy: "fallback"
                        }
                    }])
                }
            }, {
                key: "_itemClass",
                value: function() {
                    return BOX_ITEM_CLASS
                }
            }, {
                key: "_itemDataKey",
                value: function() {
                    return BOX_ITEM_DATA_KEY
                }
            }, {
                key: "_itemElements",
                value: function() {
                    return this._itemContainer().children(this._itemSelector())
                }
            }, {
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(Box.prototype), "_init", this).call(this);
                    this.$element().addClass("".concat(BOX_CLASS, "-").concat(this.option("_layoutStrategy")));
                    this._initLayout();
                    this._initBoxQueue()
                }
            }, {
                key: "_initLayout",
                value: function() {
                    this._layout = "fallback" === this.option("_layoutStrategy") ? new FallbackLayoutStrategy(this.$element(), this.option.bind(this)) : new FlexLayoutStrategy(this.$element(), this.option.bind(this))
                }
            }, {
                key: "_initBoxQueue",
                value: function() {
                    this._queue = this.option("_queue") || []
                }
            }, {
                key: "_queueIsNotEmpty",
                value: function() {
                    return this.option("_queue") ? false : !!this._queue.length
                }
            }, {
                key: "_pushItemToQueue",
                value: function($item, config) {
                    this._queue.push({
                        $item: $item,
                        config: config
                    })
                }
            }, {
                key: "_shiftItemFromQueue",
                value: function() {
                    return this._queue.shift()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this.$element().addClass(BOX_CLASS);
                    this._layout.renderBox();
                    _get(_getPrototypeOf(Box.prototype), "_initMarkup", this).call(this);
                    this._renderAlign();
                    this._renderActions()
                }
            }, {
                key: "_renderActions",
                value: function() {
                    this._onItemStateChanged = this._createActionByOption("onItemStateChanged")
                }
            }, {
                key: "_renderAlign",
                value: function() {
                    this._layout.renderAlign();
                    this._layout.renderCrossAlign()
                }
            }, {
                key: "_renderItems",
                value: function(items) {
                    var _this3 = this;
                    this._layout.initSize();
                    _get(_getPrototypeOf(Box.prototype), "_renderItems", this).call(this, items);
                    while (this._queueIsNotEmpty()) {
                        var item = this._shiftItemFromQueue();
                        this._createComponent(item.$item, Box, (0, _extend.extend)({
                            _layoutStrategy: this.option("_layoutStrategy"),
                            itemTemplate: this.option("itemTemplate"),
                            itemHoldTimeout: this.option("itemHoldTimeout"),
                            onItemHold: this.option("onItemHold"),
                            onItemClick: this.option("onItemClick"),
                            onItemContextMenu: this.option("onItemContextMenu"),
                            onItemRendered: this.option("onItemRendered"),
                            _queue: this._queue
                        }, item.config))
                    }
                    this._layout.renderItems(this._itemElements());
                    clearTimeout(this._updateTimer);
                    this._updateTimer = setTimeout(function() {
                        if (!_this3._isUpdated) {
                            _this3._layout.update()
                        }
                        _this3._isUpdated = false;
                        _this3._updateTimer = null
                    })
                }
            }, {
                key: "_renderItemContent",
                value: function(args) {
                    var $itemNode = args.itemData && args.itemData.node;
                    if ($itemNode) {
                        return this._renderItemContentByNode(args, $itemNode)
                    }
                    return _get(_getPrototypeOf(Box.prototype), "_renderItemContent", this).call(this, args)
                }
            }, {
                key: "_postprocessRenderItem",
                value: function(args) {
                    var boxConfig = args.itemData.box;
                    if (!boxConfig) {
                        return
                    }
                    this._pushItemToQueue(args.itemContent, boxConfig)
                }
            }, {
                key: "_createItemByTemplate",
                value: function(itemTemplate, args) {
                    if (args.itemData.box) {
                        return itemTemplate.source ? itemTemplate.source() : (0, _renderer2.default)()
                    }
                    return _get(_getPrototypeOf(Box.prototype), "_createItemByTemplate", this).call(this, itemTemplate, args)
                }
            }, {
                key: "_visibilityChanged",
                value: function(visible) {
                    if (visible) {
                        this._dimensionChanged()
                    }
                }
            }, {
                key: "_dimensionChanged",
                value: function() {
                    if (this._updateTimer) {
                        return
                    }
                    this._isUpdated = true;
                    this._layout.update()
                }
            }, {
                key: "_dispose",
                value: function() {
                    clearTimeout(this._updateTimer);
                    _get(_getPrototypeOf(Box.prototype), "_dispose", this).apply(this, arguments)
                }
            }, {
                key: "_itemOptionChanged",
                value: function(item, property, value, oldValue) {
                    if ("visible" === property) {
                        this._onItemStateChanged({
                            name: property,
                            state: value,
                            oldState: false !== oldValue
                        })
                    }
                    _get(_getPrototypeOf(Box.prototype), "_itemOptionChanged", this).call(this, item, property, value)
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "_layoutStrategy":
                        case "_queue":
                        case "direction":
                            this._invalidate();
                            break;
                        case "align":
                            this._layout.renderAlign();
                            break;
                        case "crossAlign":
                            this._layout.renderCrossAlign();
                            break;
                        default:
                            _get(_getPrototypeOf(Box.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_itemOptions",
                value: function() {
                    var _this4 = this;
                    var options = _get(_getPrototypeOf(Box.prototype), "_itemOptions", this).call(this);
                    options.fireItemStateChangedAction = function(e) {
                        _this4._onItemStateChanged(e)
                    };
                    return options
                }
            }, {
                key: "repaint",
                value: function() {
                    this._dimensionChanged()
                }
            }]);
            return Box
        }(_uiCollection_widget2.default);
        Box.ItemClass = BoxItem;
        (0, _component_registrator2.default)("dxBox", Box);
        module.exports = Box
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/date_box.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./date_box/ui.date_box */ 562)
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var abstract = Class.abstract;
        var DateBoxStrategy = Class.inherit({
            ctor: function(dateBox) {
                this.dateBox = dateBox
            },
            widgetOption: function() {
                return this._widget && this._widget.option.apply(this._widget, arguments)
            },
            _renderWidget: function(element) {
                element = element || $("<div>");
                this._widget = this._createWidget(element);
                this._widget.$element().appendTo(this._getWidgetContainer())
            },
            _createWidget: function(element) {
                var widgetName = this._getWidgetName();
                var widgetOptions = this._getWidgetOptions();
                return this.dateBox._createComponent(element, widgetName, widgetOptions)
            },
            _getWidgetOptions: abstract,
            _getWidgetName: abstract,
            getDefaultOptions: function() {
                return {
                    mode: "text"
                }
            },
            getDisplayFormat: abstract,
            supportedKeys: noop,
            getKeyboardListener: noop,
            customizeButtons: noop,
            getParsedText: function(text, format) {
                var value = dateLocalization.parse(text, format);
                return value ? value : dateLocalization.parse(text)
            },
            renderInputMinMax: noop,
            renderOpenedState: function() {
                this._updateValue()
            },
            popupConfig: abstract,
            renderPopupContent: function() {
                var popup = this._getPopup();
                this._renderWidget();
                var $popupContent = popup.$content().parent();
                eventsEngine.off($popupContent, "mousedown");
                eventsEngine.on($popupContent, "mousedown", this._preventFocusOnPopup.bind(this))
            },
            getFirstPopupElement: noop,
            getLastPopupElement: noop,
            _preventFocusOnPopup: function(e) {
                e.preventDefault()
            },
            _getWidgetContainer: function() {
                return this._getPopup().$content()
            },
            _getPopup: function() {
                return this.dateBox._popup
            },
            popupShowingHandler: noop,
            popupHiddenHandler: noop,
            _updateValue: function() {
                this._widget && this._widget.option("value", this.dateBoxValue())
            },
            useCurrentDateByDefault: noop,
            getDefaultDate: function() {
                return new Date
            },
            textChangedHandler: noop,
            renderValue: function() {
                if (this.dateBox.option("opened")) {
                    this._updateValue()
                }
            },
            getValue: function() {
                return this._widget.option("value")
            },
            isAdaptivityChanged: function() {
                return false
            },
            dispose: function() {
                var popup = this._getPopup();
                if (popup) {
                    popup.$content().empty()
                }
            },
            dateBoxValue: function() {
                if (arguments.length) {
                    return this.dateBox.dateValue.apply(this.dateBox, arguments)
                } else {
                    return this.dateBox.dateOption.apply(this.dateBox, ["value"])
                }
            }
        });
        module.exports = DateBoxStrategy
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.rendering.strategy.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _z_index = __webpack_require__( /*! ../overlay/z_index */ 182);
        var zIndexPool = _interopRequireWildcard(_z_index);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var animation = {
            moveTo: function(config) {
                var $element = config.$element;
                var position = config.position;
                var direction = config.direction || "left";
                var toConfig = {};
                var animationType;
                switch (direction) {
                    case "right":
                        toConfig.transform = "translate(" + position + "px, 0px)";
                        animationType = "custom";
                        break;
                    case "left":
                        toConfig.left = position;
                        animationType = "slide";
                        break;
                    case "top":
                    case "bottom":
                        toConfig.top = position;
                        animationType = "slide"
                }
                _fx2.default.animate($element, {
                    type: animationType,
                    to: toConfig,
                    duration: config.duration,
                    complete: config.complete
                })
            },
            margin: function margin(config) {
                var $element = config.$element;
                var margin = config.margin;
                var direction = config.direction || "left";
                var toConfig = {};
                toConfig["margin" + (0, _inflector.camelize)(direction, true)] = margin;
                _fx2.default.animate($element, {
                    to: toConfig,
                    duration: config.duration,
                    complete: config.complete
                })
            },
            fade: function($element, config, duration, completeAction) {
                _fx2.default.animate($element, {
                    type: "fade",
                    to: config.to,
                    from: config.from,
                    duration: duration,
                    complete: completeAction
                })
            },
            size: function size(config) {
                var $element = config.$element;
                var size = config.size;
                var direction = config.direction || "left";
                var marginTop = config.marginTop || 0;
                var duration = config.duration;
                var toConfig = {};
                if ("right" === direction || "left" === direction) {
                    toConfig.width = size
                } else {
                    toConfig.height = size
                }
                if ("bottom" === direction) {
                    toConfig.marginTop = marginTop
                }
                _fx2.default.animate($element, {
                    to: toConfig,
                    duration: duration,
                    complete: config.complete
                })
            },
            complete: function($element) {
                _fx2.default.stop($element, true)
            }
        };
        var DrawerStrategy = function() {
            function DrawerStrategy(drawer) {
                _classCallCheck(this, DrawerStrategy);
                this._drawer = drawer
            }
            _createClass(DrawerStrategy, [{
                key: "getDrawerInstance",
                value: function() {
                    return this._drawer
                }
            }, {
                key: "renderPanelContent",
                value: function(whenPanelContentRendered) {
                    var drawer = this.getDrawerInstance();
                    var template = drawer._getTemplate(drawer.option("template"));
                    if (template) {
                        template.render({
                            container: drawer.content(),
                            onRendered: function() {
                                whenPanelContentRendered.resolve()
                            }
                        })
                    }
                }
            }, {
                key: "renderPosition",
                value: function(isDrawerOpened, animate) {
                    this._prepareAnimationDeferreds(animate);
                    var config = this._getPositionRenderingConfig(isDrawerOpened);
                    if (this._useDefaultAnimation()) {
                        this._defaultPositionRendering(config, isDrawerOpened, animate)
                    } else {
                        var revealMode = this.getDrawerInstance().option("revealMode");
                        if ("slide" === revealMode) {
                            this._slidePositionRendering(config, isDrawerOpened, animate)
                        } else {
                            if ("expand" === revealMode) {
                                this._expandPositionRendering(config, isDrawerOpened, animate)
                            }
                        }
                    }
                }
            }, {
                key: "_prepareAnimationDeferreds",
                value: function(animate) {
                    var drawer = this.getDrawerInstance();
                    this._contentAnimation = new _deferred.Deferred;
                    this._panelAnimation = new _deferred.Deferred;
                    this._shaderAnimation = new _deferred.Deferred;
                    drawer._animations.push(this._contentAnimation, this._panelAnimation, this._shaderAnimation);
                    if (animate) {
                        _deferred.when.apply(_renderer2.default, drawer._animations).done(function() {
                            drawer._animationCompleteHandler()
                        })
                    } else {
                        drawer.resizeViewContent()
                    }
                }
            }, {
                key: "_getPositionRenderingConfig",
                value: function(isDrawerOpened) {
                    var drawer = this.getDrawerInstance();
                    return {
                        direction: drawer.calcTargetPosition(),
                        $panel: (0, _renderer2.default)(drawer.content()),
                        $content: (0, _renderer2.default)(drawer.viewContent()),
                        defaultAnimationConfig: this._defaultAnimationConfig(),
                        size: this._getPanelSize(isDrawerOpened)
                    }
                }
            }, {
                key: "_useDefaultAnimation",
                value: function() {
                    return false
                }
            }, {
                key: "_elementsAnimationCompleteHandler",
                value: function() {
                    this._contentAnimation.resolve();
                    this._panelAnimation.resolve()
                }
            }, {
                key: "_defaultAnimationConfig",
                value: function() {
                    var _this = this;
                    return {
                        complete: function() {
                            _this._elementsAnimationCompleteHandler()
                        }
                    }
                }
            }, {
                key: "_getPanelOffset",
                value: function(isDrawerOpened) {
                    var drawer = this.getDrawerInstance();
                    var size = drawer.isHorizontalDirection() ? drawer.getRealPanelWidth() : drawer.getRealPanelHeight();
                    if (isDrawerOpened) {
                        return -(size - drawer.getMaxSize())
                    } else {
                        return -(size - drawer.getMinSize())
                    }
                }
            }, {
                key: "_getPanelSize",
                value: function(isDrawerOpened) {
                    return isDrawerOpened ? this.getDrawerInstance().getMaxSize() : this.getDrawerInstance().getMinSize()
                }
            }, {
                key: "renderShaderVisibility",
                value: function(isShaderVisible, animate, duration) {
                    var _this2 = this;
                    var drawer = this.getDrawerInstance();
                    var fadeConfig = isShaderVisible ? {
                        from: 0,
                        to: 1
                    } : {
                        from: 1,
                        to: 0
                    };
                    if (animate) {
                        animation.fade((0, _renderer2.default)(drawer._$shader), fadeConfig, duration, function() {
                            _this2._drawer._toggleShaderVisibility(isShaderVisible);
                            _this2._shaderAnimation.resolve()
                        })
                    } else {
                        drawer._toggleShaderVisibility(isShaderVisible);
                        drawer._$shader.css("opacity", fadeConfig.to)
                    }
                }
            }, {
                key: "updateZIndex",
                value: function() {
                    if (this._drawer.option("shading")) {
                        if (!(0, _type.isDefined)(this._shaderZIndex)) {
                            this._shaderZIndex = zIndexPool.base() + 500;
                            this._drawer._$shader.css("zIndex", this._shaderZIndex)
                        }
                    }
                }
            }, {
                key: "clearZIndex",
                value: function() {
                    if ((0, _type.isDefined)(this._shaderZIndex)) {
                        this._drawer._$shader.css("zIndex", "");
                        delete this._shaderZIndex
                    }
                }
            }, {
                key: "getPanelContent",
                value: function() {
                    return (0, _renderer2.default)(this.getDrawerInstance().content())
                }
            }, {
                key: "setPanelSize",
                value: function(calcFromRealPanelSize) {
                    this.refreshPanelElementSize(calcFromRealPanelSize)
                }
            }, {
                key: "refreshPanelElementSize",
                value: function(calcFromRealPanelSize) {
                    var drawer = this.getDrawerInstance();
                    var panelSize = this._getPanelSize(drawer.option("opened"));
                    if (drawer.isHorizontalDirection()) {
                        (0, _renderer2.default)(drawer.content()).width(calcFromRealPanelSize ? drawer.getRealPanelWidth() : panelSize)
                    } else {
                        (0, _renderer2.default)(drawer.content()).height(calcFromRealPanelSize ? drawer.getRealPanelHeight() : panelSize)
                    }
                }
            }, {
                key: "isViewContentFirst",
                value: function() {
                    return false
                }
            }]);
            return DrawerStrategy
        }();
        module.exports = DrawerStrategy;
        module.exports.animation = animation
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_menu.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var Widget = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var Button = __webpack_require__( /*! ./button */ 37);
        var Popover = __webpack_require__( /*! ./popover */ 119);
        var DataHelperMixin = __webpack_require__( /*! ../data_helper */ 82);
        var List = __webpack_require__( /*! ./list */ 104);
        var themes = __webpack_require__( /*! ./themes */ 32);
        var ChildDefaultTemplate = __webpack_require__( /*! ../core/templates/child_default_template */ 141).ChildDefaultTemplate;
        var DROP_DOWN_MENU_CLASS = "dx-dropdownmenu";
        var DROP_DOWN_MENU_POPUP_CLASS = "dx-dropdownmenu-popup";
        var DROP_DOWN_MENU_POPUP_WRAPPER_CLASS = "dx-dropdownmenu-popup-wrapper";
        var DROP_DOWN_MENU_LIST_CLASS = "dx-dropdownmenu-list";
        var DROP_DOWN_MENU_BUTTON_CLASS = "dx-dropdownmenu-button";
        var POPUP_OPTION_MAP = {
            popupWidth: "width",
            popupHeight: "height",
            popupMaxHeight: "maxHeight",
            popupAutoResizeEnabled: "autoResizeEnabled"
        };
        var BUTTON_OPTION_MAP = {
            buttonIcon: "icon",
            buttonText: "text",
            buttonWidth: "width",
            buttonHeight: "height",
            buttonTemplate: "template"
        };
        var DropDownMenu = Widget.inherit({
            _supportedKeys: function() {
                var extension = {};
                if (!this.option("opened") || !this._list.option("focusedElement")) {
                    extension = this._button._supportedKeys()
                }
                return extend(this.callBase(), extension, {
                    tab: function() {
                        this._popup && this._popup.hide()
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    items: [],
                    onItemClick: null,
                    dataSource: null,
                    itemTemplate: "item",
                    buttonText: "",
                    buttonIcon: "overflow",
                    buttonWidth: void 0,
                    buttonHeight: void 0,
                    buttonTemplate: "content",
                    onButtonClick: null,
                    usePopover: false,
                    popupWidth: "auto",
                    popupHeight: "auto",
                    activeStateEnabled: true,
                    hoverStateEnabled: true,
                    opened: false,
                    selectionMode: "none",
                    selectedItemKeys: [],
                    deferRendering: false,
                    popupPosition: {
                        my: "top center",
                        at: "bottom center",
                        collision: "fit flip",
                        offset: {
                            v: 1
                        }
                    },
                    popupAnimation: void 0,
                    onItemRendered: null,
                    menuWidget: List,
                    popupMaxHeight: void 0,
                    closeOnClick: true,
                    useInkRipple: false,
                    container: void 0,
                    popupAutoResizeEnabled: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        usePopover: true
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                v: 4
                            }
                        }
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        popupPosition: {
                            my: "top " + (this.option("rtlEnabled") ? "left" : "right"),
                            at: "top " + (this.option("rtlEnabled") ? "left" : "right"),
                            collision: "flipfit"
                        },
                        popupAnimation: {
                            show: {
                                type: "pop",
                                duration: 200,
                                from: {
                                    scale: 0
                                },
                                to: {
                                    scale: 1
                                }
                            },
                            hide: {
                                type: "pop",
                                duration: 200,
                                from: {
                                    scale: 1
                                },
                                to: {
                                    scale: 0
                                }
                            }
                        }
                    }
                }, {
                    device: function() {
                        return themes.isMaterial()
                    },
                    options: {
                        useInkRipple: true
                    }
                }])
            },
            _initOptions: function(options) {
                if ("android" === devices.current().platform) {
                    if (!options.popupPosition) {
                        options.popupPosition = {
                            at: (options.usePopover ? "bottom " : "top ") + (options.rtlEnabled ? "left" : "right")
                        }
                    }
                }
                this.callBase(options)
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(DROP_DOWN_MENU_CLASS);
                this._initDataSource();
                this._initItemClickAction();
                this._initButtonClickAction()
            },
            _initItemClickAction: function() {
                this._itemClickAction = this._createActionByOption("onItemClick")
            },
            _initButtonClickAction: function() {
                this._buttonClickAction = this._createActionByOption("onButtonClick")
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates({
                    content: new ChildDefaultTemplate("content")
                });
                this.callBase()
            },
            _initMarkup: function() {
                this._renderButton();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this.setAria({
                    role: "menubar",
                    haspopup: true,
                    expanded: this.option("opened")
                })
            },
            _renderContentImpl: function() {
                if (this.option("opened")) {
                    this._renderPopup()
                }
            },
            _clean: function() {
                this._cleanFocusState();
                if (this._popup) {
                    this._popup.$element().remove();
                    delete this._$popup
                }
            },
            _renderButton: function() {
                var $button = this.$element().addClass(DROP_DOWN_MENU_BUTTON_CLASS);
                var config = this._buttonOptions();
                this._button = this._createComponent($button, Button, config)
            },
            _toggleActiveState: function($element, value, e) {
                this._button._toggleActiveState($element, value, e)
            },
            _buttonOptions: function() {
                return {
                    text: this.option("buttonText"),
                    icon: this.option("buttonIcon"),
                    width: this.option("buttonWidth"),
                    height: this.option("buttonHeight"),
                    useInkRipple: this.option("useInkRipple"),
                    template: this.option("buttonTemplate"),
                    focusStateEnabled: false,
                    onClick: function(e) {
                        this.option("opened", !this.option("opened"));
                        this._buttonClickAction(e)
                    }.bind(this)
                }
            },
            _toggleMenuVisibility: function(opened) {
                var state = void 0 === opened ? !this._popup.option("visible") : opened;
                if (opened) {
                    this._renderPopup()
                }
                this._popup.toggle(state);
                this.setAria("expanded", state)
            },
            _renderPopup: function() {
                if (this._$popup) {
                    return
                }
                var $popup = this._$popup = $("<div>").appendTo(this.$element());
                var config = this._popupOptions();
                this._popup = this._createComponent($popup, Popover, config)
            },
            _popupOptions: function() {
                var usePopup = !this.option("usePopover");
                return {
                    onInitialized: function(args) {
                        args.component._wrapper().addClass(DROP_DOWN_MENU_POPUP_WRAPPER_CLASS).toggleClass(DROP_DOWN_MENU_POPUP_CLASS, usePopup)
                    },
                    visible: this.option("opened"),
                    deferRendering: false,
                    contentTemplate: function(contentElement) {
                        this._renderList(contentElement)
                    }.bind(this),
                    position: this.option("popupPosition"),
                    animation: this.option("popupAnimation"),
                    onOptionChanged: function(args) {
                        if ("visible" === args.name) {
                            this.option("opened", args.value)
                        }
                    }.bind(this),
                    target: this.$element(),
                    height: this.option("popupHeight"),
                    width: this.option("popupWidth"),
                    maxHeight: this.option("popupMaxHeight"),
                    container: this.option("container"),
                    autoResizeEnabled: this.option("popupAutoResizeEnabled")
                }
            },
            _renderList: function(contentElement) {
                var $content = $(contentElement);
                var listConfig = this._listOptions();
                $content.addClass(DROP_DOWN_MENU_LIST_CLASS);
                this._list = this._createComponent($content, this.option("menuWidget"), listConfig);
                this._list._getAriaTarget = function() {
                    return this.$element()
                }.bind(this);
                this._setListDataSource();
                var listMaxHeight = .5 * $(window).height();
                if ($content.height() > listMaxHeight) {
                    $content.height(listMaxHeight)
                }
            },
            _listOptions: function() {
                return {
                    pageLoadMode: "scrollBottom",
                    indicateLoading: false,
                    noDataText: "",
                    selectionMode: this.option("selectionMode"),
                    selectedItemKeys: this.option("selectedItemKeys"),
                    itemTemplate: this.option("itemTemplate"),
                    onItemClick: function(e) {
                        if (this.option("closeOnClick")) {
                            this.option("opened", false)
                        }
                        this._itemClickAction(e)
                    }.bind(this),
                    tabIndex: -1,
                    focusStateEnabled: this.option("focusStateEnabled"),
                    activeStateEnabled: this.option("activeStateEnabled"),
                    onItemRendered: this.option("onItemRendered"),
                    _itemAttributes: {
                        role: "menuitem"
                    }
                }
            },
            _setListDataSource: function() {
                if (this._list) {
                    this._list.option("dataSource", this._dataSource || this.option("items"))
                }
                delete this._deferRendering
            },
            _getKeyboardListeners: function() {
                return this.callBase().concat([this._list])
            },
            _toggleVisibility: function(visible) {
                this.callBase(visible);
                this._button.option("visible", visible)
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "items":
                    case "dataSource":
                        if (this.option("deferRendering") && !this.option("opened")) {
                            this._deferRendering = true
                        } else {
                            this._refreshDataSource();
                            this._setListDataSource()
                        }
                        break;
                    case "itemTemplate":
                        if (this._list) {
                            this._list.option(name, this._getTemplate(value))
                        }
                        break;
                    case "onItemClick":
                        this._initItemClickAction();
                        break;
                    case "onButtonClick":
                        this._buttonClickAction();
                        break;
                    case "buttonIcon":
                    case "buttonText":
                    case "buttonWidth":
                    case "buttonHeight":
                    case "buttonTemplate":
                        this._button.option(BUTTON_OPTION_MAP[name], value);
                        this._renderPopup();
                        break;
                    case "popupWidth":
                    case "popupHeight":
                    case "popupMaxHeight":
                    case "popupAutoResizeEnabled":
                        this._popup.option(POPUP_OPTION_MAP[name], value);
                        break;
                    case "usePopover":
                    case "menuWidget":
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "focusStateEnabled":
                    case "activeStateEnabled":
                        if (this._list) {
                            this._list.option(name, value)
                        }
                        this.callBase(args);
                        break;
                    case "selectionMode":
                    case "selectedItemKeys":
                    case "onItemRendered":
                        if (this._list) {
                            this._list.option(name, value)
                        }
                        break;
                    case "opened":
                        if (this._deferRendering) {
                            this._refreshDataSource();
                            this._setListDataSource()
                        }
                        this._toggleMenuVisibility(value);
                        break;
                    case "deferRendering":
                    case "popupPosition":
                    case "closeOnClick":
                        break;
                    case "container":
                        this._popup && this._popup.option(args.name, args.value);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            open: function() {
                this.option("opened", true)
            },
            close: function() {
                this.option("opened", false)
            }
        }).include(DataHelperMixin);
        registerComponent("dxDropDownMenu", DropDownMenu);
        module.exports = DropDownMenu
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/validator.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _element_data = __webpack_require__( /*! ../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _ui = __webpack_require__( /*! ./widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _dom_component = __webpack_require__( /*! ../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _validation_engine = __webpack_require__( /*! ./validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _default_adapter = __webpack_require__( /*! ./validation/default_adapter */ 581);
        var _default_adapter2 = _interopRequireDefault(_default_adapter);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var VALIDATOR_CLASS = "dx-validator";
        var VALIDATION_STATUS_VALID = "valid";
        var VALIDATION_STATUS_INVALID = "invalid";
        var VALIDATION_STATUS_PENDING = "pending";
        var Validator = _dom_component2.default.inherit({
            _initOptions: function(options) {
                this.callBase.apply(this, arguments);
                this.option(_validation_engine2.default.initValidationOptions(options))
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    validationRules: []
                })
            },
            _init: function() {
                this.callBase();
                this._initGroupRegistration();
                this.focused = (0, _callbacks2.default)();
                this._initAdapter();
                this._validationInfo = {
                    result: null,
                    deferred: null,
                    skipValidation: false
                }
            },
            _initGroupRegistration: function() {
                var group = this._findGroup();
                if (!this._groupWasInit) {
                    this.on("disposing", function(args) {
                        _validation_engine2.default.removeRegisteredValidator(args.component._validationGroup, args.component)
                    })
                }
                if (!this._groupWasInit || this._validationGroup !== group) {
                    _validation_engine2.default.removeRegisteredValidator(this._validationGroup, this);
                    this._groupWasInit = true;
                    this._validationGroup = group;
                    _validation_engine2.default.registerValidatorInGroup(group, this)
                }
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    validationGroup: true
                })
            },
            _initAdapter: function() {
                var _this = this;
                var element = this.$element()[0];
                var dxStandardEditor = _element_data2.default.data(element, "dx-validation-target");
                var adapter = this.option("adapter");
                if (!adapter) {
                    if (dxStandardEditor) {
                        adapter = new _default_adapter2.default(dxStandardEditor, this);
                        adapter.validationRequestsCallbacks.add(function(args) {
                            if (_this._validationInfo.skipValidation) {
                                return
                            }
                            _this.validate(args)
                        });
                        this.option("adapter", adapter);
                        return
                    }
                    throw _ui2.default.Error("E0120")
                }
                var callbacks = adapter.validationRequestsCallbacks;
                if (callbacks) {
                    if (Array.isArray(callbacks)) {
                        callbacks.push(function(args) {
                            _this.validate(args)
                        })
                    } else {
                        _ui2.default.log("W0014", "validationRequestsCallbacks", "jQuery.Callbacks", "17.2", "Use the array instead");
                        callbacks.add(function(args) {
                            _this.validate(args)
                        })
                    }
                }
            },
            _toggleRTLDirection: function(isRtl) {
                var _this$option$editor$o, _this$option, _this$option$editor;
                var rtlEnabled = null !== (_this$option$editor$o = null === (_this$option = this.option("adapter")) || void 0 === _this$option ? void 0 : null === (_this$option$editor = _this$option.editor) || void 0 === _this$option$editor ? void 0 : _this$option$editor.option("rtlEnabled")) && void 0 !== _this$option$editor$o ? _this$option$editor$o : isRtl;
                this.callBase(rtlEnabled)
            },
            _initMarkup: function() {
                this.$element().addClass(VALIDATOR_CLASS);
                this.callBase()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._initGroupRegistration()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "validationGroup":
                        this._initGroupRegistration();
                        return;
                    case "validationRules":
                        this._resetValidationRules();
                        void 0 !== this.option("isValid") && this.validate();
                        return;
                    case "adapter":
                        this._initAdapter();
                        break;
                    case "isValid":
                    case "validationStatus":
                        this.option(_validation_engine2.default.synchronizeValidationOptions(args, this.option()));
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getValidationRules: function() {
                var _this2 = this;
                if (!this._validationRules) {
                    this._validationRules = (0, _iterator.map)(this.option("validationRules"), function(rule, index) {
                        return (0, _extend.extend)({}, rule, {
                            validator: _this2,
                            index: index
                        })
                    })
                }
                return this._validationRules
            },
            _findGroup: function() {
                var $element = this.$element();
                return this.option("validationGroup") || _validation_engine2.default.findGroup($element, this._modelByElement($element))
            },
            _resetValidationRules: function() {
                delete this._validationRules
            },
            validate: function(args) {
                var _this3 = this;
                var adapter = this.option("adapter");
                var name = this.option("name");
                var bypass = adapter.bypass && adapter.bypass();
                var value = args && void 0 !== args.value ? args.value : adapter.getValue();
                var currentError = adapter.getCurrentValidationError && adapter.getCurrentValidationError();
                var rules = this._getValidationRules();
                var currentResult = this._validationInfo && this._validationInfo.result;
                if (currentResult && currentResult.status === VALIDATION_STATUS_PENDING && currentResult.value === value) {
                    return (0, _extend.extend)({}, currentResult)
                }
                var result;
                if (bypass) {
                    result = {
                        isValid: true,
                        status: VALIDATION_STATUS_VALID
                    }
                } else {
                    if (currentError && currentError.editorSpecific) {
                        currentError.validator = this;
                        result = {
                            isValid: false,
                            status: VALIDATION_STATUS_INVALID,
                            brokenRule: currentError,
                            brokenRules: [currentError]
                        }
                    } else {
                        result = _validation_engine2.default.validate(value, rules, name)
                    }
                }
                result.id = (new _guid2.default).toString();
                this._applyValidationResult(result, adapter);
                result.complete && result.complete.then(function(res) {
                    if (res.id === _this3._validationInfo.result.id) {
                        _this3._applyValidationResult(res, adapter)
                    }
                });
                return (0, _extend.extend)({}, this._validationInfo.result)
            },
            reset: function() {
                var adapter = this.option("adapter");
                var result = {
                    id: null,
                    isValid: true,
                    brokenRule: null,
                    brokenRules: null,
                    pendingRules: null,
                    status: VALIDATION_STATUS_VALID,
                    complete: null
                };
                this._validationInfo.skipValidation = true;
                adapter.reset();
                this._validationInfo.skipValidation = false;
                this._resetValidationRules();
                this._applyValidationResult(result, adapter)
            },
            _updateValidationResult: function(result) {
                if (!this._validationInfo.result || this._validationInfo.result.id !== result.id) {
                    var complete = this._validationInfo.deferred && this._validationInfo.result.complete;
                    this._validationInfo.result = (0, _extend.extend)({}, result, {
                        complete: complete
                    })
                } else {
                    for (var prop in result) {
                        if ("id" !== prop && "complete" !== prop) {
                            this._validationInfo.result[prop] = result[prop]
                        }
                    }
                }
            },
            _applyValidationResult: function(result, adapter) {
                var validatedAction = this._createActionByOption("onValidated", {
                    excludeValidators: ["readOnly"]
                });
                result.validator = this;
                this._updateValidationResult(result);
                adapter.applyValidationResults && adapter.applyValidationResults(this._validationInfo.result);
                this.option({
                    validationStatus: this._validationInfo.result.status
                });
                if (this._validationInfo.result.status === VALIDATION_STATUS_PENDING) {
                    if (!this._validationInfo.deferred) {
                        this._validationInfo.deferred = new _deferred.Deferred;
                        this._validationInfo.result.complete = this._validationInfo.deferred.promise()
                    }
                    this._eventsStrategy.fireEvent("validating", [this._validationInfo.result]);
                    return
                }
                if (this._validationInfo.result.status !== VALIDATION_STATUS_PENDING) {
                    validatedAction(result);
                    if (this._validationInfo.deferred) {
                        this._validationInfo.deferred.resolve(result);
                        this._validationInfo.deferred = null
                    }
                }
            },
            focus: function() {
                var adapter = this.option("adapter");
                adapter && adapter.focus && adapter.focus()
            },
            _useTemplates: function() {
                return false
            }
        });
        (0, _component_registrator2.default)("dxValidator", Validator);
        module.exports = Validator
    },
    /*!*****************************************!*\
      !*** ./artifacts/transpiled/ui/tabs.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _button = __webpack_require__( /*! ./button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _utils = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var _utils2 = _interopRequireDefault(_utils);
        var _utils3 = __webpack_require__( /*! ../events/utils */ 8);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _pointer = __webpack_require__( /*! ../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _item = __webpack_require__( /*! ./tabs/item */ 327);
        var _item2 = _interopRequireDefault(_item);
        var _themes = __webpack_require__( /*! ./themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _hold = __webpack_require__( /*! ../events/hold */ 95);
        var _hold2 = _interopRequireDefault(_hold);
        var _ui = __webpack_require__( /*! ./scroll_view/ui.scrollable */ 89);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.live_update */ 195);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _icon = __webpack_require__( /*! ../core/utils/icon */ 53);
        var _bindable_template = __webpack_require__( /*! ../core/templates/bindable_template */ 59);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TABS_CLASS = "dx-tabs";
        var TABS_WRAPPER_CLASS = "dx-tabs-wrapper";
        var TABS_EXPANDED_CLASS = "dx-tabs-expanded";
        var TABS_STRETCHED_CLASS = "dx-tabs-stretched";
        var TABS_SCROLLABLE_CLASS = "dx-tabs-scrollable";
        var TABS_NAV_BUTTONS_CLASS = "dx-tabs-nav-buttons";
        var OVERFLOW_HIDDEN_CLASS = "dx-overflow-hidden";
        var TABS_ITEM_CLASS = "dx-tab";
        var TABS_ITEM_SELECTED_CLASS = "dx-tab-selected";
        var TABS_NAV_BUTTON_CLASS = "dx-tabs-nav-button";
        var TABS_LEFT_NAV_BUTTON_CLASS = "dx-tabs-nav-button-left";
        var TABS_RIGHT_NAV_BUTTON_CLASS = "dx-tabs-nav-button-right";
        var TABS_ITEM_TEXT_CLASS = "dx-tab-text";
        var TABS_ITEM_DATA_KEY = "dxTabData";
        var BUTTON_NEXT_ICON = "chevronnext";
        var BUTTON_PREV_ICON = "chevronprev";
        var FEEDBACK_HIDE_TIMEOUT = 100;
        var FEEDBACK_DURATION_INTERVAL = 5;
        var FEEDBACK_SCROLL_TIMEOUT = 300;
        var TAB_OFFSET = 30;
        var Tabs = _uiCollection_widget2.default.inherit({
            _activeStateUnit: "." + TABS_ITEM_CLASS,
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    hoverStateEnabled: true,
                    showNavButtons: true,
                    scrollByContent: true,
                    scrollingEnabled: true,
                    selectionMode: "single",
                    activeStateEnabled: true,
                    selectionRequired: false,
                    selectOnFocus: true,
                    loopItemFocus: false,
                    useInkRipple: false,
                    badgeExpr: function(data) {
                        return data ? data.badge : void 0
                    }
                })
            },
            _defaultOptionsRules: function() {
                var themeName = _themes2.default.current();
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" !== _devices2.default.real().deviceType
                    },
                    options: {
                        showNavButtons: false
                    }
                }, {
                    device: {
                        deviceType: "desktop"
                    },
                    options: {
                        scrollByContent: false
                    }
                }, {
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return _themes2.default.isMaterial(themeName)
                    },
                    options: {
                        useInkRipple: true,
                        selectOnFocus: false
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.setAria("role", "tablist");
                this.$element().addClass(TABS_CLASS);
                this._renderWrapper();
                this._renderMultiple();
                this._feedbackHideTimeout = FEEDBACK_HIDE_TIMEOUT
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    item: new _bindable_template.BindableTemplate(function($container, data) {
                        if ((0, _type.isPlainObject)(data)) {
                            this._prepareDefaultItemTemplate(data, $container)
                        } else {
                            $container.text(String(data))
                        }
                        var $iconElement = (0, _icon.getImageContainer)(data.icon);
                        $iconElement && $iconElement.prependTo($container);
                        $container.wrapInner((0, _renderer2.default)("<span>").addClass(TABS_ITEM_TEXT_CLASS))
                    }.bind(this), ["text", "html", "icon"], this.option("integrationOptions.watchMethod"))
                })
            },
            _createItemByTemplate: function(itemTemplate, renderArgs) {
                var _this = this;
                var itemData = renderArgs.itemData,
                    container = renderArgs.container,
                    index = renderArgs.index;
                this._deferredTemplates[index] = new _deferred.Deferred;
                return itemTemplate.render({
                    model: itemData,
                    container: container,
                    index: index,
                    onRendered: function() {
                        return _this._deferredTemplates[index].resolve()
                    }
                })
            },
            _itemClass: function() {
                return TABS_ITEM_CLASS
            },
            _selectedItemClass: function() {
                return TABS_ITEM_SELECTED_CLASS
            },
            _itemDataKey: function() {
                return TABS_ITEM_DATA_KEY
            },
            _initMarkup: function() {
                this._deferredTemplates = [];
                this.callBase();
                this.setAria("role", "tab", this.itemElements());
                this.option("useInkRipple") && this._renderInkRipple();
                this.$element().addClass(OVERFLOW_HIDDEN_CLASS)
            },
            _render: function() {
                this.callBase();
                this._deferRenderScrolling()
            },
            _deferRenderScrolling: function() {
                var _this2 = this;
                _deferred.when.apply(this, this._deferredTemplates).done(function() {
                    return _this2._renderScrolling()
                })
            },
            _renderScrolling: function() {
                var removeClasses = [TABS_STRETCHED_CLASS, TABS_EXPANDED_CLASS, OVERFLOW_HIDDEN_CLASS];
                this.$element().removeClass(removeClasses.join(" "));
                if (this.option("scrollingEnabled") && this._isItemsWidthExceeded()) {
                    if (!this._scrollable) {
                        this._renderScrollable();
                        this._renderNavButtons()
                    }
                    this._scrollable.update();
                    this._updateNavButtonsVisibility();
                    if (this.option("rtlEnabled")) {
                        this._scrollable.scrollTo({
                            left: this._scrollable.scrollWidth() - this._scrollable.clientWidth()
                        })
                    }
                    this._scrollToItem(this.option("selectedItem"))
                }
                if (!(this.option("scrollingEnabled") && this._isItemsWidthExceeded())) {
                    this._cleanScrolling();
                    if (this._needStretchItems() && !this._isItemsWidthExceeded()) {
                        this.$element().addClass(TABS_STRETCHED_CLASS)
                    }
                    this.$element().removeClass(TABS_NAV_BUTTONS_CLASS).addClass(TABS_EXPANDED_CLASS)
                }
            },
            _isItemsWidthExceeded: function() {
                var tabItemsWidth = this._getSummaryItemsWidth(this._getVisibleItems(), true);
                return tabItemsWidth - 1 > this.$element().width()
            },
            _needStretchItems: function() {
                var $visibleItems = this._getVisibleItems();
                var elementWidth = this.$element().width();
                var itemsWidth = [];
                (0, _iterator.each)($visibleItems, function(_, item) {
                    itemsWidth.push((0, _renderer2.default)(item).outerWidth(true))
                });
                var maxTabWidth = Math.max.apply(null, itemsWidth);
                return maxTabWidth > elementWidth / $visibleItems.length
            },
            _cleanNavButtons: function() {
                if (!this._leftButton || !this._rightButton) {
                    return
                }
                this._leftButton.$element().remove();
                this._rightButton.$element().remove();
                this._leftButton = null;
                this._rightButton = null
            },
            _cleanScrolling: function() {
                if (!this._scrollable) {
                    return
                }
                this._$wrapper.appendTo(this.$element());
                this._scrollable.$element().remove();
                this._scrollable = null;
                this._cleanNavButtons()
            },
            _renderInkRipple: function() {
                this._inkRipple = _utils2.default.render()
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: $element,
                    event: e
                };
                if (value) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _renderMultiple: function() {
                if ("multiple" === this.option("selectionMode")) {
                    this.option("selectOnFocus", false)
                }
            },
            _renderWrapper: function() {
                this._$wrapper = (0, _renderer2.default)("<div>").addClass(TABS_WRAPPER_CLASS);
                this.$element().append(this._$wrapper)
            },
            _itemContainer: function() {
                return this._$wrapper
            },
            _renderScrollable: function() {
                var $itemContainer = this.$element().wrapInner((0, _renderer2.default)("<div>").addClass(TABS_SCROLLABLE_CLASS)).children();
                this._scrollable = this._createComponent($itemContainer, _ui2.default, {
                    direction: "horizontal",
                    showScrollbar: false,
                    useKeyboard: false,
                    useNative: false,
                    scrollByContent: this.option("scrollByContent"),
                    onScroll: this._updateNavButtonsVisibility.bind(this)
                });
                this.$element().append(this._scrollable.$element())
            },
            _scrollToItem: function(itemData) {
                if (!this._scrollable) {
                    return
                }
                var $item = this._editStrategy.getItemElement(itemData);
                this._scrollable.scrollToElement($item)
            },
            _renderNavButtons: function() {
                this.$element().toggleClass(TABS_NAV_BUTTONS_CLASS, this.option("showNavButtons"));
                if (!this.option("showNavButtons")) {
                    return
                }
                var rtlEnabled = this.option("rtlEnabled");
                this._leftButton = this._createNavButton(-TAB_OFFSET, rtlEnabled ? BUTTON_NEXT_ICON : BUTTON_PREV_ICON);
                var $leftButton = this._leftButton.$element();
                $leftButton.addClass(TABS_LEFT_NAV_BUTTON_CLASS);
                this.$element().prepend($leftButton);
                this._rightButton = this._createNavButton(TAB_OFFSET, rtlEnabled ? BUTTON_PREV_ICON : BUTTON_NEXT_ICON);
                var $rightButton = this._rightButton.$element();
                $rightButton.addClass(TABS_RIGHT_NAV_BUTTON_CLASS);
                this.$element().append($rightButton)
            },
            _updateNavButtonsVisibility: function() {
                this._leftButton && this._leftButton.option("disabled", this._scrollable.scrollLeft() <= 0);
                this._rightButton && this._rightButton.option("disabled", this._scrollable.scrollLeft() >= Math.round(this._scrollable.scrollWidth() - this._scrollable.clientWidth()))
            },
            _updateScrollPosition: function(offset, duration) {
                this._scrollable.update();
                this._scrollable.scrollBy(offset / duration)
            },
            _createNavButton: function(offset, icon) {
                var that = this;
                var holdAction = that._createAction(function() {
                    that._holdInterval = setInterval(function() {
                        that._updateScrollPosition(offset, FEEDBACK_DURATION_INTERVAL)
                    }, FEEDBACK_DURATION_INTERVAL)
                });
                var holdEventName = (0, _utils3.addNamespace)(_hold2.default.name, "dxNavButton");
                var pointerUpEventName = (0, _utils3.addNamespace)(_pointer2.default.up, "dxNavButton");
                var pointerOutEventName = (0, _utils3.addNamespace)(_pointer2.default.out, "dxNavButton");
                var navButton = this._createComponent((0, _renderer2.default)("<div>").addClass(TABS_NAV_BUTTON_CLASS), _button2.default, {
                    focusStateEnabled: false,
                    icon: icon,
                    onClick: function() {
                        that._updateScrollPosition(offset, 1)
                    },
                    integrationOptions: {}
                });
                var $navButton = navButton.$element();
                _events_engine2.default.on($navButton, holdEventName, {
                    timeout: FEEDBACK_SCROLL_TIMEOUT
                }, function(e) {
                    holdAction({
                        event: e
                    })
                }.bind(this));
                _events_engine2.default.on($navButton, pointerUpEventName, function() {
                    that._clearInterval()
                });
                _events_engine2.default.on($navButton, pointerOutEventName, function() {
                    that._clearInterval()
                });
                return navButton
            },
            _clearInterval: function() {
                if (this._holdInterval) {
                    clearInterval(this._holdInterval)
                }
            },
            _updateSelection: function(addedSelection) {
                this._scrollable && this._scrollable.scrollToElement(this.itemElements().eq(addedSelection[0]), {
                    left: 1,
                    right: 1
                })
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                this._renderScrolling()
            },
            _itemSelectHandler: function(e) {
                if ("single" === this.option("selectionMode") && this.isItemSelected(e.currentTarget)) {
                    return
                }
                this.callBase(e)
            },
            _clean: function() {
                this._deferredTemplates = [];
                this._cleanScrolling();
                this.callBase()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "useInkRipple":
                    case "scrollingEnabled":
                    case "showNavButtons":
                        this._invalidate();
                        break;
                    case "scrollByContent":
                        this._scrollable && this._scrollable.option(args.name, args.value);
                        break;
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "selectionMode":
                        this._renderMultiple();
                        this.callBase(args);
                        break;
                    case "badgeExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _afterItemElementInserted: function() {
                this.callBase();
                this._deferRenderScrolling()
            },
            _afterItemElementDeleted: function($item, deletedActionArgs) {
                this.callBase($item, deletedActionArgs);
                this._renderScrolling()
            }
        });
        Tabs.ItemClass = _item2.default;
        (0, _component_registrator2.default)("dxTabs", Tabs);
        module.exports = Tabs;
        module.exports.getTabsExpandedClass = TABS_EXPANDED_CLASS
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.data_source_adapter.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.data_source_adapter */ 350);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var dataSourceAdapterType = _uiGrid_core2.default;
        module.exports = {
            extend: function(extender) {
                dataSourceAdapterType = dataSourceAdapterType.inherit(extender)
            },
            create: function(component) {
                return new dataSourceAdapterType(component)
            }
        }
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/filter_builder/utils.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _errors = __webpack_require__( /*! ../../data/errors */ 38);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _filtering = __webpack_require__( /*! ../shared/filtering */ 169);
        var _filtering2 = _interopRequireDefault(_filtering);
        var _format_helper = __webpack_require__( /*! ../../format_helper */ 63);
        var _format_helper2 = _interopRequireDefault(_format_helper);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _between = __webpack_require__( /*! ./between */ 656);
        var _between2 = _interopRequireDefault(_between);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _ui3 = __webpack_require__( /*! ./ui.filter_operations_dictionary */ 657);
        var _ui4 = _interopRequireDefault(_ui3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_DATA_TYPE = "string";
        var EMPTY_MENU_ICON = "icon-none";
        var AND_GROUP_OPERATION = "and";
        var EQUAL_OPERATION = "=";
        var NOT_EQUAL_OPERATION = "<>";
        var DATATYPE_OPERATIONS = {
            number: ["=", "<>", "<", ">", "<=", ">=", "isblank", "isnotblank"],
            string: ["contains", "notcontains", "startswith", "endswith", "=", "<>", "isblank", "isnotblank"],
            date: ["=", "<>", "<", ">", "<=", ">=", "isblank", "isnotblank"],
            datetime: ["=", "<>", "<", ">", "<=", ">=", "isblank", "isnotblank"],
            "boolean": ["=", "<>", "isblank", "isnotblank"],
            object: ["isblank", "isnotblank"]
        };
        var DEFAULT_FORMAT = {
            date: "shortDate",
            datetime: "shortDateShortTime"
        };
        var LOOKUP_OPERATIONS = ["=", "<>", "isblank", "isnotblank"];
        var AVAILABLE_FIELD_PROPERTIES = ["caption", "customizeText", "dataField", "dataType", "editorTemplate", "falseText", "editorOptions", "filterOperations", "format", "lookup", "trueText", "calculateFilterExpression", "name"];

        function getFormattedValueText(field, value) {
            var fieldFormat = field.format || DEFAULT_FORMAT[field.dataType];
            return _format_helper2.default.format(value, fieldFormat)
        }

        function isNegationGroup(group) {
            return group && group.length > 1 && "!" === group[0] && !isCondition(group)
        }

        function getGroupCriteria(group) {
            return isNegationGroup(group) ? group[1] : group
        }

        function setGroupCriteria(group, criteria) {
            if (isNegationGroup(group)) {
                group[1] = criteria
            } else {
                group = criteria
            }
            return group
        }

        function convertGroupToNewStructure(group, value) {
            var isNegationValue = function(value) {
                return value.indexOf("!") !== -1
            };
            var convertGroupToNegationGroup = function(group) {
                var criteria = group.slice(0);
                group.length = 0;
                group.push("!", criteria)
            };
            var convertNegationGroupToGroup = function(group) {
                var criteria = getGroupCriteria(group);
                group.length = 0;
                [].push.apply(group, criteria)
            };
            if (isNegationValue(value)) {
                if (!isNegationGroup(group)) {
                    convertGroupToNegationGroup(group)
                }
            } else {
                if (isNegationGroup(group)) {
                    convertNegationGroupToGroup(group)
                }
            }
        }

        function setGroupValue(group, value) {
            convertGroupToNewStructure(group, value);
            var criteria = getGroupCriteria(group);
            var i;
            var getNormalizedGroupValue = function(value) {
                return value.indexOf("!") === -1 ? value : value.substring(1)
            };
            var changeCriteriaValue = function(criteria, value) {
                for (i = 0; i < criteria.length; i++) {
                    if (!Array.isArray(criteria[i])) {
                        criteria[i] = value
                    }
                }
            };
            value = getNormalizedGroupValue(value);
            changeCriteriaValue(criteria, value);
            return group
        }

        function getGroupMenuItem(group, availableGroups) {
            var groupValue = getGroupValue(group);
            return availableGroups.filter(function(item) {
                return item.value === groupValue
            })[0]
        }

        function getCriteriaOperation(criteria) {
            if (isCondition(criteria)) {
                return AND_GROUP_OPERATION
            }
            var value = "";
            for (var i = 0; i < criteria.length; i++) {
                var item = criteria[i];
                if (!Array.isArray(item)) {
                    if (value && value !== item) {
                        throw new _errors.errors.Error("E4019")
                    }
                    if ("!" !== item) {
                        value = item
                    }
                }
            }
            return value
        }

        function getGroupValue(group) {
            var criteria = getGroupCriteria(group);
            var value = getCriteriaOperation(criteria);
            if (!value) {
                value = AND_GROUP_OPERATION
            }
            if (criteria !== group) {
                value = "!" + value
            }
            return value
        }

        function getDefaultFilterOperations(field) {
            return field.lookup && LOOKUP_OPERATIONS || DATATYPE_OPERATIONS[field.dataType || DEFAULT_DATA_TYPE]
        }

        function containItems(entity) {
            return Array.isArray(entity) && entity.length
        }

        function getFilterOperations(field) {
            var result = containItems(field.filterOperations) ? field.filterOperations : getDefaultFilterOperations(field);
            return (0, _extend.extend)([], result)
        }

        function getCaptionByOperation(operation, filterOperationDescriptions) {
            var operationName = _ui4.default.getNameByFilterOperation(operation);
            return filterOperationDescriptions && filterOperationDescriptions[operationName] ? filterOperationDescriptions[operationName] : operationName
        }

        function getOperationFromAvailable(operation, availableOperations) {
            for (var i = 0; i < availableOperations.length; i++) {
                if (availableOperations[i].value === operation) {
                    return availableOperations[i]
                }
            }
            throw new _ui2.default.Error("E1048", operation)
        }

        function getCustomOperation(customOperations, name) {
            var filteredOperations = customOperations.filter(function(item) {
                return item.name === name
            });
            return filteredOperations.length ? filteredOperations[0] : null
        }

        function getAvailableOperations(field, filterOperationDescriptions, customOperations) {
            var filterOperations = getFilterOperations(field);
            var isLookupField = !!field.lookup;
            customOperations.forEach(function(customOperation) {
                if (!field.filterOperations && filterOperations.indexOf(customOperation.name) === -1) {
                    var dataTypes = customOperation && customOperation.dataTypes;
                    var isOperationForbidden = isLookupField ? !!customOperation.notForLookup : false;
                    if (!isOperationForbidden && dataTypes && dataTypes.indexOf(field.dataType || DEFAULT_DATA_TYPE) >= 0) {
                        filterOperations.push(customOperation.name)
                    }
                }
            });
            return filterOperations.map(function(operation) {
                var customOperation = getCustomOperation(customOperations, operation);
                if (customOperation) {
                    return {
                        icon: customOperation.icon || EMPTY_MENU_ICON,
                        text: customOperation.caption || _inflector2.default.captionize(customOperation.name),
                        value: customOperation.name,
                        isCustom: true
                    }
                } else {
                    return {
                        icon: _ui4.default.getIconByFilterOperation(operation) || EMPTY_MENU_ICON,
                        text: getCaptionByOperation(operation, filterOperationDescriptions),
                        value: operation
                    }
                }
            })
        }

        function getDefaultOperation(field) {
            return field.defaultFilterOperation || getFilterOperations(field)[0]
        }

        function createCondition(field, customOperations) {
            var condition = [field.dataField, "", ""];
            var filterOperation = getDefaultOperation(field);
            updateConditionByOperation(condition, filterOperation, customOperations);
            return condition
        }

        function removeItem(group, item) {
            var criteria = getGroupCriteria(group);
            var index = criteria.indexOf(item);
            criteria.splice(index, 1);
            if (1 !== criteria.length) {
                criteria.splice(index, 1)
            }
            return group
        }

        function createEmptyGroup(value) {
            return value.indexOf("not") !== -1 ? ["!", [value.substring(3).toLowerCase()]] : [value]
        }

        function isEmptyGroup(group) {
            var criteria = getGroupCriteria(group);
            if (isCondition(criteria)) {
                return false
            }
            var hasConditions = criteria.some(function(item) {
                return isCondition(item)
            });
            return !hasConditions
        }

        function addItem(item, group) {
            var criteria = getGroupCriteria(group);
            var groupValue = getGroupValue(criteria);
            1 === criteria.length ? criteria.unshift(item) : criteria.push(item, groupValue);
            return group
        }

        function getField(dataField, fields) {
            for (var i = 0; i < fields.length; i++) {
                if (fields[i].name === dataField) {
                    return fields[i]
                }
                if (fields[i].dataField.toLowerCase() === dataField.toLowerCase()) {
                    return fields[i]
                }
            }
            var extendedFields = getItems(fields, true).filter(function(item) {
                return item.dataField.toLowerCase() === dataField.toLowerCase()
            });
            if (extendedFields.length > 0) {
                return extendedFields[0]
            }
            throw new _ui2.default.Error("E1047", dataField)
        }

        function isGroup(criteria) {
            if (!Array.isArray(criteria)) {
                return false
            }
            return criteria.length < 2 || Array.isArray(criteria[0]) || Array.isArray(criteria[1])
        }

        function isCondition(criteria) {
            if (!Array.isArray(criteria)) {
                return false
            }
            return criteria.length > 1 && !Array.isArray(criteria[0]) && !Array.isArray(criteria[1])
        }

        function convertToInnerGroup(group, customOperations) {
            var groupOperation = getCriteriaOperation(group).toLowerCase() || AND_GROUP_OPERATION;
            var innerGroup = [];
            for (var i = 0; i < group.length; i++) {
                if (isGroup(group[i])) {
                    innerGroup.push(convertToInnerStructure(group[i], customOperations));
                    innerGroup.push(groupOperation)
                } else {
                    if (isCondition(group[i])) {
                        innerGroup.push(convertToInnerCondition(group[i], customOperations));
                        innerGroup.push(groupOperation)
                    }
                }
            }
            if (0 === innerGroup.length) {
                innerGroup.push(groupOperation)
            }
            return innerGroup
        }

        function conditionHasCustomOperation(condition, customOperations) {
            var customOperation = getCustomOperation(customOperations, condition[1]);
            return customOperation && customOperation.name === condition[1]
        }

        function convertToInnerCondition(condition, customOperations) {
            if (conditionHasCustomOperation(condition, customOperations)) {
                return condition
            }
            if (condition.length < 3) {
                condition[2] = condition[1];
                condition[1] = EQUAL_OPERATION
            }
            return condition
        }

        function convertToInnerStructure(value, customOperations) {
            if (!value) {
                return [AND_GROUP_OPERATION]
            }
            value = (0, _extend.extend)(true, [], value);
            if (isCondition(value)) {
                return [convertToInnerCondition(value, customOperations), AND_GROUP_OPERATION]
            }
            if (isNegationGroup(value)) {
                return ["!", isCondition(value[1]) ? [convertToInnerCondition(value[1], customOperations), AND_GROUP_OPERATION] : isNegationGroup(value[1]) ? [convertToInnerStructure(value[1], customOperations), AND_GROUP_OPERATION] : convertToInnerGroup(value[1], customOperations)]
            }
            return convertToInnerGroup(value, customOperations)
        }

        function getNormalizedFields(fields) {
            return fields.reduce(function(result, field) {
                if ((0, _type.isDefined)(field.dataField)) {
                    var normalizedField = {};
                    for (var key in field) {
                        if (field[key] && AVAILABLE_FIELD_PROPERTIES.indexOf(key) > -1) {
                            normalizedField[key] = field[key]
                        }
                    }
                    normalizedField.defaultCalculateFilterExpression = _filtering2.default.defaultCalculateFilterExpression;
                    if (!(0, _type.isDefined)(normalizedField.dataType)) {
                        normalizedField.dataType = DEFAULT_DATA_TYPE
                    }
                    result.push(normalizedField)
                }
                return result
            }, [])
        }

        function getConditionFilterExpression(condition, fields, customOperations, target) {
            var field = getField(condition[0], fields);
            var filterExpression = convertToInnerCondition(condition, customOperations);
            var customOperation = customOperations.length && getCustomOperation(customOperations, filterExpression[1]);
            if (customOperation && customOperation.calculateFilterExpression) {
                return customOperation.calculateFilterExpression.apply(customOperation, [filterExpression[2], field, target])
            } else {
                if (field.createFilterExpression) {
                    return field.createFilterExpression.apply(field, [filterExpression[2], filterExpression[1], target])
                } else {
                    if (field.calculateFilterExpression) {
                        return field.calculateFilterExpression.apply(field, [filterExpression[2], filterExpression[1], target])
                    } else {
                        return field.defaultCalculateFilterExpression.apply(field, [filterExpression[2], filterExpression[1], target])
                    }
                }
            }
        }

        function getFilterExpression(value, fields, customOperations, target) {
            if (!(0, _type.isDefined)(value)) {
                return null
            }
            if (isNegationGroup(value)) {
                var filterExpression = getFilterExpression(value[1], fields, customOperations, target);
                return ["!", filterExpression]
            }
            var criteria = getGroupCriteria(value);
            if (isCondition(criteria)) {
                return getConditionFilterExpression(criteria, fields, customOperations, target) || null
            } else {
                var result = [];
                var _filterExpression;
                var groupValue = getGroupValue(criteria);
                for (var i = 0; i < criteria.length; i++) {
                    if (isGroup(criteria[i])) {
                        _filterExpression = getFilterExpression(criteria[i], fields, customOperations, target);
                        if (_filterExpression) {
                            i && result.push(groupValue);
                            result.push(_filterExpression)
                        }
                    } else {
                        if (isCondition(criteria[i])) {
                            _filterExpression = getConditionFilterExpression(criteria[i], fields, customOperations, target);
                            if (_filterExpression) {
                                result.length && result.push(groupValue);
                                result.push(_filterExpression)
                            }
                        }
                    }
                }
                if (1 === result.length) {
                    result = result[0]
                }
                return result.length ? result : null
            }
        }

        function getNormalizedFilter(group) {
            var criteria = getGroupCriteria(group);
            var i;
            if (0 === criteria.length) {
                return null
            }
            var itemsForRemove = [];
            for (i = 0; i < criteria.length; i++) {
                if (isGroup(criteria[i])) {
                    var normalizedGroupValue = getNormalizedFilter(criteria[i]);
                    if (normalizedGroupValue) {
                        criteria[i] = normalizedGroupValue
                    } else {
                        itemsForRemove.push(criteria[i])
                    }
                } else {
                    if (isCondition(criteria[i])) {
                        if (!isValidCondition(criteria[i])) {
                            itemsForRemove.push(criteria[i])
                        }
                    }
                }
            }
            for (i = 0; i < itemsForRemove.length; i++) {
                removeItem(criteria, itemsForRemove[i])
            }
            if (1 === criteria.length) {
                return null
            }
            criteria.splice(criteria.length - 1, 1);
            if (1 === criteria.length) {
                group = setGroupCriteria(group, criteria[0])
            }
            if (0 === group.length) {
                return null
            }
            return group
        }

        function getCurrentLookupValueText(field, value, handler) {
            if ("" === value) {
                handler("");
                return
            }
            var lookup = field.lookup;
            if (lookup.items) {
                handler(lookup.calculateCellValue(value) || "")
            } else {
                var dataSource = new _data_source.DataSource(lookup.dataSource);
                dataSource.loadSingle(lookup.valueExpr, value).done(function(result) {
                    result ? handler(lookup.displayExpr ? (0, _data.compileGetter)(lookup.displayExpr)(result) : result) : handler("")
                }).fail(function() {
                    handler("")
                })
            }
        }

        function getPrimitiveValueText(field, value, customOperation, target) {
            var valueText;
            if (true === value) {
                valueText = field.trueText || _message2.default.format("dxDataGrid-trueText")
            } else {
                if (false === value) {
                    valueText = field.falseText || _message2.default.format("dxDataGrid-falseText")
                } else {
                    valueText = getFormattedValueText(field, value)
                }
            }
            if (field.customizeText) {
                valueText = field.customizeText.call(field, {
                    value: value,
                    valueText: valueText,
                    target: target
                })
            }
            if (customOperation && customOperation.customizeText) {
                valueText = customOperation.customizeText.call(customOperation, {
                    value: value,
                    valueText: valueText,
                    field: field,
                    target: target
                })
            }
            return valueText
        }

        function getArrayValueText(field, value, customOperation, target) {
            return value.map(function(v) {
                return getPrimitiveValueText(field, v, customOperation, target)
            })
        }

        function checkDefaultValue(value) {
            return "" === value || null === value
        }

        function getCurrentValueText(field, value, customOperation) {
            var target = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "filterBuilder";
            if (checkDefaultValue(value)) {
                return ""
            }
            if (Array.isArray(value)) {
                var result = new _deferred.Deferred;
                _deferred.when.apply(this, getArrayValueText(field, value, customOperation, target)).done(function() {
                    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                        args[_key] = arguments[_key]
                    }
                    var text = args.some(function(item) {
                        return !checkDefaultValue(item)
                    }) ? args.map(function(item) {
                        return !checkDefaultValue(item) ? item : "?"
                    }) : "";
                    result.resolve(text)
                });
                return result
            } else {
                return getPrimitiveValueText(field, value, customOperation, target)
            }
        }

        function itemExists(plainItems, parentId) {
            return plainItems.some(function(item) {
                return item.dataField === parentId
            })
        }

        function pushItemAndCheckParent(originalItems, plainItems, item) {
            var dataField = item.dataField;
            if (hasParent(dataField)) {
                item.parentId = getParentIdFromItemDataField(dataField);
                if (!itemExists(plainItems, item.parentId) && !itemExists(originalItems, item.parentId)) {
                    pushItemAndCheckParent(originalItems, plainItems, {
                        id: item.parentId,
                        dataType: "object",
                        dataField: item.parentId,
                        caption: generateCaptionByDataField(item.parentId, true),
                        filterOperations: ["isblank", "isnotblank"]
                    })
                }
            }
            plainItems.push(item)
        }

        function generateCaptionByDataField(dataField, allowHierarchicalFields) {
            var caption = "";
            if (allowHierarchicalFields) {
                dataField = dataField.substring(dataField.lastIndexOf(".") + 1)
            } else {
                if (hasParent(dataField)) {
                    dataField.split(".").forEach(function(field, index, arr) {
                        caption += _inflector2.default.captionize(field);
                        if (index !== arr.length - 1) {
                            caption += "."
                        }
                    });
                    return caption
                }
            }
            return _inflector2.default.captionize(dataField)
        }

        function getItems(fields, allowHierarchicalFields) {
            var items = [];
            for (var i = 0; i < fields.length; i++) {
                var item = (0, _extend.extend)(true, {
                    caption: generateCaptionByDataField(fields[i].dataField, allowHierarchicalFields)
                }, fields[i]);
                item.id = item.name || item.dataField;
                if (allowHierarchicalFields) {
                    pushItemAndCheckParent(fields, items, item)
                } else {
                    items.push(item)
                }
            }
            return items
        }

        function hasParent(dataField) {
            return dataField.lastIndexOf(".") !== -1
        }

        function getParentIdFromItemDataField(dataField) {
            return dataField.substring(0, dataField.lastIndexOf("."))
        }

        function getCaptionWithParents(item, plainItems) {
            if (hasParent(item.dataField)) {
                var parentId = getParentIdFromItemDataField(item.dataField);
                for (var i = 0; i < plainItems.length; i++) {
                    if (plainItems[i].dataField === parentId) {
                        return getCaptionWithParents(plainItems[i], plainItems) + "." + item.caption
                    }
                }
            }
            return item.caption
        }

        function updateConditionByOperation(condition, operation, customOperations) {
            var customOperation = getCustomOperation(customOperations, operation);
            if (customOperation) {
                if (false === customOperation.hasValue) {
                    condition[1] = operation;
                    condition.length = 2
                } else {
                    condition[1] = operation;
                    condition[2] = ""
                }
                return condition
            }
            if ("isblank" === operation) {
                condition[1] = EQUAL_OPERATION;
                condition[2] = null
            } else {
                if ("isnotblank" === operation) {
                    condition[1] = NOT_EQUAL_OPERATION;
                    condition[2] = null
                } else {
                    customOperation = getCustomOperation(customOperations, condition[1]);
                    if (customOperation || 2 === condition.length || null === condition[2]) {
                        condition[2] = ""
                    }
                    condition[1] = operation
                }
            }
            return condition
        }

        function getOperationValue(condition) {
            var caption;
            if (null === condition[2]) {
                if (condition[1] === EQUAL_OPERATION) {
                    caption = "isblank"
                } else {
                    caption = "isnotblank"
                }
            } else {
                caption = condition[1]
            }
            return caption
        }

        function isValidCondition(condition) {
            return "" !== condition[2]
        }

        function getMergedOperations(customOperations, betweenCaption, context) {
            var result = (0, _extend.extend)(true, [], customOperations);
            var betweenIndex = -1;
            result.some(function(customOperation, index) {
                if ("between" === customOperation.name) {
                    betweenIndex = index;
                    return true
                }
            });
            if (betweenIndex !== -1) {
                result[betweenIndex] = (0, _extend.extend)(_between2.default.getConfig(betweenCaption, context), result[betweenIndex])
            } else {
                result.unshift(_between2.default.getConfig(betweenCaption, context))
            }
            return result
        }

        function isMatchedCondition(filter, addedFilterDataField) {
            return filter[0] === addedFilterDataField
        }

        function removeFieldConditionsFromFilter(filter, dataField) {
            if (!filter || 0 === filter.length) {
                return null
            }
            if (isCondition(filter)) {
                var hasMatchedCondition = isMatchedCondition(filter, dataField);
                return !hasMatchedCondition ? filter : null
            } else {
                return syncConditionIntoGroup(filter, [dataField], false)
            }
        }

        function syncConditionIntoGroup(filter, addedFilter, canPush) {
            var result = [];
            filter.forEach(function(item) {
                if (isCondition(item)) {
                    if (isMatchedCondition(item, addedFilter[0])) {
                        if (canPush) {
                            result.push(addedFilter);
                            canPush = false
                        } else {
                            result.splice(result.length - 1, 1)
                        }
                    } else {
                        result.push(item)
                    }
                } else {
                    (result.length || isGroup(item)) && result.push(item)
                }
            });
            if (0 === result.length) {
                return null
            }
            if (canPush) {
                result.push(AND_GROUP_OPERATION);
                result.push(addedFilter)
            }
            return 1 === result.length ? result[0] : result
        }

        function syncFilters(filter, addedFilter) {
            if (null === filter || 0 === filter.length) {
                return addedFilter
            }
            if (isCondition(filter)) {
                if (isMatchedCondition(filter, addedFilter[0])) {
                    return addedFilter
                } else {
                    return [filter, AND_GROUP_OPERATION, addedFilter]
                }
            }
            var groupValue = getGroupValue(filter);
            if (groupValue !== AND_GROUP_OPERATION) {
                return [addedFilter, "and", filter]
            }
            return syncConditionIntoGroup(filter, addedFilter, true)
        }

        function getMatchedConditions(filter, dataField) {
            if (null === filter || 0 === filter.length) {
                return []
            }
            if (isCondition(filter)) {
                if (isMatchedCondition(filter, dataField)) {
                    return [filter]
                } else {
                    return []
                }
            }
            var groupValue = getGroupValue(filter);
            if (groupValue !== AND_GROUP_OPERATION) {
                return []
            }
            var result = filter.filter(function(item) {
                return isCondition(item) && isMatchedCondition(item, dataField)
            });
            return result
        }

        function filterHasField(filter, dataField) {
            if (null === filter || 0 === filter.length) {
                return false
            }
            if (isCondition(filter)) {
                return filter[0] === dataField
            }
            return filter.some(function(item) {
                return (isCondition(item) || isGroup(item)) && filterHasField(item, dataField)
            })
        }
        exports.isValidCondition = isValidCondition;
        exports.isEmptyGroup = isEmptyGroup;
        exports.getOperationFromAvailable = getOperationFromAvailable;
        exports.updateConditionByOperation = updateConditionByOperation;
        exports.getCaptionWithParents = getCaptionWithParents;
        exports.getItems = getItems;
        exports.setGroupValue = setGroupValue;
        exports.getGroupMenuItem = getGroupMenuItem;
        exports.getGroupValue = getGroupValue;
        exports.getAvailableOperations = getAvailableOperations;
        exports.removeItem = removeItem;
        exports.createCondition = createCondition;
        exports.createEmptyGroup = createEmptyGroup;
        exports.addItem = addItem;
        exports.getField = getField;
        exports.isGroup = isGroup;
        exports.isCondition = isCondition;
        exports.getNormalizedFields = getNormalizedFields;
        exports.getNormalizedFilter = getNormalizedFilter;
        exports.getGroupCriteria = getGroupCriteria;
        exports.convertToInnerStructure = convertToInnerStructure;
        exports.getDefaultOperation = getDefaultOperation;
        exports.getCurrentValueText = getCurrentValueText;
        exports.getCurrentLookupValueText = getCurrentLookupValueText;
        exports.getFilterOperations = getFilterOperations;
        exports.getCaptionByOperation = getCaptionByOperation;
        exports.getOperationValue = getOperationValue;
        exports.getFilterExpression = getFilterExpression;
        exports.getCustomOperation = getCustomOperation;
        exports.getMergedOperations = getMergedOperations;
        exports.syncFilters = syncFilters;
        exports.getMatchedConditions = getMatchedConditions;
        exports.filterHasField = filterHasField;
        exports.removeFieldConditionsFromFilter = removeFieldConditionsFromFilter
    },
    /*!*******************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space.indicator.js ***!
      \*******************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.work_space */ 400);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _component_registrator = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../../core/utils/position */ 21);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var toMs = _date2.default.dateToMilliseconds;
        var SCHEDULER_DATE_TIME_INDICATOR_CLASS = "dx-scheduler-date-time-indicator";
        var TIME_PANEL_CURRENT_TIME_CELL_CLASS = "dx-scheduler-time-panel-current-time-cell";
        var HEADER_CURRENT_TIME_CELL_CLASS = "dx-scheduler-header-panel-current-time-cell";
        var SchedulerWorkSpaceIndicator = _uiScheduler2.default.inherit({
            _getToday: function() {
                var date = this.option("indicatorTime") || new Date;
                return this.invoke("convertDateByTimezone", date) || date
            },
            _needRenderDateTimeIndicator: function() {
                var today = this._getToday();
                var endViewDate = _date2.default.trimTime(this.getEndViewDate());
                return _date2.default.dateInRange(today, this._firstViewDate, new Date(endViewDate.getTime() + toMs("day")))
            },
            needRenderDateTimeIndication: function() {
                if (!_window2.default.hasWindow()) {
                    return false
                }
                var today = this._getToday();
                return today >= _date2.default.trimTime(new Date(this.getStartViewDate()))
            },
            _renderDateTimeIndication: function() {
                if (this.needRenderDateTimeIndication()) {
                    if (this.option("shadeUntilCurrentTime")) {
                        this._shader.render(this)
                    }
                    if (this.option("showCurrentTimeIndicator") && this._needRenderDateTimeIndicator()) {
                        var groupCount = this._getGroupCount() || 1;
                        var $container = this._dateTableScrollable.$content();
                        var height = this.getIndicationHeight();
                        var rtlOffset = this._getRtlOffset(this.getCellWidth());
                        if (height > 0) {
                            this._renderIndicator(height, rtlOffset, $container, groupCount)
                        }
                    }
                }
            },
            _renderIndicator: function(height, rtlOffset, $container, groupCount) {
                for (var i = 0; i < groupCount; i++) {
                    var $indicator = this._createIndicator($container);
                    $indicator.width(this.getCellWidth());
                    this._groupedStrategy.shiftIndicator($indicator, height, rtlOffset, i)
                }
            },
            _createIndicator: function($container) {
                var $indicator = (0, _renderer2.default)("<div>").addClass(SCHEDULER_DATE_TIME_INDICATOR_CLASS);
                $container.append($indicator);
                return $indicator
            },
            _getRtlOffset: function(width) {
                return this.option("rtlEnabled") ? (0, _position.getBoundingRect)(this._dateTableScrollable.$content().get(0)).width - this.getTimePanelWidth() - width : 0
            },
            _setIndicationUpdateInterval: function() {
                if (!this.option("showCurrentTimeIndicator") || 0 === this.option("indicatorUpdateInterval")) {
                    return
                }
                this._clearIndicatorUpdateInterval();
                this._indicatorInterval = setInterval(function() {
                    this._refreshDateTimeIndication()
                }.bind(this), this.option("indicatorUpdateInterval"))
            },
            _clearIndicatorUpdateInterval: function() {
                if (this._indicatorInterval) {
                    clearInterval(this._indicatorInterval);
                    delete this._indicatorInterval
                }
            },
            _isVerticalShader: function() {
                return true
            },
            getIndicationWidth: function(groupIndex) {
                var maxWidth = this.getCellWidth() * this._getCellCount();
                var difference = this._getIndicatorDuration();
                if (difference > this._getCellCount()) {
                    difference = this._getCellCount()
                }
                var width = difference * this.getRoundedCellWidth(groupIndex, groupIndex * this._getCellCount(), difference);
                return maxWidth < width ? maxWidth : width
            },
            getIndicatorOffset: function(groupIndex) {
                var difference = this._getIndicatorDuration() - 1;
                var offset = difference * this.getRoundedCellWidth(groupIndex, groupIndex * this._getCellCount(), difference);
                return offset
            },
            _getIndicatorDuration: function() {
                var today = this._getToday();
                var firstViewDate = new Date(this._firstViewDate);
                var timeDiff = today.getTime() - firstViewDate.getTime();
                if ("workWeek" === this.option("type")) {
                    timeDiff -= this._getWeekendsCount(Math.round(timeDiff / toMs("day"))) * toMs("day")
                }
                return Math.ceil((timeDiff + 1) / toMs("day"))
            },
            getIndicationHeight: function() {
                var today = this._getToday();
                var cellHeight = this.getCellHeight();
                var date = new Date(this._firstViewDate);
                if (this._needRenderDateTimeIndicator()) {
                    date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate())
                }
                var duration = today.getTime() - date.getTime();
                var cellCount = duration / this.getCellDuration();
                return cellCount * cellHeight
            },
            _dispose: function() {
                this._clearIndicatorUpdateInterval();
                this.callBase.apply(this, arguments)
            },
            _refreshDateTimeIndication: function() {
                this._cleanDateTimeIndicator();
                this._shader && this._shader.clean();
                this._renderDateTimeIndication()
            },
            _isCurrentTime: function(date) {
                if (this.option("showCurrentTimeIndicator") && this._needRenderDateTimeIndicator()) {
                    var today = this._getToday();
                    var result = false;
                    date = new Date(date);
                    date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
                    var startCellDate = new Date(date);
                    var endCellDate = new Date(date);
                    if (_date2.default.sameDate(today, date)) {
                        startCellDate = startCellDate.setMilliseconds(date.getMilliseconds() - this.getCellDuration() + 1);
                        endCellDate = endCellDate.setMilliseconds(date.getMilliseconds() + this.getCellDuration());
                        result = _date2.default.dateInRange(today, startCellDate, endCellDate)
                    }
                    return result
                }
            },
            _isCurrentTimeHeaderCell: function(headerIndex) {
                var result = false;
                if (this.option("showCurrentTimeIndicator") && this._needRenderDateTimeIndicator()) {
                    var date = this._getDateByIndex(headerIndex);
                    var now = this.option("indicatorTime") || new Date;
                    result = _date2.default.sameDate(date, now)
                }
                return result
            },
            _getTimeCellClass: function(i) {
                var startViewDate = this._getTimeCellDate(i);
                var cellClass = this.callBase(i);
                if (this._isCurrentTime(startViewDate)) {
                    return cellClass + " " + TIME_PANEL_CURRENT_TIME_CELL_CLASS
                }
                return cellClass
            },
            _getHeaderPanelCellClass: function(i) {
                var cellClass = this.callBase(i);
                if (this._isCurrentTimeHeaderCell(i)) {
                    return cellClass + " " + HEADER_CURRENT_TIME_CELL_CLASS
                }
                return cellClass
            },
            _cleanView: function() {
                this.callBase();
                this._cleanDateTimeIndicator()
            },
            _dimensionChanged: function() {
                this.callBase();
                this._refreshDateTimeIndication()
            },
            _cleanDateTimeIndicator: function() {
                this.$element().find("." + SCHEDULER_DATE_TIME_INDICATOR_CLASS).remove()
            },
            _cleanWorkSpace: function() {
                this.callBase();
                this._renderDateTimeIndication();
                this._setIndicationUpdateInterval()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "showCurrentTimeIndicator":
                    case "indicatorTime":
                        this._cleanWorkSpace();
                        break;
                    case "indicatorUpdateInterval":
                        this._setIndicationUpdateInterval();
                        break;
                    case "showAllDayPanel":
                        this.callBase(args);
                        this._refreshDateTimeIndication();
                        break;
                    case "allDayExpanded":
                        this.callBase(args);
                        this._refreshDateTimeIndication();
                        break;
                    case "crossScrollingEnabled":
                        this.callBase(args);
                        this._refreshDateTimeIndication();
                        break;
                    case "shadeUntilCurrentTime":
                        this._refreshDateTimeIndication();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    showCurrentTimeIndicator: true,
                    indicatorTime: new Date,
                    indicatorUpdateInterval: 5 * toMs("minute"),
                    shadeUntilCurrentTime: true
                })
            }
        });
        (0, _component_registrator2.default)("dxSchedulerWorkSpace", SchedulerWorkSpaceIndicator);
        module.exports = SchedulerWorkSpaceIndicator
    }, , , , , , , , ,
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/date.format.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _number = __webpack_require__( /*! ../number */ 49);
        var _number2 = _interopRequireDefault(_number);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ARABIC_COMMA = "\u060c";
        var FORMAT_SEPARATORS = " .,:;/\\<>()-[]" + ARABIC_COMMA;
        var AM_PM_PATTERN = ". m.";
        var checkDigit = function(char) {
            var code = char && _number2.default.convertDigits(char, false).charCodeAt(0);
            var zeroCode = _number2.default.convertDigits("0", false).charCodeAt(0);
            return zeroCode <= code && code < zeroCode + 10
        };
        var checkPatternContinue = function(text, index, isDigit) {
            var char = text[index];
            var nextChar = text[index + 1];
            if (!isDigit) {
                if ("." === char || " " === char && text.slice(index - 1, index + 3) === AM_PM_PATTERN) {
                    return true
                }
                if ("-" === char && !checkDigit(nextChar)) {
                    return true
                }
            }
            return FORMAT_SEPARATORS.indexOf(char) < 0 && isDigit === checkDigit(char)
        };
        var getPatternStartIndex = function(defaultPattern, index) {
            if (!checkDigit(defaultPattern[index])) {
                while (index > 0 && !checkDigit(defaultPattern[index - 1]) && ("." === defaultPattern[index - 1] || FORMAT_SEPARATORS.indexOf(defaultPattern[index - 1]) < 0)) {
                    index--
                }
            }
            return index
        };
        var getDifference = function(defaultPattern, patterns, processedIndexes, isDigit) {
            var i = 0;
            var result = [];
            var patternsFilter = function(pattern) {
                return defaultPattern[i] !== pattern[i] && (void 0 === isDigit || checkDigit(defaultPattern[i]) === isDigit)
            };
            if (!Array.isArray(patterns)) {
                patterns = [patterns]
            }
            for (i = 0; i < defaultPattern.length; i++) {
                if (processedIndexes.indexOf(i) < 0 && patterns.filter(patternsFilter).length) {
                    i = getPatternStartIndex(defaultPattern, i);
                    do {
                        isDigit = checkDigit(defaultPattern[i]);
                        if (!result.length && !isDigit && checkDigit(patterns[0][i])) {
                            break
                        }
                        result.push(i);
                        processedIndexes.unshift(i);
                        i++
                    } while (defaultPattern[i] && checkPatternContinue(defaultPattern, i, isDigit));
                    break
                }
            }
            if (1 === result.length && ("0" === defaultPattern[processedIndexes[0] - 1] || "\u0660" === defaultPattern[processedIndexes[0] - 1])) {
                processedIndexes.unshift(processedIndexes[0] - 1)
            }
            return result
        };
        var replaceCharsCore = function(pattern, indexes, char, patternPositions) {
            var baseCharIndex = indexes[0];
            var patternIndex = baseCharIndex < patternPositions.length ? patternPositions[baseCharIndex] : baseCharIndex;
            indexes.forEach(function(_, index) {
                pattern = pattern.substr(0, patternIndex + index) + (char.length > 1 ? char[index] : char) + pattern.substr(patternIndex + index + 1)
            });
            if (1 === indexes.length) {
                pattern = pattern.replace("0" + char, char + char);
                pattern = pattern.replace("\u0660" + char, char + char)
            }
            return pattern
        };
        var replaceChars = function(pattern, indexes, char, patternPositions) {
            var i;
            var index;
            var patternIndex;
            if (!checkDigit(pattern[indexes[0]] || "0")) {
                var letterCount = Math.max(indexes.length <= 3 ? 3 : 4, char.length);
                while (indexes.length > letterCount) {
                    index = indexes.pop();
                    patternIndex = patternPositions[index];
                    patternPositions[index] = -1;
                    for (i = index + 1; i < patternPositions.length; i++) {
                        patternPositions[i]--
                    }
                    pattern = pattern.substr(0, patternIndex) + pattern.substr(patternIndex + 1)
                }
                index = indexes[indexes.length - 1] + 1, patternIndex = index < patternPositions.length ? patternPositions[index] : index;
                while (indexes.length < letterCount) {
                    indexes.push(indexes[indexes.length - 1] + 1);
                    for (i = index; i < patternPositions.length; i++) {
                        patternPositions[i]++
                    }
                    pattern = pattern.substr(0, patternIndex) + " " + pattern.substr(patternIndex)
                }
            }
            pattern = replaceCharsCore(pattern, indexes, char, patternPositions);
            return pattern
        };
        var formatValue = function(value, formatter) {
            if (Array.isArray(value)) {
                return value.map(function(value) {
                    return (formatter(value) || "").toString()
                })
            }
            return (formatter(value) || "").toString()
        };
        var ESCAPE_CHARS_REGEXP = /[a-zA-Z]/g;
        var escapeChars = function(pattern, defaultPattern, processedIndexes, patternPositions) {
            var escapeIndexes = defaultPattern.split("").map(function(char, index) {
                if (processedIndexes.indexOf(index) < 0 && (char.match(ESCAPE_CHARS_REGEXP) || "'" === char)) {
                    return patternPositions[index]
                }
                return -1
            });
            pattern = pattern.split("").map(function(char, index) {
                var result = char;
                var isCurrentCharEscaped = escapeIndexes.indexOf(index) >= 0;
                var isPrevCharEscaped = index > 0 && escapeIndexes.indexOf(index - 1) >= 0;
                var isNextCharEscaped = escapeIndexes.indexOf(index + 1) >= 0;
                if (isCurrentCharEscaped) {
                    if (!isPrevCharEscaped) {
                        result = "'" + result
                    }
                    if (!isNextCharEscaped) {
                        result += "'"
                    }
                }
                return result
            }).join("");
            return pattern
        };
        var getFormat = function(formatter) {
            var processedIndexes = [];
            var defaultPattern = formatValue(new Date(2009, 8, 8, 6, 5, 4), formatter);
            var patternPositions = defaultPattern.split("").map(function(_, index) {
                return index
            });
            var result = defaultPattern;
            var replacedPatterns = {};
            var datePatterns = [{
                date: new Date(2009, 8, 8, 6, 5, 4, 100),
                pattern: "S"
            }, {
                date: new Date(2009, 8, 8, 6, 5, 2),
                pattern: "s"
            }, {
                date: new Date(2009, 8, 8, 6, 2, 4),
                pattern: "m"
            }, {
                date: new Date(2009, 8, 8, 18, 5, 4),
                pattern: "H",
                isDigit: true
            }, {
                date: new Date(2009, 8, 8, 2, 5, 4),
                pattern: "h",
                isDigit: true
            }, {
                date: new Date(2009, 8, 8, 18, 5, 4),
                pattern: "a",
                isDigit: false
            }, {
                date: new Date(2009, 8, 1, 6, 5, 4),
                pattern: "d"
            }, {
                date: [new Date(2009, 8, 2, 6, 5, 4), new Date(2009, 8, 3, 6, 5, 4), new Date(2009, 8, 4, 6, 5, 4)],
                pattern: "E"
            }, {
                date: new Date(2009, 9, 6, 6, 5, 4),
                pattern: "M"
            }, {
                date: new Date(1998, 8, 8, 6, 5, 4),
                pattern: "y"
            }];
            if (!result) {
                return
            }
            datePatterns.forEach(function(test) {
                var diff = getDifference(defaultPattern, formatValue(test.date, formatter), processedIndexes, test.isDigit);
                var pattern = "M" === test.pattern && !replacedPatterns.d ? "L" : test.pattern;
                result = replaceChars(result, diff, pattern, patternPositions);
                replacedPatterns[pattern] = diff.length
            });
            result = escapeChars(result, defaultPattern, processedIndexes, patternPositions);
            if (processedIndexes.length) {
                return result
            }
        };
        exports.getFormat = getFormat
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/core/utils/svg.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var window = __webpack_require__( /*! ./window */ 7).getWindow();
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);

        function getMarkup(element, backgroundColor) {
            var temp = domAdapter.createElement("div");
            var clone = element.cloneNode(true);
            if (backgroundColor) {
                $(clone).css("backgroundColor", backgroundColor)
            }
            temp.appendChild(clone);
            return temp.innerHTML
        }

        function fixNamespaces(markup) {
            var first = true;
            if (markup.indexOf("xmlns:xlink") === -1) {
                markup = markup.replace("<svg", '<svg xmlns:xlink="http://www.w3.org/1999/xlink"')
            }
            markup = markup.replace(/xmlns="[\s\S]*?"/gi, function(match) {
                if (!first) {
                    return ""
                }
                first = false;
                return match
            });
            return markup.replace(/xmlns:NS1="[\s\S]*?"/gi, "").replace(/NS1:xmlns:xlink="([\s\S]*?)"/gi, 'xmlns:xlink="$1"')
        }

        function decodeHtmlEntities(markup) {
            return markup.replace(/&quot;/gi, "&#34;").replace(/&amp;/gi, "&#38;").replace(/&apos;/gi, "&#39;").replace(/&lt;/gi, "&#60;").replace(/&gt;/gi, "&#62;").replace(/&nbsp;/gi, "&#160;").replace(/&shy;/gi, "&#173;")
        }
        exports.getSvgMarkup = function(element, backgroundColor) {
            return fixNamespaces(decodeHtmlEntities(getMarkup(element, backgroundColor)))
        };
        exports.getSvgElement = function(markup) {
            return domAdapter.isNode(markup) ? markup : (new window.DOMParser).parseFromString(markup, "image/svg+xml").childNodes[0]
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/date.parser.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var escapeRegExp = __webpack_require__( /*! ../../core/utils/common */ 3).escapeRegExp;
        var FORMAT_TYPES = {
            3: "abbreviated",
            4: "wide",
            5: "narrow"
        };
        var monthRegExpGenerator = function(count, dateParts) {
            if (count > 2) {
                return Object.keys(FORMAT_TYPES).map(function(count) {
                    return ["format", "standalone"].map(function(type) {
                        return dateParts.getMonthNames(FORMAT_TYPES[count], type).join("|")
                    }).join("|")
                }).join("|")
            }
            return "0?[1-9]|1[012]"
        };
        var PATTERN_REGEXPS = {
            y: function(count) {
                return "[0-9]+"
            },
            M: monthRegExpGenerator,
            L: monthRegExpGenerator,
            Q: function(count, dateParts) {
                if (count > 2) {
                    return dateParts.getQuarterNames(FORMAT_TYPES[count], "format").join("|")
                }
                return "0?[1-4]"
            },
            E: function(count, dateParts) {
                return "\\D*"
            },
            a: function(count, dateParts) {
                return dateParts.getPeriodNames(FORMAT_TYPES[count < 3 ? 3 : count], "format").join("|")
            },
            d: function(count) {
                return "0?[1-9]|[12][0-9]|3[01]"
            },
            H: function(count) {
                return "0?[0-9]|1[0-9]|2[0-3]"
            },
            h: function(count) {
                return "0?[1-9]|1[012]"
            },
            m: function(count) {
                return "0?[0-9]|[1-5][0-9]"
            },
            s: function(count) {
                return "0?[0-9]|[1-5][0-9]"
            },
            S: function(count) {
                return "[0-9]{1," + count + "}"
            }
        };
        var parseNumber = Number;
        var caseInsensitiveIndexOf = function(array, value) {
            return array.map(function(item) {
                return item.toLowerCase()
            }).indexOf(value.toLowerCase())
        };
        var monthPatternParser = function(text, count, dateParts) {
            if (count > 2) {
                return ["format", "standalone"].map(function(type) {
                    return Object.keys(FORMAT_TYPES).map(function(count) {
                        var monthNames = dateParts.getMonthNames(FORMAT_TYPES[count], type);
                        return caseInsensitiveIndexOf(monthNames, text)
                    })
                }).reduce(function(a, b) {
                    return a.concat(b)
                }).filter(function(index) {
                    return index >= 0
                })[0]
            }
            return parseNumber(text) - 1
        };
        var PATTERN_PARSERS = {
            y: function(text, count) {
                var year = parseNumber(text);
                if (2 === count) {
                    return year < 30 ? 2e3 + year : 1900 + year
                }
                return year
            },
            M: monthPatternParser,
            L: monthPatternParser,
            Q: function(text, count, dateParts) {
                if (count > 2) {
                    return dateParts.getQuarterNames(FORMAT_TYPES[count], "format").indexOf(text)
                }
                return parseNumber(text) - 1
            },
            E: function(text, count, dateParts) {
                var dayNames = dateParts.getDayNames(FORMAT_TYPES[count < 3 ? 3 : count], "format");
                return caseInsensitiveIndexOf(dayNames, text)
            },
            a: function(text, count, dateParts) {
                var periodNames = dateParts.getPeriodNames(FORMAT_TYPES[count < 3 ? 3 : count], "format");
                return caseInsensitiveIndexOf(periodNames, text)
            },
            d: parseNumber,
            H: parseNumber,
            h: parseNumber,
            m: parseNumber,
            s: parseNumber,
            S: function(text, count) {
                count = Math.max(count, 3);
                text = text.slice(0, 3);
                while (count < 3) {
                    text += "0";
                    count++
                }
                return parseNumber(text)
            }
        };
        var ORDERED_PATTERNS = ["y", "M", "d", "h", "m", "s", "S"];
        var PATTERN_SETTERS = {
            y: "setFullYear",
            M: "setMonth",
            L: "setMonth",
            a: function(date, value, datePartValues) {
                var hours = date.getHours();
                var hourPartValue = datePartValues.h;
                if (void 0 !== hourPartValue && hourPartValue !== hours) {
                    hours--
                }
                if (!value && 12 === hours) {
                    hours = 0
                } else {
                    if (value && 12 !== hours) {
                        hours += 12
                    }
                }
                date.setHours(hours)
            },
            d: "setDate",
            H: "setHours",
            h: "setHours",
            m: "setMinutes",
            s: "setSeconds",
            S: "setMilliseconds"
        };
        var getSameCharCount = function(text, index) {
            var char = text[index];
            var count = 0;
            do {
                index++;
                count++
            } while (text[index] === char);
            return count
        };
        var createPattern = function(char, count) {
            var result = "";
            for (var i = 0; i < count; i++) {
                result += char
            }
            return result
        };
        var getRegExpInfo = function(format, dateParts) {
            var regexpText = "";
            var stubText = "";
            var isEscaping;
            var patterns = [];
            var addPreviousStub = function() {
                if (stubText) {
                    patterns.push("'" + stubText + "'");
                    regexpText += escapeRegExp(stubText) + ")";
                    stubText = ""
                }
            };
            for (var i = 0; i < format.length; i++) {
                var char = format[i];
                var isEscapeChar = "'" === char;
                var regexpPart = PATTERN_REGEXPS[char];
                if (isEscapeChar) {
                    isEscaping = !isEscaping;
                    if ("'" !== format[i - 1]) {
                        continue
                    }
                }
                if (regexpPart && !isEscaping) {
                    var count = getSameCharCount(format, i);
                    var pattern = createPattern(char, count);
                    addPreviousStub();
                    patterns.push(pattern);
                    regexpText += "(" + regexpPart(count, dateParts) + ")";
                    i += count - 1
                } else {
                    if (!stubText) {
                        regexpText += "("
                    }
                    stubText += char
                }
            }
            addPreviousStub();
            return {
                patterns: patterns,
                regexp: new RegExp("^" + regexpText + "$", "i")
            }
        };
        var getPatternSetters = function() {
            return PATTERN_SETTERS
        };
        var setPatternPart = function(date, pattern, text, dateParts, datePartValues) {
            var patternChar = pattern[0];
            var partSetter = PATTERN_SETTERS[patternChar];
            var partParser = PATTERN_PARSERS[patternChar];
            if (partSetter && partParser) {
                var value = partParser(text, pattern.length, dateParts);
                datePartValues[pattern] = value;
                if (date[partSetter]) {
                    date[partSetter](value)
                } else {
                    partSetter(date, value, datePartValues)
                }
            }
        };
        var setPatternPartFromNow = function(date, pattern, now) {
            var setterName = PATTERN_SETTERS[pattern];
            var getterName = "g" + setterName.substr(1);
            var value = now[getterName]();
            date[setterName](value)
        };
        var getShortPatterns = function(fullPatterns) {
            return fullPatterns.map(function(pattern) {
                if ("'" === pattern[0]) {
                    return ""
                } else {
                    return "H" === pattern[0] ? "h" : pattern[0]
                }
            })
        };
        var getMaxOrderedPatternIndex = function(patterns) {
            var indexes = patterns.map(function(pattern) {
                return ORDERED_PATTERNS.indexOf(pattern)
            });
            return Math.max.apply(Math, indexes)
        };
        var getOrderedFormatPatterns = function(formatPatterns) {
            var otherPatterns = formatPatterns.filter(function(pattern) {
                return ORDERED_PATTERNS.indexOf(pattern) < 0
            });
            return ORDERED_PATTERNS.concat(otherPatterns)
        };
        var getParser = function(format, dateParts) {
            var regExpInfo = getRegExpInfo(format, dateParts);
            return function(text) {
                var regExpResult = regExpInfo.regexp.exec(text);
                if (regExpResult) {
                    var now = new Date;
                    var date = new Date(now.getFullYear(), 0, 1);
                    var formatPatterns = getShortPatterns(regExpInfo.patterns);
                    var maxPatternIndex = getMaxOrderedPatternIndex(formatPatterns);
                    var orderedFormatPatterns = getOrderedFormatPatterns(formatPatterns);
                    var datePartValues = {};
                    orderedFormatPatterns.forEach(function(pattern, index) {
                        if (!pattern || index < ORDERED_PATTERNS.length && index > maxPatternIndex) {
                            return
                        }
                        var patternIndex = formatPatterns.indexOf(pattern);
                        if (patternIndex >= 0) {
                            var regExpPattern = regExpInfo.patterns[patternIndex];
                            var regExpText = regExpResult[patternIndex + 1];
                            setPatternPart(date, regExpPattern, regExpText, dateParts, datePartValues)
                        } else {
                            setPatternPartFromNow(date, pattern, now)
                        }
                    });
                    return date
                }
                return null
            }
        };
        exports.getParser = getParser;
        exports.getRegExpInfo = getRegExpInfo;
        exports.getPatternSetters = getPatternSetters
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/selection/selection.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var deferredStrategy = __webpack_require__( /*! ./selection.strategy.deferred */ 499);
        var standardStrategy = __webpack_require__( /*! ./selection.strategy.standard */ 500);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        module.exports = Class.inherit({
            ctor: function(options) {
                this.options = extend(this._getDefaultOptions(), options, {
                    selectedItemKeys: options.selectedKeys || []
                });
                this._selectionStrategy = this.options.deferred ? new deferredStrategy(this.options) : new standardStrategy(this.options);
                this._focusedItemIndex = -1;
                if (!this.options.equalByReference) {
                    this._selectionStrategy.updateSelectedItemKeyHash(this.options.selectedItemKeys)
                }
            },
            _getDefaultOptions: function() {
                return {
                    allowNullValue: false,
                    deferred: false,
                    equalByReference: false,
                    mode: "multiple",
                    selectedItems: [],
                    selectionFilter: [],
                    maxFilterLengthInRequest: 0,
                    onSelectionChanged: noop,
                    key: noop,
                    keyOf: function(item) {
                        return item
                    },
                    load: function() {
                        return (new Deferred).resolve([])
                    },
                    totalCount: function() {
                        return -1
                    },
                    isSelectableItem: function() {
                        return true
                    },
                    isItemSelected: function() {
                        return false
                    },
                    getItemData: function(item) {
                        return item
                    },
                    dataFields: noop,
                    filter: noop
                }
            },
            validate: function() {
                this._selectionStrategy.validate()
            },
            getSelectedItemKeys: function() {
                return this._selectionStrategy.getSelectedItemKeys()
            },
            getSelectedItems: function() {
                return this._selectionStrategy.getSelectedItems()
            },
            selectionFilter: function(value) {
                if (void 0 === value) {
                    return this.options.selectionFilter
                }
                var filterIsChanged = this.options.selectionFilter !== value && JSON.stringify(this.options.selectionFilter) !== JSON.stringify(value);
                this.options.selectionFilter = value;
                filterIsChanged && this.onSelectionChanged()
            },
            setSelection: function(keys) {
                return this.selectedItemKeys(keys)
            },
            select: function(keys) {
                return this.selectedItemKeys(keys, true)
            },
            deselect: function(keys) {
                return this.selectedItemKeys(keys, true, true)
            },
            selectedItemKeys: function(keys, preserve, isDeselect, isSelectAll) {
                var that = this;
                keys = keys || [];
                keys = Array.isArray(keys) ? keys : [keys];
                that.validate();
                return this._selectionStrategy.selectedItemKeys(keys, preserve, isDeselect, isSelectAll)
            },
            clearSelection: function() {
                return this.selectedItemKeys([])
            },
            _addSelectedItem: function(itemData, key) {
                this._selectionStrategy.addSelectedItem(key, itemData)
            },
            _removeSelectedItem: function(key) {
                this._selectionStrategy.removeSelectedItem(key)
            },
            _setSelectedItems: function(keys, items) {
                this._selectionStrategy.setSelectedItems(keys, items)
            },
            onSelectionChanged: function() {
                this._selectionStrategy.onSelectionChanged()
            },
            changeItemSelection: function(itemIndex, keys) {
                var isSelectedItemsChanged;
                var items = this.options.plainItems();
                var item = items[itemIndex];
                if (!this.isSelectable() || !this.isDataItem(item)) {
                    return false
                }
                var itemData = this.options.getItemData(item);
                var itemKey = this.options.keyOf(itemData);
                keys = keys || {};
                if (keys.shift && "multiple" === this.options.mode && this._focusedItemIndex >= 0) {
                    isSelectedItemsChanged = this.changeItemSelectionWhenShiftKeyPressed(itemIndex, items)
                } else {
                    if (keys.control) {
                        this._resetItemSelectionWhenShiftKeyPressed();
                        var isSelected = this._selectionStrategy.isItemDataSelected(itemData);
                        if ("single" === this.options.mode) {
                            this.clearSelectedItems()
                        }
                        if (isSelected) {
                            this._removeSelectedItem(itemKey)
                        } else {
                            this._addSelectedItem(itemData, itemKey)
                        }
                        isSelectedItemsChanged = true
                    } else {
                        this._resetItemSelectionWhenShiftKeyPressed();
                        var isKeysEqual = this._selectionStrategy.equalKeys(this.options.selectedItemKeys[0], itemKey);
                        if (1 !== this.options.selectedItemKeys.length || !isKeysEqual) {
                            this._setSelectedItems([itemKey], [itemData]);
                            isSelectedItemsChanged = true
                        }
                    }
                }
                if (isSelectedItemsChanged) {
                    this._focusedItemIndex = itemIndex;
                    this.onSelectionChanged();
                    return true
                }
            },
            isDataItem: function(item) {
                return this.options.isSelectableItem(item)
            },
            isSelectable: function() {
                return "single" === this.options.mode || "multiple" === this.options.mode
            },
            isItemDataSelected: function(data) {
                return this._selectionStrategy.isItemDataSelected(data)
            },
            isItemSelected: function(arg) {
                return this._selectionStrategy.isItemKeySelected(arg)
            },
            _resetItemSelectionWhenShiftKeyPressed: function() {
                delete this._shiftFocusedItemIndex
            },
            _resetFocusedItemIndex: function() {
                this._focusedItemIndex = -1
            },
            changeItemSelectionWhenShiftKeyPressed: function(itemIndex, items) {
                var isSelectedItemsChanged = false;
                var itemIndexStep;
                var index;
                var keyOf = this.options.keyOf;
                var focusedItem = items[this._focusedItemIndex];
                var focusedData = this.options.getItemData(focusedItem);
                var focusedKey = keyOf(focusedData);
                var isFocusedItemSelected = focusedItem && this.isItemDataSelected(focusedData);
                if (!isDefined(this._shiftFocusedItemIndex)) {
                    this._shiftFocusedItemIndex = this._focusedItemIndex
                }
                var data;
                var itemKey;
                if (this._shiftFocusedItemIndex !== this._focusedItemIndex) {
                    itemIndexStep = this._focusedItemIndex < this._shiftFocusedItemIndex ? 1 : -1;
                    for (index = this._focusedItemIndex; index !== this._shiftFocusedItemIndex; index += itemIndexStep) {
                        if (this.isDataItem(items[index])) {
                            itemKey = keyOf(this.options.getItemData(items[index]));
                            this._removeSelectedItem(itemKey);
                            isSelectedItemsChanged = true
                        }
                    }
                }
                if (itemIndex !== this._shiftFocusedItemIndex) {
                    itemIndexStep = itemIndex < this._shiftFocusedItemIndex ? 1 : -1;
                    for (index = itemIndex; index !== this._shiftFocusedItemIndex; index += itemIndexStep) {
                        if (this.isDataItem(items[index])) {
                            data = this.options.getItemData(items[index]);
                            itemKey = keyOf(data);
                            this._addSelectedItem(data, itemKey);
                            isSelectedItemsChanged = true
                        }
                    }
                }
                if (this.isDataItem(focusedItem) && !isFocusedItemSelected) {
                    this._addSelectedItem(focusedData, focusedKey);
                    isSelectedItemsChanged = true
                }
                return isSelectedItemsChanged
            },
            clearSelectedItems: function() {
                this._setSelectedItems([], [])
            },
            selectAll: function(isOnePage) {
                this._resetFocusedItemIndex();
                if (isOnePage) {
                    return this._onePageSelectAll(false)
                } else {
                    return this.selectedItemKeys([], true, false, true)
                }
            },
            deselectAll: function(isOnePage) {
                this._resetFocusedItemIndex();
                if (isOnePage) {
                    return this._onePageSelectAll(true)
                } else {
                    return this.selectedItemKeys([], true, true, true)
                }
            },
            _onePageSelectAll: function(isDeselect) {
                var items = this._selectionStrategy.getSelectableItems(this.options.plainItems());
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if (this.isDataItem(item)) {
                        var itemData = this.options.getItemData(item);
                        var itemKey = this.options.keyOf(itemData);
                        var isSelected = this.isItemSelected(itemKey);
                        if (!isSelected && !isDeselect) {
                            this._addSelectedItem(itemData, itemKey)
                        }
                        if (isSelected && isDeselect) {
                            this._removeSelectedItem(itemKey)
                        }
                    }
                }
                this.onSelectionChanged();
                return (new Deferred).resolve()
            },
            getSelectAllState: function(visibleOnly) {
                return this._selectionStrategy.getSelectAllState(visibleOnly)
            }
        })
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/core.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ../../../bundles/modules/core */ 155);
        __webpack_require__( /*! ../../../integration/jquery */ 285);
        __webpack_require__( /*! ../../../integration/angular */ 492);
        __webpack_require__( /*! ../../../integration/knockout */ 504);
        __webpack_require__( /*! ../../../localization/globalize/core */ 136);
        __webpack_require__( /*! ../../../localization/globalize/message */ 513);
        __webpack_require__( /*! ../../../localization/globalize/number */ 192);
        __webpack_require__( /*! ../../../localization/globalize/date */ 514);
        __webpack_require__( /*! ../../../localization/globalize/currency */ 515);
        __webpack_require__( /*! ../../../events/click */ 19);
        __webpack_require__( /*! ../../../events/contextmenu */ 177);
        __webpack_require__( /*! ../../../events/double_click */ 137);
        __webpack_require__( /*! ../../../events/drag */ 69);
        __webpack_require__( /*! ../../../events/hold */ 95);
        __webpack_require__( /*! ../../../events/hover */ 156);
        __webpack_require__( /*! ../../../events/pointer */ 23);
        __webpack_require__( /*! ../../../events/swipe */ 183);
        __webpack_require__( /*! ../../../events/transform */ 303);
        module.exports = DevExpress
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/mobile/hide_top_overlay.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var inArray = __webpack_require__( /*! ../core/utils/array */ 14).inArray;
        var hideCallback = function() {
            var callbacks = [];
            return {
                add: function(callback) {
                    var indexOfCallback = inArray(callback, callbacks);
                    if (indexOfCallback === -1) {
                        callbacks.push(callback)
                    }
                },
                remove: function(callback) {
                    var indexOfCallback = inArray(callback, callbacks);
                    if (indexOfCallback !== -1) {
                        callbacks.splice(indexOfCallback, 1)
                    }
                },
                fire: function() {
                    var callback = callbacks.pop();
                    var result = !!callback;
                    if (result) {
                        callback()
                    }
                    return result
                },
                hasCallback: function() {
                    return callbacks.length > 0
                },
                reset: function() {
                    callbacks = []
                }
            }
        }();
        module.exports = function() {
            return hideCallback.fire()
        };
        module.exports.hideCallback = hideCallback
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/file_management/utils.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var PATH_SEPARATOR = "/";
        var getFileExtension = function(path) {
            var index = path.lastIndexOf(".");
            return index !== -1 ? path.substr(index) : ""
        };
        var getName = function(path) {
            var index = path.lastIndexOf(PATH_SEPARATOR);
            return index !== -1 ? path.substr(index + PATH_SEPARATOR.length) : path
        };
        var getParentPath = function(path) {
            var index = path.lastIndexOf(PATH_SEPARATOR);
            return index !== -1 ? path.substr(0, index) : ""
        };
        var getPathParts = function(path, includeFullPath) {
            if (!path || "/" === path) {
                return []
            }
            var result = [];
            var pathPart = "";
            for (var i = 0; i < path.length; i++) {
                var char = path.charAt(i);
                if (char === PATH_SEPARATOR) {
                    var nextChar = path.charAt(i + 1);
                    if (nextChar !== PATH_SEPARATOR) {
                        if (pathPart) {
                            result.push(pathPart);
                            pathPart = ""
                        }
                        char = nextChar
                    }
                    i++
                }
                pathPart += char
            }
            if (pathPart) {
                result.push(pathPart)
            }
            if (includeFullPath) {
                for (var _i = 0; _i < result.length; _i++) {
                    result[_i] = pathCombine(0 === _i ? "" : result[_i - 1], getEscapedFileName(result[_i]))
                }
            }
            return result
        };
        var getEscapedFileName = function(fileName) {
            return fileName.replace(/\//g, "//")
        };
        var pathCombine = function() {
            var result = "";
            (0, _iterator.each)(arguments, function(_, arg) {
                if (arg) {
                    if (result) {
                        result += PATH_SEPARATOR
                    }
                    result += arg
                }
            });
            return result
        };
        module.exports.getFileExtension = getFileExtension;
        module.exports.getName = getName;
        module.exports.getParentPath = getParentPath;
        module.exports.getPathParts = getPathParts;
        module.exports.getEscapedFileName = getEscapedFileName;
        module.exports.pathCombine = pathCombine;
        module.exports.PATH_SEPARATOR = PATH_SEPARATOR
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/file_management/errors.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ErrorCode = {
            NoAccess: 0,
            FileExists: 1,
            FileNotFound: 2,
            DirectoryExists: 3,
            DirectoryNotFound: 4,
            WrongFileExtension: 5,
            MaxFileSizeExceeded: 6,
            InvalidSymbols: 7,
            Other: 32767
        };
        module.exports = ErrorCode
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/dialog.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component = __webpack_require__( /*! ../core/component */ 115);
        var _component2 = _interopRequireDefault(_component);
        var _action = __webpack_require__( /*! ../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _config = __webpack_require__( /*! ../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _view_port = __webpack_require__( /*! ../core/utils/view_port */ 76);
        var _message = __webpack_require__( /*! ../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ./widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _popup = __webpack_require__( /*! ./popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var window = (0, _window.getWindow)();
        var DEFAULT_BUTTON = {
            text: "OK",
            onClick: function() {
                return true
            }
        };
        var DX_DIALOG_CLASSNAME = "dx-dialog";
        var DX_DIALOG_WRAPPER_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-wrapper");
        var DX_DIALOG_ROOT_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-root");
        var DX_DIALOG_CONTENT_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-content");
        var DX_DIALOG_MESSAGE_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-message");
        var DX_DIALOG_BUTTONS_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-buttons");
        var DX_DIALOG_BUTTON_CLASSNAME = "".concat(DX_DIALOG_CLASSNAME, "-button");
        var DX_BUTTON_CLASSNAME = "dx-button";
        var FakeDialogComponent = _component2.default.inherit({
            ctor: function(element, options) {
                this.callBase(options)
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        width: 276
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        lWidth: "60%",
                        pWidth: "80%"
                    }
                }])
            }
        });
        exports.FakeDialogComponent = FakeDialogComponent;
        exports.title = "";
        exports.custom = function(options) {
            var deferred = new _deferred.Deferred;
            var defaultOptions = (new FakeDialogComponent).option();
            options = (0, _extend.extend)(defaultOptions, options);
            var $element = (0, _renderer2.default)("<div>").addClass(DX_DIALOG_CLASSNAME).appendTo((0, _view_port.value)());
            var isMessageDefined = "message" in options;
            var isMessageHtmlDefined = "messageHtml" in options;
            if (isMessageDefined) {
                _ui2.default.log("W1013")
            }
            var messageHtml = String(isMessageHtmlDefined ? options.messageHtml : options.message);
            var $message = (0, _renderer2.default)("<div>").addClass(DX_DIALOG_MESSAGE_CLASSNAME).html(messageHtml);
            var popupToolbarItems = [];
            var toolbarItemsOption = options.toolbarItems;
            if (toolbarItemsOption) {
                _ui2.default.log("W0001", "DevExpress.ui.dialog", "toolbarItems", "16.2", "Use the 'buttons' option instead")
            } else {
                toolbarItemsOption = options.buttons
            }(0, _iterator.each)(toolbarItemsOption || [DEFAULT_BUTTON], function() {
                var action = new _action2.default(this.onClick, {
                    context: popupInstance
                });
                popupToolbarItems.push({
                    toolbar: "bottom",
                    location: _devices2.default.current().android ? "after" : "center",
                    widget: "dxButton",
                    options: (0, _extend.extend)({}, this, {
                        onClick: function() {
                            var result = action.execute.apply(action, arguments);
                            hide(result)
                        }
                    })
                })
            });
            var popupInstance = new _popup2.default($element, (0, _extend.extend)({
                title: options.title || exports.title,
                showTitle: (0, _common.ensureDefined)(options.showTitle, true),
                dragEnabled: (0, _common.ensureDefined)(options.dragEnabled, true),
                height: "auto",
                width: function() {
                    var isPortrait = (0, _renderer2.default)(window).height() > (0, _renderer2.default)(window).width();
                    var key = (isPortrait ? "p" : "l") + "Width";
                    var widthOption = Object.prototype.hasOwnProperty.call(options, key) ? options[key] : options.width;
                    return (0, _type.isFunction)(widthOption) ? widthOption() : widthOption
                },
                showCloseButton: options.showCloseButton || false,
                ignoreChildEvents: false,
                onContentReady: function(args) {
                    args.component.$content().addClass(DX_DIALOG_CONTENT_CLASSNAME).append($message)
                },
                onShowing: function(e) {
                    e.component.bottomToolbar().addClass(DX_DIALOG_BUTTONS_CLASSNAME).find(".".concat(DX_BUTTON_CLASSNAME)).addClass(DX_DIALOG_BUTTON_CLASSNAME);
                    (0, _dom.resetActiveElement)()
                },
                onShown: function(e) {
                    var $firstButton = e.component.bottomToolbar().find(".".concat(DX_BUTTON_CLASSNAME)).first();
                    (0, _events_engine.trigger)($firstButton, "focus")
                },
                onHiding: function() {
                    deferred.reject()
                },
                toolbarItems: popupToolbarItems,
                animation: {
                    show: {
                        type: "pop",
                        duration: 400
                    },
                    hide: {
                        type: "pop",
                        duration: 400,
                        to: {
                            opacity: 0,
                            scale: 0
                        },
                        from: {
                            opacity: 1,
                            scale: 1
                        }
                    }
                },
                rtlEnabled: (0, _config2.default)().rtlEnabled,
                boundaryOffset: {
                    h: 10,
                    v: 0
                }
            }, options.popupOptions));
            popupInstance._wrapper().addClass(DX_DIALOG_WRAPPER_CLASSNAME);
            if (options.position) {
                popupInstance.option("position", options.position)
            }
            popupInstance._wrapper().addClass(DX_DIALOG_ROOT_CLASSNAME);

            function show() {
                popupInstance.show();
                return deferred.promise()
            }

            function hide(value) {
                deferred.resolve(value);
                popupInstance.hide().done(function() {
                    popupInstance.$element().remove()
                })
            }
            return {
                show: show,
                hide: hide
            }
        };
        exports.alert = function(messageHtml, title, showTitle) {
            var options = (0, _type.isPlainObject)(messageHtml) ? messageHtml : {
                title: title,
                messageHtml: messageHtml,
                showTitle: showTitle,
                dragEnabled: showTitle
            };
            return exports.custom(options).show()
        };
        exports.confirm = function(messageHtml, title, showTitle) {
            var options = (0, _type.isPlainObject)(messageHtml) ? messageHtml : {
                title: title,
                messageHtml: messageHtml,
                showTitle: showTitle,
                buttons: [{
                    text: _message2.default.format("Yes"),
                    onClick: function() {
                        return true
                    }
                }, {
                    text: _message2.default.format("No"),
                    onClick: function() {
                        return false
                    }
                }],
                dragEnabled: showTitle
            };
            return exports.custom(options).show()
        }
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/action_sheet.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var Button = __webpack_require__( /*! ./button */ 37);
        var CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var Popup = __webpack_require__( /*! ./popup */ 44);
        var Popover = __webpack_require__( /*! ./popover */ 119);
        var BindableTemplate = __webpack_require__( /*! ../core/templates/bindable_template */ 59).BindableTemplate;
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var ACTION_SHEET_CLASS = "dx-actionsheet";
        var ACTION_SHEET_CONTAINER_CLASS = "dx-actionsheet-container";
        var ACTION_SHEET_POPUP_WRAPPER_CLASS = "dx-actionsheet-popup-wrapper";
        var ACTION_SHEET_POPOVER_WRAPPER_CLASS = "dx-actionsheet-popover-wrapper";
        var ACTION_SHEET_CANCEL_BUTTON_CLASS = "dx-actionsheet-cancel";
        var ACTION_SHEET_ITEM_CLASS = "dx-actionsheet-item";
        var ACTION_SHEET_ITEM_DATA_KEY = "dxActionSheetItemData";
        var ACTION_SHEET_WITHOUT_TITLE_CLASS = "dx-actionsheet-without-title";
        var ActionSheet = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    usePopover: false,
                    target: null,
                    title: "",
                    showTitle: true,
                    showCancelButton: true,
                    cancelText: messageLocalization.format("Cancel"),
                    onCancelClick: null,
                    visible: false,
                    noDataText: "",
                    focusStateEnabled: false,
                    selectionByClick: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios",
                        tablet: true
                    },
                    options: {
                        usePopover: true
                    }
                }])
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    item: new BindableTemplate(function($container, data) {
                        var button = new Button($("<div>"), extend({
                            onClick: data && data.click
                        }, data));
                        $container.append(button.$element())
                    }, ["disabled", "icon", "text", "type", "onClick", "click"], this.option("integrationOptions.watchMethod"))
                })
            },
            _itemContainer: function() {
                return this._$itemContainer
            },
            _itemClass: function() {
                return ACTION_SHEET_ITEM_CLASS
            },
            _itemDataKey: function() {
                return ACTION_SHEET_ITEM_DATA_KEY
            },
            _toggleVisibility: noop,
            _renderDimensions: noop,
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(ACTION_SHEET_CLASS);
                this._createItemContainer()
            },
            _render: function() {
                this._renderPopup()
            },
            _createItemContainer: function() {
                this._$itemContainer = $("<div>").addClass(ACTION_SHEET_CONTAINER_CLASS);
                this._renderDisabled()
            },
            _renderDisabled: function() {
                this._$itemContainer.toggleClass("dx-state-disabled", this.option("disabled"))
            },
            _renderPopup: function() {
                this._$popup = $("<div>").appendTo(this.$element());
                this._isPopoverMode() ? this._createPopover() : this._createPopup();
                this._renderPopupTitle();
                this._mapPopupOption("visible")
            },
            _mapPopupOption: function(optionName) {
                this._popup && this._popup.option(optionName, this.option(optionName))
            },
            _isPopoverMode: function() {
                return this.option("usePopover") && this.option("target")
            },
            _renderPopupTitle: function() {
                this._mapPopupOption("showTitle");
                this._popup && this._popup._wrapper().toggleClass(ACTION_SHEET_WITHOUT_TITLE_CLASS, !this.option("showTitle"))
            },
            _clean: function() {
                if (this._$popup) {
                    this._$popup.remove()
                }
                this.callBase()
            },
            _overlayConfig: function() {
                return {
                    onInitialized: function(args) {
                        this._popup = args.component
                    }.bind(this),
                    disabled: false,
                    showTitle: true,
                    title: this.option("title"),
                    deferRendering: !window.angular,
                    onContentReady: this._popupContentReadyAction.bind(this),
                    onHidden: this.hide.bind(this)
                }
            },
            _createPopover: function() {
                this._createComponent(this._$popup, Popover, extend(this._overlayConfig(), {
                    width: this.option("width") || 200,
                    height: this.option("height") || "auto",
                    target: this.option("target")
                }));
                this._popup._wrapper().addClass(ACTION_SHEET_POPOVER_WRAPPER_CLASS)
            },
            _createPopup: function() {
                this._createComponent(this._$popup, Popup, extend(this._overlayConfig(), {
                    dragEnabled: false,
                    width: this.option("width") || "100%",
                    height: this.option("height") || "auto",
                    showCloseButton: false,
                    position: {
                        my: "bottom",
                        at: "bottom",
                        of: window
                    },
                    animation: {
                        show: {
                            type: "slide",
                            duration: 400,
                            from: {
                                position: {
                                    my: "top",
                                    at: "bottom",
                                    of: window
                                }
                            },
                            to: {
                                position: {
                                    my: "bottom",
                                    at: "bottom",
                                    of: window
                                }
                            }
                        },
                        hide: {
                            type: "slide",
                            duration: 400,
                            from: {
                                position: {
                                    my: "bottom",
                                    at: "bottom",
                                    of: window
                                }
                            },
                            to: {
                                position: {
                                    my: "top",
                                    at: "bottom",
                                    of: window
                                }
                            }
                        }
                    }
                }));
                this._popup._wrapper().addClass(ACTION_SHEET_POPUP_WRAPPER_CLASS)
            },
            _popupContentReadyAction: function() {
                this._popup.$content().append(this._$itemContainer);
                this._attachClickEvent();
                this._attachHoldEvent();
                this._prepareContent();
                this._renderContent();
                this._renderCancelButton()
            },
            _renderCancelButton: function() {
                if (this._isPopoverMode()) {
                    return
                }
                if (this._$cancelButton) {
                    this._$cancelButton.remove()
                }
                if (this.option("showCancelButton")) {
                    var cancelClickAction = this._createActionByOption("onCancelClick") || noop;
                    var that = this;
                    this._$cancelButton = $("<div>").addClass(ACTION_SHEET_CANCEL_BUTTON_CLASS).appendTo(this._popup && this._popup.$content());
                    this._createComponent(this._$cancelButton, Button, {
                        disabled: false,
                        text: this.option("cancelText"),
                        onClick: function(e) {
                            var hidingArgs = {
                                event: e,
                                cancel: false
                            };
                            cancelClickAction(hidingArgs);
                            if (!hidingArgs.cancel) {
                                that.hide()
                            }
                        },
                        integrationOptions: {}
                    })
                }
            },
            _attachItemClickEvent: noop,
            _itemClickHandler: function(e) {
                this.callBase(e);
                if (!$(e.target).is(".dx-state-disabled, .dx-state-disabled *")) {
                    this.hide()
                }
            },
            _itemHoldHandler: function(e) {
                this.callBase(e);
                if (!$(e.target).is(".dx-state-disabled, .dx-state-disabled *")) {
                    this.hide()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                    case "height":
                    case "visible":
                    case "title":
                        this._mapPopupOption(args.name);
                        break;
                    case "disabled":
                        this._renderDisabled();
                        break;
                    case "showTitle":
                        this._renderPopupTitle();
                        break;
                    case "showCancelButton":
                    case "onCancelClick":
                    case "cancelText":
                        this._renderCancelButton();
                        break;
                    case "target":
                    case "usePopover":
                    case "items":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            toggle: function(showing) {
                var that = this;
                var d = new Deferred;
                that._popup.toggle(showing).done(function() {
                    that.option("visible", showing);
                    d.resolveWith(that)
                });
                return d.promise()
            },
            show: function() {
                return this.toggle(true)
            },
            hide: function() {
                return this.toggle(false)
            }
        });
        registerComponent("dxActionSheet", ActionSheet);
        module.exports = ActionSheet
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_editor/ui.drop_down_list.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var Guid = __webpack_require__( /*! ../../core/guid */ 36);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var DropDownEditor = __webpack_require__( /*! ./ui.drop_down_editor */ 178);
        var List = __webpack_require__( /*! ../list */ 104);
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var dataQuery = __webpack_require__( /*! ../../data/query */ 45);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var DataExpressionMixin = __webpack_require__( /*! ../editor/ui.data_expression */ 232);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var ChildDefaultTemplate = __webpack_require__( /*! ../../core/templates/child_default_template */ 141).ChildDefaultTemplate;
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var DataConverterMixin = __webpack_require__( /*! ../shared/grouped_data_converter_mixin */ 304).default;
        var LIST_ITEM_SELECTOR = ".dx-list-item";
        var LIST_ITEM_DATA_KEY = "dxListItemData";
        var DROPDOWNLIST_POPUP_WRAPPER_CLASS = "dx-dropdownlist-popup-wrapper";
        var SKIP_GESTURE_EVENT_CLASS = "dx-skip-gesture-event";
        var SEARCH_EVENT = "input";
        var SEARCH_MODES = ["startswith", "contains", "endwith", "notcontains"];
        var DropDownList = DropDownEditor.inherit({
            _supportedKeys: function() {
                var parent = this.callBase();
                return extend({}, parent, {
                    tab: function(e) {
                        if (this._allowSelectItemByTab()) {
                            this._saveValueChangeEvent(e);
                            var $focusedItem = $(this._list.option("focusedElement"));
                            $focusedItem.length && this._setSelectedElement($focusedItem)
                        }
                        parent.tab.apply(this, arguments)
                    },
                    space: commonUtils.noop,
                    home: commonUtils.noop,
                    end: commonUtils.noop
                })
            },
            _allowSelectItemByTab: function() {
                return this.option("opened") && "instantly" === this.option("applyValueMode")
            },
            _setSelectedElement: function($element) {
                var value = this._valueGetter(this._list._getItemData($element));
                this._setValue(value)
            },
            _setValue: function(value) {
                this.option("value", value)
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), extend(DataExpressionMixin._dataExpressionDefaultOptions(), {
                    displayValue: void 0,
                    searchEnabled: false,
                    searchMode: "contains",
                    searchTimeout: 500,
                    minSearchLength: 0,
                    searchExpr: null,
                    valueChangeEvent: "input change keyup",
                    selectedItem: null,
                    noDataText: messageLocalization.format("dxCollectionWidget-noDataText"),
                    onSelectionChanged: null,
                    onItemClick: commonUtils.noop,
                    showDataBeforeSearch: false,
                    grouped: false,
                    groupTemplate: "group",
                    popupPosition: {
                        my: "left top",
                        at: "left bottom",
                        offset: {
                            h: 0,
                            v: 0
                        },
                        collision: "flip"
                    },
                    wrapItemText: false,
                    popupWidthExtension: 0
                }))
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                v: -1
                            }
                        }
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        buttonsLocation: "bottom center"
                    }
                }])
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    value: true,
                    selectedItem: true,
                    displayValue: true
                })
            },
            _init: function() {
                this.callBase();
                this._initDataExpressions();
                this._initActions();
                this._setListDataSource();
                this._validateSearchMode();
                this._clearSelectedItem();
                this._initItems()
            },
            _initItems: function() {
                var items = this.option().items;
                if (items && !items.length && this._dataSource) {
                    this.option().items = this._dataSource.items()
                }
            },
            _initActions: function() {
                this._initContentReadyAction();
                this._initSelectionChangedAction();
                this._initItemClickAction()
            },
            _initContentReadyAction: function() {
                this._contentReadyAction = this._createActionByOption("onContentReady", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _initSelectionChangedAction: function() {
                this._selectionChangedAction = this._createActionByOption("onSelectionChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _initItemClickAction: function() {
                this._itemClickAction = this._createActionByOption("onItemClick")
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    item: new ChildDefaultTemplate("item")
                })
            },
            _saveFocusOnWidget: function(e) {
                if (this._list && this._list.initialOption("focusStateEnabled")) {
                    this._focusInput()
                }
            },
            _fitIntoRange: function(value, start, end) {
                if (value > end) {
                    return start
                }
                if (value < start) {
                    return end
                }
                return value
            },
            _items: function() {
                var items = this._getPlainItems(!this._list && this._dataSource.items());
                var availableItems = new dataQuery(items).filter("disabled", "<>", true).toArray();
                return availableItems
            },
            _calcNextItem: function(step) {
                var items = this._items();
                var nextIndex = this._fitIntoRange(this._getSelectedIndex() + step, 0, items.length - 1);
                return items[nextIndex]
            },
            _getSelectedIndex: function() {
                var items = this._items();
                var selectedItem = this.option("selectedItem");
                var result = -1;
                each(items, function(index, item) {
                    if (this._isValueEquals(item, selectedItem)) {
                        result = index;
                        return false
                    }
                }.bind(this));
                return result
            },
            _createPopup: function() {
                this.callBase();
                this._updateCustomBoundaryContainer();
                this._popup._wrapper().addClass(this._popupWrapperClass());
                var $popupContent = this._popup.$content();
                eventsEngine.off($popupContent, "mouseup");
                eventsEngine.on($popupContent, "mouseup", this._saveFocusOnWidget.bind(this));
                var that = this;
                this._popup.on({
                    shown: function() {
                        that.$element().addClass(SKIP_GESTURE_EVENT_CLASS)
                    },
                    hidden: function() {
                        that.$element().removeClass(SKIP_GESTURE_EVENT_CLASS)
                    }
                })
            },
            _updateCustomBoundaryContainer: function() {
                var customContainer = this.option("dropDownOptions.container");
                var $container = customContainer && $(customContainer);
                if ($container && $container.length && !typeUtils.isWindow($container.get(0))) {
                    var $containerWithParents = [].slice.call($container.parents());
                    $containerWithParents.unshift($container.get(0));
                    each($containerWithParents, function(i, parent) {
                        if (parent === $("body").get(0)) {
                            return false
                        } else {
                            if ("hidden" === window.getComputedStyle(parent).overflowY) {
                                this._$customBoundaryContainer = $(parent);
                                return false
                            }
                        }
                    }.bind(this))
                }
            },
            _popupWrapperClass: function() {
                return DROPDOWNLIST_POPUP_WRAPPER_CLASS
            },
            _renderInputValue: function() {
                var value = this._getCurrentValue();
                return this._loadInputValue(value, this._setSelectedItem.bind(this)).always(this.callBase.bind(this, value))
            },
            _loadInputValue: function(value, callback) {
                return this._loadItem(value).always(callback)
            },
            _getItemFromPlain: function(value, cache) {
                var plainItems;
                var selectedItem;
                if (cache && "object" !== _typeof(value)) {
                    if (!cache.itemByValue) {
                        cache.itemByValue = {};
                        plainItems = this._getPlainItems();
                        plainItems.forEach(function(item) {
                            cache.itemByValue[this._valueGetter(item)] = item
                        }, this)
                    }
                    selectedItem = cache.itemByValue[value]
                }
                if (!selectedItem) {
                    plainItems = this._getPlainItems();
                    selectedItem = commonUtils.grep(plainItems, function(item) {
                        return this._isValueEquals(this._valueGetter(item), value)
                    }.bind(this))[0]
                }
                return selectedItem
            },
            _loadItem: function(value, cache) {
                var selectedItem = this._getItemFromPlain(value, cache);
                return void 0 !== selectedItem ? (new Deferred).resolve(selectedItem).promise() : this._loadValue(value)
            },
            _getPlainItems: function(items) {
                var plainItems = [];
                items = items || this.option("items") || this._dataSource.items() || [];
                for (var i = 0; i < items.length; i++) {
                    if (items[i] && items[i].items) {
                        plainItems = plainItems.concat(items[i].items)
                    } else {
                        plainItems.push(items[i])
                    }
                }
                return plainItems
            },
            _setSelectedItem: function(item) {
                var displayValue = this._displayValue(item);
                this.option("selectedItem", commonUtils.ensureDefined(item, null));
                this.option("displayValue", displayValue)
            },
            _displayValue: function(item) {
                return this._displayGetter(item)
            },
            _refreshSelected: function() {
                var cache = {};
                this._listItemElements().each(function(_, itemElement) {
                    var $itemElement = $(itemElement);
                    var itemValue = this._valueGetter($itemElement.data(LIST_ITEM_DATA_KEY));
                    var isItemSelected = this._isSelectedValue(itemValue, cache);
                    if (isItemSelected) {
                        this._list.selectItem($itemElement)
                    } else {
                        this._list.unselectItem($itemElement)
                    }
                }.bind(this))
            },
            _popupShownHandler: function() {
                this.callBase();
                this._setFocusPolicy()
            },
            _setFocusPolicy: function() {
                if (!this.option("focusStateEnabled") || !this._list) {
                    return
                }
                this._list.option("focusedElement", null)
            },
            _isSelectedValue: function(value) {
                return this._isValueEquals(value, this.option("value"))
            },
            _validateSearchMode: function() {
                var searchMode = this.option("searchMode");
                var normalizedSearchMode = searchMode.toLowerCase();
                if (inArray(normalizedSearchMode, SEARCH_MODES) < 0) {
                    throw errors.Error("E1019", searchMode)
                }
            },
            _clearSelectedItem: function() {
                this.option("selectedItem", null)
            },
            _processDataSourceChanging: function() {
                this._setListDataSource();
                this._renderInputValue().fail(function() {
                    if (this._isCustomValueAllowed()) {
                        return
                    }
                    this._clearSelectedItem()
                }.bind(this))
            },
            _isCustomValueAllowed: function() {
                return this.option("displayCustomValue")
            },
            reset: function() {
                this.callBase();
                this._clearFilter();
                this._clearSelectedItem()
            },
            _listItemElements: function() {
                return this._$list ? this._$list.find(LIST_ITEM_SELECTOR) : $()
            },
            _popupConfig: function() {
                return extend(this.callBase(), {
                    templatesRenderAsynchronously: false,
                    width: this.option("width"),
                    height: "auto",
                    autoResizeEnabled: false,
                    maxHeight: this._getMaxHeight.bind(this)
                })
            },
            _renderPopupContent: function() {
                this.callBase();
                this._renderList()
            },
            _getKeyboardListeners: function() {
                var canListHaveFocus = this._canListHaveFocus();
                return this.callBase().concat([!canListHaveFocus && this._list])
            },
            _fireContentReadyAction: commonUtils.noop,
            _setAriaTargetForList: function() {
                this._list._getAriaTarget = this._getAriaTarget.bind(this)
            },
            _renderList: function() {
                this._listId = "dx-" + (new Guid)._value;
                var $list = this._$list = $("<div>").attr("id", this._listId).appendTo(this._popup.$content());
                this._list = this._createComponent($list, List, this._listConfig());
                this._refreshList();
                this._setAriaTargetForList();
                this._list.option("_listAttributes", {
                    role: "combobox"
                });
                this._renderPreventBlur(this._$list)
            },
            _renderPreventBlur: function($target) {
                var eventName = eventUtils.addNamespace("mousedown", "dxDropDownList");
                eventsEngine.off($target, eventName);
                eventsEngine.on($target, eventName, function(e) {
                    e.preventDefault()
                }.bind(this))
            },
            _renderOpenedState: function() {
                this.callBase();
                var opened = this.option("opened") || void 0;
                this.setAria({
                    activedescendant: opened && this._list.getFocusedItemId(),
                    controls: opened && this._listId
                })
            },
            _setDefaultAria: function() {
                this.setAria({
                    haspopup: "listbox",
                    autocomplete: "list"
                })
            },
            _refreshList: function() {
                if (this._list && this._shouldRefreshDataSource()) {
                    this._setListDataSource()
                }
            },
            _shouldRefreshDataSource: function() {
                var dataSourceProvided = !!this._list.option("dataSource");
                return dataSourceProvided !== this._needPassDataSourceToList()
            },
            _isDesktopDevice: function() {
                return "desktop" === devices.real().deviceType
            },
            _listConfig: function() {
                var options = {
                    selectionMode: "single",
                    _templates: this.option("_templates"),
                    templateProvider: this.option("templateProvider"),
                    noDataText: this.option("noDataText"),
                    grouped: this.option("grouped"),
                    wrapItemText: this.option("wrapItemText"),
                    onContentReady: this._listContentReadyHandler.bind(this),
                    itemTemplate: this.option("itemTemplate"),
                    indicateLoading: false,
                    keyExpr: this._getCollectionKeyExpr(),
                    displayExpr: this._displayGetterExpr(),
                    groupTemplate: this.option("groupTemplate"),
                    onItemClick: this._listItemClickAction.bind(this),
                    dataSource: this._getDataSource(),
                    hoverStateEnabled: this._isDesktopDevice() ? this.option("hoverStateEnabled") : false,
                    focusStateEnabled: this._isDesktopDevice() ? this.option("focusStateEnabled") : false
                };
                if (!this._canListHaveFocus()) {
                    options.tabIndex = null
                }
                return options
            },
            _canListHaveFocus: function() {
                return false
            },
            _getDataSource: function() {
                return this._needPassDataSourceToList() ? this._dataSource : null
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _getGroupedOption: function() {
                return this.option("grouped")
            },
            _dataSourceFromUrlLoadMode: function() {
                return "raw"
            },
            _listContentReadyHandler: function() {
                this._list = this._list || this._$list.dxList("instance");
                if (!this.option("deferRendering")) {
                    this._refreshSelected()
                }
                this._dimensionChanged();
                this._contentReadyAction()
            },
            _setListOption: function(optionName, value) {
                this._setWidgetOption("_list", arguments)
            },
            _listItemClickAction: function(e) {
                this._listItemClickHandler(e);
                this._itemClickAction(e)
            },
            _listItemClickHandler: commonUtils.noop,
            _setListDataSource: function() {
                if (!this._list) {
                    return
                }
                this._setListOption("dataSource", this._getDataSource());
                if (!this._needPassDataSourceToList()) {
                    this._setListOption("items", [])
                }
            },
            _needPassDataSourceToList: function() {
                return this.option("showDataBeforeSearch") || this._isMinSearchLengthExceeded()
            },
            _isMinSearchLengthExceeded: function() {
                return this._searchValue().toString().length >= this.option("minSearchLength")
            },
            _needClearFilter: function() {
                return this._canKeepDataSource() ? false : this._needPassDataSourceToList()
            },
            _canKeepDataSource: function() {
                var _this$_dataSource;
                var isMinSearchLengthExceeded = this._isMinSearchLengthExceeded();
                return (null === (_this$_dataSource = this._dataSource) || void 0 === _this$_dataSource ? void 0 : _this$_dataSource.isLoaded()) && this.option("showDataBeforeSearch") && this.option("minSearchLength") && !isMinSearchLengthExceeded && !this._isLastMinSearchLengthExceeded
            },
            _searchValue: function() {
                return this._input().val() || ""
            },
            _getSearchEvent: function() {
                return eventUtils.addNamespace(SEARCH_EVENT, this.NAME + "Search")
            },
            _getSetFocusPolicyEvent: function() {
                return eventUtils.addNamespace("input", this.NAME + "FocusPolicy")
            },
            _renderEvents: function() {
                this.callBase();
                eventsEngine.on(this._input(), this._getSetFocusPolicyEvent(), this._setFocusPolicy.bind(this));
                if (this._shouldRenderSearchEvent()) {
                    eventsEngine.on(this._input(), this._getSearchEvent(), this._searchHandler.bind(this))
                }
            },
            _shouldRenderSearchEvent: function() {
                return this.option("searchEnabled")
            },
            _refreshEvents: function() {
                eventsEngine.off(this._input(), this._getSearchEvent());
                eventsEngine.off(this._input(), this._getSetFocusPolicyEvent());
                this.callBase()
            },
            _searchHandler: function() {
                if (!this._isMinSearchLengthExceeded()) {
                    this._searchCanceled();
                    return
                }
                var searchTimeout = this.option("searchTimeout");
                if (searchTimeout) {
                    this._clearSearchTimer();
                    this._searchTimer = setTimeout(this._searchDataSource.bind(this), searchTimeout)
                } else {
                    this._searchDataSource()
                }
            },
            _searchCanceled: function() {
                this._clearSearchTimer();
                if (this._needClearFilter()) {
                    this._filterDataSource(null)
                }
                this._refreshList()
            },
            _searchDataSource: function() {
                this._filterDataSource(this._searchValue())
            },
            _filterDataSource: function(searchValue) {
                this._clearSearchTimer();
                var dataSource = this._dataSource;
                if (dataSource) {
                    dataSource.searchExpr(this.option("searchExpr") || this._displayGetterExpr());
                    dataSource.searchOperation(this.option("searchMode"));
                    dataSource.searchValue(searchValue);
                    dataSource.load().done(this._dataSourceFiltered.bind(this, searchValue))
                }
            },
            _clearFilter: function() {
                var dataSource = this._dataSource;
                dataSource && dataSource.searchValue() && dataSource.searchValue(null)
            },
            _dataSourceFiltered: function() {
                this._isLastMinSearchLengthExceeded = this._isMinSearchLengthExceeded();
                this._refreshList();
                this._refreshPopupVisibility()
            },
            _shouldOpenPopup: function() {
                return this._hasItemsToShow()
            },
            _refreshPopupVisibility: function() {
                if (this.option("readOnly") || !this._searchValue()) {
                    return
                }
                var shouldOpenPopup = this._shouldOpenPopup();
                if (shouldOpenPopup && !this._isFocused()) {
                    return
                }
                this.option("opened", shouldOpenPopup);
                if (shouldOpenPopup) {
                    this._dimensionChanged()
                }
            },
            _dataSourceChangedHandler: function(newItems) {
                if (0 === this._dataSource.pageIndex()) {
                    this.option().items = newItems
                } else {
                    this.option().items = this.option().items.concat(newItems)
                }
            },
            _hasItemsToShow: function() {
                var resultItems = this._dataSource && this._dataSource.items() || [];
                var resultAmount = resultItems.length;
                var isMinSearchLengthExceeded = this._needPassDataSourceToList();
                return !!(isMinSearchLengthExceeded && resultAmount)
            },
            _clearSearchTimer: function() {
                clearTimeout(this._searchTimer);
                delete this._searchTimer
            },
            _popupShowingHandler: function() {
                this._dimensionChanged()
            },
            _dimensionChanged: function() {
                this._popup && this._updatePopupDimensions()
            },
            _updatePopupDimensions: function() {
                this._updatePopupWidth();
                this._updatePopupHeight()
            },
            _updatePopupWidth: function() {
                this._setPopupOption("width", this.$element().outerWidth() + this.option("popupWidthExtension"))
            },
            _needPopupRepaint: function() {
                if (!this._dataSource) {
                    return false
                }
                var currentPageIndex = this._dataSource.pageIndex();
                var needRepaint = typeUtils.isDefined(this._pageIndex) && currentPageIndex <= this._pageIndex;
                this._pageIndex = currentPageIndex;
                return needRepaint
            },
            _updatePopupHeight: function() {
                if (this._needPopupRepaint()) {
                    this._popup.repaint()
                }
                this._list && this._list.updateDimensions()
            },
            _getMaxHeight: function() {
                var $element = this.$element();
                var $customBoundaryContainer = this._$customBoundaryContainer;
                var offsetTop = $element.offset().top - ($customBoundaryContainer ? $customBoundaryContainer.offset().top : 0);
                var windowHeight = $(window).outerHeight();
                var containerHeight = $customBoundaryContainer ? Math.min($customBoundaryContainer.outerHeight(), windowHeight) : windowHeight;
                var maxHeight = Math.max(offsetTop, containerHeight - offsetTop - $element.outerHeight());
                return Math.min(.5 * containerHeight, maxHeight)
            },
            _clean: function() {
                if (this._list) {
                    delete this._list
                }
                delete this._isLastMinSearchLengthExceeded;
                this.callBase()
            },
            _dispose: function() {
                this._clearSearchTimer();
                this.callBase()
            },
            _setCollectionWidgetOption: function() {
                this._setListOption.apply(this, arguments)
            },
            _setSubmitValue: function() {
                var value = this.option("value");
                var submitValue = this._shouldUseDisplayValue(value) ? this._displayGetter(value) : value;
                this._getSubmitElement().val(submitValue)
            },
            _shouldUseDisplayValue: function(value) {
                return "this" === this.option("valueExpr") && typeUtils.isObject(value)
            },
            _optionChanged: function(args) {
                this._dataExpressionOptionChanged(args);
                switch (args.name) {
                    case "hoverStateEnabled":
                    case "focusStateEnabled":
                        this._isDesktopDevice() && this._setListOption(args.name, args.value);
                        this.callBase(args);
                        break;
                    case "items":
                        if (!this.option("dataSource")) {
                            this._processDataSourceChanging()
                        }
                        break;
                    case "dataSource":
                        this._processDataSourceChanging();
                        break;
                    case "valueExpr":
                        this._renderValue();
                        this._setListOption("keyExpr", this._getCollectionKeyExpr());
                        break;
                    case "displayExpr":
                        this._renderValue();
                        this._setListOption("displayExpr", this._displayGetterExpr());
                        break;
                    case "searchMode":
                        this._validateSearchMode();
                        break;
                    case "minSearchLength":
                        this._refreshList();
                        break;
                    case "searchEnabled":
                    case "showDataBeforeSearch":
                    case "searchExpr":
                        this._invalidate();
                        break;
                    case "onContentReady":
                        this._initContentReadyAction();
                        break;
                    case "onSelectionChanged":
                        this._initSelectionChangedAction();
                        break;
                    case "onItemClick":
                        this._initItemClickAction();
                        break;
                    case "grouped":
                    case "groupTemplate":
                    case "wrapItemText":
                    case "noDataText":
                        this._setListOption(args.name);
                        break;
                    case "displayValue":
                        this.option("text", args.value);
                        break;
                    case "itemTemplate":
                    case "searchTimeout":
                    case "popupWidthExtension":
                        break;
                    case "selectedItem":
                        if (args.previousValue !== args.value) {
                            this._selectionChangedAction({
                                selectedItem: args.value
                            })
                        }
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(DataExpressionMixin, DataConverterMixin);
        registerComponent("dxDropDownList", DropDownList);
        module.exports = DropDownList
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.base.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var iconUtils = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 11).getPublicElement;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var compileGetter = __webpack_require__( /*! ../../core/utils/data */ 20).compileGetter;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var swipeEvents = __webpack_require__( /*! ../../events/swipe */ 183);
        var support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var ListItem = __webpack_require__( /*! ./item */ 544);
        var Button = __webpack_require__( /*! ../button */ 37);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var themes = __webpack_require__( /*! ../themes */ 32);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var ScrollView = __webpack_require__( /*! ../scroll_view */ 107);
        var deviceDependentOptions = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89).deviceDependentOptions;
        var CollectionWidget = __webpack_require__( /*! ../collection/ui.collection_widget.live_update */ 195).default;
        var BindableTemplate = __webpack_require__( /*! ../../core/templates/bindable_template */ 59).BindableTemplate;
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var DataConverterMixin = __webpack_require__( /*! ../shared/grouped_data_converter_mixin */ 304).default;
        var LIST_CLASS = "dx-list";
        var LIST_ITEM_CLASS = "dx-list-item";
        var LIST_ITEM_SELECTOR = "." + LIST_ITEM_CLASS;
        var LIST_ITEM_ICON_CONTAINER_CLASS = "dx-list-item-icon-container";
        var LIST_ITEM_ICON_CLASS = "dx-list-item-icon";
        var LIST_GROUP_CLASS = "dx-list-group";
        var LIST_GROUP_HEADER_CLASS = "dx-list-group-header";
        var LIST_GROUP_BODY_CLASS = "dx-list-group-body";
        var LIST_COLLAPSIBLE_GROUPS_CLASS = "dx-list-collapsible-groups";
        var LIST_GROUP_COLLAPSED_CLASS = "dx-list-group-collapsed";
        var LIST_GROUP_HEADER_INDICATOR_CLASS = "dx-list-group-header-indicator";
        var LIST_HAS_NEXT_CLASS = "dx-has-next";
        var LIST_NEXT_BUTTON_CLASS = "dx-list-next-button";
        var WRAP_ITEM_TEXT_CLASS = "dx-wrap-item-text";
        var SELECT_ALL_ITEM_SELECTOR = ".dx-list-select-all";
        var LIST_ITEM_DATA_KEY = "dxListItemData";
        var LIST_FEEDBACK_SHOW_TIMEOUT = 70;
        var groupItemsGetter = compileGetter("items");
        var ListBase = CollectionWidget.inherit({
            _activeStateUnit: [LIST_ITEM_SELECTOR, SELECT_ALL_ITEM_SELECTOR].join(","),
            _supportedKeys: function() {
                var that = this;
                var moveFocusPerPage = function(direction) {
                    var $item = getEdgeVisibleItem(direction);
                    var isFocusedItem = $item.is(that.option("focusedElement"));
                    if (isFocusedItem) {
                        scrollListTo($item, direction);
                        $item = getEdgeVisibleItem(direction)
                    }
                    that.option("focusedElement", getPublicElement($item));
                    that.scrollToItem($item)
                };

                function getEdgeVisibleItem(direction) {
                    var scrollTop = that.scrollTop();
                    var containerHeight = that.$element().height();
                    var $item = $(that.option("focusedElement"));
                    var isItemVisible = true;
                    if (!$item.length) {
                        return $()
                    }
                    while (isItemVisible) {
                        var $nextItem = $item[direction]();
                        if (!$nextItem.length) {
                            break
                        }
                        var nextItemLocation = $nextItem.position().top + $nextItem.outerHeight() / 2;
                        isItemVisible = nextItemLocation < containerHeight + scrollTop && nextItemLocation > scrollTop;
                        if (isItemVisible) {
                            $item = $nextItem
                        }
                    }
                    return $item
                }

                function scrollListTo($item, direction) {
                    var resultPosition = $item.position().top;
                    if ("prev" === direction) {
                        resultPosition = $item.position().top - that.$element().height() + $item.outerHeight()
                    }
                    that.scrollTo(resultPosition)
                }
                return extend(this.callBase(), {
                    leftArrow: commonUtils.noop,
                    rightArrow: commonUtils.noop,
                    pageUp: function() {
                        moveFocusPerPage("prev");
                        return false
                    },
                    pageDown: function() {
                        moveFocusPerPage("next");
                        return false
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: true,
                    pullRefreshEnabled: false,
                    scrollingEnabled: true,
                    showScrollbar: "onScroll",
                    useNativeScrolling: true,
                    bounceEnabled: true,
                    scrollByContent: true,
                    scrollByThumb: false,
                    pullingDownText: messageLocalization.format("dxList-pullingDownText"),
                    pulledDownText: messageLocalization.format("dxList-pulledDownText"),
                    refreshingText: messageLocalization.format("dxList-refreshingText"),
                    pageLoadingText: messageLocalization.format("dxList-pageLoadingText"),
                    onScroll: null,
                    onPullRefresh: null,
                    onPageLoading: null,
                    pageLoadMode: "scrollBottom",
                    nextButtonText: messageLocalization.format("dxList-nextButtonText"),
                    onItemSwipe: null,
                    grouped: false,
                    onGroupRendered: null,
                    collapsibleGroups: false,
                    groupTemplate: "group",
                    indicateLoading: true,
                    activeStateEnabled: true,
                    _itemAttributes: {
                        role: "option"
                    },
                    _listAttributes: {
                        role: "listbox"
                    },
                    useInkRipple: false,
                    wrapItemText: false,
                    showChevronExpr: function(data) {
                        return data ? data.showChevron : void 0
                    },
                    badgeExpr: function(data) {
                        return data ? data.badge : void 0
                    }
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat(deviceDependentOptions(), [{
                    device: function() {
                        return !support.nativeScrolling
                    },
                    options: {
                        useNativeScrolling: false
                    }
                }, {
                    device: function(_device) {
                        return !support.nativeScrolling && !devices.isSimulator() && "desktop" === devices.real().deviceType && "generic" === _device.platform
                    },
                    options: {
                        showScrollbar: "onHover",
                        pageLoadMode: "nextButton"
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        pullingDownText: "",
                        pulledDownText: "",
                        refreshingText: "",
                        pageLoadingText: "",
                        useInkRipple: true
                    }
                }])
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._updateLoadingState(true)
                }
            },
            _itemClass: function() {
                return LIST_ITEM_CLASS
            },
            _itemDataKey: function() {
                return LIST_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return this._$container
            },
            _refreshItemElements: function() {
                if (!this.option("grouped")) {
                    this._itemElementsCache = this._itemContainer().children(this._itemSelector())
                } else {
                    this._itemElementsCache = this._itemContainer().children("." + LIST_GROUP_CLASS).children("." + LIST_GROUP_BODY_CLASS).children(this._itemSelector())
                }
            },
            _modifyByChanges: function() {
                this.callBase.apply(this, arguments);
                this._refreshItemElements();
                this._updateLoadingState()
            },
            reorderItem: function(itemElement, toItemElement) {
                var promise = this.callBase(itemElement, toItemElement);
                return promise.done(function() {
                    this._refreshItemElements()
                })
            },
            deleteItem: function(itemElement) {
                var promise = this.callBase(itemElement);
                return promise.done(function() {
                    this._refreshItemElements()
                })
            },
            _itemElements: function() {
                return this._itemElementsCache
            },
            _itemSelectHandler: function(e) {
                if ("single" === this.option("selectionMode") && this.isItemSelected(e.currentTarget)) {
                    return
                }
                this.callBase(e)
            },
            _allowDynamicItemsAppend: function() {
                return true
            },
            _init: function() {
                this.callBase();
                this._$container = this.$element();
                this._initScrollView();
                this._feedbackShowTimeout = LIST_FEEDBACK_SHOW_TIMEOUT;
                this._createGroupRenderAction()
            },
            _scrollBottomMode: function() {
                return "scrollBottom" === this.option("pageLoadMode")
            },
            _nextButtonMode: function() {
                return "nextButton" === this.option("pageLoadMode")
            },
            _dataSourceOptions: function() {
                var scrollBottom = this._scrollBottomMode();
                var nextButton = this._nextButtonMode();
                return extend(this.callBase(), {
                    paginate: commonUtils.ensureDefined(scrollBottom || nextButton, true)
                })
            },
            _getGroupedOption: function() {
                return this.option("grouped")
            },
            _dataSourceFromUrlLoadMode: function() {
                return "raw"
            },
            _initScrollView: function() {
                var scrollingEnabled = this.option("scrollingEnabled");
                var pullRefreshEnabled = scrollingEnabled && this.option("pullRefreshEnabled");
                var autoPagingEnabled = scrollingEnabled && this._scrollBottomMode() && !!this._dataSource;
                this._scrollView = this._createComponent(this.$element(), ScrollView, {
                    disabled: this.option("disabled") || !scrollingEnabled,
                    onScroll: this._scrollHandler.bind(this),
                    onPullDown: pullRefreshEnabled ? this._pullDownHandler.bind(this) : null,
                    onReachBottom: autoPagingEnabled ? this._scrollBottomHandler.bind(this) : null,
                    showScrollbar: this.option("showScrollbar"),
                    useNative: this.option("useNativeScrolling"),
                    bounceEnabled: this.option("bounceEnabled"),
                    scrollByContent: this.option("scrollByContent"),
                    scrollByThumb: this.option("scrollByThumb"),
                    pullingDownText: this.option("pullingDownText"),
                    pulledDownText: this.option("pulledDownText"),
                    refreshingText: this.option("refreshingText"),
                    reachBottomText: this.option("pageLoadingText"),
                    useKeyboard: false
                });
                this._$container = $(this._scrollView.content());
                if (this.option("wrapItemText")) {
                    this._$container.addClass(WRAP_ITEM_TEXT_CLASS)
                }
                this._createScrollViewActions()
            },
            _createScrollViewActions: function() {
                this._scrollAction = this._createActionByOption("onScroll");
                this._pullRefreshAction = this._createActionByOption("onPullRefresh");
                this._pageLoadingAction = this._createActionByOption("onPageLoading")
            },
            _scrollHandler: function(e) {
                this._scrollAction && this._scrollAction(e)
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates({
                    group: new BindableTemplate(function($container, data) {
                        if (typeUtils.isPlainObject(data)) {
                            if (data.key) {
                                $container.text(data.key)
                            }
                        } else {
                            $container.text(String(data))
                        }
                    }, ["key"], this.option("integrationOptions.watchMethod"))
                });
                this.callBase()
            },
            _prepareDefaultItemTemplate: function(data, $container) {
                this.callBase(data, $container);
                if (data.icon) {
                    var $icon = iconUtils.getImageContainer(data.icon).addClass(LIST_ITEM_ICON_CLASS);
                    var $iconContainer = $("<div>").addClass(LIST_ITEM_ICON_CONTAINER_CLASS);
                    $iconContainer.append($icon);
                    $container.prepend($iconContainer)
                }
            },
            _getBindableFields: function() {
                return ["text", "html", "icon"]
            },
            _updateLoadingState: function(tryLoadMore) {
                var isDataLoaded = !tryLoadMore || this._isLastPage();
                var scrollBottomMode = this._scrollBottomMode();
                var stopLoading = isDataLoaded || !scrollBottomMode;
                var hideLoadIndicator = stopLoading && !this._isDataSourceLoading();
                if (stopLoading || this._scrollViewIsFull()) {
                    this._scrollView.release(hideLoadIndicator);
                    this._toggleNextButton(this._shouldRenderNextButton() && !this._isLastPage());
                    this._loadIndicationSuppressed(false)
                } else {
                    this._infiniteDataLoading()
                }
            },
            _shouldRenderNextButton: function() {
                return this._nextButtonMode() && this._dataSource && this._dataSource.isLoaded()
            },
            _dataSourceLoadingChangedHandler: function(isLoading) {
                if (this._loadIndicationSuppressed()) {
                    return
                }
                if (isLoading && this.option("indicateLoading")) {
                    this._showLoadingIndicatorTimer = setTimeout(function() {
                        var isEmpty = !this._itemElements().length;
                        if (this._scrollView && !isEmpty) {
                            this._scrollView.startLoading()
                        }
                    }.bind(this))
                } else {
                    clearTimeout(this._showLoadingIndicatorTimer);
                    this._scrollView && this._scrollView.finishLoading()
                }
            },
            _dataSourceChangedHandler: function(newItems) {
                if (!this._shouldAppendItems() && windowUtils.hasWindow()) {
                    this._scrollView && this._scrollView.scrollTo(0)
                }
                this.callBase.apply(this, arguments)
            },
            _refreshContent: function() {
                this._prepareContent();
                this._fireContentReadyAction()
            },
            _hideLoadingIfLoadIndicationOff: function() {
                if (!this.option("indicateLoading")) {
                    this._dataSourceLoadingChangedHandler(false)
                }
            },
            _loadIndicationSuppressed: function(value) {
                if (!arguments.length) {
                    return this._isLoadIndicationSuppressed
                }
                this._isLoadIndicationSuppressed = value
            },
            _scrollViewIsFull: function() {
                return !this._scrollView || this._scrollView.isFull()
            },
            _pullDownHandler: function(e) {
                this._pullRefreshAction(e);
                if (this._dataSource && !this._isDataSourceLoading()) {
                    this._clearSelectedItems();
                    this._dataSource.pageIndex(0);
                    this._dataSource.reload()
                } else {
                    this._updateLoadingState()
                }
            },
            _infiniteDataLoading: function() {
                var isElementVisible = this.$element().is(":visible");
                if (isElementVisible && !this._scrollViewIsFull() && !this._isDataSourceLoading() && !this._isLastPage()) {
                    clearTimeout(this._loadNextPageTimer);
                    this._loadNextPageTimer = setTimeout(this._loadNextPage.bind(this))
                }
            },
            _scrollBottomHandler: function(e) {
                this._pageLoadingAction(e);
                if (!this._isDataSourceLoading() && !this._isLastPage()) {
                    this._loadNextPage()
                } else {
                    this._updateLoadingState()
                }
            },
            _renderItems: function(items) {
                if (this.option("grouped")) {
                    each(items, this._renderGroup.bind(this));
                    this._attachGroupCollapseEvent();
                    this._renderEmptyMessage();
                    if (themes.isMaterial()) {
                        this.attachGroupHeaderInkRippleEvents()
                    }
                } else {
                    this.callBase.apply(this, arguments)
                }
                this._refreshItemElements();
                this._updateLoadingState(true)
            },
            _attachGroupCollapseEvent: function() {
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                var selector = "." + LIST_GROUP_HEADER_CLASS;
                var $element = this.$element();
                var collapsibleGroups = this.option("collapsibleGroups");
                $element.toggleClass(LIST_COLLAPSIBLE_GROUPS_CLASS, collapsibleGroups);
                eventsEngine.off($element, eventName, selector);
                if (collapsibleGroups) {
                    eventsEngine.on($element, eventName, selector, function(e) {
                        this._createAction(function(e) {
                            var $group = $(e.event.currentTarget).parent();
                            this._collapseGroupHandler($group);
                            if (this.option("focusStateEnabled")) {
                                this.option("focusedElement", getPublicElement($group.find("." + LIST_ITEM_CLASS).eq(0)))
                            }
                        }.bind(this), {
                            validatingTargetName: "element"
                        })({
                            event: e
                        })
                    }.bind(this))
                }
            },
            _collapseGroupHandler: function($group, toggle) {
                var deferred = new Deferred;
                if ($group.hasClass(LIST_GROUP_COLLAPSED_CLASS) === toggle) {
                    return deferred.resolve()
                }
                var $groupBody = $group.children("." + LIST_GROUP_BODY_CLASS);
                var startHeight = $groupBody.outerHeight();
                var endHeight = 0 === startHeight ? $groupBody.height("auto").outerHeight() : 0;
                $group.toggleClass(LIST_GROUP_COLLAPSED_CLASS, toggle);
                fx.animate($groupBody, {
                    type: "custom",
                    from: {
                        height: startHeight
                    },
                    to: {
                        height: endHeight
                    },
                    duration: 200,
                    complete: function() {
                        this.updateDimensions();
                        this._updateLoadingState();
                        deferred.resolve()
                    }.bind(this)
                });
                return deferred.promise()
            },
            _dataSourceLoadErrorHandler: function() {
                this._forgetNextPageLoading();
                if (this._initialized) {
                    this._renderEmptyMessage();
                    this._updateLoadingState()
                }
            },
            _initMarkup: function() {
                this._itemElementsCache = $();
                this.$element().addClass(LIST_CLASS);
                this.callBase();
                this.option("useInkRipple") && this._renderInkRipple();
                this.setAria("role", this.option("_listAttributes").role)
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render()
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                var that = this;
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: $element,
                    event: e
                };
                if (value) {
                    if (themes.isMaterial()) {
                        this._inkRippleTimer = setTimeout(function() {
                            that._inkRipple.showWave(config)
                        }, LIST_FEEDBACK_SHOW_TIMEOUT / 2)
                    } else {
                        that._inkRipple.showWave(config)
                    }
                } else {
                    clearTimeout(this._inkRippleTimer);
                    this._inkRipple.hideWave(config)
                }
            },
            _postprocessRenderItem: function(args) {
                this._refreshItemElements();
                this.callBase.apply(this, arguments);
                if (this.option("onItemSwipe")) {
                    this._attachSwipeEvent($(args.itemElement))
                }
            },
            _attachSwipeEvent: function($itemElement) {
                var endEventName = eventUtils.addNamespace(swipeEvents.end, this.NAME);
                eventsEngine.on($itemElement, endEventName, this._itemSwipeEndHandler.bind(this))
            },
            _itemSwipeEndHandler: function(e) {
                this._itemDXEventHandler(e, "onItemSwipe", {
                    direction: e.offset < 0 ? "left" : "right"
                })
            },
            _nextButtonHandler: function(e) {
                this._pageLoadingAction(e);
                var source = this._dataSource;
                if (source && !source.isLoading()) {
                    this._scrollView.toggleLoading(true);
                    this._$nextButton.detach();
                    this._loadIndicationSuppressed(true);
                    this._loadNextPage()
                }
            },
            _renderGroup: function(index, group) {
                var $groupElement = $("<div>").addClass(LIST_GROUP_CLASS).appendTo(this._itemContainer());
                var $groupHeaderElement = $("<div>").addClass(LIST_GROUP_HEADER_CLASS).appendTo($groupElement);
                var groupTemplateName = this.option("groupTemplate");
                var groupTemplate = this._getTemplate(group.template || groupTemplateName, group, index, $groupHeaderElement);
                var renderArgs = {
                    index: index,
                    itemData: group,
                    container: getPublicElement($groupHeaderElement)
                };
                this._createItemByTemplate(groupTemplate, renderArgs);
                if (themes.isMaterial()) {
                    $("<div>").addClass(LIST_GROUP_HEADER_INDICATOR_CLASS).prependTo($groupHeaderElement)
                }
                this._renderingGroupIndex = index;
                var $groupBody = $("<div>").addClass(LIST_GROUP_BODY_CLASS).appendTo($groupElement);
                each(groupItemsGetter(group) || [], function(index, item) {
                    this._renderItem(index, item, $groupBody)
                }.bind(this));
                this._groupRenderAction({
                    groupElement: getPublicElement($groupElement),
                    groupIndex: index,
                    groupData: group
                })
            },
            downInkRippleHandler: function(e) {
                this._toggleActiveState($(e.currentTarget), true, e)
            },
            upInkRippleHandler: function(e) {
                this._toggleActiveState($(e.currentTarget), false)
            },
            attachGroupHeaderInkRippleEvents: function() {
                var selector = "." + LIST_GROUP_HEADER_CLASS;
                var $element = this.$element();
                this._downInkRippleHandler = this._downInkRippleHandler || this.downInkRippleHandler.bind(this);
                this._upInkRippleHandler = this._upInkRippleHandler || this.upInkRippleHandler.bind(this);
                var downArguments = [$element, "dxpointerdown", selector, this._downInkRippleHandler];
                var upArguments = [$element, "dxpointerup dxpointerout", selector, this._upInkRippleHandler];
                eventsEngine.off.apply(eventsEngine, downArguments);
                eventsEngine.on.apply(eventsEngine, downArguments);
                eventsEngine.off.apply(eventsEngine, upArguments);
                eventsEngine.on.apply(eventsEngine, upArguments)
            },
            _createGroupRenderAction: function() {
                this._groupRenderAction = this._createActionByOption("onGroupRendered")
            },
            _clean: function() {
                clearTimeout(this._inkRippleTimer);
                if (this._$nextButton) {
                    this._$nextButton.remove();
                    this._$nextButton = null
                }
                this.callBase.apply(this, arguments)
            },
            _dispose: function() {
                clearTimeout(this._holdTimer);
                clearTimeout(this._loadNextPageTimer);
                clearTimeout(this._showLoadingIndicatorTimer);
                this.callBase()
            },
            _toggleDisabledState: function(value) {
                this.callBase(value);
                this._scrollView.option("disabled", value || !this.option("scrollingEnabled"))
            },
            _toggleNextButton: function(value) {
                var dataSource = this._dataSource;
                var $nextButton = this._getNextButton();
                this.$element().toggleClass(LIST_HAS_NEXT_CLASS, value);
                if (value && dataSource && dataSource.isLoaded()) {
                    $nextButton.appendTo(this._itemContainer())
                }
                if (!value) {
                    $nextButton.detach()
                }
            },
            _getNextButton: function() {
                if (!this._$nextButton) {
                    this._$nextButton = this._createNextButton()
                }
                return this._$nextButton
            },
            _createNextButton: function() {
                var $result = $("<div>").addClass(LIST_NEXT_BUTTON_CLASS);
                var $button = $("<div>").appendTo($result);
                this._createComponent($button, Button, {
                    text: this.option("nextButtonText"),
                    onClick: this._nextButtonHandler.bind(this),
                    type: themes.isMaterial() ? "default" : void 0,
                    integrationOptions: {}
                });
                return $result
            },
            _moveFocus: function() {
                this.callBase.apply(this, arguments);
                this.scrollToItem(this.option("focusedElement"))
            },
            _refresh: function() {
                if (!windowUtils.hasWindow()) {
                    this.callBase()
                } else {
                    var scrollTop = this._scrollView.scrollTop();
                    this.callBase();
                    scrollTop && this._scrollView.scrollTo(scrollTop)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "pageLoadMode":
                        this._toggleNextButton(args.value);
                        this._initScrollView();
                        break;
                    case "dataSource":
                        this.callBase(args);
                        this._initScrollView();
                        break;
                    case "pullingDownText":
                    case "pulledDownText":
                    case "refreshingText":
                    case "pageLoadingText":
                    case "useNative":
                    case "showScrollbar":
                    case "bounceEnabled":
                    case "scrollByContent":
                    case "scrollByThumb":
                    case "scrollingEnabled":
                    case "pullRefreshEnabled":
                        this._initScrollView();
                        this._updateLoadingState();
                        break;
                    case "nextButtonText":
                    case "onItemSwipe":
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "onScroll":
                    case "onPullRefresh":
                    case "onPageLoading":
                        this._createScrollViewActions();
                        this._invalidate();
                        break;
                    case "grouped":
                    case "collapsibleGroups":
                    case "groupTemplate":
                        this._invalidate();
                        break;
                    case "wrapItemText":
                        this._$container.toggleClass(WRAP_ITEM_TEXT_CLASS, args.value);
                        break;
                    case "onGroupRendered":
                        this._createGroupRenderAction();
                        break;
                    case "width":
                    case "height":
                        this.callBase(args);
                        this._scrollView.update();
                        break;
                    case "indicateLoading":
                        this._hideLoadingIfLoadIndicationOff();
                        break;
                    case "visible":
                        this.callBase(args);
                        this._scrollView.update();
                        break;
                    case "rtlEnabled":
                        this._initScrollView();
                        this.callBase(args);
                        break;
                    case "showChevronExpr":
                    case "badgeExpr":
                        this._invalidate();
                        break;
                    case "_listAttributes":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _extendActionArgs: function($itemElement) {
                if (!this.option("grouped")) {
                    return this.callBase($itemElement)
                }
                var $group = $itemElement.closest("." + LIST_GROUP_CLASS);
                var $item = $group.find("." + LIST_ITEM_CLASS);
                return extend(this.callBase($itemElement), {
                    itemIndex: {
                        group: $group.index(),
                        item: $item.index($itemElement)
                    }
                })
            },
            expandGroup: function(groupIndex) {
                var deferred = new Deferred;
                var $group = this._itemContainer().find("." + LIST_GROUP_CLASS).eq(groupIndex);
                this._collapseGroupHandler($group, false).done(function() {
                    deferred.resolveWith(this)
                }.bind(this));
                return deferred.promise()
            },
            collapseGroup: function(groupIndex) {
                var deferred = new Deferred;
                var $group = this._itemContainer().find("." + LIST_GROUP_CLASS).eq(groupIndex);
                this._collapseGroupHandler($group, true).done(function() {
                    deferred.resolveWith(this)
                }.bind(this));
                return deferred
            },
            updateDimensions: function() {
                var that = this;
                var deferred = new Deferred;
                if (that._scrollView) {
                    that._scrollView.update().done(function() {
                        !that._scrollViewIsFull() && that._updateLoadingState(true);
                        deferred.resolveWith(that)
                    })
                } else {
                    deferred.resolveWith(that)
                }
                return deferred.promise()
            },
            reload: function() {
                this.callBase();
                this.scrollTo(0);
                this._pullDownHandler()
            },
            repaint: function() {
                this.scrollTo(0);
                this.callBase()
            },
            scrollTop: function() {
                return this._scrollView.scrollOffset().top
            },
            clientHeight: function() {
                return this._scrollView.clientHeight()
            },
            scrollHeight: function() {
                return this._scrollView.scrollHeight()
            },
            scrollBy: function(distance) {
                this._scrollView.scrollBy(distance)
            },
            scrollTo: function(location) {
                this._scrollView.scrollTo(location)
            },
            scrollToItem: function(itemElement) {
                var $item = this._editStrategy.getItemElement(itemElement);
                this._scrollView.scrollToElement($item)
            }
        }).include(DataConverterMixin);
        ListBase.ItemClass = ListItem;
        module.exports = ListBase;
        module.exports.mockScrollView = function(Mock) {
            ScrollView = Mock
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scroll_view.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 11).getPublicElement;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var PullDownStrategy = __webpack_require__( /*! ./ui.scroll_view.native.pull_down */ 545);
        var SwipeDownStrategy = __webpack_require__( /*! ./ui.scroll_view.native.swipe_down */ 546);
        var SimulatedStrategy = __webpack_require__( /*! ./ui.scroll_view.simulated */ 547);
        var Scrollable = __webpack_require__( /*! ./ui.scrollable */ 89);
        var LoadIndicator = __webpack_require__( /*! ../load_indicator */ 72);
        var themes = __webpack_require__( /*! ./../themes */ 32);
        var LoadPanel = __webpack_require__( /*! ../load_panel */ 167);
        var SCROLLVIEW_CLASS = "dx-scrollview";
        var SCROLLVIEW_CONTENT_CLASS = SCROLLVIEW_CLASS + "-content";
        var SCROLLVIEW_TOP_POCKET_CLASS = SCROLLVIEW_CLASS + "-top-pocket";
        var SCROLLVIEW_BOTTOM_POCKET_CLASS = SCROLLVIEW_CLASS + "-bottom-pocket";
        var SCROLLVIEW_PULLDOWN_CLASS = SCROLLVIEW_CLASS + "-pull-down";
        var SCROLLVIEW_REACHBOTTOM_CLASS = SCROLLVIEW_CLASS + "-scrollbottom";
        var SCROLLVIEW_REACHBOTTOM_INDICATOR_CLASS = SCROLLVIEW_REACHBOTTOM_CLASS + "-indicator";
        var SCROLLVIEW_REACHBOTTOM_TEXT_CLASS = SCROLLVIEW_REACHBOTTOM_CLASS + "-text";
        var SCROLLVIEW_LOADPANEL = SCROLLVIEW_CLASS + "-loadpanel";
        var refreshStrategies = {
            pullDown: PullDownStrategy,
            swipeDown: SwipeDownStrategy,
            simulated: SimulatedStrategy
        };
        var isServerSide = !windowUtils.hasWindow();
        var scrollViewServerConfig = {
            finishLoading: noop,
            release: noop,
            refresh: noop,
            _optionChanged: function(args) {
                if ("onUpdated" !== args.name) {
                    return this.callBase.apply(this, arguments)
                }
            }
        };
        var ScrollView = Scrollable.inherit(isServerSide ? scrollViewServerConfig : {
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    pullingDownText: messageLocalization.format("dxScrollView-pullingDownText"),
                    pulledDownText: messageLocalization.format("dxScrollView-pulledDownText"),
                    refreshingText: messageLocalization.format("dxScrollView-refreshingText"),
                    reachBottomText: messageLocalization.format("dxScrollView-reachBottomText"),
                    onPullDown: null,
                    onReachBottom: null,
                    refreshStrategy: "pullDown"
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        var realDevice = devices.real();
                        return "android" === realDevice.platform
                    },
                    options: {
                        refreshStrategy: "swipeDown"
                    }
                }, {
                    device: function() {
                        return themes.isMaterial()
                    },
                    options: {
                        pullingDownText: "",
                        pulledDownText: "",
                        refreshingText: "",
                        reachBottomText: ""
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._loadingIndicatorEnabled = true
            },
            _initScrollableMarkup: function() {
                this.callBase();
                this.$element().addClass(SCROLLVIEW_CLASS);
                this._initContent();
                this._initTopPocket();
                this._initBottomPocket();
                this._initLoadPanel()
            },
            _initContent: function() {
                var $content = $("<div>").addClass(SCROLLVIEW_CONTENT_CLASS);
                this._$content.wrapInner($content)
            },
            _initTopPocket: function() {
                var $topPocket = this._$topPocket = $("<div>").addClass(SCROLLVIEW_TOP_POCKET_CLASS);
                var $pullDown = this._$pullDown = $("<div>").addClass(SCROLLVIEW_PULLDOWN_CLASS);
                $topPocket.append($pullDown);
                this._$content.prepend($topPocket)
            },
            _initBottomPocket: function() {
                var $bottomPocket = this._$bottomPocket = $("<div>").addClass(SCROLLVIEW_BOTTOM_POCKET_CLASS);
                var $reachBottom = this._$reachBottom = $("<div>").addClass(SCROLLVIEW_REACHBOTTOM_CLASS);
                var $loadContainer = $("<div>").addClass(SCROLLVIEW_REACHBOTTOM_INDICATOR_CLASS);
                var $loadIndicator = new LoadIndicator($("<div>")).$element();
                var $text = this._$reachBottomText = $("<div>").addClass(SCROLLVIEW_REACHBOTTOM_TEXT_CLASS);
                this._updateReachBottomText();
                $reachBottom.append($loadContainer.append($loadIndicator)).append($text);
                $bottomPocket.append($reachBottom);
                this._$content.append($bottomPocket)
            },
            _initLoadPanel: function() {
                var $loadPanelElement = $("<div>").addClass(SCROLLVIEW_LOADPANEL).appendTo(this.$element());
                var loadPanelOptions = {
                    shading: false,
                    delay: 400,
                    message: this.option("refreshingText"),
                    position: {
                        of: this.$element()
                    }
                };
                this._loadPanel = this._createComponent($loadPanelElement, LoadPanel, loadPanelOptions)
            },
            _updateReachBottomText: function() {
                this._$reachBottomText.text(this.option("reachBottomText"))
            },
            _createStrategy: function() {
                var strategyName = this.option("useNative") ? this.option("refreshStrategy") : "simulated";
                var strategyClass = refreshStrategies[strategyName];
                if (!strategyClass) {
                    throw Error("E1030", this.option("refreshStrategy"))
                }
                this._strategy = new strategyClass(this);
                this._strategy.pullDownCallbacks.add(this._pullDownHandler.bind(this));
                this._strategy.releaseCallbacks.add(this._releaseHandler.bind(this));
                this._strategy.reachBottomCallbacks.add(this._reachBottomHandler.bind(this))
            },
            _createActions: function() {
                this.callBase();
                this._pullDownAction = this._createActionByOption("onPullDown");
                this._reachBottomAction = this._createActionByOption("onReachBottom");
                this._tryRefreshPocketState()
            },
            _tryRefreshPocketState: function() {
                this._pullDownEnable(this.hasActionSubscription("onPullDown"));
                this._reachBottomEnable(this.hasActionSubscription("onReachBottom"))
            },
            on: function(eventName) {
                var result = this.callBase.apply(this, arguments);
                if ("pullDown" === eventName || "reachBottom" === eventName) {
                    this._tryRefreshPocketState()
                }
                return result
            },
            _pullDownEnable: function(enabled) {
                if (0 === arguments.length) {
                    return this._pullDownEnabled
                }
                if (this._$pullDown && this._strategy) {
                    this._$pullDown.toggle(enabled);
                    this._strategy.pullDownEnable(enabled);
                    this._pullDownEnabled = enabled
                }
            },
            _reachBottomEnable: function(enabled) {
                if (0 === arguments.length) {
                    return this._reachBottomEnabled
                }
                if (this._$reachBottom && this._strategy) {
                    this._$reachBottom.toggle(enabled);
                    this._strategy.reachBottomEnable(enabled);
                    this._reachBottomEnabled = enabled
                }
            },
            _pullDownHandler: function() {
                this._loadingIndicator(false);
                this._pullDownLoading()
            },
            _loadingIndicator: function(value) {
                if (arguments.length < 1) {
                    return this._loadingIndicatorEnabled
                }
                this._loadingIndicatorEnabled = value
            },
            _pullDownLoading: function() {
                this.startLoading();
                this._pullDownAction()
            },
            _reachBottomHandler: function() {
                this._loadingIndicator(false);
                this._reachBottomLoading()
            },
            _reachBottomLoading: function() {
                this.startLoading();
                this._reachBottomAction()
            },
            _releaseHandler: function() {
                this.finishLoading();
                this._loadingIndicator(true)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onPullDown":
                    case "onReachBottom":
                        this._createActions();
                        break;
                    case "pullingDownText":
                    case "pulledDownText":
                    case "refreshingText":
                    case "refreshStrategy":
                        this._invalidate();
                        break;
                    case "reachBottomText":
                        this._updateReachBottomText();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            isEmpty: function() {
                return !$(this.content()).children().length
            },
            content: function() {
                return getPublicElement(this._$content.children().eq(1))
            },
            release: function(preventReachBottom) {
                if (void 0 !== preventReachBottom) {
                    this.toggleLoading(!preventReachBottom)
                }
                return this._strategy.release()
            },
            toggleLoading: function(showOrHide) {
                this._reachBottomEnable(showOrHide)
            },
            isFull: function() {
                return $(this.content()).height() > this._$container.height()
            },
            refresh: function() {
                if (!this.hasActionSubscription("onPullDown")) {
                    return
                }
                this._strategy.pendingRelease();
                this._pullDownLoading()
            },
            startLoading: function() {
                if (this._loadingIndicator() && this.$element().is(":visible")) {
                    this._loadPanel.show()
                }
                this._lock()
            },
            finishLoading: function() {
                this._loadPanel.hide();
                this._unlock()
            },
            _dispose: function() {
                this._strategy.dispose();
                this.callBase();
                if (this._loadPanel) {
                    this._loadPanel.$element().remove()
                }
            }
        });
        registerComponent("dxScrollView", ScrollView);
        module.exports = ScrollView
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scrollable.native.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _ui = __webpack_require__( /*! ./ui.scrollbar */ 316);
        var _ui2 = _interopRequireDefault(_ui);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCROLLABLE_NATIVE = "dxNativeScrollable";
        var SCROLLABLE_NATIVE_CLASS = "dx-scrollable-native";
        var SCROLLABLE_SCROLLBAR_SIMULATED = "dx-scrollable-scrollbar-simulated";
        var SCROLLABLE_SCROLLBARS_HIDDEN = "dx-scrollable-scrollbars-hidden";
        var VERTICAL = "vertical";
        var HORIZONTAL = "horizontal";
        var HIDE_SCROLLBAR_TIMEOUT = 500;
        var NativeStrategy = _class2.default.inherit({
            ctor: function(scrollable) {
                this._init(scrollable)
            },
            _init: function(scrollable) {
                this._component = scrollable;
                this._$element = scrollable.$element();
                this._$container = scrollable._$container;
                this._$content = scrollable._$content;
                this._direction = scrollable.option("direction");
                this._useSimulatedScrollbar = scrollable.option("useSimulatedScrollbar");
                this._showScrollbar = scrollable.option("showScrollbar");
                this.option = scrollable.option.bind(scrollable);
                this._createActionByOption = scrollable._createActionByOption.bind(scrollable);
                this._isLocked = scrollable._isLocked.bind(scrollable);
                this._isDirection = scrollable._isDirection.bind(scrollable);
                this._allowedDirection = scrollable._allowedDirection.bind(scrollable)
            },
            render: function() {
                this._renderPushBackOffset();
                var device = _devices2.default.real();
                var deviceType = device.platform;
                this._$element.addClass(SCROLLABLE_NATIVE_CLASS).addClass(SCROLLABLE_NATIVE_CLASS + "-" + deviceType).toggleClass(SCROLLABLE_SCROLLBARS_HIDDEN, !this._showScrollbar);
                if (this._showScrollbar && this._useSimulatedScrollbar) {
                    this._renderScrollbars()
                }
            },
            updateBounds: _common.noop,
            _renderPushBackOffset: function() {
                var pushBackValue = this.option("pushBackValue");
                if (!pushBackValue && !this._component._lastPushBackValue) {
                    return
                }
                this._$content.css({
                    paddingTop: pushBackValue,
                    paddingBottom: pushBackValue
                });
                this._component._lastPushBackValue = pushBackValue
            },
            _renderScrollbars: function() {
                this._scrollbars = {};
                this._hideScrollbarTimeout = 0;
                this._$element.addClass(SCROLLABLE_SCROLLBAR_SIMULATED);
                this._renderScrollbar(VERTICAL);
                this._renderScrollbar(HORIZONTAL)
            },
            _renderScrollbar: function(direction) {
                if (!this._isDirection(direction)) {
                    return
                }
                this._scrollbars[direction] = new _ui2.default((0, _renderer2.default)("<div>").appendTo(this._$element), {
                    direction: direction,
                    expandable: this._component.option("scrollByThumb")
                })
            },
            handleInit: _common.noop,
            handleStart: function() {
                this._disablePushBack = true
            },
            handleMove: function(e) {
                if (this._isLocked()) {
                    e.cancel = true;
                    return
                }
                if (this._allowedDirection()) {
                    e.originalEvent.isScrollingEvent = true
                }
            },
            handleEnd: function() {
                this._disablePushBack = false
            },
            handleCancel: _common.noop,
            handleStop: _common.noop,
            _eachScrollbar: function(callback) {
                callback = callback.bind(this);
                (0, _iterator.each)(this._scrollbars || {}, function(direction, scrollbar) {
                    callback(scrollbar, direction)
                })
            },
            createActions: function() {
                this._scrollAction = this._createActionByOption("onScroll");
                this._updateAction = this._createActionByOption("onUpdated")
            },
            _createActionArgs: function() {
                var location = this.location();
                var containerElement = this._$container.get(0);
                return {
                    event: this._eventForUserAction,
                    scrollOffset: {
                        top: -location.top,
                        left: -location.left
                    },
                    reachedLeft: this._isDirection(HORIZONTAL) ? location.left >= 0 : void 0,
                    reachedRight: this._isDirection(HORIZONTAL) ? Math.abs(location.left) >= containerElement.scrollWidth - containerElement.clientWidth : void 0,
                    reachedTop: this._isDirection(VERTICAL) ? location.top >= 0 : void 0,
                    reachedBottom: this._isDirection(VERTICAL) ? Math.abs(location.top) >= containerElement.scrollHeight - containerElement.clientHeight - 2 * this.option("pushBackValue") : void 0
                }
            },
            handleScroll: function(e) {
                if (!this._isScrollLocationChanged()) {
                    e.stopImmediatePropagation();
                    return
                }
                this._eventForUserAction = e;
                this._moveScrollbars();
                this._scrollAction(this._createActionArgs());
                this._lastLocation = this.location();
                this._pushBackFromBoundary()
            },
            _pushBackFromBoundary: function() {
                var pushBackValue = this.option("pushBackValue");
                if (!pushBackValue || this._disablePushBack) {
                    return
                }
                var scrollOffset = this._containerSize.height - this._contentSize.height;
                var scrollTopPos = this._$container.scrollTop();
                var scrollBottomPos = scrollOffset + scrollTopPos - 2 * pushBackValue;
                if (!scrollTopPos) {
                    this._$container.scrollTop(pushBackValue)
                } else {
                    if (!scrollBottomPos) {
                        this._$container.scrollTop(pushBackValue - scrollOffset)
                    }
                }
            },
            _isScrollLocationChanged: function() {
                var currentLocation = this.location();
                var lastLocation = this._lastLocation || {};
                var isTopChanged = lastLocation.top !== currentLocation.top;
                var isLeftChanged = lastLocation.left !== currentLocation.left;
                return isTopChanged || isLeftChanged
            },
            _moveScrollbars: function() {
                this._eachScrollbar(function(scrollbar) {
                    scrollbar.moveTo(this.location());
                    scrollbar.option("visible", true)
                });
                this._hideScrollbars()
            },
            _hideScrollbars: function() {
                clearTimeout(this._hideScrollbarTimeout);
                this._hideScrollbarTimeout = setTimeout(function() {
                    this._eachScrollbar(function(scrollbar) {
                        scrollbar.option("visible", false)
                    })
                }.bind(this), HIDE_SCROLLBAR_TIMEOUT)
            },
            location: function() {
                return {
                    left: -this._$container.scrollLeft(),
                    top: this.option("pushBackValue") - this._$container.scrollTop()
                }
            },
            disabledChanged: _common.noop,
            update: function() {
                this._update();
                this._updateAction(this._createActionArgs())
            },
            _update: function() {
                this._updateDimensions();
                this._updateScrollbars()
            },
            _updateDimensions: function() {
                this._containerSize = {
                    height: this._$container.height(),
                    width: this._$container.width()
                };
                this._componentContentSize = {
                    height: this._component.$content().height(),
                    width: this._component.$content().width()
                };
                this._contentSize = {
                    height: this._$content.height(),
                    width: this._$content.width()
                };
                this._pushBackFromBoundary()
            },
            _updateScrollbars: function() {
                this._eachScrollbar(function(scrollbar, direction) {
                    var dimension = direction === VERTICAL ? "height" : "width";
                    scrollbar.option({
                        containerSize: this._containerSize[dimension],
                        contentSize: this._componentContentSize[dimension]
                    });
                    scrollbar.update()
                })
            },
            _allowedDirections: function() {
                return {
                    vertical: this._isDirection(VERTICAL) && this._contentSize.height > this._containerSize.height,
                    horizontal: this._isDirection(HORIZONTAL) && this._contentSize.width > this._containerSize.width
                }
            },
            dispose: function() {
                var className = this._$element.get(0).className;
                var scrollableNativeRegexp = new RegExp(SCROLLABLE_NATIVE_CLASS + "\\S*", "g");
                if (scrollableNativeRegexp.test(className)) {
                    this._$element.removeClass(className.match(scrollableNativeRegexp).join(" "))
                }
                _events_engine2.default.off(this._$element, "." + SCROLLABLE_NATIVE);
                _events_engine2.default.off(this._$container, "." + SCROLLABLE_NATIVE);
                this._removeScrollbars();
                clearTimeout(this._hideScrollbarTimeout)
            },
            _removeScrollbars: function() {
                this._eachScrollbar(function(scrollbar) {
                    scrollbar.$element().remove()
                })
            },
            scrollBy: function(distance) {
                var location = this.location();
                this._$container.scrollTop(Math.round(-location.top - distance.top + this.option("pushBackValue")));
                this._$container.scrollLeft(Math.round(-location.left - distance.left))
            },
            validate: function(e) {
                if (this.option("disabled")) {
                    return false
                }
                if (eventUtils.isDxMouseWheelEvent(e) && this._isScrolledInMaxDirection(e)) {
                    return false
                }
                return !!this._allowedDirection()
            },
            _isScrolledInMaxDirection: function(e) {
                var container = this._$container.get(0);
                var result;
                if (e.delta > 0) {
                    result = e.shiftKey ? !container.scrollLeft : !container.scrollTop
                } else {
                    if (e.shiftKey) {
                        result = container.clientWidth + container.scrollLeft >= container.scrollWidth
                    } else {
                        result = container.clientHeight + container.scrollTop >= container.scrollHeight
                    }
                }
                return result
            },
            getDirection: function() {
                return this._allowedDirection()
            },
            verticalOffset: function() {
                return this.option("pushBackValue")
            }
        });
        module.exports = NativeStrategy
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.events.emitter.gesture.scroll.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var abstract = Class.abstract;
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var GestureEmitter = __webpack_require__( /*! ../../events/gesture/emitter.gesture */ 166);
        var registerEmitter = __webpack_require__( /*! ../../events/core/emitter_registrator */ 101);
        var animationFrame = __webpack_require__( /*! ../../animation/frame */ 117);
        var realDevice = __webpack_require__( /*! ../../core/devices */ 15).real();
        var compareVersions = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var SCROLL_INIT_EVENT = "dxscrollinit";
        var SCROLL_START_EVENT = "dxscrollstart";
        var SCROLL_MOVE_EVENT = "dxscroll";
        var SCROLL_END_EVENT = "dxscrollend";
        var SCROLL_STOP_EVENT = "dxscrollstop";
        var SCROLL_CANCEL_EVENT = "dxscrollcancel";
        var Locker = Class.inherit(function() {
            var NAMESPACED_SCROLL_EVENT = eventUtils.addNamespace("scroll", "dxScrollEmitter");
            return {
                ctor: function(element) {
                    this._element = element;
                    this._locked = false;
                    var that = this;
                    this._proxiedScroll = function(e) {
                        that._scroll(e)
                    };
                    eventsEngine.on(this._element, NAMESPACED_SCROLL_EVENT, this._proxiedScroll)
                },
                _scroll: abstract,
                check: function(e, callback) {
                    if (this._locked) {
                        callback()
                    }
                },
                dispose: function() {
                    eventsEngine.off(this._element, NAMESPACED_SCROLL_EVENT, this._proxiedScroll)
                }
            }
        }());
        var TimeoutLocker = Locker.inherit(function() {
            return {
                ctor: function(element, timeout) {
                    this.callBase(element);
                    this._timeout = timeout
                },
                _scroll: function() {
                    this._prepare();
                    this._forget()
                },
                _prepare: function() {
                    if (this._timer) {
                        this._clearTimer()
                    }
                    this._locked = true
                },
                _clearTimer: function() {
                    clearTimeout(this._timer);
                    this._locked = false;
                    this._timer = null
                },
                _forget: function() {
                    var that = this;
                    this._timer = setTimeout(function() {
                        that._clearTimer()
                    }, this._timeout)
                },
                dispose: function() {
                    this.callBase();
                    this._clearTimer()
                }
            }
        }());
        var WheelLocker = TimeoutLocker.inherit(function() {
            var WHEEL_UNLOCK_TIMEOUT = 400;
            return {
                ctor: function(element) {
                    this.callBase(element, WHEEL_UNLOCK_TIMEOUT);
                    this._lastWheelDirection = null
                },
                check: function(e, callback) {
                    this._checkDirectionChanged(e);
                    this.callBase(e, callback)
                },
                _checkDirectionChanged: function(e) {
                    if (!eventUtils.isDxMouseWheelEvent(e)) {
                        this._lastWheelDirection = null;
                        return
                    }
                    var direction = e.shiftKey || false;
                    var directionChange = null !== this._lastWheelDirection && direction !== this._lastWheelDirection;
                    this._lastWheelDirection = direction;
                    this._locked = this._locked && !directionChange
                }
            }
        }());
        var PointerLocker = TimeoutLocker.inherit(function() {
            var POINTER_UNLOCK_TIMEOUT = 400;
            return {
                ctor: function(element) {
                    this.callBase(element, POINTER_UNLOCK_TIMEOUT)
                }
            }
        }());
        ! function() {
            var ios8_greater = realDevice.ios && compareVersions(realDevice.version, [8]) >= 0;
            var android5_greater = realDevice.android && compareVersions(realDevice.version, [5]) >= 0;
            if (!(ios8_greater || android5_greater)) {
                return
            }
            PointerLocker = Locker.inherit(function() {
                return {
                    _scroll: function() {
                        this._locked = true;
                        var that = this;
                        animationFrame.cancelAnimationFrame(this._scrollFrame);
                        this._scrollFrame = animationFrame.requestAnimationFrame(function() {
                            that._locked = false
                        })
                    },
                    check: function(e, callback) {
                        animationFrame.cancelAnimationFrame(this._scrollFrame);
                        animationFrame.cancelAnimationFrame(this._checkFrame);
                        var that = this;
                        var callBase = this.callBase;
                        this._checkFrame = animationFrame.requestAnimationFrame(function() {
                            callBase.call(that, e, callback);
                            that._locked = false
                        })
                    },
                    dispose: function() {
                        this.callBase();
                        animationFrame.cancelAnimationFrame(this._scrollFrame);
                        animationFrame.cancelAnimationFrame(this._checkFrame)
                    }
                }
            }())
        }();
        var ScrollEmitter = GestureEmitter.inherit(function() {
            var INERTIA_TIMEOUT = 100;
            var VELOCITY_CALC_TIMEOUT = 200;
            var FRAME_DURATION = Math.round(1e3 / 60);
            return {
                ctor: function(element) {
                    this.callBase.apply(this, arguments);
                    this.direction = "both";
                    this._pointerLocker = new PointerLocker(element);
                    this._wheelLocker = new WheelLocker(element)
                },
                validate: function() {
                    return true
                },
                configure: function(data) {
                    if (data.scrollTarget) {
                        this._pointerLocker.dispose();
                        this._wheelLocker.dispose();
                        this._pointerLocker = new PointerLocker(data.scrollTarget);
                        this._wheelLocker = new WheelLocker(data.scrollTarget)
                    }
                    this.callBase(data)
                },
                _init: function(e) {
                    this._wheelLocker.check(e, function() {
                        if (eventUtils.isDxMouseWheelEvent(e)) {
                            this._accept(e)
                        }
                    }.bind(this));
                    this._pointerLocker.check(e, function() {
                        var skipCheck = this.isNative && eventUtils.isMouseEvent(e);
                        if (!eventUtils.isDxMouseWheelEvent(e) && !skipCheck) {
                            this._accept(e)
                        }
                    }.bind(this));
                    this._fireEvent(SCROLL_INIT_EVENT, e);
                    this._prevEventData = eventUtils.eventData(e)
                },
                move: function(e) {
                    this.callBase.apply(this, arguments);
                    e.isScrollingEvent = this.isNative || e.isScrollingEvent
                },
                _start: function(e) {
                    this._savedEventData = eventUtils.eventData(e);
                    this._fireEvent(SCROLL_START_EVENT, e);
                    this._prevEventData = eventUtils.eventData(e)
                },
                _move: function(e) {
                    var currentEventData = eventUtils.eventData(e);
                    this._fireEvent(SCROLL_MOVE_EVENT, e, {
                        delta: eventUtils.eventDelta(this._prevEventData, currentEventData)
                    });
                    var eventDelta = eventUtils.eventDelta(this._savedEventData, currentEventData);
                    if (eventDelta.time > VELOCITY_CALC_TIMEOUT) {
                        this._savedEventData = this._prevEventData
                    }
                    this._prevEventData = eventUtils.eventData(e)
                },
                _end: function(e) {
                    var endEventDelta = eventUtils.eventDelta(this._prevEventData, eventUtils.eventData(e));
                    var velocity = {
                        x: 0,
                        y: 0
                    };
                    if (!eventUtils.isDxMouseWheelEvent(e) && endEventDelta.time < INERTIA_TIMEOUT) {
                        var eventDelta = eventUtils.eventDelta(this._savedEventData, this._prevEventData);
                        var velocityMultiplier = FRAME_DURATION / eventDelta.time;
                        velocity = {
                            x: eventDelta.x * velocityMultiplier,
                            y: eventDelta.y * velocityMultiplier
                        }
                    }
                    this._fireEvent(SCROLL_END_EVENT, e, {
                        velocity: velocity
                    })
                },
                _stop: function(e) {
                    this._fireEvent(SCROLL_STOP_EVENT, e)
                },
                cancel: function(e) {
                    this.callBase.apply(this, arguments);
                    this._fireEvent(SCROLL_CANCEL_EVENT, e)
                },
                dispose: function() {
                    this.callBase.apply(this, arguments);
                    this._pointerLocker.dispose();
                    this._wheelLocker.dispose()
                },
                _clearSelection: function() {
                    if (this.isNative) {
                        return
                    }
                    return this.callBase.apply(this, arguments)
                },
                _toggleGestureCover: function() {
                    if (this.isNative) {
                        return
                    }
                    return this.callBase.apply(this, arguments)
                }
            }
        }());
        registerEmitter({
            emitter: ScrollEmitter,
            events: [SCROLL_INIT_EVENT, SCROLL_START_EVENT, SCROLL_MOVE_EVENT, SCROLL_END_EVENT, SCROLL_STOP_EVENT, SCROLL_CANCEL_EVENT]
        });
        module.exports = {
            init: SCROLL_INIT_EVENT,
            start: SCROLL_START_EVENT,
            move: SCROLL_MOVE_EVENT,
            end: SCROLL_END_EVENT,
            stop: SCROLL_STOP_EVENT,
            cancel: SCROLL_CANCEL_EVENT
        }
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/sortable.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _draggable = __webpack_require__( /*! ./draggable */ 196);
        var _draggable2 = _interopRequireDefault(_draggable);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _position = __webpack_require__( /*! ../core/utils/position */ 21);
        var _translator = __webpack_require__( /*! ../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _fx = __webpack_require__( /*! ../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var SORTABLE = "dxSortable";
        var PLACEHOLDER_CLASS = "placeholder";
        var CLONE_CLASS = "clone";
        var isElementVisible = function(itemElement) {
            return (0, _renderer2.default)(itemElement).is(":visible")
        };
        var Sortable = _draggable2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    clone: true,
                    filter: "> *",
                    itemOrientation: "vertical",
                    dropFeedbackMode: "push",
                    allowDropInsideItem: false,
                    allowReordering: true,
                    moveItemOnDrop: false,
                    onDragChange: null,
                    onAdd: null,
                    onRemove: null,
                    onReorder: null,
                    onPlaceholderPrepared: null,
                    animation: {
                        type: "slide",
                        duration: 300
                    },
                    fromIndex: null,
                    toIndex: null,
                    dropInsideItem: false,
                    itemPoints: null
                })
            },
            reset: function() {
                this.option({
                    dropInsideItem: false,
                    toIndex: null,
                    fromIndex: null
                });
                if (this._$placeholderElement) {
                    this._$placeholderElement.remove()
                }
                this._$placeholderElement = null;
                if (!this._isIndicateMode() && this._$modifiedItem) {
                    this._$modifiedItem.css("marginBottom", this._modifiedItemMargin);
                    this._$modifiedItem = null
                }
            },
            _getPrevVisibleItem: function(items, index) {
                return items.slice(0, index).reverse().filter(isElementVisible)[0]
            },
            _dragStartHandler: function(e) {
                this.callBase.apply(this, arguments);
                if (true === e.cancel) {
                    return
                }
                var $sourceElement = this._getSourceElement();
                this._updateItemPoints();
                this.option("fromIndex", this._getElementIndex($sourceElement))
            },
            _dragEnterHandler: function() {
                this.callBase.apply(this, arguments);
                if (this === this._getSourceDraggable()) {
                    return
                }
                this._updateItemPoints();
                this.option("fromIndex", -1);
                if (!this._isIndicateMode()) {
                    var itemPoints = this.option("itemPoints");
                    var lastItemPoint = itemPoints[itemPoints.length - 1];
                    if (lastItemPoint) {
                        var $element = this.$element();
                        var $sourceElement = this._getSourceElement();
                        var isVertical = this._isVerticalOrientation();
                        var sourceElementSize = isVertical ? $sourceElement.outerHeight(true) : $sourceElement.outerWidth(true);
                        var scrollSize = $element.get(0)[isVertical ? "scrollHeight" : "scrollWidth"];
                        var scrollPosition = $element.get(0)[isVertical ? "scrollTop" : "scrollLeft"];
                        var positionProp = isVertical ? "top" : "left";
                        var lastPointPosition = lastItemPoint[positionProp];
                        var elementPosition = $element.offset()[positionProp];
                        var freeSize = elementPosition + scrollSize - scrollPosition - lastPointPosition;
                        if (freeSize < sourceElementSize) {
                            if (isVertical) {
                                var items = this._getItems();
                                var $lastItem = (0, _renderer2.default)(this._getPrevVisibleItem(items));
                                this._$modifiedItem = $lastItem;
                                this._modifiedItemMargin = $lastItem.get(0).style.marginBottom;
                                $lastItem.css("marginBottom", sourceElementSize - freeSize);
                                var $sortable = $lastItem.closest(".dx-sortable");
                                var sortable = $sortable.data("dxScrollable") || $sortable.data("dxScrollView");
                                sortable && sortable.update()
                            }
                        }
                    }
                }
            },
            dragEnter: function() {
                if (this === this._getTargetDraggable()) {
                    this.option("toIndex", this.option("fromIndex"))
                } else {
                    this.option("toIndex", -1)
                }
            },
            dragLeave: function() {
                if (this === this._getTargetDraggable()) {
                    this.option("toIndex", -1)
                } else {
                    this.option("toIndex", this.option("fromIndex"))
                }
            },
            _isInsideTargetDraggable: function(event) {
                var $targetDraggable = this._getTargetDraggable().$element();
                var $scrollable = this._getScrollable($targetDraggable);
                if ($scrollable) {
                    var offset = $scrollable.offset();
                    var validY = offset.top + $scrollable.height() >= event.pageY && offset.top <= event.pageY;
                    var validX = offset.left + $scrollable.width() >= event.pageX && offset.left <= event.pageX;
                    return validY && validX
                }
                return true
            },
            dragEnd: function(sourceEvent) {
                var $sourceElement = this._getSourceElement();
                var sourceDraggable = this._getSourceDraggable();
                var isSourceDraggable = sourceDraggable.NAME !== this.NAME;
                var toIndex = this.option("toIndex");
                var isInsideTargetDraggable = this._isInsideTargetDraggable(sourceEvent.event);
                if (null !== toIndex && toIndex >= 0 && isInsideTargetDraggable) {
                    var cancelAdd;
                    var cancelRemove;
                    if (sourceDraggable !== this) {
                        cancelAdd = this._fireAddEvent(sourceEvent);
                        if (!cancelAdd) {
                            cancelRemove = this._fireRemoveEvent(sourceEvent)
                        }
                    }
                    if (isSourceDraggable) {
                        _translator2.default.resetPosition($sourceElement)
                    }
                    if (this.option("moveItemOnDrop")) {
                        !cancelAdd && this._moveItem($sourceElement, toIndex, cancelRemove)
                    }
                    if (sourceDraggable === this) {
                        return this._fireReorderEvent(sourceEvent)
                    }
                }
                return (new _deferred.Deferred).resolve()
            },
            dragMove: function(e) {
                var itemPoints = this.option("itemPoints");
                if (!itemPoints) {
                    return
                }
                var isVertical = this._isVerticalOrientation();
                var axisName = isVertical ? "top" : "left";
                var cursorPosition = isVertical ? e.pageY : e.pageX;
                var rtlEnabled = this.option("rtlEnabled");
                var itemPoint;
                for (var i = itemPoints.length - 1; i >= 0; i--) {
                    var centerPosition = itemPoints[i + 1] && (itemPoints[i][axisName] + itemPoints[i + 1][axisName]) / 2;
                    if ((!isVertical && rtlEnabled ? cursorPosition > centerPosition : centerPosition > cursorPosition) || void 0 === centerPosition) {
                        itemPoint = itemPoints[i]
                    } else {
                        break
                    }
                }
                if (itemPoint) {
                    this._updatePlaceholderPosition(e, itemPoint);
                    if (this._verticalScrollHelper.isScrolling() && this._isIndicateMode()) {
                        this._movePlaceholder()
                    }
                }
            },
            _isIndicateMode: function() {
                return "indicate" === this.option("dropFeedbackMode") || this.option("allowDropInsideItem")
            },
            _createPlaceholder: function() {
                var $placeholderContainer;
                if (this._isIndicateMode()) {
                    $placeholderContainer = (0, _renderer2.default)("<div>").addClass(this._addWidgetPrefix(PLACEHOLDER_CLASS)).insertBefore(this._getSourceDraggable()._$dragElement)
                }
                this._$placeholderElement = $placeholderContainer;
                return $placeholderContainer
            },
            _getItems: function() {
                var itemsSelector = this._getItemsSelector();
                return this._$content().find(itemsSelector).not("." + this._addWidgetPrefix(PLACEHOLDER_CLASS)).not("." + this._addWidgetPrefix(CLONE_CLASS)).toArray()
            },
            _allowReordering: function() {
                var sourceDraggable = this._getSourceDraggable();
                var targetDraggable = this._getTargetDraggable();
                return sourceDraggable !== targetDraggable || this.option("allowReordering")
            },
            _isValidPoint: function(visibleIndex, draggableVisibleIndex, dropInsideItem) {
                var allowDropInsideItem = this.option("allowDropInsideItem");
                var allowReordering = dropInsideItem || this._allowReordering();
                if (!allowReordering && (0 !== visibleIndex || !allowDropInsideItem)) {
                    return false
                }
                if (!this._isIndicateMode()) {
                    return true
                }
                return draggableVisibleIndex === -1 || visibleIndex !== draggableVisibleIndex && (dropInsideItem || visibleIndex !== draggableVisibleIndex + 1)
            },
            _getItemPoints: function() {
                var that = this;
                var result = [];
                var $item;
                var offset;
                var itemWidth;
                var rtlEnabled = that.option("rtlEnabled");
                var isVertical = that._isVerticalOrientation();
                var itemElements = that._getItems();
                var visibleItemElements = itemElements.filter(isElementVisible);
                var visibleItemCount = visibleItemElements.length;
                var $draggableItem = this._getDraggableElement();
                var draggableVisibleIndex = visibleItemElements.indexOf($draggableItem.get(0));
                if (visibleItemCount) {
                    for (var i = 0; i <= visibleItemCount; i++) {
                        var needCorrectLeftPosition = !isVertical && rtlEnabled ^ i === visibleItemCount;
                        var needCorrectTopPosition = isVertical && i === visibleItemCount;
                        if (i < visibleItemCount) {
                            $item = (0, _renderer2.default)(visibleItemElements[i]);
                            offset = $item.offset();
                            itemWidth = $item.outerWidth()
                        }
                        result.push({
                            dropInsideItem: false,
                            left: offset.left + (needCorrectLeftPosition ? itemWidth : 0),
                            top: offset.top + (needCorrectTopPosition ? result[i - 1].height : 0),
                            index: i === visibleItemCount ? itemElements.length : itemElements.indexOf($item.get(0)),
                            $item: $item,
                            width: $item.outerWidth(),
                            height: $item.outerHeight(),
                            isValid: that._isValidPoint(i, draggableVisibleIndex)
                        })
                    }
                    if (this.option("allowDropInsideItem")) {
                        var points = result;
                        result = [];
                        for (var _i = 0; _i < points.length; _i++) {
                            result.push(points[_i]);
                            if (points[_i + 1]) {
                                result.push((0, _extend.extend)({}, points[_i], {
                                    dropInsideItem: true,
                                    top: Math.floor((points[_i].top + points[_i + 1].top) / 2),
                                    left: Math.floor((points[_i].left + points[_i + 1].left) / 2),
                                    isValid: this._isValidPoint(_i, draggableVisibleIndex, true)
                                }))
                            }
                        }
                    }
                } else {
                    result.push({
                        dropInsideItem: false,
                        index: 0,
                        isValid: true
                    })
                }
                return result
            },
            _updateItemPoints: function() {
                this.option("itemPoints", this._getItemPoints())
            },
            _getElementIndex: function($itemElement) {
                return this._getItems().indexOf($itemElement.get(0))
            },
            _getDragTemplateArgs: function($element) {
                var args = this.callBase.apply(this, arguments);
                args.model.fromIndex = this._getElementIndex($element);
                return args
            },
            _togglePlaceholder: function(value) {
                this._$placeholderElement && this._$placeholderElement.toggle(value)
            },
            _isVerticalOrientation: function() {
                return "vertical" === this.option("itemOrientation")
            },
            _normalizeToIndex: function(toIndex, dropInsideItem) {
                var isAnotherDraggable = this._getSourceDraggable() !== this._getTargetDraggable();
                var fromIndex = this.option("fromIndex");
                if (null === toIndex) {
                    return fromIndex
                }
                return Math.max(isAnotherDraggable || fromIndex >= toIndex || dropInsideItem ? toIndex : toIndex - 1, 0)
            },
            _updatePlaceholderPosition: function(e, itemPoint) {
                var sourceDraggable = this._getSourceDraggable();
                var toIndex = this._normalizeToIndex(itemPoint.index, itemPoint.dropInsideItem);
                var eventArgs = (0, _extend.extend)(this._getEventArgs(e), {
                    toIndex: toIndex,
                    dropInsideItem: itemPoint.dropInsideItem
                });
                itemPoint.isValid && this._getAction("onDragChange")(eventArgs);
                if (eventArgs.cancel || !itemPoint.isValid) {
                    if (!itemPoint.isValid) {
                        this.option({
                            dropInsideItem: false,
                            toIndex: null
                        })
                    }
                    return
                }
                this.option({
                    dropInsideItem: itemPoint.dropInsideItem,
                    toIndex: itemPoint.index
                });
                this._getAction("onPlaceholderPrepared")((0, _extend.extend)(this._getEventArgs(e), {
                    placeholderElement: (0, _dom.getPublicElement)(this._$placeholderElement),
                    dragElement: (0, _dom.getPublicElement)(sourceDraggable._$dragElement)
                }));
                this._updateItemPoints()
            },
            _getScrollable: function($element) {
                var that = this;
                var $scrollable;
                $element.parents().toArray().some(function(parent) {
                    var $parent = (0, _renderer2.default)(parent);
                    if (that._horizontalScrollHelper.isScrollable($parent) || that._verticalScrollHelper.isScrollable($parent)) {
                        $scrollable = $parent;
                        return true
                    }
                });
                return $scrollable
            },
            _makeWidthCorrection: function($item, width) {
                var that = this;
                that._$scrollable = that._getScrollable($item);
                if (that._$scrollable && that._$scrollable.width() < width) {
                    var scrollableWidth = that._$scrollable.width();
                    var offsetLeft = $item.offset().left - that._$scrollable.offset().left;
                    var offsetRight = scrollableWidth - $item.outerWidth() - offsetLeft;
                    if (offsetLeft > 0) {
                        width = scrollableWidth - offsetLeft
                    } else {
                        if (offsetRight > 0) {
                            width = scrollableWidth - offsetRight
                        } else {
                            width = scrollableWidth
                        }
                    }
                }
                return width
            },
            _updatePlaceholderSizes: function($placeholderElement, itemElement) {
                var that = this;
                var dropInsideItem = that.option("dropInsideItem");
                var $item = itemElement ? (0, _renderer2.default)(itemElement) : that._getSourceElement();
                var isVertical = that._isVerticalOrientation();
                var width = "";
                var height = "";
                $placeholderElement.toggleClass(that._addWidgetPrefix("placeholder-inside"), dropInsideItem);
                if (isVertical || dropInsideItem) {
                    width = $item.outerWidth()
                }
                if (!isVertical || dropInsideItem) {
                    height = $item.outerHeight()
                }
                width = that._makeWidthCorrection($item, width);
                $placeholderElement.css({
                    width: width,
                    height: height
                })
            },
            _moveItem: function($itemElement, index, cancelRemove) {
                var $prevTargetItemElement;
                var $itemElements = this._getItems();
                var $targetItemElement = $itemElements[index];
                var sourceDraggable = this._getSourceDraggable();
                if (cancelRemove) {
                    $itemElement = $itemElement.clone();
                    sourceDraggable._toggleDragSourceClass(false, $itemElement)
                }
                if (!$targetItemElement) {
                    $prevTargetItemElement = $itemElements[index - 1]
                }
                this._moveItemCore($itemElement, $targetItemElement, $prevTargetItemElement)
            },
            _moveItemCore: function($targetItem, item, prevItem) {
                if (!item && !prevItem) {
                    $targetItem.appendTo(this.$element())
                } else {
                    if (prevItem) {
                        $targetItem.insertAfter((0, _renderer2.default)(prevItem))
                    } else {
                        $targetItem.insertBefore((0, _renderer2.default)(item))
                    }
                }
            },
            _getDragStartArgs: function(e, $itemElement) {
                return (0, _extend.extend)(this.callBase.apply(this, arguments), {
                    fromIndex: this._getElementIndex($itemElement)
                })
            },
            _getEventArgs: function(e) {
                var sourceDraggable = this._getSourceDraggable();
                var targetDraggable = this._getTargetDraggable();
                var dropInsideItem = targetDraggable.option("dropInsideItem");
                return (0, _extend.extend)(this.callBase.apply(this, arguments), {
                    fromIndex: sourceDraggable.option("fromIndex"),
                    toIndex: this._normalizeToIndex(targetDraggable.option("toIndex"), dropInsideItem),
                    dropInsideItem: dropInsideItem
                })
            },
            _optionChanged: function(args) {
                var name = args.name;
                switch (name) {
                    case "onDragChange":
                    case "onPlaceholderPrepared":
                    case "onAdd":
                    case "onRemove":
                    case "onReorder":
                        this["_" + name + "Action"] = this._createActionByOption(name);
                        break;
                    case "itemOrientation":
                    case "allowDropInsideItem":
                    case "moveItemOnDrop":
                    case "dropFeedbackMode":
                    case "itemPoints":
                    case "fromIndex":
                    case "animation":
                    case "allowReordering":
                        break;
                    case "dropInsideItem":
                        this._optionChangedDropInsideItem(args);
                        break;
                    case "toIndex":
                        this._optionChangedToIndex(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _optionChangedDropInsideItem: function() {
                if (this._isIndicateMode() && this._$placeholderElement) {
                    this._movePlaceholder()
                }
            },
            _isPositionVisible: function(position) {
                var $element = this.$element();
                var scrollContainer;
                if ("hidden" !== $element.css("overflow")) {
                    scrollContainer = $element.get(0)
                } else {
                    $element.parents().each(function() {
                        if ("visible" !== (0, _renderer2.default)(this).css("overflow")) {
                            scrollContainer = this;
                            return false
                        }
                    })
                }
                if (scrollContainer) {
                    var clientRect = (0, _position.getBoundingRect)(scrollContainer);
                    var isVerticalOrientation = this._isVerticalOrientation();
                    var start = isVerticalOrientation ? "top" : "left";
                    var end = isVerticalOrientation ? "bottom" : "right";
                    var window = (0, _window.getWindow)();
                    var pageOffset = isVerticalOrientation ? window.pageYOffset : window.pageXOffset;
                    if (position[start] < clientRect[start] + pageOffset || position[start] > clientRect[end] + pageOffset) {
                        return false
                    }
                }
                return true
            },
            _optionChangedToIndex: function(args) {
                var toIndex = args.value;
                if (this._isIndicateMode()) {
                    var showPlaceholder = null !== toIndex && toIndex >= 0;
                    this._togglePlaceholder(showPlaceholder);
                    if (showPlaceholder) {
                        this._movePlaceholder()
                    }
                } else {
                    this._moveItems(args.previousValue, args.value)
                }
            },
            _makeLeftCorrection: function(left, leftMargin) {
                var that = this;
                var $scrollable = that._$scrollable;
                if ($scrollable && that._isVerticalOrientation() && $scrollable.scrollLeft() > leftMargin) {
                    left += $scrollable.scrollLeft() - leftMargin
                }
                return left
            },
            _movePlaceholder: function() {
                var that = this;
                var $placeholderElement = that._$placeholderElement || that._createPlaceholder();
                var items = that._getItems();
                var toIndex = that.option("toIndex");
                var itemElement = items[toIndex];
                var isVerticalOrientation = that._isVerticalOrientation();
                var rtlEnabled = this.option("rtlEnabled");
                var dropInsideItem = that.option("dropInsideItem");
                var position = null;
                var leftMargin = 0;
                that._updatePlaceholderSizes($placeholderElement, itemElement);
                if (itemElement) {
                    var $itemElement = (0, _renderer2.default)(itemElement);
                    position = $itemElement.offset();
                    leftMargin = parseFloat($itemElement.css("marginLeft"));
                    if (!isVerticalOrientation && rtlEnabled && !dropInsideItem) {
                        position.left += $itemElement.outerWidth(true)
                    }
                } else {
                    var prevVisibleItemElement = this._getPrevVisibleItem(items, toIndex);
                    if (prevVisibleItemElement) {
                        position = (0, _renderer2.default)(prevVisibleItemElement).offset();
                        if (isVerticalOrientation) {
                            position.top += (0, _renderer2.default)(prevVisibleItemElement).outerHeight(true)
                        } else {
                            if (!rtlEnabled) {
                                position.left += (0, _renderer2.default)(prevVisibleItemElement).outerWidth(true)
                            }
                        }
                    }
                }
                if (position && !that._isPositionVisible(position)) {
                    position = null
                }
                if (position) {
                    position.left = that._makeLeftCorrection(position.left, leftMargin);
                    that._move(position, $placeholderElement)
                }
                $placeholderElement.toggle(!!position)
            },
            _getPositions: function(items, elementSize, fromIndex, toIndex) {
                var positions = [];
                for (var i = 0; i < items.length; i++) {
                    var position = 0;
                    if (null === toIndex || null === fromIndex) {
                        positions.push(position);
                        continue
                    }
                    if (fromIndex === -1) {
                        if (i >= toIndex) {
                            position = elementSize
                        }
                    } else {
                        if (toIndex === -1) {
                            if (i > fromIndex) {
                                position = -elementSize
                            }
                        } else {
                            if (fromIndex < toIndex) {
                                if (i > fromIndex && i < toIndex) {
                                    position = -elementSize
                                }
                            } else {
                                if (fromIndex > toIndex) {
                                    if (i >= toIndex && i < fromIndex) {
                                        position = elementSize
                                    }
                                }
                            }
                        }
                    }
                    positions.push(position)
                }
                return positions
            },
            _moveItems: function(prevToIndex, toIndex) {
                var fromIndex = this.option("fromIndex");
                var isVerticalOrientation = this._isVerticalOrientation();
                var positionPropName = isVerticalOrientation ? "top" : "left";
                var $draggableItem = this._getDraggableElement();
                var elementSize = isVerticalOrientation ? ($draggableItem.outerHeight() + $draggableItem.outerHeight(true)) / 2 : ($draggableItem.outerWidth() + $draggableItem.outerWidth(true)) / 2;
                var items = this._getItems();
                var prevPositions = this._getPositions(items, elementSize, fromIndex, prevToIndex);
                var positions = this._getPositions(items, elementSize, fromIndex, toIndex);
                var animationConfig = this.option("animation");
                var rtlEnabled = this.option("rtlEnabled");
                for (var i = 0; i < items.length; i++) {
                    var $item = (0, _renderer2.default)(items[i]);
                    var prevPosition = prevPositions[i];
                    var position = positions[i];
                    if (null === toIndex || null === fromIndex) {
                        _fx2.default.stop($item);
                        _translator2.default.resetPosition($item)
                    } else {
                        if (prevPosition !== position) {
                            _fx2.default.stop($item);
                            _fx2.default.animate($item, (0, _extend.extend)({}, animationConfig, {
                                to: _defineProperty({}, positionPropName, !isVerticalOrientation && rtlEnabled ? -position : position)
                            }))
                        }
                    }
                }
            },
            _toggleDragSourceClass: function(value, $element) {
                var $sourceElement = $element || this._$sourceElement;
                this.callBase.apply(this, arguments);
                if (!this._isIndicateMode()) {
                    $sourceElement && $sourceElement.toggleClass(this._addWidgetPrefix("source-hidden"), value)
                }
            },
            _dispose: function() {
                this.reset();
                this.callBase()
            },
            _fireAddEvent: function(sourceEvent) {
                var args = this._getEventArgs(sourceEvent);
                this._getAction("onAdd")(args);
                return args.cancel
            },
            _fireRemoveEvent: function(sourceEvent) {
                var sourceDraggable = this._getSourceDraggable();
                var args = this._getEventArgs(sourceEvent);
                sourceDraggable._getAction("onRemove")(args);
                return args.cancel
            },
            _fireReorderEvent: function(sourceEvent) {
                var args = this._getEventArgs(sourceEvent);
                this._getAction("onReorder")(args);
                return args.promise || (new _deferred.Deferred).resolve()
            }
        });
        (0, _component_registrator2.default)(SORTABLE, Sortable);
        module.exports = Sortable
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.search_box_mixin.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _text_box = __webpack_require__( /*! ../text_box */ 88);
        var _text_box2 = _interopRequireDefault(_text_box);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = {
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    searchMode: "",
                    searchExpr: null,
                    searchValue: "",
                    searchEnabled: false,
                    searchEditorOptions: {}
                })
            },
            _initMarkup: function() {
                this._renderSearch();
                this.callBase()
            },
            _renderSearch: function() {
                var $element = this.$element();
                var searchEnabled = this.option("searchEnabled");
                var searchBoxClassName = this._addWidgetPrefix("search");
                var rootElementClassName = this._addWidgetPrefix("with-search");
                if (!searchEnabled) {
                    $element.removeClass(rootElementClassName);
                    this._removeSearchBox();
                    return
                }
                var editorOptions = this._getSearchEditorOptions();
                if (this._searchEditor) {
                    this._searchEditor.option(editorOptions)
                } else {
                    $element.addClass(rootElementClassName);
                    this._$searchEditorElement = (0, _renderer2.default)("<div>").addClass(searchBoxClassName).prependTo($element);
                    this._searchEditor = this._createComponent(this._$searchEditorElement, _text_box2.default, editorOptions)
                }
            },
            _removeSearchBox: function() {
                this._$searchEditorElement && this._$searchEditorElement.remove();
                delete this._$searchEditorElement;
                delete this._searchEditor
            },
            _getSearchEditorOptions: function() {
                var that = this;
                var userEditorOptions = that.option("searchEditorOptions");
                var searchText = _message2.default.format("Search");
                return (0, _extend.extend)({
                    mode: "search",
                    placeholder: searchText,
                    tabIndex: that.option("tabIndex"),
                    value: that.option("searchValue"),
                    valueChangeEvent: "input",
                    inputAttr: {
                        "aria-label": searchText
                    },
                    onValueChanged: function(e) {
                        var searchTimeout = that.option("searchTimeout");
                        that._valueChangeDeferred = new _deferred.Deferred;
                        clearTimeout(that._valueChangeTimeout);
                        that._valueChangeDeferred.done(function() {
                            this.option("searchValue", e.value)
                        }.bind(that));
                        if (e.event && "input" === e.event.type && searchTimeout) {
                            that._valueChangeTimeout = setTimeout(function() {
                                that._valueChangeDeferred.resolve()
                            }, searchTimeout)
                        } else {
                            that._valueChangeDeferred.resolve()
                        }
                    }
                }, userEditorOptions)
            },
            _getAriaTarget: function() {
                if (this.option("searchEnabled")) {
                    return this._itemContainer(true)
                }
                return this.$element()
            },
            _focusTarget: function() {
                if (this.option("searchEnabled")) {
                    return this._itemContainer(true)
                }
                return this.callBase()
            },
            _updateFocusState: function(e, isFocused) {
                if (this.option("searchEnabled")) {
                    this._toggleFocusClass(isFocused, this.$element())
                }
                this.callBase(e, isFocused)
            },
            getOperationBySearchMode: function(searchMode) {
                return "equals" === searchMode ? "=" : searchMode
            },
            _cleanAria: function($target) {
                this.setAria({
                    role: null,
                    activedescendant: null
                }, $target);
                $target.attr("tabIndex", null)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "searchEnabled":
                    case "searchEditorOptions":
                        this._cleanAria(this.option("searchEnabled") ? this.$element() : this._itemContainer());
                        this._invalidate();
                        break;
                    case "searchExpr":
                    case "searchMode":
                    case "searchValue":
                        if (!this._dataSource) {
                            _ui2.default.log("W1009");
                            return
                        }
                        if ("searchMode" === args.name) {
                            this._dataSource.searchOperation(this.getOperationBySearchMode(args.value))
                        } else {
                            this._dataSource[args.name](args.value)
                        }
                        this._dataSource.load();
                        break;
                    case "searchTimeout":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            focus: function() {
                if (!this.option("focusedElement") && this.option("searchEnabled")) {
                    this._searchEditor && this._searchEditor.focus();
                    return
                }
                this.callBase()
            },
            _refresh: function() {
                if (this._valueChangeDeferred) {
                    this._valueChangeDeferred.resolve()
                }
                this.callBase()
            }
        }
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/editor/ui.data_expression.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var variableWrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94);
        var dataCoreUtils = __webpack_require__( /*! ../../core/utils/data */ 20);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var DataHelperMixin = __webpack_require__( /*! ../../data_helper */ 82);
        var DataSourceModule = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var ArrayStore = __webpack_require__( /*! ../../data/array_store */ 70);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var DataExpressionMixin = extend({}, DataHelperMixin, {
            _dataExpressionDefaultOptions: function() {
                return {
                    items: [],
                    dataSource: null,
                    itemTemplate: "item",
                    value: null,
                    valueExpr: "this",
                    displayExpr: void 0
                }
            },
            _initDataExpressions: function() {
                this._compileValueGetter();
                this._compileDisplayGetter();
                this._initDynamicTemplates();
                this._initDataSource();
                this._itemsToDataSource()
            },
            _itemsToDataSource: function() {
                if (!this.option("dataSource")) {
                    this._dataSource = new DataSourceModule.DataSource({
                        store: new ArrayStore(this.option("items")),
                        pageSize: 0
                    })
                }
            },
            _compileDisplayGetter: function() {
                this._displayGetter = dataCoreUtils.compileGetter(this._displayGetterExpr())
            },
            _displayGetterExpr: function() {
                return this.option("displayExpr")
            },
            _compileValueGetter: function() {
                this._valueGetter = dataCoreUtils.compileGetter(this._valueGetterExpr())
            },
            _valueGetterExpr: function() {
                return this.option("valueExpr") || "this"
            },
            _loadValue: function(value) {
                var deferred = new Deferred;
                value = this._unwrappedValue(value);
                if (!typeUtils.isDefined(value)) {
                    return deferred.reject().promise()
                }
                this._loadSingle(this._valueGetterExpr(), value).done(function(item) {
                    this._isValueEquals(this._valueGetter(item), value) ? deferred.resolve(item) : deferred.reject()
                }.bind(this)).fail(function() {
                    deferred.reject()
                });
                return deferred.promise()
            },
            _getCurrentValue: function() {
                return this.option("value")
            },
            _unwrappedValue: function(value) {
                value = typeUtils.isDefined(value) ? value : this._getCurrentValue();
                if (value && this._dataSource && "this" === this._valueGetterExpr()) {
                    value = this._getItemKey(value)
                }
                return variableWrapper.unwrap(value)
            },
            _getItemKey: function(value) {
                var key = this._dataSource.key();
                if (Array.isArray(key)) {
                    var result = {};
                    for (var i = 0, n = key.length; i < n; i++) {
                        result[key[i]] = value[key[i]]
                    }
                    return result
                }
                if (key && "object" === _typeof(value)) {
                    value = value[key]
                }
                return value
            },
            _isValueEquals: function(value1, value2) {
                var dataSourceKey = this._dataSource && this._dataSource.key();
                var isDefined = typeUtils.isDefined;
                var result = this._compareValues(value1, value2);
                if (!result && dataSourceKey && isDefined(value1) && isDefined(value2)) {
                    if (Array.isArray(dataSourceKey)) {
                        result = this._compareByCompositeKey(value1, value2, dataSourceKey)
                    } else {
                        result = this._compareByKey(value1, value2, dataSourceKey)
                    }
                }
                return result
            },
            _compareByCompositeKey: function(value1, value2, key) {
                var isObject = typeUtils.isObject;
                if (!isObject(value1) || !isObject(value2)) {
                    return false
                }
                for (var i = 0, n = key.length; i < n; i++) {
                    if (value1[key[i]] !== value2[key[i]]) {
                        return false
                    }
                }
                return true
            },
            _compareByKey: function(value1, value2, key) {
                var ensureDefined = commonUtils.ensureDefined;
                var unwrapObservable = variableWrapper.unwrap;
                var valueKey1 = ensureDefined(unwrapObservable(value1[key]), value1);
                var valueKey2 = ensureDefined(unwrapObservable(value2[key]), value2);
                return this._compareValues(valueKey1, valueKey2)
            },
            _compareValues: function(value1, value2) {
                return dataCoreUtils.toComparable(value1, true) === dataCoreUtils.toComparable(value2, true)
            },
            _initDynamicTemplates: commonUtils.noop,
            _setCollectionWidgetItemTemplate: function() {
                this._initDynamicTemplates();
                this._setCollectionWidgetOption("itemTemplate", this.option("itemTemplate"))
            },
            _getCollectionKeyExpr: function() {
                var valueExpr = this.option("valueExpr");
                var isValueExprField = typeUtils.isString(valueExpr) && "this" !== valueExpr || typeUtils.isFunction(valueExpr);
                return isValueExprField ? valueExpr : null
            },
            _dataExpressionOptionChanged: function(args) {
                switch (args.name) {
                    case "items":
                        this._itemsToDataSource();
                        this._setCollectionWidgetOption("items");
                        break;
                    case "dataSource":
                        this._initDataSource();
                        break;
                    case "itemTemplate":
                        this._setCollectionWidgetItemTemplate();
                        break;
                    case "valueExpr":
                        this._compileValueGetter();
                        break;
                    case "displayExpr":
                        this._compileDisplayGetter();
                        this._initDynamicTemplates();
                        this._setCollectionWidgetOption("displayExpr")
                }
            }
        });
        module.exports = DataExpressionMixin
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/button_group.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _button = __webpack_require__( /*! ./button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _bindable_template = __webpack_require__( /*! ../core/templates/bindable_template */ 59);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var BUTTON_GROUP_CLASS = "dx-buttongroup";
        var BUTTON_GROUP_WRAPPER_CLASS = BUTTON_GROUP_CLASS + "-wrapper";
        var BUTTON_GROUP_ITEM_CLASS = BUTTON_GROUP_CLASS + "-item";
        var BUTTON_GROUP_FIRST_ITEM_CLASS = BUTTON_GROUP_CLASS + "-first-item";
        var BUTTON_GROUP_LAST_ITEM_CLASS = BUTTON_GROUP_CLASS + "-last-item";
        var BUTTON_GROUP_ITEM_HAS_WIDTH = BUTTON_GROUP_ITEM_CLASS + "-has-width";
        var SHAPE_STANDARD_CLASS = "dx-shape-standard";
        var ButtonCollection = _uiCollection_widget2.default.inherit({
            _initTemplates: function() {
                var _this = this;
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    item: new _bindable_template.BindableTemplate(function($container, data, model) {
                        _this._prepareItemStyles($container);
                        _this._createComponent($container, _button2.default, (0, _extend.extend)({}, model, data, _this._getBasicButtonOptions(), {
                            _templateData: model,
                            template: model.template || _this.option("buttonTemplate")
                        }))
                    }, ["text", "type", "icon", "disabled", "visible", "hint"], this.option("integrationOptions.watchMethod"))
                })
            },
            _getBasicButtonOptions: function() {
                return {
                    focusStateEnabled: false,
                    onClick: null,
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    activeStateEnabled: this.option("activeStateEnabled"),
                    stylingMode: this.option("stylingMode")
                }
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    itemTemplateProperty: null
                })
            },
            _prepareItemStyles: function($item) {
                var itemIndex = $item.data("dxItemIndex");
                0 === itemIndex && $item.addClass(BUTTON_GROUP_FIRST_ITEM_CLASS);
                var items = this.option("items");
                items && itemIndex === items.length - 1 && $item.addClass(BUTTON_GROUP_LAST_ITEM_CLASS);
                $item.addClass(SHAPE_STANDARD_CLASS)
            },
            _renderItemContent: function(args) {
                args.container = (0, _renderer2.default)(args.container).parent();
                return this.callBase(args)
            },
            _renderItemContentByNode: function(args, $node) {
                args.container = (0, _renderer2.default)(args.container.children().first());
                return this.callBase(args, $node)
            },
            _focusTarget: function() {
                return this.$element().parent()
            },
            _keyboardEventBindingTarget: function() {
                return this._focusTarget()
            },
            _refreshContent: function() {
                this._prepareContent();
                this._renderContent()
            },
            _itemClass: function() {
                return BUTTON_GROUP_ITEM_CLASS
            },
            _itemSelectHandler: function(e) {
                if ("single" === this.option("selectionMode") && this.isItemSelected(e.currentTarget)) {
                    return
                }
                this.callBase(e)
            }
        });
        var ButtonGroup = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    hoverStateEnabled: true,
                    focusStateEnabled: true,
                    selectionMode: "single",
                    selectedItems: [],
                    selectedItemKeys: [],
                    stylingMode: "contained",
                    keyExpr: "text",
                    items: [],
                    buttonTemplate: "content",
                    onSelectionChanged: null,
                    onItemClick: null
                })
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    itemTemplate: {
                        since: "19.2",
                        alias: "buttonTemplate"
                    }
                })
            },
            _init: function() {
                this.callBase();
                this._createItemClickAction()
            },
            _createItemClickAction: function() {
                this._itemClickAction = this._createActionByOption("onItemClick")
            },
            _initMarkup: function() {
                this.setAria("role", "group");
                this.$element().addClass(BUTTON_GROUP_CLASS);
                this._renderButtons();
                this._syncSelectionOptions();
                this.callBase()
            },
            _fireSelectionChangeEvent: function(addedItems, removedItems) {
                this._createActionByOption("onSelectionChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })({
                    addedItems: addedItems,
                    removedItems: removedItems
                })
            },
            _renderButtons: function() {
                var _this2 = this;
                var $buttons = (0, _renderer2.default)("<div>").addClass(BUTTON_GROUP_WRAPPER_CLASS).appendTo(this.$element());
                var selectedItems = this.option("selectedItems");
                var options = {
                    selectionMode: this.option("selectionMode"),
                    items: this.option("items"),
                    keyExpr: this.option("keyExpr"),
                    buttonTemplate: this.option("buttonTemplate"),
                    scrollingEnabled: false,
                    selectedItemKeys: this.option("selectedItemKeys"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    activeStateEnabled: this.option("activeStateEnabled"),
                    stylingMode: this.option("stylingMode"),
                    accessKey: this.option("accessKey"),
                    tabIndex: this.option("tabIndex"),
                    noDataText: "",
                    selectionRequired: false,
                    onItemRendered: function(e) {
                        var width = _this2.option("width");
                        (0, _type.isDefined)(width) && (0, _renderer2.default)(e.itemElement).addClass(BUTTON_GROUP_ITEM_HAS_WIDTH)
                    },
                    onSelectionChanged: function(e) {
                        _this2._syncSelectionOptions();
                        _this2._fireSelectionChangeEvent(e.addedItems, e.removedItems)
                    },
                    onItemClick: function(e) {
                        _this2._itemClickAction(e)
                    }
                };
                if ((0, _type.isDefined)(selectedItems) && selectedItems.length) {
                    options.selectedItems = selectedItems
                }
                this._buttonsCollection = this._createComponent($buttons, ButtonCollection, options)
            },
            _syncSelectionOptions: function() {
                this._setOptionWithoutOptionChange("selectedItems", this._buttonsCollection.option("selectedItems"));
                this._setOptionWithoutOptionChange("selectedItemKeys", this._buttonsCollection.option("selectedItemKeys"))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "stylingMode":
                    case "selectionMode":
                    case "keyExpr":
                    case "buttonTemplate":
                    case "items":
                    case "activeStateEnabled":
                    case "focusStateEnabled":
                    case "hoverStateEnabled":
                    case "tabIndex":
                        this._invalidate();
                        break;
                    case "selectedItemKeys":
                    case "selectedItems":
                        this._buttonsCollection.option(args.name, args.value);
                        break;
                    case "onItemClick":
                        this._createItemClickAction();
                        break;
                    case "onSelectionChanged":
                        break;
                    case "width":
                        this.callBase(args);
                        this._buttonsCollection.itemElements().toggleClass(BUTTON_GROUP_ITEM_HAS_WIDTH, !!args.value);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        (0, _component_registrator2.default)("dxButtonGroup", ButtonGroup);
        module.exports = ButtonGroup
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/calendar.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./calendar/ui.calendar */ 551)
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _empty_template = __webpack_require__( /*! ../../core/templates/empty_template */ 87);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _uiDrawerRenderingStrategy = __webpack_require__( /*! ./ui.drawer.rendering.strategy.push */ 574);
        var _uiDrawerRenderingStrategy2 = _interopRequireDefault(_uiDrawerRenderingStrategy);
        var _uiDrawerRenderingStrategy3 = __webpack_require__( /*! ./ui.drawer.rendering.strategy.shrink */ 575);
        var _uiDrawerRenderingStrategy4 = _interopRequireDefault(_uiDrawerRenderingStrategy3);
        var _uiDrawerRenderingStrategy5 = __webpack_require__( /*! ./ui.drawer.rendering.strategy.overlap */ 576);
        var _uiDrawerRenderingStrategy6 = _interopRequireDefault(_uiDrawerRenderingStrategy5);
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 200);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DRAWER_CLASS = "dx-drawer";
        var DRAWER_WRAPPER_CLASS = "dx-drawer-wrapper";
        var DRAWER_PANEL_CONTENT_CLASS = "dx-drawer-panel-content";
        var DRAWER_VIEW_CONTENT_CLASS = "dx-drawer-content";
        var DRAWER_SHADER_CLASS = "dx-drawer-shader";
        var INVISIBLE_STATE_CLASS = "dx-state-invisible";
        var OPENED_STATE_CLASS = "dx-drawer-opened";
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var PANEL_TEMPLATE_NAME = "panel";
        var Drawer = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    position: "left",
                    opened: false,
                    minSize: null,
                    maxSize: null,
                    shading: false,
                    template: PANEL_TEMPLATE_NAME,
                    openedStateMode: "shrink",
                    revealMode: "slide",
                    animationEnabled: true,
                    animationDuration: 400,
                    closeOnOutsideClick: false,
                    contentTemplate: ANONYMOUS_TEMPLATE_NAME,
                    target: void 0
                })
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    target: {
                        since: "20.1",
                        message: "Functionality associated with this option is not intended for the Drawer widget."
                    }
                })
            },
            _init: function() {
                this.callBase();
                this._initStrategy();
                this.$element().addClass(DRAWER_CLASS);
                this._animations = [];
                this._whenAnimationCompleted = void 0;
                this._whenPanelContentRendered = void 0;
                this._whenPanelContentRefreshed = void 0;
                this._$wrapper = (0, _renderer2.default)("<div>").addClass(DRAWER_WRAPPER_CLASS);
                this._$viewContentWrapper = (0, _renderer2.default)("<div>").addClass(DRAWER_VIEW_CONTENT_CLASS);
                this._$wrapper.append(this._$viewContentWrapper);
                this.$element().append(this._$wrapper)
            },
            _initStrategy: function() {
                switch (this.option("openedStateMode")) {
                    case "push":
                        this._strategy = new _uiDrawerRenderingStrategy2.default(this);
                        break;
                    case "shrink":
                        this._strategy = new _uiDrawerRenderingStrategy4.default(this);
                        break;
                    case "overlap":
                        this._strategy = new _uiDrawerRenderingStrategy6.default(this);
                        break;
                    default:
                        this._strategy = new _uiDrawerRenderingStrategy2.default(this)
                }
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                var defaultTemplates = {};
                defaultTemplates[PANEL_TEMPLATE_NAME] = new _empty_template.EmptyTemplate;
                defaultTemplates[ANONYMOUS_TEMPLATE_NAME] = new _empty_template.EmptyTemplate;
                this._templateManager.addDefaultTemplates(defaultTemplates);
                this.callBase()
            },
            _viewContentWrapperClickHandler: function(e) {
                var closeOnOutsideClick = this.option("closeOnOutsideClick");
                if (_type2.default.isFunction(closeOnOutsideClick)) {
                    closeOnOutsideClick = closeOnOutsideClick(e)
                }
                if (closeOnOutsideClick && this.option("opened")) {
                    this.stopAnimations();
                    if (this.option("shading")) {
                        e.preventDefault()
                    }
                    this.hide()
                }
            },
            _initMarkup: function() {
                this.callBase();
                this._toggleOpenedStateClass(this.option("opened"));
                this._renderPanelContentWrapper();
                this._refreshOpenedStateModeClass();
                this._refreshRevealModeClass();
                this._renderShader();
                this._whenPanelContentRendered = new _deferred.Deferred;
                this._strategy.renderPanelContent(this._whenPanelContentRendered);
                this._renderViewContent();
                _events_engine2.default.off(this._$viewContentWrapper, _click.name);
                _events_engine2.default.on(this._$viewContentWrapper, _click.name, this._viewContentWrapperClickHandler.bind(this));
                this._refreshPositionClass();
                this._refreshWrapperChildrenOrder()
            },
            _render: function() {
                var _this = this;
                this._initMinMaxSize();
                this.callBase();
                this._whenPanelContentRendered.always(function() {
                    _this._initMinMaxSize();
                    _this._strategy.refreshPanelElementSize("slide" === _this.option("revealMode") || !_this.isHorizontalDirection());
                    _this._renderPosition(_this.option("opened"), false)
                })
            },
            _renderPanelContentWrapper: function() {
                this._$panelContentWrapper = (0, _renderer2.default)("<div>").addClass(DRAWER_PANEL_CONTENT_CLASS);
                this._$wrapper.append(this._$panelContentWrapper)
            },
            _refreshOpenedStateModeClass: function(prevOpenedStateMode) {
                if (prevOpenedStateMode) {
                    this.$element().removeClass(DRAWER_CLASS + "-" + prevOpenedStateMode)
                }
                this.$element().addClass(DRAWER_CLASS + "-" + this.option("openedStateMode"))
            },
            _refreshPositionClass: function(prevPosition) {
                if (prevPosition) {
                    this.$element().removeClass(DRAWER_CLASS + "-" + prevPosition)
                }
                this.$element().addClass(DRAWER_CLASS + "-" + this.calcTargetPosition())
            },
            _refreshWrapperChildrenOrder: function() {
                var position = this.calcTargetPosition();
                if (this._strategy.isViewContentFirst(position, this.option("rtlEnabled"))) {
                    this._$wrapper.prepend(this._$viewContentWrapper)
                } else {
                    this._$wrapper.prepend(this._$panelContentWrapper)
                }
            },
            _refreshRevealModeClass: function(prevRevealMode) {
                if (prevRevealMode) {
                    this.$element().removeClass(DRAWER_CLASS + "-" + prevRevealMode)
                }
                this.$element().addClass(DRAWER_CLASS + "-" + this.option("revealMode"))
            },
            _renderViewContent: function() {
                var contentTemplateOption = this.option("contentTemplate");
                var contentTemplate = this._getTemplate(contentTemplateOption);
                if (contentTemplate) {
                    var $viewTemplate = contentTemplate.render({
                        container: this.viewContent(),
                        noModel: true,
                        transclude: this._templateManager.anonymousTemplateName === contentTemplateOption
                    });
                    if ($viewTemplate.hasClass("ng-scope")) {
                        (0, _renderer2.default)(this._$viewContentWrapper).children().not(".".concat(DRAWER_SHADER_CLASS)).replaceWith($viewTemplate)
                    }
                }
            },
            _renderShader: function() {
                this._$shader = this._$shader || (0, _renderer2.default)("<div>").addClass(DRAWER_SHADER_CLASS);
                this._$shader.appendTo(this.viewContent());
                this._toggleShaderVisibility(this.option("opened"))
            },
            _initSize: function() {
                this._initMinMaxSize()
            },
            _initMinMaxSize: function() {
                var realPanelSize = this.isHorizontalDirection() ? this.getRealPanelWidth() : this.getRealPanelHeight();
                this._maxSize = this.option("maxSize") || realPanelSize;
                this._minSize = this.option("minSize") || 0
            },
            calcTargetPosition: function() {
                var position = this.option("position");
                var rtl = this.option("rtlEnabled");
                var result = position;
                if ("before" === position) {
                    result = rtl ? "right" : "left"
                } else {
                    if ("after" === position) {
                        result = rtl ? "left" : "right"
                    }
                }
                return result
            },
            getOverlayTarget: function() {
                return this._options.silent("target") || this._$wrapper
            },
            getOverlay: function() {
                return this._overlay
            },
            getMaxSize: function() {
                return this._maxSize
            },
            getMinSize: function() {
                return this._minSize
            },
            getRealPanelWidth: function() {
                if ((0, _window.hasWindow)()) {
                    if (_type2.default.isDefined(this.option("templateSize"))) {
                        return this.option("templateSize")
                    } else {
                        return this.getElementWidth(this._strategy.getPanelContent())
                    }
                } else {
                    return 0
                }
            },
            getElementWidth: function($element) {
                var $children = $element.children();
                return $children.length ? (0, _position.getBoundingRect)($children.eq(0).get(0)).width : (0, _position.getBoundingRect)($element.get(0)).width
            },
            getRealPanelHeight: function() {
                if ((0, _window.hasWindow)()) {
                    if (_type2.default.isDefined(this.option("templateSize"))) {
                        return this.option("templateSize")
                    } else {
                        return this.getElementHeight(this._strategy.getPanelContent())
                    }
                } else {
                    return 0
                }
            },
            getElementHeight: function($element) {
                var $children = $element.children();
                return $children.length ? (0, _position.getBoundingRect)($children.eq(0).get(0)).height : (0, _position.getBoundingRect)($element.get(0)).height
            },
            isHorizontalDirection: function() {
                var position = this.calcTargetPosition();
                return "left" === position || "right" === position
            },
            stopAnimations: function(jumpToEnd) {
                _fx2.default.stop(this._$shader, jumpToEnd);
                _fx2.default.stop((0, _renderer2.default)(this.content()), jumpToEnd);
                _fx2.default.stop((0, _renderer2.default)(this.viewContent()), jumpToEnd);
                var overlay = this.getOverlay();
                if (overlay) {
                    _fx2.default.stop((0, _renderer2.default)(overlay.$content()), jumpToEnd)
                }
            },
            resizeContent: function() {
                this.resizeViewContent
            },
            resizeViewContent: function() {
                (0, _dom.triggerResizeEvent)(this.viewContent())
            },
            _isInvertedPosition: function() {
                var position = this.calcTargetPosition();
                return "right" === position || "bottom" === position
            },
            _renderPosition: function(isDrawerOpened, animate, jumpToEnd) {
                this.stopAnimations(jumpToEnd);
                this._animations = [];
                if (!(0, _window.hasWindow)()) {
                    return
                }
                animate = _type2.default.isDefined(animate) ? animate && this.option("animationEnabled") : this.option("animationEnabled");
                if (isDrawerOpened) {
                    this._toggleShaderVisibility(isDrawerOpened)
                }
                this._strategy.renderPosition(isDrawerOpened, animate);
                this._strategy.renderShaderVisibility(isDrawerOpened, animate, this.option("animationDuration"))
            },
            _animationCompleteHandler: function() {
                this.resizeViewContent();
                if (this._whenAnimationCompleted) {
                    this._whenAnimationCompleted.resolve();
                    this._animations = []
                }
            },
            _getPositionCorrection: function() {
                return this._isInvertedPosition() ? -1 : 1
            },
            _dispose: function() {
                _uiDrawerRendering.animation.complete((0, _renderer2.default)(this.viewContent()));
                this.callBase()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                this._initMinMaxSize();
                this._strategy.refreshPanelElementSize("slide" === this.option("revealMode"));
                this._renderPosition(this.option("opened"), false)
            },
            _toggleShaderVisibility: function(visible) {
                if (this.option("shading")) {
                    this._$shader.toggleClass(INVISIBLE_STATE_CLASS, !visible);
                    this._$shader.css("visibility", visible ? "visible" : "hidden")
                } else {
                    this._$shader.toggleClass(INVISIBLE_STATE_CLASS, true);
                    this._$shader.css("visibility", "hidden")
                }
                this.updateZIndex(visible)
            },
            updateZIndex: function(visible) {
                if (visible) {
                    this._strategy.updateZIndex()
                } else {
                    this._strategy.clearZIndex()
                }
            },
            _toggleOpenedStateClass: function(opened) {
                this.$element().toggleClass(OPENED_STATE_CLASS, opened)
            },
            _refreshPanel: function() {
                var _this2 = this;
                (0, _renderer2.default)(this.viewContent()).css("paddingLeft", 0);
                (0, _renderer2.default)(this.viewContent()).css("left", 0);
                (0, _renderer2.default)(this.viewContent()).css("transform", "translate(0px, 0px)");
                this._removePanelContentWrapper();
                this._removeOverlay();
                this._renderPanelContentWrapper();
                this._refreshWrapperChildrenOrder();
                this._whenPanelContentRefreshed = new _deferred.Deferred;
                this._strategy.renderPanelContent(this._whenPanelContentRefreshed);
                if ((0, _window.hasWindow)()) {
                    this._whenPanelContentRefreshed.always(function() {
                        _this2._strategy.refreshPanelElementSize("slide" === _this2.option("revealMode"));
                        _this2._renderPosition(_this2.option("opened"), false, true)
                    })
                }
            },
            _clean: function() {
                this._cleanFocusState();
                this._strategy.clearZIndex();
                this._removePanelContentWrapper();
                this._removeOverlay()
            },
            _removePanelContentWrapper: function() {
                if (this._$panelContentWrapper) {
                    this._$panelContentWrapper.remove()
                }
            },
            _removeOverlay: function() {
                if (this._overlay) {
                    this._overlay.dispose();
                    delete this._overlay;
                    delete this._$panelContentWrapper
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "opened":
                        this._renderPosition(args.value);
                        this._toggleOpenedStateClass(args.value);
                        break;
                    case "position":
                        this._refreshPositionClass(args.previousValue);
                        this._refreshWrapperChildrenOrder();
                        this._invalidate();
                        break;
                    case "contentTemplate":
                    case "template":
                        this._invalidate();
                        break;
                    case "openedStateMode":
                    case "target":
                        this._initStrategy();
                        this._refreshOpenedStateModeClass(args.previousValue);
                        this._refreshPanel();
                        break;
                    case "minSize":
                    case "maxSize":
                        this._initMinMaxSize();
                        this._renderPosition(this.option("opened"), false);
                        break;
                    case "revealMode":
                        this._refreshRevealModeClass(args.previousValue);
                        this._refreshPanel();
                        break;
                    case "shading":
                        this._strategy.clearZIndex();
                        this._toggleShaderVisibility(this.option("opened"));
                        break;
                    case "animationEnabled":
                    case "animationDuration":
                    case "closeOnOutsideClick":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            content: function() {
                return (0, _dom.getPublicElement)(this._$panelContentWrapper)
            },
            viewContent: function() {
                return (0, _dom.getPublicElement)(this._$viewContentWrapper)
            },
            show: function() {
                return this.toggle(true)
            },
            hide: function() {
                return this.toggle(false)
            },
            toggle: function(opened) {
                var targetOpened = void 0 === opened ? !this.option("opened") : opened;
                this._whenAnimationCompleted = new _deferred.Deferred;
                this.option("opened", targetOpened);
                return this._whenAnimationCompleted.promise()
            }
        });
        (0, _component_registrator2.default)("dxDrawer", Drawer);
        module.exports = Drawer
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/overlay/utils.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.getElementMaxHeightByWindow = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var WINDOW_HEIGHT_PERCENT = .9;
        exports.getElementMaxHeightByWindow = function($element, startLocation) {
            var window = (0, _window.getWindow)();
            var actualOffset;
            if ((0, _type.isNumeric)(startLocation)) {
                actualOffset = (0, _renderer2.default)(window).innerHeight() - startLocation + (0, _renderer2.default)(window).scrollTop()
            } else {
                var offsetTop = $element.offset().top - (0, _renderer2.default)(window).scrollTop();
                var offsetBottom = (0, _renderer2.default)(window).innerHeight() - offsetTop - $element.outerHeight();
                actualOffset = Math.max(offsetTop, offsetBottom)
            }
            return actualOffset * WINDOW_HEIGHT_PERCENT
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/file_uploader.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _ajax = __webpack_require__( /*! ../core/utils/ajax */ 75);
        var _ajax2 = _interopRequireDefault(_ajax);
        var _editor = __webpack_require__( /*! ./editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _button = __webpack_require__( /*! ./button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _progress_bar = __webpack_require__( /*! ./progress_bar */ 238);
        var _progress_bar2 = _interopRequireDefault(_progress_bar);
        var _browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _click = __webpack_require__( /*! ../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _message = __webpack_require__( /*! ../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _themes = __webpack_require__( /*! ./themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var window = (0, _window.getWindow)();
        var FILEUPLOADER_CLASS = "dx-fileuploader";
        var FILEUPLOADER_EMPTY_CLASS = "dx-fileuploader-empty";
        var FILEUPLOADER_SHOW_FILE_LIST_CLASS = "dx-fileuploader-show-file-list";
        var FILEUPLOADER_DRAGOVER_CLASS = "dx-fileuploader-dragover";
        var FILEUPLOADER_WRAPPER_CLASS = "dx-fileuploader-wrapper";
        var FILEUPLOADER_CONTAINER_CLASS = "dx-fileuploader-container";
        var FILEUPLOADER_CONTENT_CLASS = "dx-fileuploader-content";
        var FILEUPLOADER_INPUT_WRAPPER_CLASS = "dx-fileuploader-input-wrapper";
        var FILEUPLOADER_INPUT_CONTAINER_CLASS = "dx-fileuploader-input-container";
        var FILEUPLOADER_INPUT_LABEL_CLASS = "dx-fileuploader-input-label";
        var FILEUPLOADER_INPUT_CLASS = "dx-fileuploader-input";
        var FILEUPLOADER_FILES_CONTAINER_CLASS = "dx-fileuploader-files-container";
        var FILEUPLOADER_FILE_CONTAINER_CLASS = "dx-fileuploader-file-container";
        var FILEUPLOADER_FILE_INFO_CLASS = "dx-fileuploader-file-info";
        var FILEUPLOADER_FILE_STATUS_MESSAGE_CLASS = "dx-fileuploader-file-status-message";
        var FILEUPLOADER_FILE_CLASS = "dx-fileuploader-file";
        var FILEUPLOADER_FILE_NAME_CLASS = "dx-fileuploader-file-name";
        var FILEUPLOADER_FILE_SIZE_CLASS = "dx-fileuploader-file-size";
        var FILEUPLOADER_BUTTON_CLASS = "dx-fileuploader-button";
        var FILEUPLOADER_BUTTON_CONTAINER_CLASS = "dx-fileuploader-button-container";
        var FILEUPLOADER_CANCEL_BUTTON_CLASS = "dx-fileuploader-cancel-button";
        var FILEUPLOADER_UPLOAD_BUTTON_CLASS = "dx-fileuploader-upload-button";
        var FILEUPLOADER_INVALID_CLASS = "dx-fileuploader-invalid";
        var FILEUPLOADER_AFTER_LOAD_DELAY = 400;
        var FILEUPLOADER_CHUNK_META_DATA_NAME = "chunkMetadata";
        var renderFileUploaderInput = function() {
            return (0, _renderer2.default)("<input>").attr("type", "file")
        };
        var isFormDataSupported = function() {
            return !!window.FormData
        };
        var FileUploader = function(_Editor) {
            _inherits(FileUploader, _Editor);
            var _super = _createSuper(FileUploader);

            function FileUploader() {
                _classCallCheck(this, FileUploader);
                return _super.apply(this, arguments)
            }
            _createClass(FileUploader, [{
                key: "_supportedKeys",
                value: function() {
                    var _this = this;
                    var click = function(e) {
                        e.preventDefault();
                        var $selectButton = _this._selectButton.$element();
                        _events_engine2.default.trigger($selectButton, _click2.default.name)
                    };
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileUploader.prototype), "_supportedKeys", this).call(this), {
                        space: click,
                        enter: click
                    })
                }
            }, {
                key: "_setOptionsByReference",
                value: function() {
                    _get(_getPrototypeOf(FileUploader.prototype), "_setOptionsByReference", this).call(this);
                    (0, _extend.extend)(this._optionsByReference, {
                        value: true
                    })
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileUploader.prototype), "_getDefaultOptions", this).call(this), {
                        chunkSize: 0,
                        value: [],
                        selectButtonText: _message2.default.format("dxFileUploader-selectFile"),
                        uploadButtonText: _message2.default.format("dxFileUploader-upload"),
                        labelText: _message2.default.format("dxFileUploader-dropFile"),
                        name: "files[]",
                        multiple: false,
                        accept: "",
                        uploadUrl: "/",
                        allowCanceling: true,
                        showFileList: true,
                        progress: 0,
                        readyToUploadMessage: _message2.default.format("dxFileUploader-readyToUpload"),
                        uploadedMessage: _message2.default.format("dxFileUploader-uploaded"),
                        uploadFailedMessage: _message2.default.format("dxFileUploader-uploadFailedMessage"),
                        uploadMode: "instantly",
                        uploadMethod: "POST",
                        uploadHeaders: {},
                        onUploadStarted: null,
                        onUploaded: null,
                        onProgress: null,
                        onUploadError: null,
                        onUploadAborted: null,
                        allowedFileExtensions: [],
                        maxFileSize: 0,
                        minFileSize: 0,
                        inputAttr: {},
                        invalidFileExtensionMessage: _message2.default.format("dxFileUploader-invalidFileExtension"),
                        invalidMaxFileSizeMessage: _message2.default.format("dxFileUploader-invalidMaxFileSize"),
                        invalidMinFileSizeMessage: _message2.default.format("dxFileUploader-invalidMinFileSize"),
                        extendSelection: true,
                        validationMessageMode: "always",
                        uploadFile: null,
                        uploadChunk: null,
                        abortUpload: null,
                        validationMessageOffset: {
                            h: 0,
                            v: 0
                        },
                        useNativeInputClick: false,
                        useDragOver: true,
                        nativeDropSupported: true,
                        _uploadButtonType: "normal"
                    })
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(FileUploader.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                        },
                        options: {
                            focusStateEnabled: true
                        }
                    }, {
                        device: [{
                            platform: "android"
                        }],
                        options: {
                            validationMessageOffset: {
                                v: 0
                            }
                        }
                    }, {
                        device: function() {
                            return "desktop" !== _devices2.default.real().deviceType
                        },
                        options: {
                            useDragOver: false
                        }
                    }, {
                        device: function() {
                            return !isFormDataSupported()
                        },
                        options: {
                            uploadMode: "useForm"
                        }
                    }, {
                        device: function() {
                            return _browser2.default.msie || "desktop" !== _devices2.default.real().deviceType
                        },
                        options: {
                            nativeDropSupported: false
                        }
                    }, {
                        device: function() {
                            return _themes2.default.isMaterial()
                        },
                        options: {
                            _uploadButtonType: "default"
                        }
                    }])
                }
            }, {
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(FileUploader.prototype), "_init", this).call(this);
                    this._initFileInput();
                    this._initLabel();
                    this._setUploadStrategy();
                    this._createFiles();
                    this._createUploadStartedAction();
                    this._createUploadedAction();
                    this._createProgressAction();
                    this._createUploadErrorAction();
                    this._createUploadAbortedAction()
                }
            }, {
                key: "_setUploadStrategy",
                value: function() {
                    var strategy = null;
                    if (this.option("chunkSize") > 0) {
                        var uploadChunk = this.option("uploadChunk");
                        strategy = uploadChunk && (0, _type.isFunction)(uploadChunk) ? new CustomChunksFileUploadStrategy(this) : new DefaultChunksFileUploadStrategy(this)
                    } else {
                        var uploadFile = this.option("uploadFile");
                        strategy = uploadFile && (0, _type.isFunction)(uploadFile) ? new CustomWholeFileUploadStrategy(this) : new DefaultWholeFileUploadStrategy(this)
                    }
                    this._uploadStrategy = strategy
                }
            }, {
                key: "_initFileInput",
                value: function() {
                    var _this2 = this;
                    this._isCustomClickEvent = false;
                    if (!this._$fileInput) {
                        this._$fileInput = renderFileUploaderInput();
                        _events_engine2.default.on(this._$fileInput, "change", this._inputChangeHandler.bind(this));
                        _events_engine2.default.on(this._$fileInput, "click", function(e) {
                            e.stopPropagation();
                            return _this2.option("useNativeInputClick") || _this2._isCustomClickEvent
                        })
                    }
                    this._$fileInput.prop({
                        multiple: this.option("multiple"),
                        accept: this.option("accept"),
                        tabIndex: -1
                    })
                }
            }, {
                key: "_inputChangeHandler",
                value: function() {
                    if (this._doPreventInputChange) {
                        return
                    }
                    var fileName = this._$fileInput.val().replace(/^.*\\/, "");
                    var files = this._$fileInput.prop("files");
                    if (files && !files.length) {
                        return
                    }
                    var value = files ? this._getFiles(files) : [{
                        name: fileName
                    }];
                    this._changeValue(value);
                    if ("instantly" === this.option("uploadMode")) {
                        this._uploadFiles()
                    }
                }
            }, {
                key: "_shouldFileListBeExtended",
                value: function() {
                    return "useForm" !== this.option("uploadMode") && this.option("extendSelection") && this.option("multiple")
                }
            }, {
                key: "_removeDuplicates",
                value: function(files, value) {
                    var result = [];
                    for (var i = 0; i < value.length; i++) {
                        if (!this._isFileInArray(files, value[i])) {
                            result.push(value[i])
                        }
                    }
                    return result
                }
            }, {
                key: "_isFileInArray",
                value: function(files, file) {
                    for (var i = 0; i < files.length; i++) {
                        var item = files[i];
                        if (item.size === file.size && item.name === file.name) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_changeValue",
                value: function(value) {
                    var files = this._shouldFileListBeExtended() ? this.option("value").slice() : [];
                    if ("instantly" !== this.option("uploadMode")) {
                        value = this._removeDuplicates(files, value)
                    }
                    this.option("value", files.concat(value))
                }
            }, {
                key: "_getFiles",
                value: function(fileList) {
                    var values = [];
                    (0, _iterator.each)(fileList, function(_, value) {
                        return values.push(value)
                    });
                    return values
                }
            }, {
                key: "_initLabel",
                value: function() {
                    if (!this._$inputLabel) {
                        this._$inputLabel = (0, _renderer2.default)("<div>")
                    }
                    this._$inputLabel.text(this.option("labelText"))
                }
            }, {
                key: "_focusTarget",
                value: function() {
                    return this.$element().find("." + FILEUPLOADER_BUTTON_CLASS)
                }
            }, {
                key: "_getSubmitElement",
                value: function() {
                    return this._$fileInput
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileUploader.prototype), "_initMarkup", this).call(this);
                    this.$element().addClass(FILEUPLOADER_CLASS);
                    this._renderWrapper();
                    this._renderInputWrapper();
                    this._renderSelectButton();
                    this._renderInputContainer();
                    this._renderUploadButton();
                    this._preventRecreatingFiles = true
                }
            }, {
                key: "_render",
                value: function() {
                    this._preventRecreatingFiles = false;
                    this._renderDragEvents();
                    this._renderFiles();
                    _get(_getPrototypeOf(FileUploader.prototype), "_render", this).call(this)
                }
            }, {
                key: "_createFileProgressBar",
                value: function(file) {
                    file.progressBar = this._createProgressBar(file.value.size);
                    file.progressBar.$element().appendTo(file.$file);
                    this._initStatusMessage(file);
                    this._initCancelButton(file)
                }
            }, {
                key: "_setStatusMessage",
                value: function(file, key) {
                    var _this3 = this;
                    setTimeout(function() {
                        if (_this3.option("showFileList")) {
                            if (file.$statusMessage) {
                                file.$statusMessage.text(_this3.option(key));
                                file.$statusMessage.css("display", "");
                                file.progressBar.$element().remove()
                            }
                        }
                    }, FILEUPLOADER_AFTER_LOAD_DELAY)
                }
            }, {
                key: "_createFiles",
                value: function() {
                    var _this4 = this;
                    var value = this.option("value");
                    if (this._files && (0 === value.length || !this._shouldFileListBeExtended())) {
                        this._preventFilesUploading(this._files);
                        this._files = null
                    }
                    if (!this._files) {
                        this._files = []
                    }(0, _iterator.each)(value.slice(this._files.length), function(_, value) {
                        var file = _this4._createFile(value);
                        _this4._validateFile(file);
                        _this4._files.push(file)
                    })
                }
            }, {
                key: "_preventFilesUploading",
                value: function(files) {
                    var _this5 = this;
                    files.forEach(function(file) {
                        return _this5._uploadStrategy.abortUpload(file)
                    })
                }
            }, {
                key: "_validateFile",
                value: function(file) {
                    file.isValidFileExtension = this._validateFileExtension(file);
                    file.isValidMinSize = this._validateMinFileSize(file);
                    file.isValidMaxSize = this._validateMaxFileSize(file)
                }
            }, {
                key: "_validateFileExtension",
                value: function(file) {
                    var allowedExtensions = this.option("allowedFileExtensions");
                    var fileExtension = file.value.name.substring(file.value.name.lastIndexOf(".")).toLowerCase();
                    if (0 === allowedExtensions.length) {
                        return true
                    }
                    for (var i = 0; i < allowedExtensions.length; i++) {
                        if (fileExtension === allowedExtensions[i].toLowerCase()) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_validateMaxFileSize",
                value: function(file) {
                    var fileSize = file.value.size;
                    var maxFileSize = this.option("maxFileSize");
                    return maxFileSize > 0 ? fileSize <= maxFileSize : true
                }
            }, {
                key: "_validateMinFileSize",
                value: function(file) {
                    var fileSize = file.value.size;
                    var minFileSize = this.option("minFileSize");
                    return minFileSize > 0 ? fileSize >= minFileSize : true
                }
            }, {
                key: "_createUploadStartedAction",
                value: function() {
                    this._uploadStartedAction = this._createActionByOption("onUploadStarted")
                }
            }, {
                key: "_createUploadedAction",
                value: function() {
                    this._uploadedAction = this._createActionByOption("onUploaded")
                }
            }, {
                key: "_createProgressAction",
                value: function() {
                    this._progressAction = this._createActionByOption("onProgress")
                }
            }, {
                key: "_createUploadAbortedAction",
                value: function() {
                    this._uploadAbortedAction = this._createActionByOption("onUploadAborted")
                }
            }, {
                key: "_createUploadErrorAction",
                value: function() {
                    this._uploadErrorAction = this._createActionByOption("onUploadError")
                }
            }, {
                key: "_createFile",
                value: function(value) {
                    return {
                        value: value,
                        loadedSize: 0,
                        onProgress: (0, _callbacks2.default)(),
                        onAbort: (0, _callbacks2.default)(),
                        onLoad: (0, _callbacks2.default)(),
                        onError: (0, _callbacks2.default)(),
                        onLoadStart: (0, _callbacks2.default)(),
                        isValidFileExtension: true,
                        isValidMaxSize: true,
                        isValidMinSize: true,
                        isValid: function() {
                            return this.isValidFileExtension && this.isValidMaxSize && this.isValidMinSize
                        }
                    }
                }
            }, {
                key: "_renderFiles",
                value: function() {
                    var _this6 = this;
                    var value = this.option("value");
                    if (!this._$filesContainer) {
                        this._$filesContainer = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILES_CONTAINER_CLASS).appendTo(this._$content)
                    } else {
                        if (!this._shouldFileListBeExtended() || 0 === value.length) {
                            this._$filesContainer.empty()
                        }
                    }
                    var showFileList = this.option("showFileList");
                    if (showFileList) {
                        (0, _iterator.each)(this._files, function(_, file) {
                            if (!file.$file) {
                                _this6._renderFile(file)
                            }
                        })
                    }
                    this.$element().toggleClass(FILEUPLOADER_SHOW_FILE_LIST_CLASS, showFileList);
                    this._toggleFileUploaderEmptyClassName();
                    this._updateFileNameMaxWidth();
                    this._$validationMessage && this._$validationMessage.dxOverlay("instance").repaint()
                }
            }, {
                key: "_renderFile",
                value: function(file) {
                    var value = file.value;
                    var $fileContainer = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_CONTAINER_CLASS).appendTo(this._$filesContainer);
                    this._renderFileButtons(file, $fileContainer);
                    file.$file = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_CLASS).appendTo($fileContainer);
                    var $fileInfo = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_INFO_CLASS).appendTo(file.$file);
                    file.$statusMessage = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_STATUS_MESSAGE_CLASS).appendTo(file.$file);
                    (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_NAME_CLASS).text(value.name).appendTo($fileInfo);
                    if ((0, _type.isDefined)(value.size)) {
                        (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_FILE_SIZE_CLASS).text(this._getFileSize(value.size)).appendTo($fileInfo)
                    }
                    if (file.isValid()) {
                        file.$statusMessage.text(this.option("readyToUploadMessage"))
                    } else {
                        if (!file.isValidFileExtension) {
                            file.$statusMessage.append(this._createValidationElement("invalidFileExtensionMessage"))
                        }
                        if (!file.isValidMaxSize) {
                            file.$statusMessage.append(this._createValidationElement("invalidMaxFileSizeMessage"))
                        }
                        if (!file.isValidMinSize) {
                            file.$statusMessage.append(this._createValidationElement("invalidMinFileSizeMessage"))
                        }
                        $fileContainer.addClass(FILEUPLOADER_INVALID_CLASS)
                    }
                }
            }, {
                key: "_createValidationElement",
                value: function(key) {
                    return (0, _renderer2.default)("<span>").text(this.option(key))
                }
            }, {
                key: "_updateFileNameMaxWidth",
                value: function() {
                    var cancelButtonsCount = this.option("allowCanceling") && "useForm" !== this.option("uploadMode") ? 1 : 0;
                    var uploadButtonsCount = "useButtons" === this.option("uploadMode") ? 1 : 0;
                    var filesContainerWidth = this._$filesContainer.find("." + FILEUPLOADER_FILE_CONTAINER_CLASS).first().width() || this._$filesContainer.width();
                    var $buttonContainer = this._$filesContainer.find("." + FILEUPLOADER_BUTTON_CONTAINER_CLASS).eq(0);
                    var buttonsWidth = $buttonContainer.width() * (cancelButtonsCount + uploadButtonsCount);
                    var $fileSize = this._$filesContainer.find("." + FILEUPLOADER_FILE_SIZE_CLASS).eq(0);
                    var prevFileSize = $fileSize.text();
                    $fileSize.text("1000 Mb");
                    var fileSizeWidth = $fileSize.width();
                    $fileSize.text(prevFileSize);
                    this._$filesContainer.find("." + FILEUPLOADER_FILE_NAME_CLASS).css("maxWidth", filesContainerWidth - buttonsWidth - fileSizeWidth)
                }
            }, {
                key: "_renderFileButtons",
                value: function(file, $container) {
                    var $cancelButton = this._getCancelButton(file);
                    $cancelButton && $container.append($cancelButton);
                    var $uploadButton = this._getUploadButton(file);
                    $uploadButton && $container.append($uploadButton)
                }
            }, {
                key: "_getCancelButton",
                value: function(file) {
                    var _this7 = this;
                    if ("useForm" === this.option("uploadMode")) {
                        return null
                    }
                    file.cancelButton = this._createComponent((0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CLASS + " " + FILEUPLOADER_CANCEL_BUTTON_CLASS), _button2.default, {
                        onClick: function() {
                            return _this7._removeFile(file)
                        },
                        icon: "close",
                        visible: this.option("allowCanceling"),
                        integrationOptions: {}
                    });
                    return (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CONTAINER_CLASS).append(file.cancelButton.$element())
                }
            }, {
                key: "_getUploadButton",
                value: function(file) {
                    var _this8 = this;
                    if (!file.isValid() || "useButtons" !== this.option("uploadMode")) {
                        return null
                    }
                    file.uploadButton = this._createComponent((0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CLASS + " " + FILEUPLOADER_UPLOAD_BUTTON_CLASS), _button2.default, {
                        onClick: function() {
                            return _this8._uploadFile(file)
                        },
                        icon: "upload"
                    });
                    file.onLoadStart.add(function() {
                        return file.uploadButton.$element().remove()
                    });
                    return (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CONTAINER_CLASS).append(file.uploadButton.$element())
                }
            }, {
                key: "_removeFile",
                value: function(file) {
                    file.$file.parent().remove();
                    this._files.splice((0, _array.inArray)(file, this._files), 1);
                    var value = this.option("value").slice();
                    value.splice((0, _array.inArray)(file.value, value), 1);
                    this._preventRecreatingFiles = true;
                    this.option("value", value);
                    this._preventRecreatingFiles = false;
                    this._toggleFileUploaderEmptyClassName();
                    this._doPreventInputChange = true;
                    this._$fileInput.val("");
                    this._doPreventInputChange = false
                }
            }, {
                key: "_toggleFileUploaderEmptyClassName",
                value: function() {
                    this.$element().toggleClass(FILEUPLOADER_EMPTY_CLASS, !this._files.length || this._hasInvalidFile(this._files))
                }
            }, {
                key: "_hasInvalidFile",
                value: function(files) {
                    for (var i = 0; i < files.length; i++) {
                        if (!files[i].isValid()) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_getFileSize",
                value: function(size) {
                    var i = 0;
                    var labels = [_message2.default.format("dxFileUploader-bytes"), _message2.default.format("dxFileUploader-kb"), _message2.default.format("dxFileUploader-Mb"), _message2.default.format("dxFileUploader-Gb")];
                    var count = labels.length - 1;
                    while (i < count && size >= 1024) {
                        size /= 1024;
                        i++
                    }
                    return Math.round(size) + " " + labels[i]
                }
            }, {
                key: "_renderSelectButton",
                value: function() {
                    var $button = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CLASS).appendTo(this._$inputWrapper);
                    this._selectButton = this._createComponent($button, _button2.default, {
                        text: this.option("selectButtonText"),
                        focusStateEnabled: false,
                        integrationOptions: {}
                    });
                    if ("desktop" === _devices2.default.real().deviceType) {
                        this._selectButton.option("onClick", this._selectButtonClickHandler.bind(this))
                    } else {
                        _events_engine2.default.off($button, "click");
                        _events_engine2.default.on($button, "click", this._selectButtonClickHandler.bind(this))
                    }
                }
            }, {
                key: "_selectButtonClickHandler",
                value: function() {
                    if (this.option("useNativeInputClick")) {
                        return
                    }
                    if (this.option("disabled")) {
                        return false
                    }
                    this._isCustomClickEvent = true;
                    _events_engine2.default.trigger(this._$fileInput, "click");
                    this._isCustomClickEvent = false
                }
            }, {
                key: "_renderUploadButton",
                value: function() {
                    if ("useButtons" !== this.option("uploadMode")) {
                        return
                    }
                    var $uploadButton = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_BUTTON_CLASS).addClass(FILEUPLOADER_UPLOAD_BUTTON_CLASS).appendTo(this._$content);
                    this._uploadButton = this._createComponent($uploadButton, _button2.default, {
                        text: this.option("uploadButtonText"),
                        onClick: this._uploadButtonClickHandler.bind(this),
                        type: this.option("_uploadButtonType"),
                        integrationOptions: {}
                    })
                }
            }, {
                key: "_uploadButtonClickHandler",
                value: function() {
                    this._uploadFiles()
                }
            }, {
                key: "_shouldDragOverBeRendered",
                value: function() {
                    return "useForm" !== this.option("uploadMode") || this.option("nativeDropSupported")
                }
            }, {
                key: "_renderInputContainer",
                value: function() {
                    this._$inputContainer = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_INPUT_CONTAINER_CLASS).appendTo(this._$inputWrapper);
                    if (!this._shouldDragOverBeRendered()) {
                        this._$inputContainer.css("display", "none")
                    }
                    this._$fileInput.addClass(FILEUPLOADER_INPUT_CLASS);
                    this._renderInput();
                    var labelId = "dx-fileuploader-input-label-".concat(new _guid2.default);
                    this._$inputLabel.attr("id", labelId).addClass(FILEUPLOADER_INPUT_LABEL_CLASS).appendTo(this._$inputContainer);
                    this.setAria("labelledby", labelId, this._$fileInput)
                }
            }, {
                key: "_renderInput",
                value: function() {
                    if (this.option("useNativeInputClick")) {
                        this._selectButton.option("template", this._selectButtonInputTemplate.bind(this))
                    } else {
                        this._$fileInput.appendTo(this._$inputContainer);
                        this._selectButton.option("template", "content")
                    }
                    this._applyInputAttributes(this.option("inputAttr"))
                }
            }, {
                key: "_selectButtonInputTemplate",
                value: function(data, content) {
                    var $content = (0, _renderer2.default)(content);
                    var $text = (0, _renderer2.default)("<span>").addClass("dx-button-text").text(data.text);
                    $content.append($text).append(this._$fileInput);
                    return $content
                }
            }, {
                key: "_renderInputWrapper",
                value: function() {
                    this._$inputWrapper = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_INPUT_WRAPPER_CLASS).appendTo(this._$content)
                }
            }, {
                key: "_renderDragEvents",
                value: function() {
                    _events_engine2.default.off(this._$inputWrapper, "." + this.NAME);
                    if (!this._shouldDragOverBeRendered()) {
                        return
                    }
                    this._dragEventsTargets = [];
                    _events_engine2.default.on(this._$inputWrapper, eventUtils.addNamespace("dragenter", this.NAME), this._dragEnterHandler.bind(this));
                    _events_engine2.default.on(this._$inputWrapper, eventUtils.addNamespace("dragover", this.NAME), this._dragOverHandler.bind(this));
                    _events_engine2.default.on(this._$inputWrapper, eventUtils.addNamespace("dragleave", this.NAME), this._dragLeaveHandler.bind(this));
                    _events_engine2.default.on(this._$inputWrapper, eventUtils.addNamespace("drop", this.NAME), this._dropHandler.bind(this))
                }
            }, {
                key: "_applyInputAttributes",
                value: function(customAttributes) {
                    this._$fileInput.attr(customAttributes)
                }
            }, {
                key: "_useInputForDrop",
                value: function() {
                    return this.option("nativeDropSupported") && "useForm" === this.option("uploadMode")
                }
            }, {
                key: "_dragEnterHandler",
                value: function(e) {
                    if (this.option("disabled")) {
                        return false
                    }
                    if (!this._useInputForDrop()) {
                        e.preventDefault()
                    }
                    this._updateEventTargets(e);
                    this.$element().addClass(FILEUPLOADER_DRAGOVER_CLASS)
                }
            }, {
                key: "_dragOverHandler",
                value: function(e) {
                    if (!this._useInputForDrop()) {
                        e.preventDefault()
                    }
                    e.originalEvent.dataTransfer.dropEffect = "copy"
                }
            }, {
                key: "_dragLeaveHandler",
                value: function(e) {
                    if (!this._useInputForDrop()) {
                        e.preventDefault()
                    }
                    this._updateEventTargets(e);
                    if (!this._dragEventsTargets.length) {
                        this.$element().removeClass(FILEUPLOADER_DRAGOVER_CLASS)
                    }
                }
            }, {
                key: "_updateEventTargets",
                value: function(e) {
                    var targetIndex = this._dragEventsTargets.indexOf(e.target);
                    var isTargetExists = targetIndex !== -1;
                    if ("dragenter" === e.type) {
                        !isTargetExists && this._dragEventsTargets.push(e.target)
                    } else {
                        isTargetExists && this._dragEventsTargets.splice(targetIndex, 1)
                    }
                }
            }, {
                key: "_dropHandler",
                value: function(e) {
                    this._dragEventsTargets = [];
                    this.$element().removeClass(FILEUPLOADER_DRAGOVER_CLASS);
                    if (this._useInputForDrop()) {
                        return
                    }
                    e.preventDefault();
                    var fileList = e.originalEvent.dataTransfer.files;
                    var files = this._getFiles(fileList);
                    if (!this.option("multiple") && files.length > 1) {
                        return
                    }
                    this._changeValue(this._filterFiles(files));
                    if ("instantly" === this.option("uploadMode")) {
                        this._uploadFiles()
                    }
                }
            }, {
                key: "_filterFiles",
                value: function(files) {
                    if (!files.length) {
                        return files
                    }
                    var accept = this.option("accept");
                    if (!accept.length) {
                        return files
                    }
                    var result = [];
                    var allowedTypes = this._getAllowedFileTypes(accept);
                    for (var i = 0, n = files.length; i < n; i++) {
                        if (this._isFileTypeAllowed(files[i], allowedTypes)) {
                            result.push(files[i])
                        }
                    }
                    return result
                }
            }, {
                key: "_getAllowedFileTypes",
                value: function(acceptSting) {
                    if (!acceptSting.length) {
                        return []
                    }
                    return acceptSting.split(",").map(function(item) {
                        return item.trim()
                    })
                }
            }, {
                key: "_isFileTypeAllowed",
                value: function(file, allowedTypes) {
                    for (var i = 0, n = allowedTypes.length; i < n; i++) {
                        var allowedType = allowedTypes[i];
                        if ("." === allowedType[0]) {
                            allowedType = allowedType.replace(".", "\\.");
                            if (file.name.match(new RegExp(allowedType + "$", "i"))) {
                                return true
                            }
                        } else {
                            allowedType = allowedType.replace("*", "");
                            if (file.type.match(new RegExp(allowedType, "i"))) {
                                return true
                            }
                        }
                    }
                    return false
                }
            }, {
                key: "_renderWrapper",
                value: function() {
                    var $wrapper = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_WRAPPER_CLASS).appendTo(this.$element());
                    var $container = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_CONTAINER_CLASS).appendTo($wrapper);
                    this._$content = (0, _renderer2.default)("<div>").addClass(FILEUPLOADER_CONTENT_CLASS).appendTo($container)
                }
            }, {
                key: "_clean",
                value: function() {
                    this._$fileInput.detach();
                    delete this._$filesContainer;
                    if (this._files) {
                        this._files.forEach(function(file) {
                            file.$file = null;
                            file.$statusMessage = null
                        })
                    }
                    _get(_getPrototypeOf(FileUploader.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_uploadFiles",
                value: function() {
                    var _this9 = this;
                    if (isFormDataSupported()) {
                        (0, _iterator.each)(this._files, function(_, file) {
                            return _this9._uploadFile(file)
                        })
                    }
                }
            }, {
                key: "_uploadFile",
                value: function(file) {
                    this._uploadStrategy.upload(file)
                }
            }, {
                key: "_updateProgressBar",
                value: function(file, loadedFileData) {
                    file.progressBar && file.progressBar.option({
                        value: loadedFileData.loaded,
                        showStatus: true
                    });
                    this._progressAction({
                        file: file.value,
                        segmentSize: loadedFileData.currentSegmentSize,
                        bytesLoaded: loadedFileData.loaded,
                        bytesTotal: loadedFileData.total,
                        event: loadedFileData.event,
                        request: file.request
                    })
                }
            }, {
                key: "_updateTotalProgress",
                value: function(totalFilesSize, totalLoadedFilesSize) {
                    var progress = totalFilesSize ? this._getProgressValue(totalLoadedFilesSize / totalFilesSize) : 0;
                    this.option("progress", progress);
                    this._setLoadedSize(totalLoadedFilesSize)
                }
            }, {
                key: "_getProgressValue",
                value: function(ratio) {
                    return Math.floor(100 * ratio)
                }
            }, {
                key: "_initStatusMessage",
                value: function(file) {
                    file.$statusMessage.css("display", "none")
                }
            }, {
                key: "_initCancelButton",
                value: function(file) {
                    var _this10 = this;
                    file.cancelButton.option("onClick", function() {
                        _this10._preventFilesUploading([file]);
                        _this10._removeFile(file)
                    });
                    var hideCancelButton = function() {
                        setTimeout(function() {
                            file.cancelButton.option({
                                visible: false
                            })
                        }, FILEUPLOADER_AFTER_LOAD_DELAY)
                    };
                    file.onLoad.add(hideCancelButton);
                    file.onError.add(hideCancelButton)
                }
            }, {
                key: "_createProgressBar",
                value: function(fileSize) {
                    var _this11 = this;
                    return this._createComponent((0, _renderer2.default)("<div>"), _progress_bar2.default, {
                        value: void 0,
                        min: 0,
                        max: fileSize,
                        statusFormat: function(ratio) {
                            return _this11._getProgressValue(ratio) + "%"
                        },
                        showStatus: false,
                        statusPosition: "right"
                    })
                }
            }, {
                key: "_getTotalFilesSize",
                value: function() {
                    var _this12 = this;
                    if (!this._totalFilesSize) {
                        this._totalFilesSize = 0;
                        (0, _iterator.each)(this._files, function(_, file) {
                            _this12._totalFilesSize += file.value.size
                        })
                    }
                    return this._totalFilesSize
                }
            }, {
                key: "_getTotalLoadedFilesSize",
                value: function() {
                    var _this13 = this;
                    if (!this._totalLoadedFilesSize) {
                        this._totalLoadedFilesSize = 0;
                        (0, _iterator.each)(this._files, function(_, file) {
                            _this13._totalLoadedFilesSize += file.loadedSize
                        })
                    }
                    return this._totalLoadedFilesSize
                }
            }, {
                key: "_setLoadedSize",
                value: function(value) {
                    this._totalLoadedFilesSize = value
                }
            }, {
                key: "_recalculateProgress",
                value: function() {
                    this._totalFilesSize = 0;
                    this._totalLoadedFilesSize = 0;
                    this._updateTotalProgress(this._getTotalFilesSize(), this._getTotalLoadedFilesSize())
                }
            }, {
                key: "_getValidationMessageTarget",
                value: function() {
                    return this._$inputWrapper
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var value = args.value;
                    switch (args.name) {
                        case "height":
                        case "width":
                            this._updateFileNameMaxWidth();
                            _get(_getPrototypeOf(FileUploader.prototype), "_optionChanged", this).call(this, args);
                            break;
                        case "value":
                            !value.length && this._$fileInput.val("");
                            if (!this._preventRecreatingFiles) {
                                this._createFiles();
                                this._renderFiles()
                            }
                            this._recalculateProgress();
                            _get(_getPrototypeOf(FileUploader.prototype), "_optionChanged", this).call(this, args);
                            break;
                        case "name":
                            this._initFileInput();
                            _get(_getPrototypeOf(FileUploader.prototype), "_optionChanged", this).call(this, args);
                            break;
                        case "accept":
                            this._initFileInput();
                            break;
                        case "multiple":
                            this._initFileInput();
                            if (!args.value) {
                                this.reset()
                            }
                            break;
                        case "selectButtonText":
                            this._selectButton.option("text", value);
                            break;
                        case "uploadButtonText":
                            this._uploadButton && this._uploadButton.option("text", value);
                            break;
                        case "_uploadButtonType":
                            this._uploadButton && this._uploadButton.option("type", value);
                            break;
                        case "maxFileSize":
                        case "minFileSize":
                        case "allowedFileExtensions":
                        case "invalidFileExtensionMessage":
                        case "invalidMaxFileSizeMessage":
                        case "invalidMinFileSizeMessage":
                        case "readyToUploadMessage":
                        case "uploadedMessage":
                        case "uploadFailedMessage":
                            this._invalidate();
                            break;
                        case "labelText":
                            this._$inputLabel.text(value);
                            break;
                        case "showFileList":
                            if (!this._preventRecreatingFiles) {
                                this._renderFiles()
                            }
                            break;
                        case "uploadFile":
                        case "uploadChunk":
                        case "chunkSize":
                            this._setUploadStrategy();
                            break;
                        case "abortUpload":
                        case "uploadUrl":
                        case "progress":
                        case "uploadMethod":
                        case "uploadHeaders":
                        case "extendSelection":
                            break;
                        case "allowCanceling":
                        case "uploadMode":
                            this.reset();
                            this._invalidate();
                            break;
                        case "onUploadStarted":
                            this._createUploadStartedAction();
                            break;
                        case "onUploaded":
                            this._createUploadedAction();
                            break;
                        case "onProgress":
                            this._createProgressAction();
                            break;
                        case "onUploadError":
                            this._createUploadErrorAction();
                            break;
                        case "onUploadAborted":
                            this._createUploadAbortedAction();
                            break;
                        case "useNativeInputClick":
                            this._renderInput();
                            break;
                        case "useDragOver":
                            this._renderDragEvents();
                            break;
                        case "nativeDropSupported":
                            this._invalidate();
                            break;
                        case "inputAttr":
                            this._applyInputAttributes(value);
                            break;
                        default:
                            _get(_getPrototypeOf(FileUploader.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "reset",
                value: function() {
                    this.option("value", [])
                }
            }]);
            return FileUploader
        }(_editor2.default);
        FileUploader.__internals = {
            changeFileInputRenderer: function(renderer) {
                renderFileUploaderInput = renderer
            },
            resetFileInputTag: function() {
                renderFileUploaderInput = function() {
                    return (0, _renderer2.default)("<input>").attr("type", "file")
                }
            }
        };
        var FileBlobReader = function() {
            function FileBlobReader(file, chunkSize) {
                _classCallCheck(this, FileBlobReader);
                this.file = file;
                this.chunkSize = chunkSize;
                this.index = 0
            }
            _createClass(FileBlobReader, [{
                key: "read",
                value: function() {
                    if (!this.file) {
                        return null
                    }
                    var result = this.createBlobResult(this.file, this.index, this.chunkSize);
                    if (result.isCompleted) {
                        this.file = null
                    }
                    this.index++;
                    return result
                }
            }, {
                key: "createBlobResult",
                value: function(file, index, chunkSize) {
                    var currentPosition = index * chunkSize;
                    return {
                        blob: this.sliceFile(file, currentPosition, chunkSize),
                        index: index,
                        isCompleted: currentPosition + chunkSize >= file.size
                    }
                }
            }, {
                key: "sliceFile",
                value: function(file, startPos, length) {
                    if (file.slice) {
                        return file.slice(startPos, startPos + length)
                    }
                    if (file.webkitSlice) {
                        return file.webkitSlice(startPos, startPos + length)
                    }
                    return null
                }
            }]);
            return FileBlobReader
        }();
        var FileUploadStrategyBase = function() {
            function FileUploadStrategyBase(fileUploader) {
                _classCallCheck(this, FileUploadStrategyBase);
                this.fileUploader = fileUploader
            }
            _createClass(FileUploadStrategyBase, [{
                key: "upload",
                value: function(file) {
                    if (file.isValid() && !file.uploadStarted) {
                        this._prepareFileBeforeUpload(file);
                        this._uploadCore(file)
                    }
                }
            }, {
                key: "abortUpload",
                value: function abortUpload(file) {
                    var _this14 = this;
                    if (file._isError || file._isLoaded || file.isAborted) {
                        return
                    }
                    file.request && file.request.abort();
                    file.isAborted = true;
                    if (this._isCustomAbortUpload()) {
                        var abortUpload = this.fileUploader.option("abortUpload");
                        var arg = this._createAbortUploadArgument(file);
                        var deferred = null;
                        try {
                            var result = abortUpload(file.value, arg);
                            deferred = (0, _deferred.fromPromise)(result)
                        } catch (error) {
                            deferred = (new _deferred.Deferred).reject(error).promise()
                        }
                        deferred.done(function() {
                            return file.onAbort.fire()
                        }).fail(function(error) {
                            return _this14._handleFileError(file, error)
                        })
                    }
                }
            }, {
                key: "_createAbortUploadArgument",
                value: function(file) {}
            }, {
                key: "_uploadCore",
                value: function(file) {}
            }, {
                key: "_isCustomAbortUpload",
                value: function() {
                    var callback = this.fileUploader.option("abortUpload");
                    return callback && (0, _type.isFunction)(callback)
                }
            }, {
                key: "_handleFileError",
                value: function(file, error) {
                    file._isError = true;
                    file.onError.fire(error)
                }
            }, {
                key: "_prepareFileBeforeUpload",
                value: function(file) {
                    if (file.$file) {
                        this.fileUploader._createFileProgressBar(file)
                    }
                    file.onLoadStart.add(this._onUploadStarted.bind(this, file));
                    file.onLoad.add(this._onLoadedHandler.bind(this, file));
                    file.onError.add(this._onErrorHandler.bind(this, file));
                    file.onAbort.add(this._onAbortHandler.bind(this, file));
                    file.onProgress.add(this._onProgressHandler.bind(this, file))
                }
            }, {
                key: "_isStatusError",
                value: function(status) {
                    return 400 <= status && status < 500 || 500 <= status && status < 600
                }
            }, {
                key: "_onUploadStarted",
                value: function(file, e) {
                    file.uploadStarted = true;
                    this.fileUploader._uploadStartedAction({
                        file: file.value,
                        event: e,
                        request: file.request
                    })
                }
            }, {
                key: "_onAbortHandler",
                value: function(file, e) {
                    this.fileUploader._uploadAbortedAction({
                        file: file.value,
                        event: e,
                        request: file.request
                    })
                }
            }, {
                key: "_onErrorHandler",
                value: function(file, error) {
                    this.fileUploader._setStatusMessage(file, "uploadFailedMessage");
                    this.fileUploader._uploadErrorAction({
                        file: file.value,
                        event: void 0,
                        request: file.request,
                        error: error
                    })
                }
            }, {
                key: "_onLoadedHandler",
                value: function(file, e) {
                    file._isLoaded = true;
                    this.fileUploader._setStatusMessage(file, "uploadedMessage");
                    this.fileUploader._uploadedAction({
                        file: file.value,
                        event: e,
                        request: file.request
                    })
                }
            }, {
                key: "_onProgressHandler",
                value: function(file, e) {
                    if (file) {
                        var totalFilesSize = this.fileUploader._getTotalFilesSize();
                        var totalLoadedFilesSize = this.fileUploader._getTotalLoadedFilesSize();
                        var loadedSize = Math.min(e.loaded, file.value.size);
                        var segmentSize = loadedSize - file.loadedSize;
                        file.loadedSize = loadedSize;
                        this.fileUploader._updateTotalProgress(totalFilesSize, totalLoadedFilesSize + segmentSize);
                        this.fileUploader._updateProgressBar(file, this._getLoadedData(loadedSize, e.total, segmentSize, e))
                    }
                }
            }, {
                key: "_getLoadedData",
                value: function(loaded, total, currentSegmentSize, event) {
                    return {
                        loaded: loaded,
                        total: total,
                        currentSegmentSize: currentSegmentSize
                    }
                }
            }]);
            return FileUploadStrategyBase
        }();
        var ChunksFileUploadStrategyBase = function(_FileUploadStrategyBa) {
            _inherits(ChunksFileUploadStrategyBase, _FileUploadStrategyBa);
            var _super2 = _createSuper(ChunksFileUploadStrategyBase);

            function ChunksFileUploadStrategyBase(fileUploader) {
                var _this15;
                _classCallCheck(this, ChunksFileUploadStrategyBase);
                _this15 = _super2.call(this, fileUploader);
                _this15.chunkSize = _this15.fileUploader.option("chunkSize");
                return _this15
            }
            _createClass(ChunksFileUploadStrategyBase, [{
                key: "_uploadCore",
                value: function(file) {
                    var realFile = file.value;
                    var chunksData = {
                        name: realFile.name,
                        loadedBytes: 0,
                        type: realFile.type,
                        blobReader: new FileBlobReader(realFile, this.chunkSize),
                        guid: new _guid2.default,
                        fileSize: realFile.size,
                        count: Math.ceil(realFile.size / this.chunkSize),
                        customData: {}
                    };
                    file.chunksData = chunksData;
                    this._sendChunk(file, chunksData)
                }
            }, {
                key: "_sendChunk",
                value: function(file, chunksData) {
                    var _this16 = this;
                    var chunk = chunksData.blobReader.read();
                    chunksData.currentChunk = chunk;
                    if (chunk) {
                        this._sendChunkCore(file, chunksData, chunk).done(function() {
                            if (file.isAborted) {
                                return
                            }
                            chunksData.loadedBytes += chunk.blob.size;
                            file.onProgress.fire({
                                loaded: chunksData.loadedBytes,
                                total: file.value.size
                            });
                            if (chunk.isCompleted) {
                                file.onLoad.fire()
                            }
                            setTimeout(function() {
                                return _this16._sendChunk(file, chunksData)
                            })
                        }).fail(function(error) {
                            if (_this16._shouldHandleError(error)) {
                                _this16._handleFileError(file, error)
                            }
                        })
                    }
                }
            }, {
                key: "_sendChunkCore",
                value: function(file, chunksData, chunk) {}
            }, {
                key: "_shouldHandleError",
                value: function(error) {}
            }, {
                key: "_tryRaiseStartLoad",
                value: function(file) {
                    if (!file.isStartLoad) {
                        file.isStartLoad = true;
                        file.onLoadStart.fire()
                    }
                }
            }, {
                key: "_getEvent",
                value: function(e) {
                    return null
                }
            }]);
            return ChunksFileUploadStrategyBase
        }(FileUploadStrategyBase);
        var DefaultChunksFileUploadStrategy = function(_ChunksFileUploadStra) {
            _inherits(DefaultChunksFileUploadStrategy, _ChunksFileUploadStra);
            var _super3 = _createSuper(DefaultChunksFileUploadStrategy);

            function DefaultChunksFileUploadStrategy() {
                _classCallCheck(this, DefaultChunksFileUploadStrategy);
                return _super3.apply(this, arguments)
            }
            _createClass(DefaultChunksFileUploadStrategy, [{
                key: "_sendChunkCore",
                value: function(file, chunksData, chunk) {
                    var _this17 = this;
                    return _ajax2.default.sendRequest({
                        url: this.fileUploader.option("uploadUrl"),
                        method: this.fileUploader.option("uploadMethod"),
                        headers: this.fileUploader.option("uploadHeaders"),
                        beforeSend: function(xhr) {
                            file.request = xhr
                        },
                        upload: {
                            onloadstart: function() {
                                return _this17._tryRaiseStartLoad(file)
                            },
                            onabort: function() {
                                return file.onAbort.fire()
                            }
                        },
                        data: this._createFormData({
                            fileName: chunksData.name,
                            blobName: this.fileUploader.option("name"),
                            blob: chunk.blob,
                            index: chunk.index,
                            count: chunksData.count,
                            type: chunksData.type,
                            guid: chunksData.guid,
                            size: chunksData.fileSize
                        })
                    })
                }
            }, {
                key: "_shouldHandleError",
                value: function(e) {
                    return this._isStatusError(e.status)
                }
            }, {
                key: "_createFormData",
                value: function(options) {
                    var formData = new window.FormData;
                    formData.append(options.blobName, options.blob);
                    formData.append(FILEUPLOADER_CHUNK_META_DATA_NAME, JSON.stringify({
                        FileName: options.fileName,
                        Index: options.index,
                        TotalCount: options.count,
                        FileSize: options.size,
                        FileType: options.type,
                        FileGuid: options.guid
                    }));
                    return formData
                }
            }]);
            return DefaultChunksFileUploadStrategy
        }(ChunksFileUploadStrategyBase);
        var CustomChunksFileUploadStrategy = function(_ChunksFileUploadStra2) {
            _inherits(CustomChunksFileUploadStrategy, _ChunksFileUploadStra2);
            var _super4 = _createSuper(CustomChunksFileUploadStrategy);

            function CustomChunksFileUploadStrategy() {
                _classCallCheck(this, CustomChunksFileUploadStrategy);
                return _super4.apply(this, arguments)
            }
            _createClass(CustomChunksFileUploadStrategy, [{
                key: "_sendChunkCore",
                value: function(file, chunksData) {
                    this._tryRaiseStartLoad(file);
                    var chunksInfo = this._createChunksInfo(chunksData);
                    var uploadChunk = this.fileUploader.option("uploadChunk");
                    try {
                        var result = uploadChunk(file.value, chunksInfo);
                        return (0, _deferred.fromPromise)(result)
                    } catch (error) {
                        return (new _deferred.Deferred).reject(error).promise()
                    }
                }
            }, {
                key: "_createAbortUploadArgument",
                value: function(file) {
                    return this._createChunksInfo(file.chunksData)
                }
            }, {
                key: "_shouldHandleError",
                value: function(e) {
                    return true
                }
            }, {
                key: "_createChunksInfo",
                value: function(chunksData) {
                    return {
                        bytesUploaded: chunksData.loadedBytes,
                        chunkCount: chunksData.count,
                        customData: chunksData.customData,
                        chunkBlob: chunksData.currentChunk.blob,
                        chunkIndex: chunksData.currentChunk.index
                    }
                }
            }]);
            return CustomChunksFileUploadStrategy
        }(ChunksFileUploadStrategyBase);
        var WholeFileUploadStrategyBase = function(_FileUploadStrategyBa2) {
            _inherits(WholeFileUploadStrategyBase, _FileUploadStrategyBa2);
            var _super5 = _createSuper(WholeFileUploadStrategyBase);

            function WholeFileUploadStrategyBase() {
                _classCallCheck(this, WholeFileUploadStrategyBase);
                return _super5.apply(this, arguments)
            }
            _createClass(WholeFileUploadStrategyBase, [{
                key: "_uploadCore",
                value: function(file) {
                    var _this18 = this;
                    file.loadedSize = 0;
                    this._uploadFile(file).done(function() {
                        if (!file.isAborted) {
                            file.onLoad.fire()
                        }
                    }).fail(function(error) {
                        if (_this18._shouldHandleError(file, error)) {
                            _this18._handleFileError(file, error)
                        }
                    })
                }
            }, {
                key: "_uploadFile",
                value: function(file) {}
            }, {
                key: "_shouldHandleError",
                value: function(file, e) {}
            }, {
                key: "_handleProgress",
                value: function(file, e) {
                    if (file._isError) {
                        return
                    }
                    file._isProgressStarted = true;
                    file.onProgress.fire(e)
                }
            }, {
                key: "_getLoadedData",
                value: function(loaded, total, segmentSize, event) {
                    var result = _get(_getPrototypeOf(WholeFileUploadStrategyBase.prototype), "_getLoadedData", this).call(this, loaded, total, segmentSize, event);
                    result.event = event;
                    return result
                }
            }]);
            return WholeFileUploadStrategyBase
        }(FileUploadStrategyBase);
        var DefaultWholeFileUploadStrategy = function(_WholeFileUploadStrat) {
            _inherits(DefaultWholeFileUploadStrategy, _WholeFileUploadStrat);
            var _super6 = _createSuper(DefaultWholeFileUploadStrategy);

            function DefaultWholeFileUploadStrategy() {
                _classCallCheck(this, DefaultWholeFileUploadStrategy);
                return _super6.apply(this, arguments)
            }
            _createClass(DefaultWholeFileUploadStrategy, [{
                key: "_uploadFile",
                value: function(file) {
                    var _this19 = this;
                    return _ajax2.default.sendRequest({
                        url: this.fileUploader.option("uploadUrl"),
                        method: this.fileUploader.option("uploadMethod"),
                        headers: this.fileUploader.option("uploadHeaders"),
                        beforeSend: function(xhr) {
                            file.request = xhr
                        },
                        upload: {
                            onprogress: function(e) {
                                return _this19._handleProgress(file, e)
                            },
                            onloadstart: function() {
                                return file.onLoadStart.fire()
                            },
                            onabort: function() {
                                return file.onAbort.fire()
                            }
                        },
                        data: this._createFormData(this.fileUploader.option("name"), file.value)
                    })
                }
            }, {
                key: "_shouldHandleError",
                value: function(file, e) {
                    return this._isStatusError(e.status) || !file._isProgressStarted
                }
            }, {
                key: "_createFormData",
                value: function(fieldName, fieldValue) {
                    var formData = new window.FormData;
                    formData.append(fieldName, fieldValue, fieldValue.name);
                    return formData
                }
            }]);
            return DefaultWholeFileUploadStrategy
        }(WholeFileUploadStrategyBase);
        var CustomWholeFileUploadStrategy = function(_WholeFileUploadStrat2) {
            _inherits(CustomWholeFileUploadStrategy, _WholeFileUploadStrat2);
            var _super7 = _createSuper(CustomWholeFileUploadStrategy);

            function CustomWholeFileUploadStrategy() {
                _classCallCheck(this, CustomWholeFileUploadStrategy);
                return _super7.apply(this, arguments)
            }
            _createClass(CustomWholeFileUploadStrategy, [{
                key: "_uploadFile",
                value: function(file) {
                    var _this20 = this;
                    file.onLoadStart.fire();
                    var progressCallback = function(loadedBytes) {
                        var arg = {
                            loaded: loadedBytes,
                            total: file.size
                        };
                        _this20._handleProgress(file, arg)
                    };
                    var uploadFile = this.fileUploader.option("uploadFile");
                    try {
                        var result = uploadFile(file.value, progressCallback);
                        return (0, _deferred.fromPromise)(result)
                    } catch (error) {
                        return (new _deferred.Deferred).reject(error).promise()
                    }
                }
            }, {
                key: "_shouldHandleError",
                value: function(file, e) {
                    return true
                }
            }]);
            return CustomWholeFileUploadStrategy
        }(WholeFileUploadStrategyBase);
        (0, _component_registrator2.default)("dxFileUploader", FileUploader);
        module.exports = FileUploader
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/progress_bar.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var TrackBar = __webpack_require__( /*! ./track_bar */ 239);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var PROGRESSBAR_CLASS = "dx-progressbar";
        var PROGRESSBAR_CONTAINER_CLASS = "dx-progressbar-container";
        var PROGRESSBAR_RANGE_CONTAINER_CLASS = "dx-progressbar-range-container";
        var PROGRESSBAR_RANGE_CLASS = "dx-progressbar-range";
        var PROGRESSBAR_WRAPPER_CLASS = "dx-progressbar-wrapper";
        var PROGRESSBAR_STATUS_CLASS = "dx-progressbar-status";
        var PROGRESSBAR_INDETERMINATE_SEGMENT_CONTAINER = "dx-progressbar-animating-container";
        var PROGRESSBAR_INDETERMINATE_SEGMENT = "dx-progressbar-animating-segment";
        var ProgressBar = TrackBar.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: 0,
                    statusFormat: function(ratio) {
                        return "Progress: " + Math.round(100 * ratio) + "%"
                    },
                    showStatus: true,
                    onComplete: null,
                    activeStateEnabled: false,
                    statusPosition: "bottom left",
                    _animatingSegmentCount: 0
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "android" === _device.platform
                    },
                    options: {
                        _animatingSegmentCount: 2
                    }
                }])
            },
            _initMarkup: function() {
                this._renderStatus();
                this._createCompleteAction();
                this.callBase();
                this.$element().addClass(PROGRESSBAR_CLASS);
                this._$wrapper.addClass(PROGRESSBAR_WRAPPER_CLASS);
                this._$bar.addClass(PROGRESSBAR_CONTAINER_CLASS);
                this.setAria("role", "progressbar");
                $("<div>").addClass(PROGRESSBAR_RANGE_CONTAINER_CLASS).appendTo(this._$wrapper).append(this._$bar);
                this._$range.addClass(PROGRESSBAR_RANGE_CLASS);
                this._toggleStatus(this.option("showStatus"))
            },
            _createCompleteAction: function() {
                this._completeAction = this._createActionByOption("onComplete")
            },
            _renderStatus: function() {
                this._$status = $("<div>").addClass(PROGRESSBAR_STATUS_CLASS)
            },
            _renderIndeterminateState: function() {
                this._$segmentContainer = $("<div>").addClass(PROGRESSBAR_INDETERMINATE_SEGMENT_CONTAINER);
                var segments = this.option("_animatingSegmentCount");
                for (var i = 0; i < segments; i++) {
                    $("<div>").addClass(PROGRESSBAR_INDETERMINATE_SEGMENT).addClass(PROGRESSBAR_INDETERMINATE_SEGMENT + "-" + (i + 1)).appendTo(this._$segmentContainer)
                }
                this._$segmentContainer.appendTo(this._$wrapper)
            },
            _toggleStatus: function(value) {
                var splitPosition = this.option("statusPosition").split(" ");
                if (value) {
                    if ("top" === splitPosition[0] || "left" === splitPosition[0]) {
                        this._$status.prependTo(this._$wrapper)
                    } else {
                        this._$status.appendTo(this._$wrapper)
                    }
                } else {
                    this._$status.detach()
                }
                this._togglePositionClass()
            },
            _togglePositionClass: function() {
                var position = this.option("statusPosition");
                var splitPosition = position.split(" ");
                this._$wrapper.removeClass("dx-position-top-left dx-position-top-right dx-position-bottom-left dx-position-bottom-right dx-position-left dx-position-right");
                var positionClass = "dx-position-" + splitPosition[0];
                if (splitPosition[1]) {
                    positionClass += "-" + splitPosition[1]
                }
                this._$wrapper.addClass(positionClass)
            },
            _toggleIndeterminateState: function(value) {
                if (value) {
                    this._renderIndeterminateState();
                    this._$bar.toggle(false)
                } else {
                    this._$bar.toggle(true);
                    this._$segmentContainer.remove();
                    delete this._$segmentContainer
                }
            },
            _renderValue: function() {
                var val = this.option("value");
                var max = this.option("max");
                if (!val && 0 !== val) {
                    this._toggleIndeterminateState(true);
                    return
                }
                if (this._$segmentContainer) {
                    this._toggleIndeterminateState(false)
                }
                if (val === max) {
                    this._completeAction()
                }
                this.callBase();
                this._setStatus()
            },
            _setStatus: function() {
                var format = this.option("statusFormat");
                if (isFunction(format)) {
                    format = format.bind(this)
                } else {
                    format = function(value) {
                        return value
                    }
                }
                var statusText = format(this._currentRatio, this.option("value"));
                this._$status.text(statusText)
            },
            _dispose: function() {
                this._$status.remove();
                this.callBase()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "statusFormat":
                        this._setStatus();
                        break;
                    case "showStatus":
                        this._toggleStatus(args.value);
                        break;
                    case "statusPosition":
                        this._toggleStatus(this.option("showStatus"));
                        break;
                    case "onComplete":
                        this._createCompleteAction();
                        break;
                    case "_animatingSegmentCount":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxProgressBar", ProgressBar);
        module.exports = ProgressBar
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/track_bar.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var Editor = __webpack_require__( /*! ./editor/editor */ 48);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var fx = __webpack_require__( /*! ../animation/fx */ 40);
        var TRACKBAR_CLASS = "dx-trackbar";
        var TRACKBAR_CONTAINER_CLASS = "dx-trackbar-container";
        var TRACKBAR_RANGE_CLASS = "dx-trackbar-range";
        var TRACKBAR_WRAPPER_CLASS = "dx-trackbar-wrapper";
        var TrackBar = Editor.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    min: 0,
                    max: 100,
                    value: 0
                })
            },
            _initMarkup: function() {
                this.$element().addClass(TRACKBAR_CLASS);
                this._renderWrapper();
                this._renderContainer();
                this._renderRange();
                this._renderValue();
                this._setRangeStyles();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._setRangeStyles(this._rangeStylesConfig())
            },
            _renderWrapper: function() {
                this._$wrapper = $("<div>").addClass(TRACKBAR_WRAPPER_CLASS).appendTo(this.$element())
            },
            _renderContainer: function() {
                this._$bar = $("<div>").addClass(TRACKBAR_CONTAINER_CLASS).appendTo(this._$wrapper)
            },
            _renderRange: function() {
                this._$range = $("<div>").addClass(TRACKBAR_RANGE_CLASS).appendTo(this._$bar)
            },
            _renderValue: function() {
                var val = this.option("value");
                var min = this.option("min");
                var max = this.option("max");
                if (min > max) {
                    return
                }
                if (val < min) {
                    this.option("value", min);
                    this._currentRatio = 0;
                    return
                }
                if (val > max) {
                    this.option("value", max);
                    this._currentRatio = 1;
                    return
                }
                var ratio = min === max ? 0 : (val - min) / (max - min);
                !this._needPreventAnimation && this._setRangeStyles({
                    width: 100 * ratio + "%"
                });
                this.setAria({
                    valuemin: this.option("min"),
                    valuemax: max,
                    valuenow: val
                });
                this._currentRatio = ratio
            },
            _rangeStylesConfig: function() {
                return {
                    width: 100 * this._currentRatio + "%"
                }
            },
            _setRangeStyles: function(options) {
                fx.stop(this._$range);
                if (!options) {
                    this._$range.css({
                        width: 0
                    });
                    return
                }
                if (this._needPreventAnimation || !windowUtils.hasWindow()) {
                    return
                }
                fx.animate(this._$range, {
                    type: "custom",
                    duration: 100,
                    to: options
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        this._renderValue();
                        this.callBase(args);
                        break;
                    case "max":
                    case "min":
                        this._renderValue();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _dispose: function() {
                fx.stop(this._$range);
                this.callBase()
            }
        });
        registerComponent("dxTrackBar", TrackBar);
        module.exports = TrackBar
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tab_panel.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _support = __webpack_require__( /*! ../core/utils/support */ 46);
        var _support2 = _interopRequireDefault(_support);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _multi_view = __webpack_require__( /*! ./multi_view */ 326);
        var _multi_view2 = _interopRequireDefault(_multi_view);
        var _tabs = __webpack_require__( /*! ./tabs */ 203);
        var _tabs2 = _interopRequireDefault(_tabs);
        var _item = __webpack_require__( /*! ./tab_panel/item */ 582);
        var _item2 = _interopRequireDefault(_item);
        var _icon = __webpack_require__( /*! ../core/utils/icon */ 53);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _bindable_template = __webpack_require__( /*! ../core/templates/bindable_template */ 59);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TABPANEL_CLASS = "dx-tabpanel";
        var TABPANEL_TABS_CLASS = "dx-tabpanel-tabs";
        var TABPANEL_CONTAINER_CLASS = "dx-tabpanel-container";
        var TABS_ITEM_TEXT_CLASS = "dx-tab-text";
        var TabPanel = _multi_view2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    itemTitleTemplate: "title",
                    hoverStateEnabled: true,
                    showNavButtons: false,
                    scrollByContent: true,
                    scrollingEnabled: true,
                    onTitleClick: null,
                    onTitleHold: null,
                    onTitleRendered: null,
                    badgeExpr: function(data) {
                        return data ? data.badge : void 0
                    }
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return !_support2.default.touch
                    },
                    options: {
                        swipeEnabled: false
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        animationEnabled: false
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(TABPANEL_CLASS);
                this.setAria("role", "tabpanel")
            },
            _initMarkup: function() {
                this.callBase();
                this._createTitleActions();
                this._renderLayout()
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    title: new _bindable_template.BindableTemplate(function($container, data) {
                        if ((0, _type.isPlainObject)(data)) {
                            var $iconElement = (0, _icon.getImageContainer)(data.icon);
                            if ($iconElement) {
                                $container.append($iconElement)
                            }
                            if ((0, _type.isDefined)(data.title) && !(0, _type.isPlainObject)(data.title)) {
                                $container.append(_dom_adapter2.default.createTextNode(data.title))
                            }
                        } else {
                            if ((0, _type.isDefined)(data)) {
                                $container.text(String(data))
                            }
                        }
                        $container.wrapInner((0, _renderer2.default)("<span>").addClass(TABS_ITEM_TEXT_CLASS))
                    }, ["title", "icon"], this.option("integrationOptions.watchMethod"))
                })
            },
            _createTitleActions: function() {
                this._createTitleClickAction();
                this._createTitleHoldAction();
                this._createTitleRenderedAction()
            },
            _createTitleClickAction: function() {
                this._titleClickAction = this._createActionByOption("onTitleClick")
            },
            _createTitleHoldAction: function() {
                this._titleHoldAction = this._createActionByOption("onTitleHold")
            },
            _createTitleRenderedAction: function() {
                this._titleRenderedAction = this._createActionByOption("onTitleRendered")
            },
            _renderContent: function() {
                var that = this;
                this.callBase();
                if (this.option("templatesRenderAsynchronously")) {
                    this._resizeEventTimer = setTimeout(function() {
                        that._updateLayout()
                    }, 0)
                }
            },
            _renderLayout: function() {
                if (this._tabs) {
                    this._updateLayout();
                    return
                }
                var $element = this.$element();
                this._$tabContainer = (0, _renderer2.default)("<div>").addClass(TABPANEL_TABS_CLASS).appendTo($element);
                var $tabs = (0, _renderer2.default)("<div>").appendTo(this._$tabContainer);
                this._tabs = this._createComponent($tabs, _tabs2.default, this._tabConfig());
                this._$container = (0, _renderer2.default)("<div>").addClass(TABPANEL_CONTAINER_CLASS).appendTo($element);
                this._$container.append(this._$wrapper);
                this._updateLayout()
            },
            _updateLayout: function() {
                if (_window2.default.hasWindow()) {
                    var tabsHeight = this._$tabContainer.outerHeight();
                    this._$container.css({
                        marginTop: -tabsHeight,
                        paddingTop: tabsHeight
                    })
                }
            },
            _refreshActiveDescendant: function() {
                if (!this._tabs) {
                    return
                }
                var tabs = this._tabs;
                var tabItems = tabs.itemElements();
                var $activeTab = (0, _renderer2.default)(tabItems[tabs.option("selectedIndex")]);
                var id = this.getFocusedItemId();
                this.setAria("controls", void 0, (0, _renderer2.default)(tabItems));
                this.setAria("controls", id, $activeTab)
            },
            _tabConfig: function() {
                return {
                    selectOnFocus: true,
                    focusStateEnabled: this.option("focusStateEnabled"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    repaintChangesOnly: this.option("repaintChangesOnly"),
                    tabIndex: this.option("tabIndex"),
                    selectedIndex: this.option("selectedIndex"),
                    badgeExpr: this.option("badgeExpr"),
                    onItemClick: this._titleClickAction.bind(this),
                    onItemHold: this._titleHoldAction.bind(this),
                    itemHoldTimeout: this.option("itemHoldTimeout"),
                    onSelectionChanged: function(e) {
                        this.option("selectedIndex", e.component.option("selectedIndex"));
                        this._refreshActiveDescendant()
                    }.bind(this),
                    onItemRendered: this._titleRenderedAction.bind(this),
                    itemTemplate: this._getTemplateByOption("itemTitleTemplate"),
                    items: this.option("items"),
                    noDataText: null,
                    scrollingEnabled: this.option("scrollingEnabled"),
                    scrollByContent: this.option("scrollByContent"),
                    showNavButtons: this.option("showNavButtons"),
                    itemTemplateProperty: "tabTemplate",
                    loopItemFocus: this.option("loop"),
                    selectionRequired: true,
                    onOptionChanged: function(args) {
                        if ("focusedElement" === args.name) {
                            if (args.value) {
                                var $value = (0, _renderer2.default)(args.value);
                                var $newItem = this._itemElements().eq($value.index());
                                this.option("focusedElement", (0, _dom.getPublicElement)($newItem))
                            } else {
                                this.option("focusedElement", args.value)
                            }
                        }
                    }.bind(this),
                    onFocusIn: function(args) {
                        this._focusInHandler(args.event)
                    }.bind(this),
                    onFocusOut: function(args) {
                        if (!this._isFocusOutHandlerExecuting) {
                            this._focusOutHandler(args.event)
                        }
                    }.bind(this)
                }
            },
            _renderFocusTarget: function() {
                this._focusTarget().attr("tabIndex", -1)
            },
            _updateFocusState: function(e, isFocused) {
                this.callBase(e, isFocused);
                if (e.target === this._tabs._focusTarget().get(0)) {
                    this._toggleFocusClass(isFocused, this._focusTarget())
                }
            },
            _focusOutHandler: function(e) {
                this._isFocusOutHandlerExecuting = true;
                this.callBase.apply(this, arguments);
                this._tabs._focusOutHandler(e);
                this._isFocusOutHandlerExecuting = false
            },
            _setTabsOption: function(name, value) {
                if (this._tabs) {
                    this._tabs.option(name, value)
                }
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._tabs._dimensionChanged();
                    this._updateLayout()
                }
            },
            registerKeyHandler: function(key, handler) {
                this.callBase(key, handler);
                if (this._tabs) {
                    this._tabs.registerKeyHandler(key, handler)
                }
            },
            repaint: function() {
                this.callBase();
                this._tabs.repaint()
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                var fullName = args.fullName;
                switch (name) {
                    case "dataSource":
                        this.callBase(args);
                        break;
                    case "items":
                        this._setTabsOption(name, this.option(name));
                        this._updateLayout();
                        if (!this.option("repaintChangesOnly")) {
                            this._tabs.repaint()
                        }
                        this.callBase(args);
                        break;
                    case "width":
                        this.callBase(args);
                        this._tabs.repaint();
                        break;
                    case "selectedIndex":
                    case "selectedItem":
                        this._setTabsOption(fullName, value);
                        this.callBase(args);
                        if (true === this.option("focusStateEnabled")) {
                            var selectedIndex = this.option("selectedIndex");
                            var selectedTabContent = this._itemElements().eq(selectedIndex);
                            this.option("focusedElement", (0, _dom.getPublicElement)(selectedTabContent))
                        }
                        break;
                    case "itemHoldTimeout":
                    case "focusStateEnabled":
                    case "hoverStateEnabled":
                        this._setTabsOption(fullName, value);
                        this.callBase(args);
                        break;
                    case "scrollingEnabled":
                    case "scrollByContent":
                    case "showNavButtons":
                        this._setTabsOption(fullName, value);
                        break;
                    case "focusedElement":
                        var id = value ? (0, _renderer2.default)(value).index() : value;
                        var newItem = value ? this._tabs._itemElements().eq(id) : value;
                        this._setTabsOption("focusedElement", (0, _dom.getPublicElement)(newItem));
                        this.callBase(args);
                        break;
                    case "itemTitleTemplate":
                        this._setTabsOption("itemTemplate", this._getTemplateByOption("itemTitleTemplate"));
                        break;
                    case "onTitleClick":
                        this._createTitleClickAction();
                        this._setTabsOption("onItemClick", this._titleClickAction.bind(this));
                        break;
                    case "onTitleHold":
                        this._createTitleHoldAction();
                        this._setTabsOption("onItemHold", this._titleHoldAction.bind(this));
                        break;
                    case "onTitleRendered":
                        this._createTitleRenderedAction();
                        this._setTabsOption("onItemRendered", this._titleRenderedAction.bind(this));
                        break;
                    case "loop":
                        this._setTabsOption("loopItemFocus", value);
                        break;
                    case "badgeExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                clearTimeout(this._resizeEventTimer);
                this.callBase()
            }
        });
        TabPanel.ItemClass = _item2.default;
        (0, _component_registrator2.default)("dxTabPanel", TabPanel);
        module.exports = TabPanel
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/validation_summary.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _validation_engine = __webpack_require__( /*! ./validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var VALIDATION_SUMMARY_CLASS = "dx-validationsummary";
        var ITEM_CLASS = VALIDATION_SUMMARY_CLASS + "-item";
        var ITEM_DATA_KEY = VALIDATION_SUMMARY_CLASS + "-item-data";
        var ValidationSummary = _uiCollection_widget2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    focusStateEnabled: false,
                    noDataText: null
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    validationGroup: true
                })
            },
            _init: function() {
                this.callBase();
                this._initGroupRegistration()
            },
            _initGroupRegistration: function() {
                var $element = this.$element();
                var group = this.option("validationGroup") || _validation_engine2.default.findGroup($element, this._modelByElement($element));
                var groupConfig = _validation_engine2.default.addGroup(group);
                this._unsubscribeGroup();
                this._groupWasInit = true;
                this._validationGroup = group;
                this.groupSubscription = this._groupValidationHandler.bind(this);
                groupConfig.on("validated", this.groupSubscription)
            },
            _unsubscribeGroup: function() {
                var groupConfig = _validation_engine2.default.getGroupConfig(this._validationGroup);
                groupConfig && groupConfig.off("validated", this.groupSubscription)
            },
            _getOrderedItems: function(validators, items) {
                var orderedItems = [];
                _iterator2.default.each(validators, function(_, validator) {
                    var foundItems = (0, _common.grep)(items, function(item) {
                        if (item.validator === validator) {
                            return true
                        }
                    });
                    if (foundItems.length) {
                        orderedItems = orderedItems.concat(foundItems)
                    }
                });
                return orderedItems
            },
            _groupValidationHandler: function(params) {
                var _this = this;
                var items = this._getOrderedItems(params.validators, _iterator2.default.map(params.brokenRules, function(rule) {
                    return {
                        text: rule.message,
                        validator: rule.validator,
                        index: rule.index
                    }
                }));
                this.validators = params.validators;
                _iterator2.default.each(this.validators, function(_, validator) {
                    if (validator._validationSummary !== _this) {
                        var handler = _this._itemValidationHandler.bind(_this);
                        var disposingHandler = function() {
                            validator.off("validated", handler);
                            validator._validationSummary = null;
                            handler = null
                        };
                        validator.on("validated", handler);
                        validator.on("disposing", disposingHandler);
                        validator._validationSummary = _this
                    }
                });
                this.option("items", items)
            },
            _itemValidationHandler: function(_ref) {
                var isValid = _ref.isValid,
                    validator = _ref.validator,
                    brokenRules = _ref.brokenRules;
                var items = this.option("items");
                var itemsChanged = false;
                var itemIndex = 0;
                var _loop = function() {
                    var item = items[itemIndex];
                    if (item.validator === validator) {
                        var foundRule = (0, _common.grep)(brokenRules || [], function(rule) {
                            return rule.index === item.index
                        })[0];
                        if (isValid || !foundRule) {
                            items.splice(itemIndex, 1);
                            itemsChanged = true;
                            return "continue"
                        }
                        if (foundRule.message !== item.text) {
                            item.text = foundRule.message;
                            itemsChanged = true
                        }
                    }
                    itemIndex++
                };
                while (itemIndex < items.length) {
                    var _ret = _loop();
                    if ("continue" === _ret) {
                        continue
                    }
                }
                _iterator2.default.each(brokenRules, function(_, rule) {
                    var foundItem = (0, _common.grep)(items, function(item) {
                        return item.validator === validator && item.index === rule.index
                    })[0];
                    if (!foundItem) {
                        items.push({
                            text: rule.message,
                            validator: validator,
                            index: rule.index
                        });
                        itemsChanged = true
                    }
                });
                if (itemsChanged) {
                    items = this._getOrderedItems(this.validators, items);
                    this.option("items", items)
                }
            },
            _initMarkup: function() {
                this.$element().addClass(VALIDATION_SUMMARY_CLASS);
                this.callBase()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "validationGroup":
                        this._initGroupRegistration();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _itemClass: function() {
                return ITEM_CLASS
            },
            _itemDataKey: function() {
                return ITEM_DATA_KEY
            },
            _postprocessRenderItem: function(params) {
                _events_engine2.default.on(params.itemElement, "click", function() {
                    params.itemData.validator && params.itemData.validator.focus && params.itemData.validator.focus()
                })
            },
            _dispose: function() {
                this.callBase();
                this._unsubscribeGroup()
            }
        });
        (0, _component_registrator2.default)("dxValidationSummary", ValidationSummary);
        module.exports = ValidationSummary
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/converterController.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var ConverterController = function() {
            function ConverterController() {
                _classCallCheck(this, ConverterController);
                this._converters = {}
            }
            _createClass(ConverterController, [{
                key: "addConverter",
                value: function(name, converter) {
                    this._converters[name] = converter
                }
            }, {
                key: "getConverter",
                value: function(name) {
                    return this._converters[name]
                }
            }]);
            return ConverterController
        }();
        var controller = new ConverterController;
        exports.default = controller
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/tooltip/ui.tooltip.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Tooltip = __webpack_require__( /*! ./tooltip */ 339);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var viewPortUtils = __webpack_require__( /*! ../../core/utils/view_port */ 76);
        var tooltip = null;
        var removeTooltipElement = null;
        var createTooltip = function(options) {
            options = extend({
                position: "top"
            }, options);
            var content = options.content;
            delete options.content;
            var $tooltip = $("<div>").html(content).appendTo(viewPortUtils.value());
            removeTooltipElement = function() {
                $tooltip.remove()
            };
            tooltip = new Tooltip($tooltip, options)
        };
        var removeTooltip = function() {
            if (!tooltip) {
                return
            }
            removeTooltipElement();
            tooltip = null
        };
        exports.show = function(options) {
            removeTooltip();
            createTooltip(options);
            return tooltip.show()
        };
        exports.hide = function() {
            if (!tooltip) {
                return (new Deferred).resolve()
            }
            return tooltip.hide().done(removeTooltip).promise()
        }
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/tag_box.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _element_data = __webpack_require__( /*! ../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _browser = __webpack_require__( /*! ../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _selection_filter = __webpack_require__( /*! ../core/utils/selection_filter */ 302);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _message = __webpack_require__( /*! ../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var _click = __webpack_require__( /*! ../events/click */ 19);
        var _utils2 = __webpack_require__( /*! ./text_box/utils.caret */ 311);
        var _utils3 = _interopRequireDefault(_utils2);
        var _utils4 = __webpack_require__( /*! ../data/data_source/utils */ 64);
        var _select_box = __webpack_require__( /*! ./select_box */ 97);
        var _select_box2 = _interopRequireDefault(_select_box);
        var _bindable_template = __webpack_require__( /*! ../core/templates/bindable_template */ 59);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var TAGBOX_TAG_DATA_KEY = "dxTagData";
        var TAGBOX_CLASS = "dx-tagbox";
        var TAGBOX_TAG_CONTAINER_CLASS = "dx-tag-container";
        var TAGBOX_TAG_CLASS = "dx-tag";
        var TAGBOX_MULTI_TAG_CLASS = "dx-tagbox-multi-tag";
        var TAGBOX_CUSTOM_TAG_CLASS = "dx-tag-custom";
        var TAGBOX_TAG_REMOVE_BUTTON_CLASS = "dx-tag-remove-button";
        var TAGBOX_ONLY_SELECT_CLASS = "dx-tagbox-only-select";
        var TAGBOX_SINGLE_LINE_CLASS = "dx-tagbox-single-line";
        var TAGBOX_POPUP_WRAPPER_CLASS = "dx-tagbox-popup-wrapper";
        var TAGBOX_TAG_CONTENT_CLASS = "dx-tag-content";
        var TAGBOX_DEFAULT_FIELD_TEMPLATE_CLASS = "dx-tagbox-default-template";
        var TAGBOX_CUSTOM_FIELD_TEMPLATE_CLASS = "dx-tagbox-custom-template";
        var NATIVE_CLICK_CLASS = "dx-native-click";
        var TAGBOX_MOUSE_WHEEL_DELTA_MULTIPLIER = -.3;
        var TagBox = _select_box2.default.inherit({
            _supportedKeys: function() {
                var _this = this;
                var parent = this.callBase();
                var sendToList = function(options) {
                    return _this._list._keyboardHandler(options)
                };
                return (0, _extend.extend)({}, parent, {
                    backspace: function(e) {
                        if (!this._isCaretAtTheStart()) {
                            return
                        }
                        e.preventDefault();
                        e.stopPropagation();
                        this._isTagRemoved = true;
                        var $tagToDelete = this._$focusedTag || this._tagElements().last();
                        if (this._$focusedTag) {
                            this._moveTagFocus("prev", true)
                        }
                        if (0 === $tagToDelete.length) {
                            return
                        }
                        this._preserveFocusedTag = true;
                        this._removeTagElement($tagToDelete);
                        delete this._preserveFocusedTag
                    },
                    upArrow: function(e, opts) {
                        return e.altKey || !_this._list ? parent.upArrow.call(_this, e) : sendToList(opts)
                    },
                    downArrow: function(e, opts) {
                        return e.altKey || !_this._list ? parent.downArrow.call(_this, e) : sendToList(opts)
                    },
                    del: function(e) {
                        if (!this._$focusedTag || !this._isCaretAtTheStart()) {
                            return
                        }
                        e.preventDefault();
                        e.stopPropagation();
                        this._isTagRemoved = true;
                        var $tagToDelete = this._$focusedTag;
                        this._moveTagFocus("next", true);
                        this._preserveFocusedTag = true;
                        this._removeTagElement($tagToDelete);
                        delete this._preserveFocusedTag
                    },
                    enter: function(e, options) {
                        var isListItemFocused = this._list && null !== this._list.option("focusedElement");
                        var isCustomItem = this.option("acceptCustomValue") && !isListItemFocused;
                        if (isCustomItem) {
                            e.preventDefault();
                            "" !== this._searchValue() && this._customItemAddedHandler(e);
                            return
                        }
                        if (this.option("opened")) {
                            sendToList(options);
                            e.preventDefault()
                        }
                    },
                    space: function(e, options) {
                        var isOpened = this.option("opened");
                        var isInputActive = this._shouldRenderSearchEvent();
                        if (isOpened && !isInputActive) {
                            sendToList(options);
                            e.preventDefault()
                        }
                    },
                    leftArrow: function(e) {
                        if (!this._isCaretAtTheStart()) {
                            return
                        }
                        var rtlEnabled = this.option("rtlEnabled");
                        if (this._isEditable() && rtlEnabled && !this._$focusedTag) {
                            return
                        }
                        e.preventDefault();
                        var direction = rtlEnabled ? "next" : "prev";
                        this._moveTagFocus(direction);
                        !this.option("multiline") && this._scrollContainer(direction)
                    },
                    rightArrow: function(e) {
                        if (!this._isCaretAtTheStart()) {
                            return
                        }
                        var rtlEnabled = this.option("rtlEnabled");
                        if (this._isEditable() && !rtlEnabled && !this._$focusedTag) {
                            return
                        }
                        e.preventDefault();
                        var direction = rtlEnabled ? "prev" : "next";
                        this._moveTagFocus(direction);
                        !this.option("multiline") && this._scrollContainer(direction)
                    }
                })
            },
            _allowSelectItemByTab: function() {
                return false
            },
            _isCaretAtTheStart: function() {
                var position = (0, _utils3.default)(this._input());
                return 0 === position.start && 0 === position.end
            },
            _moveTagFocus: function(direction, clearOnBoundary) {
                if (!this._$focusedTag) {
                    var tagElements = this._tagElements();
                    this._$focusedTag = "next" === direction ? tagElements.first() : tagElements.last();
                    this._toggleFocusClass(true, this._$focusedTag);
                    return
                }
                var $nextFocusedTag = this._$focusedTag[direction](".".concat(TAGBOX_TAG_CLASS));
                if ($nextFocusedTag.length > 0) {
                    this._replaceFocusedTag($nextFocusedTag)
                } else {
                    if (clearOnBoundary || "next" === direction && this._isEditable()) {
                        this._clearTagFocus()
                    }
                }
            },
            _replaceFocusedTag: function($nextFocusedTag) {
                this._toggleFocusClass(false, this._$focusedTag);
                this._$focusedTag = $nextFocusedTag;
                this._toggleFocusClass(true, this._$focusedTag)
            },
            _clearTagFocus: function() {
                if (!this._$focusedTag) {
                    return
                }
                this._toggleFocusClass(false, this._$focusedTag);
                delete this._$focusedTag
            },
            _focusClassTarget: function($element) {
                if ($element && $element.length && $element[0] !== this._focusTarget()[0]) {
                    return $element
                }
                return this.callBase()
            },
            _scrollContainer: function(direction) {
                if (this.option("multiline") || !(0, _window.hasWindow)()) {
                    return
                }
                if (!this._$tagsContainer) {
                    return
                }
                var scrollPosition = this._getScrollPosition(direction);
                this._$tagsContainer.scrollLeft(scrollPosition)
            },
            _getScrollPosition: function(direction) {
                if ("start" === direction || "end" === direction) {
                    return this._getBorderPosition(direction)
                }
                return this._$focusedTag ? this._getFocusedTagPosition(direction) : this._getBorderPosition("end")
            },
            _getBorderPosition: function(direction) {
                var rtlEnabled = this.option("rtlEnabled");
                var isScrollLeft = "end" === direction ^ rtlEnabled;
                var isScrollReverted = rtlEnabled && !_browser2.default.webkit;
                var scrollSign = !rtlEnabled || _browser2.default.webkit || _browser2.default.msie ? 1 : -1;
                return isScrollLeft ^ !isScrollReverted ? 0 : scrollSign * (this._$tagsContainer.get(0).scrollWidth - this._$tagsContainer.outerWidth())
            },
            _getFocusedTagPosition: function(direction) {
                var rtlEnabled = this.option("rtlEnabled");
                var isScrollLeft = "next" === direction ^ rtlEnabled;
                var _this$_$focusedTag$po = this._$focusedTag.position(),
                    scrollOffset = _this$_$focusedTag$po.left;
                var scrollLeft = this._$tagsContainer.scrollLeft();
                if (isScrollLeft) {
                    scrollOffset += this._$focusedTag.outerWidth(true) - this._$tagsContainer.outerWidth()
                }
                if (isScrollLeft ^ scrollOffset < 0) {
                    var scrollCorrection = rtlEnabled && _browser2.default.msie ? -1 : 1;
                    scrollLeft += scrollOffset * scrollCorrection
                }
                return scrollLeft
            },
            _setNextValue: _common.noop,
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    value: [],
                    showDropDownButton: false,
                    maxFilterLength: 1500,
                    tagTemplate: "tag",
                    selectAllText: _message2.default.format("dxList-selectAll"),
                    hideSelectedItems: false,
                    selectedItems: [],
                    selectAllMode: "page",
                    onSelectAllValueChanged: null,
                    maxDisplayedTags: void 0,
                    showMultiTagOnly: true,
                    onMultiTagPreparing: null,
                    multiline: true,
                    useSubmitBehavior: true
                })
            },
            _init: function() {
                this.callBase();
                this._selectedItems = [];
                this._initSelectAllValueChangedAction()
            },
            _initActions: function() {
                this.callBase();
                this._initMultiTagPreparingAction()
            },
            _initMultiTagPreparingAction: function() {
                this._multiTagPreparingAction = this._createActionByOption("onMultiTagPreparing", {
                    beforeExecute: function(e) {
                        this._multiTagPreparingHandler(e.args[0])
                    }.bind(this),
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _multiTagPreparingHandler: function(args) {
                var _this$_getValue = this._getValue(),
                    selectedCount = _this$_getValue.length;
                if (!this.option("showMultiTagOnly")) {
                    args.text = _message2.default.getFormatter("dxTagBox-moreSelected")(selectedCount - this.option("maxDisplayedTags") + 1)
                } else {
                    args.text = _message2.default.getFormatter("dxTagBox-selected")(selectedCount)
                }
            },
            _initDynamicTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    tag: new _bindable_template.BindableTemplate(function($container, data) {
                        var $tagContent = (0, _renderer2.default)("<div>").addClass(TAGBOX_TAG_CONTENT_CLASS);
                        (0, _renderer2.default)("<span>").text(data.text || data).appendTo($tagContent);
                        (0, _renderer2.default)("<div>").addClass(TAGBOX_TAG_REMOVE_BUTTON_CLASS).appendTo($tagContent);
                        $container.append($tagContent)
                    }, ["text"], this.option("integrationOptions.watchMethod"), {
                        text: this._displayGetter
                    })
                })
            },
            _toggleSubmitElement: function(enabled) {
                if (enabled) {
                    this._renderSubmitElement();
                    this._setSubmitValue()
                } else {
                    this._$submitElement && this._$submitElement.remove();
                    delete this._$submitElement
                }
            },
            _renderSubmitElement: function() {
                if (!this.option("useSubmitBehavior")) {
                    return
                }
                this._$submitElement = (0, _renderer2.default)("<select>").attr("multiple", "multiple").css("display", "none").appendTo(this.$element())
            },
            _setSubmitValue: function() {
                if (!this.option("useSubmitBehavior")) {
                    return
                }
                var value = this._getValue();
                var $options = [];
                for (var i = 0, n = value.length; i < n; i++) {
                    var useDisplayText = this._shouldUseDisplayValue(value[i]);
                    $options.push((0, _renderer2.default)("<option>").val(useDisplayText ? this._displayGetter(value[i]) : value[i]).attr("selected", "selected"))
                }
                this._getSubmitElement().empty().append($options)
            },
            _initMarkup: function() {
                this._tagElementsCache = (0, _renderer2.default)();
                var isSingleLineMode = !this.option("multiline");
                this.$element().addClass(TAGBOX_CLASS).toggleClass(TAGBOX_ONLY_SELECT_CLASS, !(this.option("searchEnabled") || this.option("acceptCustomValue"))).toggleClass(TAGBOX_SINGLE_LINE_CLASS, isSingleLineMode);
                this._initTagTemplate();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._renderTagRemoveAction();
                this._renderSingleLineScroll();
                this._scrollContainer("start")
            },
            _initTagTemplate: function() {
                this._tagTemplate = this._getTemplateByOption("tagTemplate")
            },
            _renderField: function() {
                var isDefaultFieldTemplate = !(0, _type.isDefined)(this.option("fieldTemplate"));
                this.$element().toggleClass(TAGBOX_DEFAULT_FIELD_TEMPLATE_CLASS, isDefaultFieldTemplate).toggleClass(TAGBOX_CUSTOM_FIELD_TEMPLATE_CLASS, !isDefaultFieldTemplate);
                this.callBase()
            },
            _renderTagRemoveAction: function() {
                var tagRemoveAction = this._createAction(this._removeTagHandler.bind(this));
                var eventName = (0, _utils.addNamespace)(_click.name, "dxTagBoxTagRemove");
                _events_engine2.default.off(this._$tagsContainer, eventName);
                _events_engine2.default.on(this._$tagsContainer, eventName, ".".concat(TAGBOX_TAG_REMOVE_BUTTON_CLASS), function(event) {
                    tagRemoveAction({
                        event: event
                    })
                });
                this._renderTypingEvent()
            },
            _renderSingleLineScroll: function() {
                var mouseWheelEvent = (0, _utils.addNamespace)("dxmousewheel", this.NAME);
                var $element = this.$element();
                var isMultiline = this.option("multiline");
                _events_engine2.default.off($element, mouseWheelEvent);
                if ("desktop" !== _devices2.default.real().deviceType) {
                    this._$tagsContainer && this._$tagsContainer.css("overflowX", isMultiline ? "" : "auto");
                    return
                }
                if (isMultiline) {
                    return
                }
                _events_engine2.default.on($element, mouseWheelEvent, this._tagContainerMouseWheelHandler.bind(this))
            },
            _tagContainerMouseWheelHandler: function(_ref) {
                var delta = _ref.delta;
                var scrollLeft = this._$tagsContainer.scrollLeft();
                this._$tagsContainer.scrollLeft(scrollLeft + delta * TAGBOX_MOUSE_WHEEL_DELTA_MULTIPLIER);
                return false
            },
            _renderTypingEvent: function() {
                var _this2 = this;
                _events_engine2.default.on(this._input(), (0, _utils.addNamespace)("keydown", this.NAME), function(e) {
                    var keyName = (0, _utils.normalizeKeyName)(e);
                    if (!_this2._isControlKey(keyName) && _this2._isEditable()) {
                        _this2._clearTagFocus()
                    }
                })
            },
            _popupWrapperClass: function() {
                return this.callBase() + " " + TAGBOX_POPUP_WRAPPER_CLASS
            },
            _renderInput: function() {
                this.callBase();
                this._renderPreventBlur(this._inputWrapper())
            },
            _renderInputValueImpl: function() {
                return this._renderMultiSelect()
            },
            _loadInputValue: function() {
                return (0, _deferred.when)()
            },
            _clearTextValue: function() {
                this._input().val("");
                this._toggleEmptinessEventHandler()
            },
            _focusInHandler: function(e) {
                if (!this._preventNestedFocusEvent(e)) {
                    this._scrollContainer("end")
                }
                this.callBase(e)
            },
            _restoreInputText: function(saveEditingValue) {
                if (!saveEditingValue) {
                    this._clearTextValue()
                }
            },
            _focusOutHandler: function(e) {
                if (!this._preventNestedFocusEvent(e)) {
                    this._clearTagFocus();
                    this._scrollContainer("start")
                }
                this.callBase(e)
            },
            _getFirstPopupElement: function() {
                return this.option("showSelectionControls") ? this._list.$element() : this.callBase()
            },
            _initSelectAllValueChangedAction: function() {
                this._selectAllValueChangeAction = this._createActionByOption("onSelectAllValueChanged")
            },
            _renderList: function() {
                var _this3 = this;
                this.callBase();
                this._setListDataSourceFilter();
                if (this.option("showSelectionControls")) {
                    this._list.registerKeyHandler("tab", function(e) {
                        return _this3._popupElementTabHandler(e)
                    });
                    this._list.registerKeyHandler("escape", function(e) {
                        return _this3._popupElementEscHandler(e)
                    })
                }
            },
            _canListHaveFocus: function() {
                return "useButtons" === this.option("applyValueMode")
            },
            _listConfig: function() {
                var _this4 = this;
                var selectionMode = this.option("showSelectionControls") ? "all" : "multiple";
                return (0, _extend.extend)(this.callBase(), {
                    selectionMode: selectionMode,
                    selectAllText: this.option("selectAllText"),
                    onSelectAllValueChanged: function(_ref2) {
                        var value = _ref2.value;
                        _this4._selectAllValueChangeAction({
                            value: value
                        })
                    },
                    selectAllMode: this.option("selectAllMode"),
                    selectedItems: this._selectedItems,
                    onFocusedItemChanged: null
                })
            },
            _renderMultiSelect: function() {
                var _this5 = this;
                var d = new _deferred.Deferred;
                this._$tagsContainer = this._$textEditorInputContainer.addClass(TAGBOX_TAG_CONTAINER_CLASS).addClass(NATIVE_CLICK_CLASS);
                this._$tagsContainer.parent().addClass(NATIVE_CLICK_CLASS);
                this._renderInputSize();
                this._renderTags().done(function() {
                    _this5._popup && _this5._popup.refreshPosition();
                    d.resolve()
                }).fail(d.reject);
                return d.promise()
            },
            _listItemClickHandler: function(e) {
                !this.option("showSelectionControls") && this._clearTextValue();
                if ("useButtons" === this.option("applyValueMode")) {
                    return
                }
                this.callBase(e)
            },
            _shouldClearFilter: function() {
                var shouldClearFilter = this.callBase();
                var showSelectionControls = this.option("showSelectionControls");
                return !showSelectionControls && shouldClearFilter
            },
            _renderInputSize: function() {
                var $input = this._input();
                var value = $input.val();
                var isEmptyInput = (0, _type.isString)(value) && value;
                var cursorWidth = 5;
                var width = "";
                var size = "";
                var canTypeText = this.option("searchEnabled") || this.option("acceptCustomValue");
                if (isEmptyInput && canTypeText) {
                    var $calculationElement = (0, _dom.createTextElementHiddenCopy)($input, value, {
                        includePaddings: true
                    });
                    $calculationElement.insertAfter($input);
                    width = $calculationElement.outerWidth() + cursorWidth;
                    $calculationElement.remove()
                } else {
                    if (!value) {
                        size = 1
                    }
                }
                $input.css("width", width);
                $input.attr("size", size)
            },
            _renderInputSubstitution: function() {
                this.callBase();
                this._renderInputSize()
            },
            _getValue: function() {
                return this.option("value") || []
            },
            _multiTagRequired: function() {
                var values = this._getValue();
                var maxDisplayedTags = this.option("maxDisplayedTags");
                return (0, _type.isDefined)(maxDisplayedTags) && values.length > maxDisplayedTags
            },
            _renderMultiTag: function($input) {
                var $tag = (0, _renderer2.default)("<div>").addClass(TAGBOX_TAG_CLASS).addClass(TAGBOX_MULTI_TAG_CLASS);
                var args = {
                    multiTagElement: (0, _dom.getPublicElement)($tag),
                    selectedItems: this.option("selectedItems")
                };
                this._multiTagPreparingAction(args);
                if (args.cancel) {
                    return false
                }
                $tag.data(TAGBOX_TAG_DATA_KEY, args.text);
                $tag.insertBefore($input);
                this._tagTemplate.render({
                    model: args.text,
                    container: (0, _dom.getPublicElement)($tag)
                });
                return $tag
            },
            _getFilteredItems: function(values) {
                var _this6 = this;
                var creator = new _selection_filter.SelectionFilterCreator(values);
                var selectedItems = this._list && this._list.option("selectedItems") || this.option("selectedItems");
                var clientFilterFunction = creator.getLocalFilter(this._valueGetter);
                var filteredItems = selectedItems.filter(clientFilterFunction);
                var selectedItemsAlreadyLoaded = filteredItems.length === values.length;
                var d = new _deferred.Deferred;
                if (!this._isDataSourceChanged && selectedItemsAlreadyLoaded) {
                    return d.resolve(filteredItems).promise()
                } else {
                    var dataSource = this._dataSource;
                    var dataSourceFilter = dataSource.filter();
                    var filterExpr = creator.getCombinedFilter(this.option("valueExpr"), dataSourceFilter);
                    var filterLength = encodeURI(JSON.stringify(filterExpr)).length;
                    var filter = filterLength > this.option("maxFilterLength") ? void 0 : filterExpr;
                    var _dataSource$loadOptio = dataSource.loadOptions(),
                        customQueryParams = _dataSource$loadOptio.customQueryParams,
                        expand = _dataSource$loadOptio.expand;
                    dataSource.store().load({
                        filter: filter,
                        customQueryParams: customQueryParams,
                        expand: expand
                    }).done(function(data, extra) {
                        _this6._isDataSourceChanged = false;
                        if (_this6._disposed) {
                            d.reject();
                            return
                        }
                        var _normalizeLoadResult = (0, _utils4.normalizeLoadResult)(data, extra),
                            items = _normalizeLoadResult.data;
                        var mappedItems = dataSource._applyMapFunction(items);
                        d.resolve(mappedItems.filter(clientFilterFunction))
                    }).fail(d.reject);
                    return d.promise()
                }
            },
            _createTagsData: function(values, filteredItems) {
                var _this7 = this;
                var items = [];
                var cache = {};
                var isValueExprSpecified = "this" === this._valueGetterExpr();
                var filteredValues = {};
                filteredItems.forEach(function(filteredItem) {
                    var filteredItemValue = isValueExprSpecified ? JSON.stringify(filteredItem) : _this7._valueGetter(filteredItem);
                    filteredValues[filteredItemValue] = filteredItem
                });
                var loadItemPromises = [];
                values.forEach(function(value, index) {
                    var currentItem = filteredValues[isValueExprSpecified ? JSON.stringify(value) : value];
                    if (isValueExprSpecified && !(0, _type.isDefined)(currentItem)) {
                        loadItemPromises.push(_this7._loadItem(value, cache).always(function(item) {
                            var newItem = _this7._createTagData(items, item, value, index);
                            items.splice(index, 0, newItem)
                        }))
                    } else {
                        var newItem = _this7._createTagData(items, currentItem, value, index);
                        items.splice(index, 0, newItem)
                    }
                });
                var d = new _deferred.Deferred;
                _deferred.when.apply(this, loadItemPromises).always(function() {
                    d.resolve(items)
                });
                return d.promise()
            },
            _createTagData: function(items, item, value, valueIndex) {
                if ((0, _type.isDefined)(item)) {
                    this._selectedItems.push(item);
                    return item
                } else {
                    var selectedItem = this.option("selectedItem");
                    var customItem = this._valueGetter(selectedItem) === value ? selectedItem : value;
                    return customItem
                }
            },
            _isGroupedData: function() {
                return this.option("grouped") && !this._dataSource.group()
            },
            _getItemsByValues: function(values) {
                var resultItems = [];
                values.forEach(function(value) {
                    var item = this._getItemFromPlain(value);
                    if ((0, _type.isDefined)(item)) {
                        resultItems.push(item)
                    }
                }.bind(this));
                return resultItems
            },
            _getFilteredGroupedItems: function(values) {
                var selectedItems = new _deferred.Deferred;
                if (!this._dataSource.items().length) {
                    this._dataSource.load().done(function() {
                        selectedItems.resolve(this._getItemsByValues(values))
                    }.bind(this)).fail(selectedItems.resolve([]))
                } else {
                    selectedItems.resolve(this._getItemsByValues(values))
                }
                return selectedItems.promise()
            },
            _loadTagsData: function() {
                var _this8 = this;
                var values = this._getValue();
                var tagData = new _deferred.Deferred;
                this._selectedItems = [];
                var filteredItemsPromise = this._isGroupedData() ? this._getFilteredGroupedItems(values) : this._getFilteredItems(values);
                filteredItemsPromise.done(function(filteredItems) {
                    var items = _this8._createTagsData(values, filteredItems);
                    items.always(function(data) {
                        tagData.resolve(data)
                    })
                }).fail(tagData.reject.bind(this));
                return tagData.promise()
            },
            _renderTags: function() {
                var _this9 = this;
                var d = new _deferred.Deferred;
                this._loadTagsData().always(function(items) {
                    if (_this9._disposed) {
                        d.reject();
                        return
                    }
                    _this9._renderTagsCore(items);
                    _this9._renderEmptyState();
                    if (!_this9._preserveFocusedTag) {
                        _this9._clearTagFocus()
                    }
                    d.resolve()
                });
                return d.promise()
            },
            _renderTagsCore: function(items) {
                var _this10 = this;
                this._renderField();
                this.option("selectedItems", this._selectedItems.slice());
                this._cleanTags();
                var $multiTag = this._multiTagRequired() && this._renderMultiTag(this._input());
                var showMultiTagOnly = this.option("showMultiTagOnly");
                var maxDisplayedTags = this.option("maxDisplayedTags");
                items.forEach(function(item, index) {
                    if ($multiTag && showMultiTagOnly || $multiTag && !showMultiTagOnly && index - maxDisplayedTags >= -1) {
                        return false
                    }
                    _this10._renderTag(item, $multiTag || _this10._input())
                });
                if (this._isFocused()) {
                    this._scrollContainer("end")
                }
                this._refreshTagElements()
            },
            _cleanTags: function() {
                if (this._multiTagRequired()) {
                    this._tagElements().remove()
                } else {
                    var $tags = this._tagElements();
                    var values = this._getValue();
                    (0, _iterator.each)($tags, function(_, tag) {
                        var $tag = (0, _renderer2.default)(tag);
                        var index = (0, _array.inArray)($tag.data(TAGBOX_TAG_DATA_KEY), values);
                        if (index < 0) {
                            $tag.remove()
                        }
                    })
                }
            },
            _renderEmptyState: function() {
                var isEmpty = !(this._getValue().length || this._selectedItems.length || this._searchValue());
                this._toggleEmptiness(isEmpty);
                this._renderDisplayText()
            },
            _renderDisplayText: function() {
                this._renderInputSize()
            },
            _refreshTagElements: function() {
                this._tagElementsCache = this.$element().find(".".concat(TAGBOX_TAG_CLASS))
            },
            _tagElements: function() {
                return this._tagElementsCache
            },
            _applyTagTemplate: function(item, $tag) {
                this._tagTemplate.render({
                    model: item,
                    container: (0, _dom.getPublicElement)($tag)
                })
            },
            _renderTag: function(item, $input) {
                var value = this._valueGetter(item);
                if (!(0, _type.isDefined)(value)) {
                    return
                }
                var $tag = this._getTag(value);
                var displayValue = this._displayGetter(item);
                var itemModel = this._getItemModel(item, displayValue);
                if ($tag) {
                    if ((0, _type.isDefined)(displayValue)) {
                        $tag.empty();
                        this._applyTagTemplate(itemModel, $tag)
                    }
                    $tag.removeClass(TAGBOX_CUSTOM_TAG_CLASS)
                } else {
                    $tag = this._createTag(value, $input);
                    if ((0, _type.isDefined)(item)) {
                        this._applyTagTemplate(itemModel, $tag)
                    } else {
                        $tag.addClass(TAGBOX_CUSTOM_TAG_CLASS);
                        this._applyTagTemplate(value, $tag)
                    }
                }
            },
            _getItemModel: function(item, displayValue) {
                if ((0, _type.isObject)(item) && displayValue) {
                    return item
                } else {
                    return (0, _common.ensureDefined)(displayValue, "")
                }
            },
            _getTag: function(value) {
                var $tags = this._tagElements();
                var tagsLength = $tags.length;
                var result = false;
                for (var i = 0; i < tagsLength; i++) {
                    var $tag = $tags[i];
                    var tagData = _element_data2.default.data($tag, TAGBOX_TAG_DATA_KEY);
                    if (value === tagData || (0, _common.equalByValue)(value, tagData)) {
                        result = (0, _renderer2.default)($tag);
                        break
                    }
                }
                return result
            },
            _createTag: function(value, $input) {
                return (0, _renderer2.default)("<div>").addClass(TAGBOX_TAG_CLASS).data(TAGBOX_TAG_DATA_KEY, value).insertBefore($input)
            },
            _toggleEmptinessEventHandler: function() {
                this._toggleEmptiness(!this._getValue().length && !this._searchValue().length)
            },
            _customItemAddedHandler: function(e) {
                this.callBase(e);
                this._input().val("")
            },
            _removeTagHandler: function(args) {
                var e = args.event;
                e.stopPropagation();
                this._saveValueChangeEvent(e);
                var $tag = (0, _renderer2.default)(e.target).closest(".".concat(TAGBOX_TAG_CLASS));
                this._removeTagElement($tag)
            },
            _removeTagElement: function($tag) {
                if ($tag.hasClass(TAGBOX_MULTI_TAG_CLASS)) {
                    if (!this.option("showMultiTagOnly")) {
                        this.option("value", this._getValue().slice(0, this.option("maxDisplayedTags")))
                    } else {
                        this.reset()
                    }
                    return
                }
                var itemValue = $tag.data(TAGBOX_TAG_DATA_KEY);
                this._removeTagWithUpdate(itemValue);
                this._refreshTagElements()
            },
            _updateField: _common.noop,
            _removeTagWithUpdate: function(itemValue) {
                var value = this._getValue().slice();
                this._removeTag(value, itemValue);
                this.option("value", value);
                if (0 === value.length) {
                    this._clearTagFocus()
                }
            },
            _getCurrentValue: function() {
                return this._lastValue()
            },
            _selectionChangeHandler: function(e) {
                var _this11 = this;
                if ("useButtons" === this.option("applyValueMode")) {
                    return
                }
                var value = this._getValue().slice();
                (0, _iterator.each)(e.removedItems || [], function(_, removedItem) {
                    _this11._removeTag(value, _this11._valueGetter(removedItem))
                });
                (0, _iterator.each)(e.addedItems || [], function(_, addedItem) {
                    _this11._addTag(value, _this11._valueGetter(addedItem))
                });
                this._updateWidgetHeight();
                if (!(0, _common.equalByValue)(this._list.option("selectedItemKeys"), this.option("value"))) {
                    this.option("value", value)
                }
            },
            _removeTag: function(value, item) {
                var index = this._valueIndex(item, value);
                if (index >= 0) {
                    value.splice(index, 1)
                }
            },
            _addTag: function(value, item) {
                var index = this._valueIndex(item);
                if (index < 0) {
                    value.push(item)
                }
            },
            _fieldRenderData: function() {
                return this._selectedItems.slice()
            },
            _completeSelection: function(value) {
                if (!this.option("showSelectionControls")) {
                    this._setValue(value)
                }
            },
            _setValue: function(value) {
                if (null === value) {
                    return
                }
                var useButtons = "useButtons" === this.option("applyValueMode");
                var valueIndex = this._valueIndex(value);
                var values = (useButtons ? this._list.option("selectedItemKeys") : this._getValue()).slice();
                if (valueIndex >= 0) {
                    values.splice(valueIndex, 1)
                } else {
                    values.push(value)
                }
                if ("useButtons" === this.option("applyValueMode")) {
                    this._list.option("selectedItemKeys", values)
                } else {
                    this.option("value", values)
                }
            },
            _isSelectedValue: function(value, cache) {
                return this._valueIndex(value, null, cache) > -1
            },
            _valueIndex: function(value, values, cache) {
                var _this12 = this;
                var result = -1;
                if (cache && "object" !== _typeof(value)) {
                    if (!cache.indexByValues) {
                        cache.indexByValues = {};
                        values = values || this._getValue();
                        values.forEach(function(value, index) {
                            cache.indexByValues[value] = index
                        })
                    }
                    if (value in cache.indexByValues) {
                        return cache.indexByValues[value]
                    }
                }
                values = values || this._getValue();
                (0, _iterator.each)(values, function(index, selectedValue) {
                    if (_this12._isValueEquals(value, selectedValue)) {
                        result = index;
                        return false
                    }
                });
                return result
            },
            _lastValue: function() {
                var values = this._getValue();
                var lastValue = values[values.length - 1];
                return (0, _type.isDefined)(lastValue) ? lastValue : null
            },
            _valueChangeEventHandler: _common.noop,
            _shouldRenderSearchEvent: function() {
                return this.option("searchEnabled") || this.option("acceptCustomValue")
            },
            _searchHandler: function(e) {
                if (this.option("searchEnabled") && !!e && !this._isTagRemoved) {
                    this.callBase(e)
                }
                this._updateWidgetHeight();
                delete this._isTagRemoved
            },
            _updateWidgetHeight: function() {
                var element = this.$element();
                var originalHeight = element.height();
                this._renderInputSize();
                var currentHeight = element.height();
                if (this._popup && this.option("opened") && this._isEditable() && currentHeight !== originalHeight) {
                    this._popup.repaint()
                }
            },
            _refreshSelected: function() {
                this._list && this._list.option("selectedItems", this._selectedItems)
            },
            _resetListDataSourceFilter: function() {
                var dataSource = this._getDataSource();
                if (!dataSource) {
                    return
                }
                delete this._userFilter;
                dataSource.filter(null);
                dataSource.reload()
            },
            _setListDataSourceFilter: function() {
                if (!this.option("hideSelectedItems") || !this._list) {
                    return
                }
                var dataSource = this._getDataSource();
                if (!dataSource) {
                    return
                }
                var valueGetterExpr = this._valueGetterExpr();
                if ((0, _type.isString)(valueGetterExpr) && "this" !== valueGetterExpr) {
                    var filter = this._dataSourceFilterExpr();
                    if (void 0 === this._userFilter) {
                        this._userFilter = dataSource.filter() || null
                    }
                    this._userFilter && filter.push(this._userFilter);
                    filter.length ? dataSource.filter(filter) : dataSource.filter(null)
                } else {
                    dataSource.filter(this._dataSourceFilterFunction.bind(this))
                }
                dataSource.load()
            },
            _dataSourceFilterExpr: function() {
                var _this13 = this;
                var filter = [];
                (0, _iterator.each)(this._getValue(), function(index, value) {
                    filter.push(["!", [_this13._valueGetterExpr(), value]])
                });
                return filter
            },
            _dataSourceFilterFunction: function(itemData) {
                var _this14 = this;
                var itemValue = this._valueGetter(itemData);
                var result = true;
                (0, _iterator.each)(this._getValue(), function(index, value) {
                    if (_this14._isValueEquals(value, itemValue)) {
                        result = false;
                        return false
                    }
                });
                return result
            },
            _dataSourceChangedHandler: function() {
                if (this._list) {
                    this._isDataSourceChanged = true
                }
                this.callBase.apply(this, arguments)
            },
            _applyButtonHandler: function() {
                this.option("value", this._getSortedListValues());
                this._clearTextValue();
                this._clearFilter();
                this.callBase()
            },
            _getSortedListValues: function() {
                var listValues = this._getListValues();
                var currentValue = this.option("value") || [];
                var existedItems = listValues.length ? currentValue.filter(function(item) {
                    return listValues.indexOf(item) !== -1
                }) : [];
                var newItems = existedItems.length ? listValues.filter(function(item) {
                    return currentValue.indexOf(item) === -1
                }) : listValues;
                return existedItems.concat(newItems)
            },
            _getListValues: function() {
                var _this15 = this;
                if (!this._list) {
                    return []
                }
                var selectedItems = this._getPlainItems(this._list.option("selectedItems"));
                var result = [];
                (0, _iterator.each)(selectedItems, function(index, item) {
                    result[index] = _this15._valueGetter(item)
                });
                return result
            },
            _setListDataSource: function() {
                this.callBase();
                this._refreshSelected()
            },
            _renderOpenedState: function() {
                this.callBase();
                if ("useButtons" === this.option("applyValueMode") && !this.option("opened")) {
                    this._refreshSelected()
                }
            },
            reset: function() {
                this._restoreInputText();
                var defaultValue = this._getDefaultOptions().value;
                var currentValue = this.option("value");
                if (defaultValue && 0 === defaultValue.length && currentValue && defaultValue.length === currentValue.length) {
                    return
                }
                this.callBase()
            },
            _clean: function() {
                this.callBase();
                delete this._defaultTagTemplate;
                delete this._tagTemplate
            },
            _removeDuplicates: function(from, what) {
                var _this16 = this;
                var result = [];
                (0, _iterator.each)(from, function(_, value) {
                    var filteredItems = what.filter(function(item) {
                        return _this16._valueGetter(value) === _this16._valueGetter(item)
                    });
                    if (!filteredItems.length) {
                        result.push(value)
                    }
                });
                return result
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onSelectAllValueChanged":
                        this._initSelectAllValueChangedAction();
                        break;
                    case "onMultiTagPreparing":
                        this._initMultiTagPreparingAction();
                        this._renderTags();
                        break;
                    case "hideSelectedItems":
                        if (args.value) {
                            this._setListDataSourceFilter()
                        } else {
                            this._resetListDataSourceFilter()
                        }
                        break;
                    case "useSubmitBehavior":
                        this._toggleSubmitElement(args.value);
                        break;
                    case "displayExpr":
                        this.callBase(args);
                        this._initTemplates();
                        this._invalidate();
                        break;
                    case "tagTemplate":
                        this._initTagTemplate();
                        this._invalidate();
                        break;
                    case "selectAllText":
                        this._setListOption("selectAllText", this.option("selectAllText"));
                        break;
                    case "value":
                        this.callBase(args);
                        this._setListDataSourceFilter();
                        break;
                    case "maxDisplayedTags":
                    case "showMultiTagOnly":
                        this._renderTags();
                        break;
                    case "selectAllMode":
                        this._setListOption(args.name, args.value);
                        break;
                    case "selectedItem":
                        break;
                    case "selectedItems":
                        this._selectionChangedAction({
                            addedItems: this._removeDuplicates(args.value, args.previousValue),
                            removedItems: this._removeDuplicates(args.previousValue, args.value)
                        });
                        break;
                    case "multiline":
                        this.$element().toggleClass(TAGBOX_SINGLE_LINE_CLASS, !args.value);
                        this._renderSingleLineScroll();
                        break;
                    case "maxFilterLength":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getActualSearchValue: function() {
                return this.callBase() || this._searchValue()
            },
            _popupHidingHandler: function() {
                this.callBase();
                this._clearFilter()
            }
        });
        (0, _component_registrator2.default)("dxTagBox", TagBox);
        module.exports = TagBox
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.accessibility.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _accessibility = __webpack_require__( /*! ../../ui/shared/accessibility */ 108);
        var _accessibility2 = _interopRequireDefault(_accessibility);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = {
            registerKeyboardAction: function(viewName, instance, $element, selector, action) {
                var keyboardController = instance.getController("keyboardNavigation");
                if (instance.option("useLegacyKeyboardNavigation") || keyboardController && !keyboardController.isKeyboardEnabled()) {
                    return
                }
                var executeKeyDown = function(args) {
                    instance.executeAction("onKeyDown", args)
                };
                instance.createAction("onKeyDown");
                _accessibility2.default.registerKeyboardAction(viewName, instance, $element, selector, action, executeKeyDown)
            }
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.utils.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.createGroupFilter = function(path, storeLoadOptions) {
            var groups = (0, _utils.normalizeSortingInfo)(storeLoadOptions.group);
            var filter = [];
            for (var i = 0; i < path.length; i++) {
                filter.push([groups[i].selector, "=", path[i]])
            }
            if (storeLoadOptions.filter) {
                filter.push(storeLoadOptions.filter)
            }
            return _uiGrid_core2.default.combineFilters(filter)
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/data_source.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _utils = __webpack_require__( /*! ../../data/data_source/utils */ 64);
        var _abstract_store = __webpack_require__( /*! ../../data/abstract_store */ 103);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _events_strategy = __webpack_require__( /*! ../../core/events_strategy */ 100);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _local_store = __webpack_require__( /*! ./local_store */ 710);
        var _remote_store = __webpack_require__( /*! ./remote_store */ 711);
        var _remote_store2 = _interopRequireDefault(_remote_store);
        var _xmla_store = __webpack_require__( /*! ./xmla_store/xmla_store */ 395);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.summary_display_modes */ 712);
        var _uiPivot_grid2 = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DESCRIPTION_NAME_BY_AREA = {
            row: "rows",
            column: "columns",
            data: "values",
            filter: "filters"
        };
        var STATE_PROPERTIES = ["area", "areaIndex", "sortOrder", "filterType", "filterValues", "sortBy", "sortBySummaryField", "sortBySummaryPath", "expanded", "summaryType", "summaryDisplayMode"];
        var CALCULATED_PROPERTIES = ["format", "selector", "customizeText", "caption"];
        var ALL_CALCULATED_PROPERTIES = CALCULATED_PROPERTIES.concat(["allowSorting", "allowSortingBySummary", "allowFiltering", "allowExpandAll"]);

        function createCaption(field) {
            var caption = field.dataField || field.groupName || "";
            var summaryType = (field.summaryType || "").toLowerCase();
            if ((0, _type.isString)(field.groupInterval)) {
                caption += "_" + field.groupInterval
            }
            if (summaryType && "custom" !== summaryType) {
                summaryType = summaryType.replace(/^./, summaryType[0].toUpperCase());
                if (caption.length) {
                    summaryType = " (" + summaryType + ")"
                }
            } else {
                summaryType = ""
            }
            return (0, _inflector.titleize)(caption) + summaryType
        }

        function resetFieldState(field, properties) {
            var initialProperties = field._initProperties || {};
            (0, _iterator.each)(properties, function(_, prop) {
                if (Object.prototype.hasOwnProperty.call(initialProperties, prop)) {
                    field[prop] = initialProperties[prop]
                }
            })
        }

        function updateCalculatedFieldProperties(field, calculatedProperties) {
            resetFieldState(field, calculatedProperties);
            if (!(0, _type.isDefined)(field.caption)) {
                (0, _uiPivot_grid2.setFieldProperty)(field, "caption", createCaption(field))
            }
        }

        function areExpressionsUsed(dataFields) {
            return dataFields.some(function(field) {
                return field.summaryDisplayMode || field.calculateSummaryValue
            })
        }

        function isRunningTotalUsed(dataFields) {
            return dataFields.some(function(field) {
                return !!field.runningTotal
            })
        }

        function isDataExists(data) {
            return data.rows.length || data.columns.length || data.values.length
        }
        module.exports = _class2.default.inherit(function() {
            var findHeaderItem = function(headerItems, path) {
                if (headerItems._cacheByPath) {
                    return headerItems._cacheByPath[path.join(".")] || null
                }
            };
            var getHeaderItemsLastIndex = function getHeaderItemsLastIndex(headerItems, grandTotalIndex) {
                var i;
                var lastIndex = -1;
                var headerItem;
                if (headerItems) {
                    for (i = 0; i < headerItems.length; i++) {
                        headerItem = headerItems[i];
                        if (void 0 !== headerItem.index) {
                            lastIndex = Math.max(lastIndex, headerItem.index)
                        }
                        if (headerItem.children) {
                            lastIndex = Math.max(lastIndex, getHeaderItemsLastIndex(headerItem.children))
                        } else {
                            if (headerItem.collapsedChildren) {
                                lastIndex = Math.max(lastIndex, getHeaderItemsLastIndex(headerItem.collapsedChildren))
                            }
                        }
                    }
                }
                if ((0, _type.isDefined)(grandTotalIndex)) {
                    lastIndex = Math.max(lastIndex, grandTotalIndex)
                }
                return lastIndex
            };
            var updateHeaderItemChildren = function(headerItems, headerItem, children, grandTotalIndex) {
                var applyingHeaderItemsCount = getHeaderItemsLastIndex(children) + 1;
                var emptyIndex = getHeaderItemsLastIndex(headerItems, grandTotalIndex) + 1;
                var index;
                var applyingItemIndexesToCurrent = [];
                var needIndexUpdate = false;
                var d = new _deferred.Deferred;
                if (headerItem.children && headerItem.children.length === children.length) {
                    for (var i = 0; i < children.length; i++) {
                        var child = children[i];
                        if (void 0 !== child.index) {
                            if (void 0 === headerItem.children[i].index) {
                                child.index = applyingItemIndexesToCurrent[child.index] = emptyIndex++;
                                headerItem.children[i] = child
                            } else {
                                applyingItemIndexesToCurrent[child.index] = headerItem.children[i].index
                            }
                        }
                    }
                } else {
                    needIndexUpdate = true;
                    for (index = 0; index < applyingHeaderItemsCount; index++) {
                        applyingItemIndexesToCurrent[index] = emptyIndex++
                    }
                    headerItem.children = children
                }(0, _deferred.when)((0, _uiPivot_grid2.foreachTreeAsync)(headerItem.children, function(items) {
                    if (needIndexUpdate) {
                        items[0].index = applyingItemIndexesToCurrent[items[0].index]
                    }
                })).done(function() {
                    d.resolve(applyingItemIndexesToCurrent)
                });
                return d
            };
            var updateHeaderItems = function(headerItems, newHeaderItems, grandTotalIndex) {
                var d = new _deferred.Deferred;
                var emptyIndex = grandTotalIndex >= 0 && getHeaderItemsLastIndex(headerItems, grandTotalIndex) + 1;
                var applyingItemIndexesToCurrent = [];
                (0, _deferred.when)((0, _uiPivot_grid2.foreachTreeAsync)(headerItems, function(items) {
                    delete items[0].collapsedChildren
                })).done(function() {
                    (0, _deferred.when)((0, _uiPivot_grid2.foreachTreeAsync)(newHeaderItems, function(newItems, index) {
                        var newItem = newItems[0];
                        if (newItem.index >= 0) {
                            var headerItem = findHeaderItem(headerItems, (0, _uiPivot_grid2.createPath)(newItems));
                            if (headerItem && headerItem.index >= 0) {
                                applyingItemIndexesToCurrent[newItem.index] = headerItem.index
                            } else {
                                if (emptyIndex) {
                                    var path = (0, _uiPivot_grid2.createPath)(newItems.slice(1));
                                    headerItem = findHeaderItem(headerItems, path);
                                    var parentItems = path.length ? headerItem && headerItem.children : headerItems;
                                    if (parentItems) {
                                        parentItems[index] = newItem;
                                        newItem.index = applyingItemIndexesToCurrent[newItem.index] = emptyIndex++
                                    }
                                }
                            }
                        }
                    })).done(function() {
                        d.resolve(applyingItemIndexesToCurrent)
                    })
                });
                return d
            };
            var updateDataSourceCells = function(dataSource, newDataSourceCells, newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent) {
                var newRowIndex;
                var newColumnIndex;
                var newRowCells;
                var newCell;
                var rowIndex;
                var columnIndex;
                var dataSourceCells = dataSource.values;
                if (newDataSourceCells) {
                    for (newRowIndex = 0; newRowIndex <= newDataSourceCells.length; newRowIndex++) {
                        newRowCells = newDataSourceCells[newRowIndex];
                        rowIndex = newRowItemIndexesToCurrent[newRowIndex];
                        if (!(0, _type.isDefined)(rowIndex)) {
                            rowIndex = dataSource.grandTotalRowIndex
                        }
                        if (newRowCells && (0, _type.isDefined)(rowIndex)) {
                            if (!dataSourceCells[rowIndex]) {
                                dataSourceCells[rowIndex] = []
                            }
                            for (newColumnIndex = 0; newColumnIndex <= newRowCells.length; newColumnIndex++) {
                                newCell = newRowCells[newColumnIndex];
                                columnIndex = newColumnItemIndexesToCurrent[newColumnIndex];
                                if (!(0, _type.isDefined)(columnIndex)) {
                                    columnIndex = dataSource.grandTotalColumnIndex
                                }
                                if ((0, _type.isDefined)(newCell) && (0, _type.isDefined)(columnIndex)) {
                                    dataSourceCells[rowIndex][columnIndex] = newCell
                                }
                            }
                        }
                    }
                }
            };

            function createLocalOrRemoteStore(dataSourceOptions, notifyProgress) {
                var StoreConstructor = dataSourceOptions.remoteOperations || dataSourceOptions.paginate ? _remote_store2.default : _local_store.LocalStore;
                return new StoreConstructor((0, _extend.extend)((0, _utils.normalizeDataSourceOptions)(dataSourceOptions), {
                    onChanged: null,
                    onLoadingChanged: null,
                    onProgressChanged: notifyProgress
                }))
            }

            function createStore(dataSourceOptions, notifyProgress) {
                var store;
                var storeOptions;
                if ((0, _type.isPlainObject)(dataSourceOptions) && dataSourceOptions.load) {
                    store = createLocalOrRemoteStore(dataSourceOptions, notifyProgress)
                } else {
                    if (dataSourceOptions && !dataSourceOptions.store) {
                        dataSourceOptions = {
                            store: dataSourceOptions
                        }
                    }
                    storeOptions = dataSourceOptions.store;
                    if ("xmla" === storeOptions.type) {
                        store = new _xmla_store.XmlaStore(storeOptions)
                    } else {
                        if ((0, _type.isPlainObject)(storeOptions) && storeOptions.type || storeOptions instanceof _abstract_store2.default || Array.isArray(storeOptions)) {
                            store = createLocalOrRemoteStore(dataSourceOptions, notifyProgress)
                        } else {
                            if (storeOptions instanceof _class2.default) {
                                store = storeOptions
                            }
                        }
                    }
                }
                return store
            }

            function equalFields(fields, prevFields, count) {
                for (var i = 0; i < count; i++) {
                    if (!fields[i] || !prevFields[i] || fields[i].index !== prevFields[i].index) {
                        return false
                    }
                }
                return true
            }

            function getExpandedPaths(dataSource, loadOptions, dimensionName, prevLoadOptions) {
                var result = [];
                var fields = loadOptions && loadOptions[dimensionName] || [];
                var prevFields = prevLoadOptions && prevLoadOptions[dimensionName] || [];
                (0, _uiPivot_grid2.foreachTree)(dataSource[dimensionName], function(items) {
                    var item = items[0];
                    var path = (0, _uiPivot_grid2.createPath)(items);
                    if (item.children && fields[path.length - 1] && !fields[path.length - 1].expanded) {
                        if (path.length < fields.length && (!prevLoadOptions || equalFields(fields, prevFields, path.length))) {
                            result.push(path.slice())
                        }
                    }
                }, true);
                return result
            }

            function setFieldProperties(field, srcField, skipInitPropertySave, properties) {
                if (srcField) {
                    (0, _iterator.each)(properties, function(_, name) {
                        if (skipInitPropertySave) {
                            field[name] = srcField[name]
                        } else {
                            if (("summaryType" === name || "summaryDisplayMode" === name) && void 0 === srcField[name]) {
                                return
                            }(0, _uiPivot_grid2.setFieldProperty)(field, name, srcField[name])
                        }
                    })
                } else {
                    resetFieldState(field, properties)
                }
                return field
            }

            function getFieldsState(fields, properties) {
                var result = [];
                (0, _iterator.each)(fields, function(_, field) {
                    result.push(setFieldProperties({
                        dataField: field.dataField,
                        name: field.name
                    }, field, true, properties))
                });
                return result
            }

            function getFieldStateId(field) {
                if (field.name) {
                    return field.name
                }
                return field.dataField + ""
            }

            function getFieldsById(fields, id) {
                var result = [];
                (0, _iterator.each)(fields || [], function(_, field) {
                    if (getFieldStateId(field) === id) {
                        result.push(field)
                    }
                });
                return result
            }

            function setFieldsStateCore(stateFields, fields) {
                stateFields = stateFields || [];
                (0, _iterator.each)(fields, function(index, field) {
                    setFieldProperties(field, stateFields[index], false, STATE_PROPERTIES);
                    updateCalculatedFieldProperties(field, CALCULATED_PROPERTIES)
                });
                return fields
            }

            function setFieldsState(stateFields, fields) {
                stateFields = stateFields || [];
                var fieldsById = {};
                var id;
                (0, _iterator.each)(fields, function(_, field) {
                    id = getFieldStateId(field);
                    if (!fieldsById[id]) {
                        fieldsById[id] = getFieldsById(fields, getFieldStateId(field))
                    }
                });
                (0, _iterator.each)(fieldsById, function(id, fields) {
                    setFieldsStateCore(getFieldsById(stateFields, id), fields)
                });
                return fields
            }

            function getFieldsByGroup(fields, groupingField) {
                return fields.filter(function(field) {
                    return field.groupName === groupingField.groupName && (0, _type.isNumeric)(field.groupIndex) && false !== field.visible
                }).map(function(field) {
                    return (0, _extend.extend)(field, {
                        areaIndex: groupingField.areaIndex,
                        area: groupingField.area,
                        expanded: (0, _type.isDefined)(field.expanded) ? field.expanded : groupingField.expanded,
                        dataField: field.dataField || groupingField.dataField,
                        dataType: field.dataType || groupingField.dataType,
                        sortBy: field.sortBy || groupingField.sortBy,
                        sortOrder: field.sortOrder || groupingField.sortOrder,
                        sortBySummaryField: field.sortBySummaryField || groupingField.sortBySummaryField,
                        sortBySummaryPath: field.sortBySummaryPath || groupingField.sortBySummaryPath,
                        visible: field.visible || groupingField.visible,
                        showTotals: (0, _type.isDefined)(field.showTotals) ? field.showTotals : groupingField.showTotals,
                        showGrandTotals: (0, _type.isDefined)(field.showGrandTotals) ? field.showGrandTotals : groupingField.showGrandTotals
                    })
                }).sort(function(a, b) {
                    return a.groupIndex - b.groupIndex
                })
            }

            function sortFieldsByAreaIndex(fields) {
                fields.sort(function(field1, field2) {
                    return field1.areaIndex - field2.areaIndex || field1.groupIndex - field2.groupIndex
                })
            }

            function isAreaField(field, area) {
                var canAddFieldInArea = "data" === area || false !== field.visible;
                return field.area === area && !(0, _type.isDefined)(field.groupIndex) && canAddFieldInArea
            }

            function getFieldId(field, retrieveFieldsOptionValue) {
                var groupName = field.groupName || "";
                return (field.dataField || groupName) + (field.groupInterval ? groupName + field.groupInterval : "NOGROUP") + (retrieveFieldsOptionValue ? "" : groupName)
            }

            function mergeFields(fields, storeFields, retrieveFieldsOptionValue) {
                var result = [];
                var fieldsDictionary = {};
                var removedFields = {};
                var mergedGroups = [];
                var dataTypes = (0, _uiPivot_grid2.getFieldsDataType)(fields);
                if (storeFields) {
                    (0, _iterator.each)(storeFields, function(_, field) {
                        fieldsDictionary[getFieldId(field, retrieveFieldsOptionValue)] = field
                    });
                    (0, _iterator.each)(fields, function(_, field) {
                        var fieldKey = getFieldId(field, retrieveFieldsOptionValue);
                        var storeField = fieldsDictionary[fieldKey] || removedFields[fieldKey];
                        var mergedField;
                        if (storeField) {
                            if (storeField._initProperties) {
                                resetFieldState(storeField, ALL_CALCULATED_PROPERTIES)
                            }
                            mergedField = (0, _extend.extend)({}, storeField, field, {
                                _initProperties: null
                            })
                        } else {
                            fieldsDictionary[fieldKey] = mergedField = field
                        }(0, _extend.extend)(mergedField, {
                            dataType: dataTypes[field.dataField]
                        });
                        delete fieldsDictionary[fieldKey];
                        removedFields[fieldKey] = storeField;
                        result.push(mergedField)
                    });
                    if (retrieveFieldsOptionValue) {
                        (0, _iterator.each)(fieldsDictionary, function(_, field) {
                            result.push(field)
                        })
                    }
                } else {
                    result = fields
                }
                result.push.apply(result, mergedGroups);
                return result
            }

            function getFields(that) {
                var result = new _deferred.Deferred;
                var store = that._store;
                var storeFields = store && store.getFields(that._fields);
                var mergedFields;
                (0, _deferred.when)(storeFields).done(function(storeFields) {
                    that._storeFields = storeFields;
                    mergedFields = mergeFields(that._fields, storeFields, that._retrieveFields);
                    result.resolve(mergedFields)
                }).fail(result.reject);
                return result
            }

            function getSliceIndex(items, path) {
                var index = null;
                var pathValue = (path || []).join(".");
                if (pathValue.length) {
                    (0, _uiPivot_grid2.foreachTree)(items, function(items) {
                        var item = items[0];
                        var itemPath = (0, _uiPivot_grid2.createPath)(items).join(".");
                        var textPath = (0, _iterator.map)(items, function(item) {
                            return item.text
                        }).reverse().join(".");
                        if (pathValue === itemPath || item.key && textPath === pathValue) {
                            index = items[0].index;
                            return false
                        }
                    })
                }
                return index
            }

            function getFieldSummaryValueSelector(field, dataSource, loadOptions, dimensionName) {
                var values = dataSource.values;
                var sortBySummaryFieldIndex = (0, _uiPivot_grid2.findField)(loadOptions.values, field.sortBySummaryField);
                var areRows = "rows" === dimensionName;
                var sortByDimension = areRows ? dataSource.columns : dataSource.rows;
                var grandTotalIndex = areRows ? dataSource.grandTotalRowIndex : dataSource.grandTotalColumnIndex;
                var sortBySummaryPath = field.sortBySummaryPath || [];
                var sliceIndex = sortBySummaryPath.length ? getSliceIndex(sortByDimension, sortBySummaryPath) : grandTotalIndex;
                if (values && values.length && sortBySummaryFieldIndex >= 0 && (0, _type.isDefined)(sliceIndex)) {
                    return function(field) {
                        var rowIndex = areRows ? field.index : sliceIndex;
                        var columnIndex = areRows ? sliceIndex : field.index;
                        var value = ((values[rowIndex] || [
                            []
                        ])[columnIndex] || [])[sortBySummaryFieldIndex];
                        return (0, _type.isDefined)(value) ? value : null
                    }
                }
            }

            function getMemberForSortBy(sortBy, getAscOrder) {
                var member = "text";
                if ("none" === sortBy) {
                    member = "index"
                } else {
                    if (getAscOrder || "displayText" !== sortBy) {
                        member = "value"
                    }
                }
                return member
            }

            function getSortingMethod(field, dataSource, loadOptions, dimensionName, getAscOrder) {
                var sortOrder = getAscOrder ? "asc" : field.sortOrder;
                var sortBy = getMemberForSortBy(field.sortBy, getAscOrder);
                var defaultCompare = field.sortingMethod ? function(a, b) {
                    return field.sortingMethod(a, b)
                } : (0, _uiPivot_grid2.getCompareFunction)(function(item) {
                    return item[sortBy]
                });
                var summaryValueSelector = !getAscOrder && getFieldSummaryValueSelector(field, dataSource, loadOptions, dimensionName);
                var summaryCompare = summaryValueSelector && (0, _uiPivot_grid2.getCompareFunction)(summaryValueSelector);
                var sortingMethod = function(a, b) {
                    var result = summaryCompare && summaryCompare(a, b) || defaultCompare(a, b);
                    return "desc" === sortOrder ? -result : result
                };
                return sortingMethod
            }

            function sortDimension(dataSource, loadOptions, dimensionName, getAscOrder) {
                var fields = loadOptions[dimensionName] || [];
                var baseIndex = loadOptions.headerName === dimensionName ? loadOptions.path.length : 0;
                var sortingMethodByLevel = [];
                (0, _uiPivot_grid2.foreachDataLevel)(dataSource[dimensionName], function(item, index) {
                    var field = fields[index] || {};
                    var sortingMethod = sortingMethodByLevel[index] = sortingMethodByLevel[index] || getSortingMethod(field, dataSource, loadOptions, dimensionName, getAscOrder);
                    item.sort(sortingMethod)
                }, baseIndex)
            }

            function sort(loadOptions, dataSource, getAscOrder) {
                sortDimension(dataSource, loadOptions, "rows", getAscOrder);
                sortDimension(dataSource, loadOptions, "columns", getAscOrder)
            }

            function formatHeaderItems(data, loadOptions, headerName) {
                return (0, _uiPivot_grid2.foreachTreeAsync)(data[headerName], function(items) {
                    var item = items[0];
                    item.text = item.text || (0, _uiPivot_grid2.formatValue)(item.value, loadOptions[headerName][(0, _uiPivot_grid2.createPath)(items).length - 1])
                })
            }

            function formatHeaders(loadOptions, data) {
                return (0, _deferred.when)(formatHeaderItems(data, loadOptions, "columns"), formatHeaderItems(data, loadOptions, "rows"))
            }

            function updateCache(headerItems) {
                var d = new _deferred.Deferred;
                var cacheByPath = {};
                (0, _deferred.when)((0, _uiPivot_grid2.foreachTreeAsync)(headerItems, function(items) {
                    var path = (0, _uiPivot_grid2.createPath)(items).join(".");
                    cacheByPath[path] = items[0]
                })).done(d.resolve);
                headerItems._cacheByPath = cacheByPath;
                return d
            }

            function _getAreaFields(fields, area) {
                var areaFields = [];
                (0, _iterator.each)(fields, function() {
                    if (isAreaField(this, area)) {
                        areaFields.push(this)
                    }
                });
                return areaFields
            }
            exports.sort = sort;
            return {
                ctor: function(options) {
                    options = options || {};
                    this._eventsStrategy = new _events_strategy.EventsStrategy(this);
                    var that = this;
                    var store = createStore(options, function(progress) {
                        that._eventsStrategy.fireEvent("progressChanged", [progress])
                    });
                    that._store = store;
                    that._paginate = !!options.paginate;
                    that._pageSize = options.pageSize || 40;
                    that._data = {
                        rows: [],
                        columns: [],
                        values: []
                    };
                    that._loadingCount = 0;
                    that._isFieldsModified = false;
                    (0, _iterator.each)(["changed", "loadError", "loadingChanged", "progressChanged", "fieldsPrepared", "expandValueChanging"], function(_, eventName) {
                        var optionName = "on" + eventName[0].toUpperCase() + eventName.slice(1);
                        if (Object.prototype.hasOwnProperty.call(options, optionName)) {
                            this.on(eventName, options[optionName])
                        }
                    }.bind(this));
                    that._retrieveFields = (0, _type.isDefined)(options.retrieveFields) ? options.retrieveFields : true;
                    that._fields = options.fields || [];
                    that._descriptions = options.descriptions ? (0, _extend.extend)(that._createDescriptions(), options.descriptions) : void 0;
                    if (!store) {
                        (0, _extend.extend)(true, that._data, options.store || options)
                    }
                },
                getData: function() {
                    return this._data
                },
                getAreaFields: function(area, collectGroups) {
                    var areaFields = [];
                    var descriptions;
                    if (collectGroups || "data" === area) {
                        areaFields = _getAreaFields(this._fields, area);
                        sortFieldsByAreaIndex(areaFields)
                    } else {
                        descriptions = this._descriptions || {};
                        areaFields = descriptions[DESCRIPTION_NAME_BY_AREA[area]] || []
                    }
                    return areaFields
                },
                fields: function(_fields) {
                    var that = this;
                    if (_fields) {
                        that._fields = mergeFields(_fields, that._storeFields, that._retrieveFields);
                        that._fieldsPrepared(that._fields)
                    }
                    return that._fields
                },
                field: function field(id, options) {
                    var that = this;
                    var fields = that._fields;
                    var field = fields && fields[(0, _type.isNumeric)(id) ? id : (0, _uiPivot_grid2.findField)(fields, id)];
                    var levels;
                    if (field && options) {
                        (0, _iterator.each)(options, function(optionName, optionValue) {
                            var isInitialization = (0, _array.inArray)(optionName, STATE_PROPERTIES) < 0;
                            (0, _uiPivot_grid2.setFieldProperty)(field, optionName, optionValue, isInitialization);
                            if ("sortOrder" === optionName) {
                                levels = field.levels || [];
                                for (var i = 0; i < levels.length; i++) {
                                    levels[i][optionName] = optionValue
                                }
                            }
                        });
                        updateCalculatedFieldProperties(field, CALCULATED_PROPERTIES);
                        that._descriptions = that._createDescriptions(field);
                        that._isFieldsModified = true;
                        that._eventsStrategy.fireEvent("fieldChanged", [field])
                    }
                    return field
                },
                getFieldValues: function(index, applyFilters, options) {
                    var that = this;
                    var field = this._fields && this._fields[index];
                    var store = this.store();
                    var loadFields = [];
                    var loadOptions = {
                        columns: loadFields,
                        rows: [],
                        values: this.getAreaFields("data"),
                        filters: applyFilters ? this._fields.filter(function(f) {
                            return f !== field && f.area && f.filterValues && f.filterValues.length
                        }) : [],
                        skipValues: true
                    };
                    var searchValue;
                    var d = new _deferred.Deferred;
                    if (options) {
                        searchValue = options.searchValue;
                        loadOptions.columnSkip = options.skip;
                        loadOptions.columnTake = options.take
                    }
                    if (field && store) {
                        (0, _iterator.each)(field.levels || [field], function() {
                            loadFields.push((0, _extend.extend)({}, this, {
                                expanded: true,
                                filterValues: null,
                                sortOrder: "asc",
                                sortBySummaryField: null,
                                searchValue: searchValue
                            }))
                        });
                        store.load(loadOptions).done(function(data) {
                            if (loadOptions.columnSkip) {
                                data.columns = data.columns.slice(loadOptions.columnSkip)
                            }
                            if (loadOptions.columnTake) {
                                data.columns = data.columns.slice(0, loadOptions.columnTake)
                            }
                            formatHeaders(loadOptions, data);
                            if (!loadOptions.columnTake) {
                                that._sort(loadOptions, data)
                            }
                            d.resolve(data.columns)
                        }).fail(d)
                    } else {
                        d.reject()
                    }
                    return d
                },
                reload: function() {
                    return this.load({
                        reload: true
                    })
                },
                filter: function() {
                    var store = this._store;
                    return store.filter.apply(store, arguments)
                },
                load: function(options) {
                    var that = this;
                    var d = new _deferred.Deferred;
                    options = options || {};
                    that.beginLoading();
                    d.fail(function(e) {
                        that._eventsStrategy.fireEvent("loadError", [e])
                    }).always(function() {
                        that.endLoading()
                    });

                    function loadTask() {
                        that._delayedLoadTask = void 0;
                        if (!that._descriptions) {
                            (0, _deferred.when)(getFields(that)).done(function(fields) {
                                that._fieldsPrepared(fields);
                                that._loadCore(options, d)
                            }).fail(d.reject).fail(that._loadErrorHandler)
                        } else {
                            that._loadCore(options, d)
                        }
                    }
                    if (that.store()) {
                        that._delayedLoadTask = (0, _common.executeAsync)(loadTask)
                    } else {
                        loadTask()
                    }
                    return d
                },
                createDrillDownDataSource: function(params) {
                    return this._store.createDrillDownDataSource(this._descriptions, params)
                },
                _createDescriptions: function(currentField) {
                    var that = this;
                    var fields = that.fields();
                    var descriptions = {
                        rows: [],
                        columns: [],
                        values: [],
                        filters: []
                    };
                    (0, _iterator.each)(["row", "column", "data", "filter"], function(_, areaName) {
                        (0, _array.normalizeIndexes)(_getAreaFields(fields, areaName), "areaIndex", currentField)
                    });
                    (0, _iterator.each)(fields || [], function(_, field) {
                        var descriptionName = DESCRIPTION_NAME_BY_AREA[field.area];
                        var dimension = descriptions[descriptionName];
                        var groupName = field.groupName;
                        if (groupName && !(0, _type.isNumeric)(field.groupIndex)) {
                            field.levels = getFieldsByGroup(fields, field)
                        }
                        if (!dimension || groupName && (0, _type.isNumeric)(field.groupIndex) || false === field.visible && "data" !== field.area && "filter" !== field.area) {
                            return
                        }
                        if (field.levels && dimension !== descriptions.filters && dimension !== descriptions.values) {
                            dimension.push.apply(dimension, field.levels);
                            if (field.filterValues && field.filterValues.length) {
                                descriptions.filters.push(field)
                            }
                        } else {
                            dimension.push(field)
                        }
                    });
                    (0, _iterator.each)(descriptions, function(_, fields) {
                        sortFieldsByAreaIndex(fields)
                    });
                    var indices = {};
                    (0, _iterator.each)(descriptions.values, function(_, field) {
                        var expression = field.calculateSummaryValue;
                        if ((0, _type.isFunction)(expression)) {
                            var summaryCell = (0, _uiPivot_grid.createMockSummaryCell)(descriptions, fields, indices);
                            expression(summaryCell)
                        }
                    });
                    return descriptions
                },
                _fieldsPrepared: function(fields) {
                    var that = this;
                    that._fields = fields;
                    (0, _iterator.each)(fields, function(index, field) {
                        field.index = index;
                        updateCalculatedFieldProperties(field, ALL_CALCULATED_PROPERTIES)
                    });
                    var currentFieldState = getFieldsState(fields, ["caption"]);
                    that._eventsStrategy.fireEvent("fieldsPrepared", [fields]);
                    for (var i = 0; i < fields.length; i++) {
                        if (fields[i].caption !== currentFieldState[i].caption) {
                            (0, _uiPivot_grid2.setFieldProperty)(fields[i], "caption", fields[i].caption, true)
                        }
                    }
                    that._descriptions = that._createDescriptions()
                },
                isLoading: function() {
                    return this._loadingCount > 0
                },
                state: function(_state, skipLoading) {
                    var that = this;
                    if (arguments.length) {
                        _state = (0, _extend.extend)({
                            rowExpandedPaths: [],
                            columnExpandedPaths: []
                        }, _state);
                        if (!that._descriptions) {
                            that.beginLoading();
                            (0, _deferred.when)(getFields(that)).done(function(fields) {
                                that._fields = setFieldsState(_state.fields, fields);
                                that._fieldsPrepared(fields);
                                !skipLoading && that.load(_state)
                            }).always(function() {
                                that.endLoading()
                            })
                        } else {
                            that._fields = setFieldsState(_state.fields, that._fields);
                            that._descriptions = that._createDescriptions();
                            !skipLoading && that.load(_state)
                        }
                    } else {
                        return {
                            fields: getFieldsState(that._fields, STATE_PROPERTIES),
                            columnExpandedPaths: getExpandedPaths(that._data, that._descriptions, "columns"),
                            rowExpandedPaths: getExpandedPaths(that._data, that._descriptions, "rows")
                        }
                    }
                },
                beginLoading: function() {
                    this._changeLoadingCount(1)
                },
                endLoading: function() {
                    this._changeLoadingCount(-1)
                },
                _changeLoadingCount: function(increment) {
                    var oldLoading = this.isLoading();
                    this._loadingCount += increment;
                    var newLoading = this.isLoading();
                    if (oldLoading ^ newLoading) {
                        this._eventsStrategy.fireEvent("loadingChanged", [newLoading])
                    }
                },
                _hasPagingValues: function(options, area, oppositeIndex) {
                    var takeField = area + "Take";
                    var skipField = area + "Skip";
                    var values = this._data.values;
                    var items = this._data[area + "s"];
                    var oppositeArea = "row" === area ? "column" : "row";
                    var indices = [];
                    if (options.path && options.area === area) {
                        var headerItem = findHeaderItem(items, options.path);
                        items = headerItem && headerItem.children;
                        if (!items) {
                            return false
                        }
                    }
                    if (options.oppositePath && options.area === oppositeArea) {
                        var _headerItem = findHeaderItem(items, options.oppositePath);
                        items = _headerItem && _headerItem.children;
                        if (!items) {
                            return false
                        }
                    }
                    for (var i = options[skipField]; i < options[skipField] + options[takeField]; i++) {
                        if (items[i]) {
                            indices.push(items[i].index)
                        }
                    }
                    return indices.every(function(index) {
                        if (void 0 !== index) {
                            if ("row" === area) {
                                return (values[index] || [])[oppositeIndex]
                            } else {
                                return (values[oppositeIndex] || [])[index]
                            }
                        }
                    })
                },
                _processPagingCacheByArea: function(options, pageSize, area) {
                    var takeField = area + "Take";
                    var skipField = area + "Skip";
                    var items = this._data[area + "s"];
                    var oppositeArea = "row" === area ? "column" : "row";
                    var item;
                    if (options[takeField]) {
                        if (options.path && options.area === area) {
                            var headerItem = findHeaderItem(items, options.path);
                            items = headerItem && headerItem.children || []
                        }
                        if (options.oppositePath && options.area === oppositeArea) {
                            var _headerItem2 = findHeaderItem(items, options.oppositePath);
                            items = _headerItem2 && _headerItem2.children || []
                        }
                        do {
                            item = items[options[skipField]];
                            if (item && void 0 !== item.index) {
                                if (this._hasPagingValues(options, oppositeArea, item.index)) {
                                    options[skipField]++;
                                    options[takeField]--
                                } else {
                                    break
                                }
                            }
                        } while (item && void 0 !== item.index && options[takeField]);
                        if (options[takeField]) {
                            var start = Math.floor(options[skipField] / pageSize) * pageSize;
                            var end = Math.ceil((options[skipField] + options[takeField]) / pageSize) * pageSize;
                            options[skipField] = start;
                            options[takeField] = end - start
                        }
                    }
                },
                _processPagingCache: function(storeLoadOptions) {
                    var pageSize = this._pageSize;
                    if (pageSize < 0) {
                        return
                    }
                    for (var i = 0; i < storeLoadOptions.length; i++) {
                        this._processPagingCacheByArea(storeLoadOptions[i], pageSize, "row");
                        this._processPagingCacheByArea(storeLoadOptions[i], pageSize, "column")
                    }
                },
                _loadCore: function(options, deferred) {
                    var that = this;
                    var store = this._store;
                    var descriptions = this._descriptions;
                    var reload = options.reload || this.paginate() && that._isFieldsModified;
                    var paginate = this.paginate();
                    var headerName = DESCRIPTION_NAME_BY_AREA[options.area];
                    options = options || {};
                    if (store) {
                        (0, _extend.extend)(options, descriptions);
                        options.columnExpandedPaths = options.columnExpandedPaths || getExpandedPaths(this._data, options, "columns", that._lastLoadOptions);
                        options.rowExpandedPaths = options.rowExpandedPaths || getExpandedPaths(this._data, options, "rows", that._lastLoadOptions);
                        if (paginate) {
                            options.pageSize = this._pageSize
                        }
                        if (headerName) {
                            options.headerName = headerName
                        }
                        that.beginLoading();
                        deferred.always(function() {
                            that.endLoading()
                        });
                        var storeLoadOptions = [options];
                        that._eventsStrategy.fireEvent("customizeStoreLoadOptions", [storeLoadOptions, reload]);
                        if (!reload) {
                            that._processPagingCache(storeLoadOptions)
                        }
                        storeLoadOptions = storeLoadOptions.filter(function(options) {
                            return !(options.rows.length && 0 === options.rowTake) && !(options.columns.length && 0 === options.columnTake)
                        });
                        if (!storeLoadOptions.length) {
                            that._update(deferred);
                            return
                        }
                        var results = storeLoadOptions.map(function(options) {
                            return store.load(options)
                        });
                        _deferred.when.apply(null, results).done(function() {
                            var results = arguments;
                            for (var i = 0; i < results.length; i++) {
                                var _options = storeLoadOptions[i];
                                var data = results[i];
                                var isLast = i === results.length - 1;
                                if (_options.path) {
                                    that.applyPartialDataSource(_options.area, _options.path, data, isLast ? deferred : false, _options.oppositePath)
                                } else {
                                    if (paginate && !reload && isDataExists(that._data)) {
                                        that.mergePartialDataSource(data, isLast ? deferred : false)
                                    } else {
                                        (0, _extend.extend)(that._data, data);
                                        that._lastLoadOptions = _options;
                                        that._update(isLast ? deferred : false)
                                    }
                                }
                            }
                        }).fail(deferred.reject)
                    } else {
                        that._update(deferred)
                    }
                },
                _sort: function(descriptions, data, getAscOrder) {
                    var store = this._store;
                    if (store && !this._paginate) {
                        sort(descriptions, data, getAscOrder)
                    }
                },
                paginate: function() {
                    return this._paginate && this._store && this._store.supportPaging()
                },
                isEmpty: function() {
                    var dataFields = this.getAreaFields("data");
                    var data = this.getData();
                    return !dataFields.length || !data.values.length
                },
                _update: function(deferred) {
                    var that = this;
                    var descriptions = that._descriptions;
                    var loadedData = that._data;
                    var dataFields = descriptions.values;
                    var expressionsUsed = areExpressionsUsed(dataFields);
                    (0, _deferred.when)(formatHeaders(descriptions, loadedData), updateCache(loadedData.rows), updateCache(loadedData.columns)).done(function() {
                        if (expressionsUsed) {
                            that._sort(descriptions, loadedData, expressionsUsed);
                            !that.isEmpty() && (0, _uiPivot_grid.applyDisplaySummaryMode)(descriptions, loadedData)
                        }
                        that._sort(descriptions, loadedData);
                        !that.isEmpty() && isRunningTotalUsed(dataFields) && (0, _uiPivot_grid.applyRunningTotal)(descriptions, loadedData);
                        that._data = loadedData;
                        false !== deferred && (0, _deferred.when)(deferred).done(function() {
                            that._isFieldsModified = false;
                            that._eventsStrategy.fireEvent("changed");
                            if ((0, _type.isDefined)(that._data.grandTotalRowIndex)) {
                                loadedData.grandTotalRowIndex = that._data.grandTotalRowIndex
                            }
                            if ((0, _type.isDefined)(that._data.grandTotalColumnIndex)) {
                                loadedData.grandTotalColumnIndex = that._data.grandTotalColumnIndex
                            }
                        });
                        deferred && deferred.resolve(that._data)
                    });
                    return deferred
                },
                store: function() {
                    return this._store
                },
                collapseHeaderItem: function(area, path) {
                    var that = this;
                    var headerItems = "column" === area ? that._data.columns : that._data.rows;
                    var headerItem = findHeaderItem(headerItems, path);
                    var field = that.getAreaFields(area)[path.length - 1];
                    if (headerItem && headerItem.children) {
                        that._eventsStrategy.fireEvent("expandValueChanging", [{
                            area: area,
                            path: path,
                            expanded: false
                        }]);
                        if (field) {
                            field.expanded = false
                        }
                        headerItem.collapsedChildren = headerItem.children;
                        delete headerItem.children;
                        that._update();
                        if (that.paginate()) {
                            that.load()
                        }
                        return true
                    }
                    return false
                },
                collapseAll: function(id) {
                    var _this = this;
                    var dataChanged = false;
                    var field = this.field(id) || {};
                    var areaOffsets = [(0, _array.inArray)(field, this.getAreaFields(field.area))];
                    field.expanded = false;
                    if (field && field.levels) {
                        areaOffsets = [];
                        field.levels.forEach(function(f) {
                            areaOffsets.push((0, _array.inArray)(f, _this.getAreaFields(field.area)));
                            f.expanded = false
                        })
                    }(0, _uiPivot_grid2.foreachTree)(this._data[field.area + "s"], function(items) {
                        var item = items[0];
                        var path = (0, _uiPivot_grid2.createPath)(items);
                        if (item && item.children && areaOffsets.indexOf(path.length - 1) !== -1) {
                            item.collapsedChildren = item.children;
                            delete item.children;
                            dataChanged = true
                        }
                    }, true);
                    dataChanged && this._update()
                },
                expandAll: function(id) {
                    var field = this.field(id);
                    if (field && field.area) {
                        field.expanded = true;
                        if (field && field.levels) {
                            field.levels.forEach(function(f) {
                                f.expanded = true
                            })
                        }
                        this.load()
                    }
                },
                expandHeaderItem: function(area, path) {
                    var that = this;
                    var headerItems = "column" === area ? that._data.columns : that._data.rows;
                    var headerItem = findHeaderItem(headerItems, path);
                    if (headerItem && !headerItem.children) {
                        var hasCache = !!headerItem.collapsedChildren;
                        var options = {
                            area: area,
                            path: path,
                            expanded: true,
                            needExpandData: !hasCache
                        };
                        that._eventsStrategy.fireEvent("expandValueChanging", [options]);
                        if (hasCache) {
                            headerItem.children = headerItem.collapsedChildren;
                            delete headerItem.collapsedChildren;
                            that._update()
                        } else {
                            if (this.store()) {
                                that.load(options)
                            }
                        }
                        return hasCache
                    }
                    return false
                },
                mergePartialDataSource: function(dataSource, deferred) {
                    var that = this;
                    var loadedData = that._data;
                    var newRowItemIndexesToCurrent;
                    var newColumnItemIndexesToCurrent;
                    if (dataSource && dataSource.values) {
                        dataSource.rows = dataSource.rows || [];
                        dataSource.columns = dataSource.columns || [];
                        newRowItemIndexesToCurrent = updateHeaderItems(loadedData.rows, dataSource.rows, loadedData.grandTotalColumnIndex);
                        newColumnItemIndexesToCurrent = updateHeaderItems(loadedData.columns, dataSource.columns, loadedData.grandTotalColumnIndex);
                        (0, _deferred.when)(newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent).done(function(newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent) {
                            if (newRowItemIndexesToCurrent.length || newColumnItemIndexesToCurrent.length) {
                                updateDataSourceCells(loadedData, dataSource.values, newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent)
                            }
                            that._update(deferred)
                        })
                    }
                },
                applyPartialDataSource: function(area, path, dataSource, deferred, oppositePath) {
                    var that = this;
                    var loadedData = that._data;
                    var headerItems = "column" === area ? loadedData.columns : loadedData.rows;
                    var headerItem;
                    var oppositeHeaderItems = "column" === area ? loadedData.rows : loadedData.columns;
                    var oppositeHeaderItem;
                    var newRowItemIndexesToCurrent;
                    var newColumnItemIndexesToCurrent;
                    if (dataSource && dataSource.values) {
                        dataSource.rows = dataSource.rows || [];
                        dataSource.columns = dataSource.columns || [];
                        headerItem = findHeaderItem(headerItems, path);
                        oppositeHeaderItem = oppositePath && findHeaderItem(oppositeHeaderItems, oppositePath);
                        if (headerItem) {
                            if ("column" === area) {
                                newColumnItemIndexesToCurrent = updateHeaderItemChildren(headerItems, headerItem, dataSource.columns, loadedData.grandTotalColumnIndex);
                                if (oppositeHeaderItem) {
                                    newRowItemIndexesToCurrent = updateHeaderItemChildren(oppositeHeaderItems, oppositeHeaderItem, dataSource.rows, loadedData.grandTotalRowIndex)
                                } else {
                                    newRowItemIndexesToCurrent = updateHeaderItems(loadedData.rows, dataSource.rows, loadedData.grandTotalRowIndex)
                                }
                            } else {
                                newRowItemIndexesToCurrent = updateHeaderItemChildren(headerItems, headerItem, dataSource.rows, loadedData.grandTotalRowIndex);
                                if (oppositeHeaderItem) {
                                    newColumnItemIndexesToCurrent = updateHeaderItemChildren(oppositeHeaderItems, oppositeHeaderItem, dataSource.columns, loadedData.grandTotalColumnIndex)
                                } else {
                                    newColumnItemIndexesToCurrent = updateHeaderItems(loadedData.columns, dataSource.columns, loadedData.grandTotalColumnIndex)
                                }
                            }(0, _deferred.when)(newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent).done(function(newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent) {
                                if ("row" === area && newRowItemIndexesToCurrent.length || "column" === area && newColumnItemIndexesToCurrent.length) {
                                    updateDataSourceCells(loadedData, dataSource.values, newRowItemIndexesToCurrent, newColumnItemIndexesToCurrent)
                                }
                                that._update(deferred)
                            })
                        }
                    }
                },
                on: function(eventName, eventHandler) {
                    this._eventsStrategy.on(eventName, eventHandler);
                    return this
                },
                off: function(eventName, eventHandler) {
                    this._eventsStrategy.off(eventName, eventHandler);
                    return this
                },
                dispose: function() {
                    var that = this;
                    var delayedLoadTask = that._delayedLoadTask;
                    this._eventsStrategy.dispose();
                    if (delayedLoadTask) {
                        delayedLoadTask.abort()
                    }
                    this._isDisposed = true
                },
                isDisposed: function() {
                    return !!this._isDisposed
                }
            }
        }());
        module.exports.sort = exports.sort
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.area_item.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PIVOTGRID_EXPAND_CLASS = "dx-expand";
        var getRealElementWidth = function(element) {
            var width = 0;
            var offsetWidth = element.offsetWidth;
            if (element.getBoundingClientRect) {
                var clientRect = (0, _position.getBoundingRect)(element);
                width = clientRect.width;
                if (!width) {
                    width = clientRect.right - clientRect.left
                }
                if (width <= offsetWidth - 1) {
                    width = offsetWidth
                }
            }
            return width > 0 ? width : offsetWidth
        };

        function getFakeTableOffset(scrollPos, elementOffset, tableSize, viewPortSize) {
            var offset = 0;
            var halfTableCount = 0;
            var halfTableSize = tableSize / 2;
            if (scrollPos + viewPortSize - (elementOffset + tableSize) > 1) {
                if (scrollPos >= elementOffset + tableSize + halfTableSize) {
                    halfTableCount = parseInt((scrollPos - (elementOffset + tableSize)) / halfTableSize, 10)
                }
                offset = elementOffset + tableSize + halfTableSize * halfTableCount
            } else {
                if (scrollPos < elementOffset) {
                    if (scrollPos <= elementOffset - halfTableSize) {
                        halfTableCount = parseInt((scrollPos - (elementOffset - halfTableSize)) / halfTableSize, 10)
                    }
                    offset = elementOffset - (tableSize - halfTableSize * halfTableCount)
                } else {
                    offset = elementOffset
                }
            }
            return offset
        }
        exports.getRealElementWidth = getRealElementWidth;
        exports.AreaItem = _class2.default.inherit({
            _getRowElement: function(index) {
                var that = this;
                if (that._tableElement && that._tableElement.length > 0) {
                    return that._tableElement[0].rows[index]
                }
                return null
            },
            _createGroupElement: function() {
                return (0, _renderer2.default)("<div>")
            },
            _createTableElement: function() {
                return (0, _renderer2.default)("<table>")
            },
            _getCellText: function(cell, encodeHtml) {
                var cellText = cell.isWhiteSpace ? "&nbsp" : cell.text || "&nbsp";
                if (encodeHtml && (cellText.indexOf("<") !== -1 || cellText.indexOf(">") !== -1)) {
                    cellText = (0, _renderer2.default)("<div>").text(cellText).html()
                }
                return cellText
            },
            _getRowClassNames: function() {},
            _applyCustomStyles: function(options) {
                if (options.cell.width) {
                    options.cssArray.push("min-width:" + options.cell.width + "px")
                }
                if (options.cell.sorted) {
                    options.classArray.push("dx-pivotgrid-sorted")
                }
            },
            _getMainElementMarkup: function() {
                return "<tbody>"
            },
            _getCloseMainElementMarkup: function() {
                return "</tbody>"
            },
            _renderTableContent: function(tableElement, data) {
                var that = this;
                var rowsCount = data.length;
                var row;
                var cell;
                var i;
                var j;
                var rowElement;
                var cellElement;
                var cellText;
                var rtlEnabled = that.option("rtlEnabled");
                var markupArray = [];
                var encodeHtml = that.option("encodeHtml");
                var rowClassNames;
                var colspan = "colspan='";
                var rowspan = "rowspan='";
                tableElement.data("area", that._getAreaName());
                tableElement.data("data", data);
                tableElement.css("width", "");
                markupArray.push(that._getMainElementMarkup());
                for (i = 0; i < rowsCount; i++) {
                    row = data[i];
                    var columnMarkupArray = [];
                    rowClassNames = [];
                    markupArray.push("<tr ");
                    for (j = 0; j < row.length; j++) {
                        cell = row[j];
                        this._getRowClassNames(i, cell, rowClassNames);
                        columnMarkupArray.push("<td ");
                        if (cell) {
                            cell.rowspan && columnMarkupArray.push(rowspan + (cell.rowspan || 1) + "'");
                            cell.colspan && columnMarkupArray.push(colspan + (cell.colspan || 1) + "'");
                            var styleOptions = {
                                cellElement: cellElement,
                                cell: cell,
                                cellsCount: row.length,
                                cellIndex: j,
                                rowElement: rowElement,
                                rowIndex: i,
                                rowsCount: rowsCount,
                                rtlEnabled: rtlEnabled,
                                classArray: [],
                                cssArray: []
                            };
                            that._applyCustomStyles(styleOptions);
                            if (styleOptions.cssArray.length) {
                                columnMarkupArray.push("style='");
                                columnMarkupArray.push(styleOptions.cssArray.join(";"));
                                columnMarkupArray.push("'")
                            }
                            if (styleOptions.classArray.length) {
                                columnMarkupArray.push("class='");
                                columnMarkupArray.push(styleOptions.classArray.join(" "));
                                columnMarkupArray.push("'")
                            }
                            columnMarkupArray.push(">");
                            if ((0, _type.isDefined)(cell.expanded)) {
                                columnMarkupArray.push("<div class='dx-expand-icon-container'><span class='" + PIVOTGRID_EXPAND_CLASS + "'></span></div>")
                            }
                            cellText = this._getCellText(cell, encodeHtml)
                        } else {
                            cellText = ""
                        }
                        columnMarkupArray.push("<span ");
                        if ((0, _type.isDefined)(cell.wordWrapEnabled)) {
                            columnMarkupArray.push("style='white-space:", cell.wordWrapEnabled ? "normal" : "nowrap", ";'")
                        }
                        columnMarkupArray.push(">" + cellText + "</span>");
                        if (cell.sorted) {
                            columnMarkupArray.push("<span class='dx-icon-sorted'></span>")
                        }
                        columnMarkupArray.push("</td>")
                    }
                    if (rowClassNames.length) {
                        markupArray.push("class='");
                        markupArray.push(rowClassNames.join(" "));
                        markupArray.push("'")
                    }
                    markupArray.push(">");
                    markupArray.push(columnMarkupArray.join(""));
                    markupArray.push("</tr>")
                }
                markupArray.push(this._getCloseMainElementMarkup());
                tableElement.append(markupArray.join(""));
                this._triggerOnCellPrepared(tableElement, data)
            },
            _triggerOnCellPrepared: function(tableElement, data) {
                var that = this;
                var rowElements = tableElement.find("tr");
                var areaName = that._getAreaName();
                var onCellPrepared = that.option("onCellPrepared");
                var hasEvent = that.component._eventsStrategy.hasEvent("cellPrepared");
                var rowElement;
                var $cellElement;
                var onCellPreparedArgs;
                var defaultActionArgs = this.component._defaultActionArgs();
                var row;
                var cell;
                var rowIndex;
                var columnIndex;
                if (onCellPrepared || hasEvent) {
                    for (rowIndex = 0; rowIndex < data.length; rowIndex++) {
                        row = data[rowIndex];
                        rowElement = rowElements.eq(rowIndex);
                        for (columnIndex = 0; columnIndex < row.length; columnIndex++) {
                            cell = row[columnIndex];
                            $cellElement = rowElement.children().eq(columnIndex);
                            onCellPreparedArgs = {
                                area: areaName,
                                rowIndex: rowIndex,
                                columnIndex: columnIndex,
                                cellElement: (0, _dom.getPublicElement)($cellElement),
                                cell: cell
                            };
                            if (hasEvent) {
                                that.component._trigger("onCellPrepared", onCellPreparedArgs)
                            } else {
                                onCellPrepared((0, _extend.extend)(onCellPreparedArgs, defaultActionArgs))
                            }
                        }
                    }
                }
            },
            _getRowHeight: function(index) {
                var row = this._getRowElement(index);
                var height = 0;
                var offsetHeight = row.offsetHeight;
                if (row && row.lastChild) {
                    if (row.getBoundingClientRect) {
                        var clientRect = (0, _position.getBoundingRect)(row);
                        height = clientRect.height;
                        if (height <= offsetHeight - 1) {
                            height = offsetHeight
                        }
                    }
                    return height > 0 ? height : offsetHeight
                }
                return 0
            },
            _setRowHeight: function(index, value) {
                var row = this._getRowElement(index);
                if (row) {
                    row.style.height = value + "px"
                }
            },
            ctor: function(component) {
                this.component = component
            },
            option: function() {
                return this.component.option.apply(this.component, arguments)
            },
            getRowsLength: function() {
                var that = this;
                if (that._tableElement && that._tableElement.length > 0) {
                    return that._tableElement[0].rows.length
                }
                return 0
            },
            getRowsHeight: function() {
                var that = this;
                var result = [];
                var rowsLength = that.getRowsLength();
                var i;
                for (i = 0; i < rowsLength; i++) {
                    result.push(that._getRowHeight(i))
                }
                return result
            },
            setRowsHeight: function(values) {
                var that = this;
                var totalHeight = 0;
                var valuesLength = values.length;
                var i;
                for (i = 0; i < valuesLength; i++) {
                    totalHeight += values[i];
                    that._setRowHeight(i, values[i])
                }
                this._tableHeight = totalHeight;
                this._tableElement[0].style.height = totalHeight + "px"
            },
            getColumnsWidth: function() {
                var rowsLength = this.getRowsLength();
                var rowIndex;
                var row;
                var i;
                var columnIndex;
                var processedCells = [];
                var result = [];
                var fillCells = function(cells, rowIndex, columnIndex, rowSpan, colSpan) {
                    var rowOffset;
                    var columnOffset;
                    for (rowOffset = 0; rowOffset < rowSpan; rowOffset++) {
                        for (columnOffset = 0; columnOffset < colSpan; columnOffset++) {
                            cells[rowIndex + rowOffset] = cells[rowIndex + rowOffset] || [];
                            cells[rowIndex + rowOffset][columnIndex + columnOffset] = true
                        }
                    }
                };
                if (rowsLength) {
                    for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {
                        processedCells[rowIndex] = processedCells[rowIndex] || [];
                        row = this._getRowElement(rowIndex);
                        for (i = 0; i < row.cells.length; i++) {
                            for (columnIndex = 0; processedCells[rowIndex][columnIndex]; columnIndex++) {}
                            fillCells(processedCells, rowIndex, columnIndex, row.cells[i].rowSpan, row.cells[i].colSpan);
                            if (1 === row.cells[i].colSpan) {
                                result[columnIndex] = result[columnIndex] || getRealElementWidth(row.cells[i])
                            }
                        }
                    }
                }
                return result
            },
            setColumnsWidth: function(values) {
                var i;
                var totalWidth = 0;
                var tableElement = this._tableElement[0];
                var colgroupElementHTML = "";
                var columnsCount = this.getColumnsCount();
                var columnWidth = [];
                for (i = 0; i < columnsCount; i++) {
                    columnWidth.push(values[i] || 0)
                }
                for (i = columnsCount; i < values.length && values; i++) {
                    columnWidth[columnsCount - 1] += values[i]
                }
                for (i = 0; i < columnsCount; i++) {
                    totalWidth += columnWidth[i];
                    colgroupElementHTML += '<col style="width: ' + columnWidth[i] + 'px">'
                }
                this._colgroupElement.html(colgroupElementHTML);
                this._tableWidth = totalWidth - this._groupWidth > .01 ? Math.ceil(totalWidth) : totalWidth;
                tableElement.style.width = this._tableWidth + "px";
                tableElement.style.tableLayout = "fixed"
            },
            resetColumnsWidth: function() {
                this._colgroupElement.find("col").width("auto");
                this._tableElement.css({
                    width: "",
                    tableLayout: ""
                })
            },
            groupWidth: function(value) {
                if (void 0 === value) {
                    return this._groupElement.width()
                } else {
                    if (value >= 0) {
                        this._groupWidth = value;
                        return this._groupElement[0].style.width = value + "px"
                    } else {
                        return this._groupElement[0].style.width = value
                    }
                }
            },
            groupHeight: function(value) {
                if (void 0 === value) {
                    return this._groupElement.height()
                }
                this._groupHeight = null;
                if (value >= 0) {
                    this._groupHeight = value;
                    this._groupElement[0].style.height = value + "px"
                } else {
                    this._groupElement[0].style.height = value
                }
            },
            groupElement: function() {
                return this._groupElement
            },
            tableElement: function() {
                return this._tableElement
            },
            element: function() {
                return this._rootElement
            },
            headElement: function() {
                return this._tableElement.find("thead")
            },
            _setTableCss: function(styles) {
                if (this.option("rtlEnabled")) {
                    styles.right = styles.left;
                    delete styles.left
                }
                this.tableElement().css(styles)
            },
            setVirtualContentParams: function(params) {
                this._virtualContent.css({
                    width: params.width,
                    height: params.height
                });
                this.groupElement().addClass("dx-virtual-mode")
            },
            disableVirtualMode: function() {
                this.groupElement().removeClass("dx-virtual-mode")
            },
            _renderVirtualContent: function() {
                var that = this;
                if (!that._virtualContent && "virtual" === that.option("scrolling.mode")) {
                    that._virtualContent = (0, _renderer2.default)("<div>").addClass("dx-virtual-content").insertBefore(that._tableElement)
                }
            },
            reset: function() {
                var that = this;
                var tableElement = that._tableElement[0];
                that._fakeTable && that._fakeTable.detach();
                that._fakeTable = null;
                that.disableVirtualMode();
                that.groupWidth("100%");
                that.groupHeight("auto");
                that.resetColumnsWidth();
                if (tableElement) {
                    for (var i = 0; i < tableElement.rows.length; i++) {
                        tableElement.rows[i].style.height = ""
                    }
                    tableElement.style.height = "";
                    tableElement.style.width = "100%"
                }
            },
            _updateFakeTableVisibility: function() {
                var that = this;
                var tableElement = that.tableElement()[0];
                var horizontalOffsetName = that.option("rtlEnabled") ? "right" : "left";
                var fakeTableElement = that._fakeTable[0];
                if (tableElement.style.top === fakeTableElement.style.top && fakeTableElement.style[horizontalOffsetName] === tableElement.style[horizontalOffsetName]) {
                    that._fakeTable.addClass("dx-hidden")
                } else {
                    that._fakeTable.removeClass("dx-hidden")
                }
            },
            _moveFakeTableHorizontally: function(scrollPos) {
                var that = this;
                var rtlEnabled = that.option("rtlEnabled");
                var offsetStyleName = rtlEnabled ? "right" : "left";
                var tableElementOffset = parseFloat(that.tableElement()[0].style[offsetStyleName]);
                var offset = getFakeTableOffset(scrollPos, tableElementOffset, that._tableWidth, that._groupWidth);
                if (parseFloat(that._fakeTable[0].style[offsetStyleName]) !== offset) {
                    that._fakeTable[0].style[offsetStyleName] = offset + "px"
                }
            },
            _moveFakeTableTop: function(scrollPos) {
                var that = this;
                var tableElementOffsetTop = parseFloat(that.tableElement()[0].style.top);
                var offsetTop = getFakeTableOffset(scrollPos, tableElementOffsetTop, that._tableHeight, that._groupHeight);
                if (parseFloat(that._fakeTable[0].style.top) !== offsetTop) {
                    that._fakeTable[0].style.top = offsetTop + "px"
                }
            },
            _moveFakeTable: function() {
                this._updateFakeTableVisibility()
            },
            _createFakeTable: function() {
                var that = this;
                if (!that._fakeTable) {
                    that._fakeTable = that.tableElement().clone().addClass("dx-pivot-grid-fake-table").appendTo(that._virtualContent)
                }
            },
            render: function(rootElement, data) {
                var that = this;
                if (that._tableElement) {
                    try {
                        that._tableElement[0].innerHTML = ""
                    } catch (e) {
                        that._tableElement.empty()
                    }
                    that._tableElement.attr("style", "")
                } else {
                    that._groupElement = that._createGroupElement();
                    that._tableElement = that._createTableElement();
                    that._tableElement.appendTo(that._groupElement);
                    that._groupElement.appendTo(rootElement);
                    that._rootElement = rootElement
                }
                that._colgroupElement = (0, _renderer2.default)("<colgroup>").appendTo(that._tableElement);
                that._renderTableContent(that._tableElement, data);
                that._renderVirtualContent()
            },
            _getScrollable: function() {
                return this.groupElement().data("dxScrollable")
            },
            on: function(eventName, handler) {
                var that = this;
                var scrollable = that._getScrollable();
                if (scrollable) {
                    scrollable.on(eventName, function(e) {
                        if (that.option("rtlEnabled") && (0, _type.isDefined)(e.scrollOffset.left)) {
                            e.scrollOffset.left = scrollable.$content().width() - scrollable._container().width() - e.scrollOffset.left
                        }
                        handler(e)
                    })
                }
                return this
            },
            off: function(eventName) {
                var scrollable = this._getScrollable();
                if (scrollable) {
                    scrollable.off(eventName)
                }
                return this
            },
            scrollTo: function(pos) {
                var scrollable = this._getScrollable();
                var scrollablePos = pos;
                if (scrollable) {
                    if (this.option("rtlEnabled")) {
                        if ("column" === this._getAreaName()) {
                            scrollablePos = scrollable.$content().width() - scrollable._container().width() - pos
                        } else {
                            if ("data" === this._getAreaName()) {
                                scrollablePos = {
                                    x: scrollable.$content().width() - scrollable._container().width() - pos.x,
                                    y: pos.y
                                }
                            }
                        }
                    }
                    scrollable.scrollTo(scrollablePos);
                    if (this._virtualContent) {
                        this._createFakeTable();
                        this._moveFakeTable(pos)
                    }
                }
            },
            updateScrollable: function() {
                var scrollable = this._getScrollable();
                if (scrollable) {
                    return scrollable.update()
                }
            },
            getColumnsCount: function() {
                var columnCount = 0;
                var row = this._getRowElement(0);
                var cells;
                if (row) {
                    cells = row.cells;
                    for (var i = 0, len = cells.length; i < len; ++i) {
                        columnCount += cells[i].colSpan
                    }
                }
                return columnCount
            },
            getData: function() {
                var tableElement = this._tableElement;
                return tableElement ? tableElement.data("data") : []
            }
        })
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.field_chooser_base.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.header_filter_core */ 376);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ../grid_core/ui.grid_core.column_state_mixin */ 348);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _uiGrid_core5 = __webpack_require__( /*! ../grid_core/ui.grid_core.sorting_mixin */ 353);
        var _uiGrid_core6 = _interopRequireDefault(_uiGrid_core5);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _ui3 = __webpack_require__( /*! ./ui.sortable */ 716);
        var _ui4 = _interopRequireDefault(_ui3);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var IE_FIELD_WIDTH_CORRECTION = 1;
        var DIV = "<div>";
        var HeaderFilterView = _uiGrid_core2.default.HeaderFilterView.inherit({
            _getSearchExpr: function(options) {
                options.useDefaultSearchExpr = true;
                return this.callBase(options)
            }
        });
        var processItems = function(groupItems, field) {
            var filterValues = [];
            var isTree = !!field.groupName;
            var isExcludeFilterType = "exclude" === field.filterType;
            if (field.filterValues) {
                (0, _iterator.each)(field.filterValues, function(_, filterValue) {
                    filterValues.push(Array.isArray(filterValue) ? filterValue.join("/") : filterValue && filterValue.valueOf())
                })
            }(0, _uiPivot_grid.foreachTree)(groupItems, function(items) {
                var item = items[0];
                var path = (0, _uiPivot_grid.createPath)(items);
                var preparedFilterValueByText = isTree ? (0, _iterator.map)(items, function(item) {
                    return item.text
                }).reverse().join("/") : item.text;
                item.value = isTree ? path.slice(0) : item.key || item.value;
                var preparedFilterValue = isTree ? path.join("/") : item.value && item.value.valueOf();
                if (item.children) {
                    item.items = item.children;
                    item.children = null
                }(0, _uiGrid_core.updateHeaderFilterItemSelectionState)(item, item.key && (0, _array.inArray)(preparedFilterValueByText, filterValues) > -1 || (0, _array.inArray)(preparedFilterValue, filterValues) > -1, isExcludeFilterType)
            })
        };

        function getMainGroupField(dataSource, sourceField) {
            var field = sourceField;
            if ((0, _type.isDefined)(sourceField.groupIndex)) {
                field = dataSource.getAreaFields(sourceField.area, true)[sourceField.areaIndex]
            }
            return field
        }

        function getStringState(state) {
            state = state || {};
            return JSON.stringify([state.fields, state.columnExpandedPaths, state.rowExpandedPaths])
        }
        var FieldChooserBase = _ui2.default.inherit(_uiGrid_core4.default).inherit(_uiGrid_core6.default).inherit(_uiGrid_core.headerFilterMixin).inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    allowFieldDragging: true,
                    applyChangesMode: "instantly",
                    state: null,
                    headerFilter: {
                        width: 252,
                        height: 325,
                        searchTimeout: 500,
                        texts: {
                            emptyValue: (0, _message.format)("dxDataGrid-headerFilterEmptyValue"),
                            ok: (0, _message.format)("dxDataGrid-headerFilterOK"),
                            cancel: (0, _message.format)("dxDataGrid-headerFilterCancel")
                        }
                    }
                })
            },
            _init: function() {
                this.callBase();
                this._headerFilterView = new HeaderFilterView(this);
                this._refreshDataSource();
                this.subscribeToEvents()
            },
            _refreshDataSource: function() {
                var dataSource = this.option("dataSource");
                if (dataSource && dataSource.fields && dataSource.load) {
                    this._dataSource = dataSource
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "dataSource":
                        this._refreshDataSource();
                        break;
                    case "applyChangesMode":
                        break;
                    case "state":
                        if (this._skipStateChange || !this._dataSource) {
                            break
                        }
                        if ("instantly" === this.option("applyChangesMode") && getStringState(this._dataSource.state()) !== getStringState(args.value)) {
                            this._dataSource.state(args.value)
                        } else {
                            this._clean(true);
                            this._renderComponent()
                        }
                        break;
                    case "headerFilter":
                    case "allowFieldDragging":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            renderField: function(field, showColumnLines) {
                var that = this;
                var $fieldContent = (0, _renderer2.default)(DIV).addClass("dx-area-field-content").text(field.caption || field.dataField);
                var $fieldElement = (0, _renderer2.default)(DIV).addClass("dx-area-field").addClass("dx-area-box").data("field", field).append($fieldContent);
                var mainGroupField = getMainGroupField(that._dataSource, field);
                if ("data" !== field.area) {
                    if (field.allowSorting) {
                        that._applyColumnState({
                            name: "sort",
                            rootElement: $fieldElement,
                            column: {
                                alignment: that.option("rtlEnabled") ? "right" : "left",
                                sortOrder: "desc" === field.sortOrder ? "desc" : "asc"
                            },
                            showColumnLines: showColumnLines
                        })
                    }
                    that._applyColumnState({
                        name: "headerFilter",
                        rootElement: $fieldElement,
                        column: {
                            alignment: that.option("rtlEnabled") ? "right" : "left",
                            filterValues: mainGroupField.filterValues,
                            allowFiltering: mainGroupField.allowFiltering && !field.groupIndex
                        },
                        showColumnLines: showColumnLines
                    })
                }
                if (field.groupName) {
                    $fieldElement.attr("item-group", field.groupName)
                }
                return $fieldElement
            },
            _clean: function() {},
            _render: function() {
                this.callBase();
                this._headerFilterView.render(this.$element())
            },
            renderSortable: function() {
                var that = this;
                that._createComponent(that.$element(), _ui4.default, (0, _extend.extend)({
                    allowDragging: that.option("allowFieldDragging"),
                    itemSelector: ".dx-area-field",
                    itemContainerSelector: ".dx-area-field-container",
                    groupSelector: ".dx-area-fields",
                    groupFilter: function() {
                        var dataSource = that._dataSource;
                        var $sortable = (0, _renderer2.default)(this).closest(".dx-sortable-old");
                        var pivotGrid = $sortable.data("dxPivotGrid");
                        var pivotGridFieldChooser = $sortable.data("dxPivotGridFieldChooser");
                        if (pivotGrid) {
                            return pivotGrid.getDataSource() === dataSource
                        }
                        if (pivotGridFieldChooser) {
                            return pivotGridFieldChooser.option("dataSource") === dataSource
                        }
                        return false
                    },
                    itemRender: function($sourceItem, target) {
                        var $item;
                        if ($sourceItem.hasClass("dx-area-box")) {
                            $item = $sourceItem.clone();
                            if ("drag" === target) {
                                (0, _iterator.each)($sourceItem, function(index, sourceItem) {
                                    $item.eq(index).css("width", parseInt((0, _renderer2.default)(sourceItem).outerWidth(), 10) + IE_FIELD_WIDTH_CORRECTION)
                                })
                            }
                        } else {
                            $item = (0, _renderer2.default)(DIV).addClass("dx-area-field").addClass("dx-area-box").text($sourceItem.text())
                        }
                        if ("drag" === target) {
                            var wrapperContainer = (0, _renderer2.default)(DIV);
                            (0, _iterator.each)($item, function(_, item) {
                                var wrapper = (0, _renderer2.default)("<div>").addClass("dx-pivotgrid-fields-container").addClass("dx-widget").append((0, _renderer2.default)(item));
                                wrapperContainer.append(wrapper)
                            });
                            return wrapperContainer.children()
                        }
                        return $item
                    },
                    onDragging: function(e) {
                        var field = e.sourceElement.data("field");
                        var targetGroup = e.targetGroup;
                        e.cancel = false;
                        if (true === field.isMeasure) {
                            if ("column" === targetGroup || "row" === targetGroup || "filter" === targetGroup) {
                                e.cancel = true
                            }
                        } else {
                            if (false === field.isMeasure && "data" === targetGroup) {
                                e.cancel = true
                            }
                        }
                    },
                    useIndicator: true,
                    onChanged: function(e) {
                        var dataSource = that._dataSource;
                        var field = e.sourceElement.data("field");
                        e.removeSourceElement = !!e.sourceGroup;
                        that._adjustSortableOnChangedArgs(e);
                        if (field) {
                            that._applyChanges([getMainGroupField(dataSource, field)], {
                                area: e.targetGroup,
                                areaIndex: e.targetIndex
                            })
                        }
                    }
                }, that._getSortableOptions()))
            },
            _processDemandState: function(func) {
                var that = this;
                var isInstantlyMode = "instantly" === that.option("applyChangesMode");
                var dataSource = that._dataSource;
                if (isInstantlyMode) {
                    func(dataSource, isInstantlyMode)
                } else {
                    var currentState = dataSource.state();
                    var pivotGridState = that.option("state");
                    if (pivotGridState) {
                        dataSource.state(pivotGridState, true)
                    }
                    func(dataSource, isInstantlyMode);
                    dataSource.state(currentState, true)
                }
            },
            _applyChanges: function(fields, props) {
                var that = this;
                that._processDemandState(function(dataSource, isInstantlyMode) {
                    fields.forEach(function(_ref) {
                        var index = _ref.index;
                        dataSource.field(index, props)
                    });
                    if (isInstantlyMode) {
                        dataSource.load()
                    } else {
                        that._changedHandler()
                    }
                })
            },
            _adjustSortableOnChangedArgs: function(e) {
                e.removeSourceElement = false;
                e.removeTargetElement = true;
                e.removeSourceClass = false
            },
            _getSortableOptions: function() {
                return {
                    direction: "auto"
                }
            },
            subscribeToEvents: function(element) {
                var that = this;
                var func = function(e) {
                    var field = (0, _renderer2.default)(e.currentTarget).data("field");
                    var mainGroupField = (0, _extend.extend)(true, {}, getMainGroupField(that._dataSource, field));
                    var isHeaderFilter = (0, _renderer2.default)(e.target).hasClass("dx-header-filter");
                    var dataSource = that._dataSource;
                    var type = mainGroupField.groupName ? "tree" : "list";
                    var paginate = dataSource.paginate() && "list" === type;
                    if (isHeaderFilter) {
                        that._headerFilterView.showHeaderFilterMenu((0, _renderer2.default)(e.currentTarget), (0, _extend.extend)(mainGroupField, {
                            type: type,
                            encodeHtml: that.option("encodeHtml"),
                            dataSource: {
                                useDefaultSearch: !paginate,
                                load: function(options) {
                                    var userData = options.userData;
                                    if (userData.store) {
                                        return userData.store.load(options)
                                    } else {
                                        var d = new _deferred.Deferred;
                                        dataSource.getFieldValues(mainGroupField.index, that.option("headerFilter.showRelevantValues"), paginate ? options : void 0).done(function(data) {
                                            var emptyValue = that.option("headerFilter.texts.emptyValue");
                                            data.forEach(function(element) {
                                                if (!element.text) {
                                                    element.text = emptyValue
                                                }
                                            });
                                            if (paginate) {
                                                d.resolve(data)
                                            } else {
                                                userData.store = new _array_store2.default(data);
                                                userData.store.load(options).done(d.resolve).fail(d.reject)
                                            }
                                        }).fail(d.reject);
                                        return d
                                    }
                                },
                                postProcess: function(data) {
                                    processItems(data, mainGroupField);
                                    return data
                                }
                            },
                            apply: function() {
                                that._applyChanges([mainGroupField], {
                                    filterValues: this.filterValues,
                                    filterType: this.filterType
                                })
                            }
                        }))
                    } else {
                        if (field.allowSorting && "data" !== field.area) {
                            that._applyChanges([field], {
                                sortOrder: "desc" === field.sortOrder ? "asc" : "desc"
                            })
                        }
                    }
                };
                if (element) {
                    _events_engine2.default.on(element, _click2.default.name, ".dx-area-field.dx-area-box", func);
                    return
                }
                _events_engine2.default.on(that.$element(), _click2.default.name, ".dx-area-field.dx-area-box", func)
            },
            _initTemplates: _common.noop,
            addWidgetPrefix: function(className) {
                return "dx-pivotgrid-" + className
            }
        });
        (0, _component_registrator2.default)("dxPivotGridFieldChooserBase", FieldChooserBase);
        module.exports = FieldChooserBase
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.table_creator.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ROW_SELECTOR = "tr";
        var SchedulerTableCreator = {
            VERTICAL: "vertical",
            HORIZONTAL: "horizontal",
            insertAllDayRow: function(allDayElements, tableBody, index) {
                if (allDayElements[index]) {
                    var row = allDayElements[index].find(ROW_SELECTOR);
                    if (!row.length) {
                        row = (0, _renderer2.default)(_dom_adapter2.default.createElement(ROW_SELECTOR));
                        row.append(allDayElements[index].get(0))
                    }
                    tableBody.appendChild(row.get ? row.get(0) : row)
                }
            },
            makeTable: function(options) {
                var tableBody = _dom_adapter2.default.createElement("tbody");
                var templateCallbacks = [];
                var row;
                var rowCountInGroup = options.groupCount ? options.rowCount / options.groupCount : options.rowCount;
                var allDayElementIndex = 0;
                var allDayElements = options.allDayElements;
                var groupIndex = options.groupIndex;
                var rowCount = options.rowCount;
                (0, _renderer2.default)(options.container).append(tableBody);
                if (allDayElements) {
                    this.insertAllDayRow(allDayElements, tableBody, 0);
                    allDayElementIndex++
                }
                for (var i = 0; i < rowCount; i++) {
                    row = _dom_adapter2.default.createElement(ROW_SELECTOR);
                    tableBody.appendChild(row);
                    var isLastRowInGroup = (i + 1) % rowCountInGroup === 0;
                    if (options.rowClass) {
                        row.className = options.rowClass
                    }
                    for (var j = 0; j < options.cellCount; j++) {
                        var td = _dom_adapter2.default.createElement("td");
                        row.appendChild(td);
                        if (options.cellClass) {
                            if (_type2.default.isFunction(options.cellClass)) {
                                td.className = options.cellClass(i, j)
                            } else {
                                td.className = options.cellClass
                            }
                        }
                        var cellDataObject = void 0;
                        var dataKey = void 0;
                        var dataValue = void 0;
                        if (options.getCellData) {
                            cellDataObject = options.getCellData(td, i, j, groupIndex);
                            dataKey = cellDataObject.key;
                            dataValue = cellDataObject.value;
                            dataKey && _element_data2.default.data(td, dataKey, dataValue)
                        }
                        if (options.cellTemplate && options.cellTemplate.render) {
                            var templateOptions = {
                                model: {
                                    text: options.getCellText ? options.getCellText(i, j) : "",
                                    date: options.getCellDate ? options.getCellDate(i) : void 0
                                },
                                container: (0, _dom.getPublicElement)((0, _renderer2.default)(td)),
                                index: i * options.cellCount + j
                            };
                            if (dataValue) {
                                if (dataValue.startDate) {
                                    templateOptions.model.startDate = dataValue.startDate
                                }
                                if (dataValue.endDate) {
                                    templateOptions.model.endDate = dataValue.endDate
                                }
                                if (dataValue.groups) {
                                    templateOptions.model.groups = dataValue.groups
                                }
                                if (dataValue.allDay) {
                                    templateOptions.model.allDay = dataValue.allDay
                                }
                            }
                            templateCallbacks.push(options.cellTemplate.render.bind(options.cellTemplate, templateOptions))
                        } else {
                            if (options.getCellText) {
                                td.innerHTML = "<div>" + options.getCellText(i, j) + "</div>"
                            }
                        }
                    }
                    if (allDayElements && isLastRowInGroup) {
                        this.insertAllDayRow(allDayElements, tableBody, allDayElementIndex);
                        allDayElementIndex++
                    }
                }
                return templateCallbacks
            },
            makeGroupedTable: function(type, groups, cssClasses, cellCount, cellTemplate, rowCount, groupByDate) {
                var rows = [];
                if (type === this.VERTICAL) {
                    rows = this._makeVerticalGroupedRows(groups, cssClasses, cellTemplate, rowCount)
                } else {
                    rows = this._makeHorizontalGroupedRows(groups, cssClasses, cellCount, cellTemplate, groupByDate)
                }
                return rows
            },
            makeGroupedTableFromJSON: function(type, data, config) {
                var table;
                var cellStorage = [];
                var rowIndex = 0;
                config = config || {};
                var cellTag = config.cellTag || "td";
                var childrenField = config.childrenField || "children";
                var titleField = config.titleField || "title";
                var groupTableClass = config.groupTableClass;
                var groupRowClass = config.groupRowClass;
                var groupCellClass = config.groupCellClass;
                var groupCellCustomContent = config.groupCellCustomContent;

                function createTable() {
                    table = _dom_adapter2.default.createElement("table");
                    if (groupTableClass) {
                        table.className = groupTableClass
                    }
                }

                function getChildCount(item) {
                    if (item[childrenField]) {
                        return item[childrenField].length
                    }
                    return 0
                }

                function createCell(text, childCount, index, data) {
                    var cell = {
                        element: _dom_adapter2.default.createElement(cellTag),
                        childCount: childCount
                    };
                    if (groupCellClass) {
                        cell.element.className = groupCellClass
                    }
                    var cellText = _dom_adapter2.default.createTextNode(text);
                    if ("function" === typeof groupCellCustomContent) {
                        groupCellCustomContent(cell.element, cellText, index, data)
                    } else {
                        cell.element.appendChild(cellText)
                    }
                    return cell
                }

                function generateCells(data) {
                    for (var i = 0; i < data.length; i++) {
                        var childCount = getChildCount(data[i]);
                        var cell = createCell(data[i][titleField], childCount, i, data[i]);
                        if (!cellStorage[rowIndex]) {
                            cellStorage[rowIndex] = []
                        }
                        cellStorage[rowIndex].push(cell);
                        if (childCount) {
                            generateCells(data[i][childrenField])
                        } else {
                            rowIndex++
                        }
                    }
                }

                function putCellsToRows() {
                    cellStorage.forEach(function(cells) {
                        var row = _dom_adapter2.default.createElement(ROW_SELECTOR);
                        if (groupRowClass) {
                            row.className = groupRowClass
                        }
                        var rowspans = [];
                        for (var i = cells.length - 1; i >= 0; i--) {
                            var prev = cells[i + 1];
                            var rowspan = cells[i].childCount;
                            if (prev && prev.childCount) {
                                rowspan *= prev.childCount
                            }
                            rowspans.push(rowspan)
                        }
                        rowspans.reverse();
                        cells.forEach(function(cell, index) {
                            if (rowspans[index]) {
                                cell.element.setAttribute("rowSpan", rowspans[index])
                            }
                            row.appendChild(cell.element)
                        });
                        table.appendChild(row)
                    })
                }
                createTable();
                generateCells(data);
                putCellsToRows();
                return table
            },
            _makeFlexGroupedRowCells: function(group, repeatCount, cssClasses, cellTemplate) {
                var repeatByDate = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 1;
                var cells = [];
                var items = group.items;
                var itemCount = items.length;
                for (var i = 0; i < repeatCount * repeatByDate; i++) {
                    for (var j = 0; j < itemCount; j++) {
                        var $container = (0, _renderer2.default)("<div>");
                        var cell = {};
                        if (cellTemplate && cellTemplate.render) {
                            var templateOptions = {
                                model: items[j],
                                container: (0, _dom.getPublicElement)($container),
                                index: i * itemCount + j
                            };
                            if (group.data) {
                                templateOptions.model.data = group.data[j]
                            }
                            cell.template = cellTemplate.render.bind(cellTemplate, templateOptions)
                        } else {
                            $container.text(items[j].text).attr("title", items[j].text).addClass("dx-scheduler-group-header-content");
                            $container = (0, _renderer2.default)("<div>").append($container)
                        }
                        var cssClass = _type2.default.isFunction(cssClasses.groupHeaderClass) ? cssClasses.groupHeaderClass(j) : cssClasses.groupHeaderClass;
                        cell.element = $container.addClass(cssClass);
                        cells.push(cell)
                    }
                }
                return cells
            },
            _makeVerticalGroupedRows: function(groups, cssClasses, cellTemplate) {
                var cellTemplates = [];
                var repeatCount = 1;
                var cellsArray = [];
                var cellIterator = function(cell) {
                    if (cell.template) {
                        cellTemplates.push(cell.template)
                    }
                };
                for (var i = 0; i < groups.length; i++) {
                    if (i > 0) {
                        repeatCount = groups[i - 1].items.length * repeatCount
                    }
                    var cells = this._makeFlexGroupedRowCells(groups[i], repeatCount, cssClasses, cellTemplate);
                    cells.forEach(cellIterator);
                    cellsArray.push(cells)
                }
                var rows = [];
                var groupCount = cellsArray.length;
                for (var _i = 0; _i < groupCount; _i++) {
                    rows.push((0, _renderer2.default)("<div>").addClass(cssClasses.groupHeaderRowClass))
                }
                for (var _i2 = groupCount - 1; _i2 >= 0; _i2--) {
                    var currentColumnLength = cellsArray[_i2].length;
                    for (var j = 0; j < currentColumnLength; j++) {
                        rows[_i2].append(cellsArray[_i2][j].element)
                    }
                }
                return {
                    elements: (0, _renderer2.default)("<div>").addClass("dx-scheduler-group-flex-container").append(rows),
                    cellTemplates: cellTemplates
                }
            },
            _makeHorizontalGroupedRows: function(groups, cssClasses, cellCount, cellTemplate, groupByDate) {
                var repeatCount = 1;
                var groupCount = groups.length;
                var rows = [];
                var cellTemplates = [];
                var repeatByDate = groupByDate ? cellCount : 1;
                var cellIterator = function(cell) {
                    if (cell.template) {
                        cellTemplates.push(cell.template)
                    }
                    return cell.element
                };
                for (var i = 0; i < groupCount; i++) {
                    if (i > 0) {
                        repeatCount = groups[i - 1].items.length * repeatCount
                    }
                    var cells = this._makeGroupedRowCells(groups[i], repeatCount, cssClasses, cellTemplate, repeatByDate);
                    rows.push((0, _renderer2.default)("<tr>").addClass(cssClasses.groupRowClass).append(cells.map(cellIterator)))
                }
                var maxCellCount = rows[groupCount - 1].find("th").length;
                for (var j = 0; j < groupCount; j++) {
                    var $cell = rows[j].find("th");
                    var colspan = maxCellCount / $cell.length;
                    if (!groupByDate) {
                        colspan *= cellCount
                    }
                    if (colspan > 1 && 1 === repeatByDate || groupByDate && groupCount > 1) {
                        $cell.attr("colSpan", colspan)
                    }
                }
                return {
                    elements: rows,
                    cellTemplates: cellTemplates
                }
            },
            _makeGroupedRowCells: function(group, repeatCount, cssClasses, cellTemplate, repeatByDate) {
                repeatByDate = repeatByDate || 1;
                repeatCount *= repeatByDate;
                var cells = [];
                var items = group.items;
                var itemCount = items.length;
                for (var i = 0; i < repeatCount; i++) {
                    for (var j = 0; j < itemCount; j++) {
                        var $container = (0, _renderer2.default)("<div>");
                        var cell = {};
                        if (cellTemplate && cellTemplate.render) {
                            var templateOptions = {
                                model: items[j],
                                container: (0, _dom.getPublicElement)($container),
                                index: i * itemCount + j
                            };
                            if (group.data) {
                                templateOptions.model.data = group.data[j]
                            }
                            cell.template = cellTemplate.render.bind(cellTemplate, templateOptions)
                        } else {
                            $container.text(items[j].text);
                            $container = (0, _renderer2.default)("<div>").append($container)
                        }
                        $container.addClass(cssClasses.groupHeaderContentClass);
                        var cssClass = void 0;
                        if (_type2.default.isFunction(cssClasses.groupHeaderClass)) {
                            cssClass = cssClasses.groupHeaderClass(j)
                        } else {
                            cssClass = cssClasses.groupHeaderClass
                        }
                        cell.element = (0, _renderer2.default)("<th>").addClass(cssClass).append($container);
                        cells.push(cell)
                    }
                }
                return cells
            }
        };
        module.exports = SchedulerTableCreator
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.timeline.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../../core/utils/common */ 3).noop;
        var extend = __webpack_require__( /*! ../../../core/utils/extend */ 0).extend;
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerWorkSpace = __webpack_require__( /*! ./ui.scheduler.work_space.indicator */ 206);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var tableCreator = __webpack_require__( /*! ../ui.scheduler.table_creator */ 250);
        var HorizontalShader = __webpack_require__( /*! ../shaders/ui.scheduler.current_time_shader.horizontal */ 741);
        var TIMELINE_CLASS = "dx-scheduler-timeline";
        var GROUP_TABLE_CLASS = "dx-scheduler-group-table";
        var HORIZONTAL_GROUPED_WORKSPACE_CLASS = "dx-scheduler-work-space-horizontal-grouped";
        var HEADER_PANEL_CELL_CLASS = "dx-scheduler-header-panel-cell";
        var HEADER_PANEL_WEEK_CELL_CLASS = "dx-scheduler-header-panel-week-cell";
        var HEADER_ROW_CLASS = "dx-scheduler-header-row";
        var HORIZONTAL = "horizontal";
        var DATE_TABLE_CELL_BORDER = 1;
        var DATE_TABLE_HEADER_MARGIN = 10;
        var toMs = dateUtils.dateToMilliseconds;
        var SchedulerTimeline = SchedulerWorkSpace.inherit({
            _init: function() {
                this.callBase();
                this.$element().addClass(TIMELINE_CLASS);
                this._$sidebarTable = $("<div>").addClass(GROUP_TABLE_CLASS)
            },
            _getCellFromNextRow: function(direction, isMultiSelection) {
                if (!isMultiSelection) {
                    return this.callBase(direction, isMultiSelection)
                }
                return this._$focusedCell
            },
            _getDefaultGroupStrategy: function() {
                return "vertical"
            },
            _toggleGroupingDirectionClass: function() {
                this.$element().toggleClass(HORIZONTAL_GROUPED_WORKSPACE_CLASS, this._isHorizontalGroupedWorkSpace())
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    groupOrientation: "vertical"
                })
            },
            _getRightCell: function() {
                var $rightCell;
                var $focusedCell = this._$focusedCell;
                var rowCellCount = this._getCellCount();
                var edgeCellIndex = this._isRTL() ? 0 : rowCellCount - 1;
                var direction = this._isRTL() ? "prev" : "next";
                if ($focusedCell.index() === edgeCellIndex) {
                    $rightCell = $focusedCell
                } else {
                    $rightCell = $focusedCell[direction]();
                    $rightCell = this._checkForViewBounds($rightCell)
                }
                return $rightCell
            },
            _getLeftCell: function() {
                var $leftCell;
                var $focusedCell = this._$focusedCell;
                var rowCellCount = this._getCellCount();
                var edgeCellIndex = this._isRTL() ? rowCellCount - 1 : 0;
                var direction = this._isRTL() ? "next" : "prev";
                if ($focusedCell.index() === edgeCellIndex) {
                    $leftCell = $focusedCell
                } else {
                    $leftCell = $focusedCell[direction]();
                    $leftCell = this._checkForViewBounds($leftCell)
                }
                return $leftCell
            },
            _getRowCount: function() {
                return 1
            },
            _getCellCount: function() {
                return this._getCellCountInDay() * this.option("intervalCount")
            },
            getGroupTableWidth: function() {
                return this._$sidebarTable ? this._$sidebarTable.outerWidth() : 0
            },
            _getTotalRowCount: function(groupCount) {
                if (this._isHorizontalGroupedWorkSpace()) {
                    return this._getRowCount()
                } else {
                    groupCount = groupCount || 1;
                    return this._getRowCount() * groupCount
                }
            },
            _getDateByIndex: function(index) {
                var resultDate = new Date(this._firstViewDate);
                var dayIndex = Math.floor(index / this._getCellCountInDay());
                resultDate.setTime(this._firstViewDate.getTime() + this._calculateCellIndex(0, index) * this._getInterval() + dayIndex * this._getHiddenInterval());
                return resultDate
            },
            _getFormat: function() {
                return "shorttime"
            },
            _needApplyLastGroupCellClass: function() {
                return true
            },
            _calculateHiddenInterval: function(rowIndex, cellIndex) {
                var dayIndex = Math.floor(cellIndex / this._getCellCountInDay());
                return dayIndex * this._getHiddenInterval()
            },
            _getMillisecondsOffset: function(rowIndex, cellIndex) {
                cellIndex = this._calculateCellIndex(rowIndex, cellIndex);
                return this._getInterval() * cellIndex + this._calculateHiddenInterval(rowIndex, cellIndex)
            },
            _createWorkSpaceElements: function() {
                this._createWorkSpaceScrollableElements()
            },
            _getWorkSpaceHeight: function() {
                if (this.option("crossScrollingEnabled")) {
                    return getBoundingRect(this._$dateTable.get(0)).height
                }
                return getBoundingRect(this.$element().get(0)).height
            },
            _dateTableScrollableConfig: function() {
                var config = this.callBase();
                var timelineConfig = {
                    direction: HORIZONTAL
                };
                return this.option("crossScrollingEnabled") ? config : extend(config, timelineConfig)
            },
            _needCreateCrossScrolling: function() {
                return true
            },
            _headerScrollableConfig: function() {
                var config = this.callBase();
                return extend(config, {
                    scrollByContent: true
                })
            },
            _renderTimePanel: noop,
            _renderAllDayPanel: noop,
            _getTableAllDay: function() {
                return false
            },
            _getDateHeaderTemplate: function() {
                return this.option("timeCellTemplate")
            },
            _toggleAllDayVisibility: noop,
            _changeAllDayVisibility: noop,
            supportAllDayRow: function() {
                return false
            },
            _getGroupHeaderContainer: function() {
                if (this._isHorizontalGroupedWorkSpace()) {
                    return this._$thead
                }
                return this._$sidebarTable
            },
            _insertAllDayRowsIntoDateTable: function() {
                return false
            },
            _createAllDayPanelElements: noop,
            _renderDateHeader: function() {
                var $headerRow = this.callBase();
                if (this._needRenderWeekHeader()) {
                    var firstViewDate = new Date(this._firstViewDate);
                    var $cells = [];
                    var colspan = this._getCellCountInDay();
                    var cellTemplate = this.option("dateCellTemplate");
                    for (var i = 0; i < this._getWeekDuration() * this.option("intervalCount"); i++) {
                        var $th = $("<th>");
                        var text = this._formatWeekdayAndDay(firstViewDate);
                        if (cellTemplate) {
                            var templateOptions = {
                                model: {
                                    text: text,
                                    date: new Date(firstViewDate)
                                },
                                container: $th,
                                index: i
                            };
                            cellTemplate.render(templateOptions)
                        } else {
                            $th.text(text)
                        }
                        $th.addClass(HEADER_PANEL_CELL_CLASS).addClass(HEADER_PANEL_WEEK_CELL_CLASS).attr("colSpan", colspan);
                        $cells.push($th);
                        this._incrementDate(firstViewDate)
                    }
                    var $row = $("<tr>").addClass(HEADER_ROW_CLASS).append($cells);
                    $headerRow.before($row)
                }
            },
            _needRenderWeekHeader: function() {
                return false
            },
            _incrementDate: function(date) {
                date.setDate(date.getDate() + 1)
            },
            _getWeekDuration: function() {
                return 1
            },
            _renderView: function() {
                this._setFirstViewDate();
                var groupCellTemplates = this._renderGroupHeader();
                this._renderDateHeader();
                this._renderAllDayPanel();
                this._renderTimePanel();
                this._renderDateTable();
                this._shader = new HorizontalShader;
                this._updateGroupTableHeight();
                this._$sidebarTable.appendTo(this._sidebarScrollable.$content());
                this._applyCellTemplates(groupCellTemplates)
            },
            _setHorizontalGroupHeaderCellsHeight: noop,
            getIndicationWidth: function() {
                var today = this._getToday();
                var cellWidth = this.getCellWidth();
                var date = this._getIndicationFirstViewDate();
                var hiddenInterval = this._getHiddenInterval();
                var timeDiff = today.getTime() - date.getTime();
                var differenceInDays = Math.ceil(timeDiff / toMs("day")) - 1;
                var duration = timeDiff - differenceInDays * hiddenInterval;
                var cellCount = duration / this.getCellDuration();
                return cellCount * cellWidth
            },
            _renderIndicator: function(height, rtlOffset, $container, groupCount) {
                var $indicator;
                var width = this.getIndicationWidth();
                if ("vertical" === this.option("groupOrientation")) {
                    $indicator = this._createIndicator($container);
                    $indicator.height(getBoundingRect($container.get(0)).height);
                    $indicator.css("left", rtlOffset ? rtlOffset - width : width)
                } else {
                    for (var i = 0; i < groupCount; i++) {
                        var offset = this._getCellCount() * this.getCellWidth() * i;
                        $indicator = this._createIndicator($container);
                        $indicator.height(getBoundingRect($container.get(0)).height);
                        $indicator.css("left", rtlOffset ? rtlOffset - width - offset : width + offset)
                    }
                }
            },
            _isVerticalShader: function() {
                return false
            },
            _isCurrentTimeHeaderCell: function(headerIndex) {
                var result = false;
                if (this.option("showCurrentTimeIndicator") && this._needRenderDateTimeIndicator()) {
                    var date = this._getDateByIndex(headerIndex);
                    var now = this._getToday();
                    date = new Date(date);
                    if (dateUtils.sameDate(now, date)) {
                        var startCellDate = new Date(date);
                        var endCellDate = new Date(date);
                        endCellDate = endCellDate.setMilliseconds(date.getMilliseconds() + this.getCellDuration());
                        result = dateUtils.dateInRange(now, startCellDate, endCellDate)
                    }
                }
                return result
            },
            _cleanView: function() {
                this.callBase();
                this._$sidebarTable.empty()
            },
            _visibilityChanged: function(visible) {
                this.callBase(visible)
            },
            _setTableSizes: function() {
                var cellHeight = this.getCellHeight();
                var minHeight = this._getWorkSpaceMinHeight();
                var $groupCells = this._$sidebarTable.find("tr");
                var height = cellHeight * $groupCells.length;
                if (height < minHeight) {
                    height = minHeight
                }
                this._$sidebarTable.height(height);
                this._$dateTable.height(height);
                this.callBase()
            },
            _getWorkSpaceMinHeight: function() {
                var minHeight = this._getWorkSpaceHeight();
                var workspaceContainerHeight = this.$element().outerHeight(true) - this.getHeaderPanelHeight() - 2 * DATE_TABLE_CELL_BORDER - DATE_TABLE_HEADER_MARGIN;
                if (minHeight < workspaceContainerHeight) {
                    minHeight = workspaceContainerHeight
                }
                return minHeight
            },
            _makeGroupRows: function(groups, groupByDate) {
                var tableCreatorStrategy = "vertical" === this.option("groupOrientation") ? tableCreator.VERTICAL : tableCreator.HORIZONTAL;
                return tableCreator.makeGroupedTable(tableCreatorStrategy, groups, {
                    groupRowClass: this._getGroupRowClass(),
                    groupHeaderRowClass: this._getGroupRowClass(),
                    groupHeaderClass: this._getGroupHeaderClass.bind(this),
                    groupHeaderContentClass: this._getGroupHeaderContentClass()
                }, this._getCellCount() || 1, this.option("resourceCellTemplate"), this._getTotalRowCount(this._getGroupCount()), groupByDate)
            },
            _ensureGroupHeaderCellsHeight: function(cellHeight) {
                var minCellHeight = this._calculateMinCellHeight();
                if (cellHeight < minCellHeight) {
                    return minCellHeight
                }
                return cellHeight
            },
            _calculateMinCellHeight: function() {
                var dateTable = this._getDateTable();
                var dateTableRowSelector = "." + this._getDateTableRowClass();
                return getBoundingRect(dateTable).height / dateTable.find(dateTableRowSelector).length - 2 * DATE_TABLE_CELL_BORDER
            },
            _getCellCoordinatesByIndex: function(index) {
                return {
                    cellIndex: index % this._getCellCount(),
                    rowIndex: 0
                }
            },
            _getCellByCoordinates: function(cellCoordinates, groupIndex) {
                var indexes = this._groupedStrategy.prepareCellIndexes(cellCoordinates, groupIndex);
                return this._$dateTable.find("tr").eq(indexes.rowIndex).find("td").eq(indexes.cellIndex)
            },
            _getWorkSpaceWidth: function() {
                return this._$dateTable.outerWidth(true)
            },
            _getGroupIndexByCell: function($cell) {
                return $cell.parent().index()
            },
            _getIndicationFirstViewDate: function() {
                return new Date(this._firstViewDate)
            },
            _getIntervalBetween: function(currentDate, allDay) {
                var startDayHour = this.option("startDayHour");
                var endDayHour = this.option("endDayHour");
                var firstViewDate = this.getStartViewDate();
                var firstViewDateTime = firstViewDate.getTime();
                var hiddenInterval = (24 - endDayHour + startDayHour) * toMs("hour");
                var timeZoneOffset = dateUtils.getTimezonesDifference(firstViewDate, currentDate);
                var apptStart = currentDate.getTime();
                var fullInterval = apptStart - firstViewDateTime - timeZoneOffset;
                var fullDays = Math.floor(fullInterval / toMs("day"));
                var tailDuration = fullInterval - fullDays * toMs("day");
                var tailDelta = 0;
                var cellCount = this._getCellCountInDay() * (fullDays - this._getWeekendsCount(fullDays));
                var gapBeforeAppt = apptStart - dateUtils.trimTime(new Date(currentDate)).getTime();
                var result = cellCount * this.option("hoursInterval") * toMs("hour");
                if (!allDay) {
                    if (currentDate.getHours() < startDayHour) {
                        tailDelta = tailDuration - hiddenInterval + gapBeforeAppt
                    } else {
                        if (currentDate.getHours() >= startDayHour && currentDate.getHours() < endDayHour) {
                            tailDelta = tailDuration
                        } else {
                            if (currentDate.getHours() >= startDayHour && currentDate.getHours() >= endDayHour) {
                                tailDelta = tailDuration - (gapBeforeAppt - endDayHour * toMs("hour"))
                            } else {
                                if (!fullDays) {
                                    result = fullInterval
                                }
                            }
                        }
                    }
                    result += tailDelta
                }
                return result
            },
            _getWeekendsCount: function() {
                return 0
            },
            getAllDayContainer: function() {
                return null
            },
            getTimePanelWidth: function() {
                return 0
            },
            getPositionShift: function(timeShift) {
                var positionShift = this.callBase(timeShift);
                var left = this.getCellWidth() * timeShift;
                if (this.option("rtlEnabled")) {
                    left *= -1
                }
                left += positionShift.left;
                return {
                    top: 0,
                    left: left,
                    cellPosition: left
                }
            },
            getVisibleBounds: function() {
                var isRtl = this.option("rtlEnabled");
                var result = {};
                var $scrollable = this.getScrollable().$element();
                var cellWidth = this.getCellWidth();
                var scrollableOffset = isRtl ? this.getScrollableOuterWidth() - this.getScrollableScrollLeft() : this.getScrollableScrollLeft();
                var scrolledCellCount = scrollableOffset / cellWidth;
                var visibleCellCount = $scrollable.width() / cellWidth;
                var totalCellCount = isRtl ? scrolledCellCount - visibleCellCount : scrolledCellCount + visibleCellCount;
                var leftDate = this._getDateByIndex(scrolledCellCount);
                var rightDate = this._getDateByIndex(totalCellCount);
                if (isRtl) {
                    leftDate = this._getDateByIndex(totalCellCount);
                    rightDate = this._getDateByIndex(scrolledCellCount)
                }
                result.left = {
                    hours: leftDate.getHours(),
                    minutes: leftDate.getMinutes() >= 30 ? 30 : 0,
                    date: dateUtils.trimTime(leftDate)
                };
                result.right = {
                    hours: rightDate.getHours(),
                    minutes: rightDate.getMinutes() >= 30 ? 30 : 0,
                    date: dateUtils.trimTime(rightDate)
                };
                return result
            },
            needUpdateScrollPosition: function(hours, minutes, bounds, date) {
                var isUpdateNeeded = false;
                isUpdateNeeded = this._dateWithinBounds(bounds, date);
                if (hours < bounds.left.hours || hours > bounds.right.hours) {
                    isUpdateNeeded = true
                }
                if (hours === bounds.left.hours && minutes < bounds.left.minutes) {
                    isUpdateNeeded = true
                }
                if (hours === bounds.right.hours && minutes > bounds.right.minutes) {
                    isUpdateNeeded = true
                }
                return isUpdateNeeded
            },
            getIntervalDuration: function(allDay) {
                return this.getCellDuration()
            },
            _dateWithinBounds: function(bounds, date) {
                var trimmedDate = dateUtils.trimTime(new Date(date));
                var isUpdateNeeded = false;
                if (trimmedDate < bounds.left.date || trimmedDate > bounds.right.date) {
                    isUpdateNeeded = true
                }
                return isUpdateNeeded
            },
            _supportCompactDropDownAppointments: function() {
                return false
            },
            getCellMinWidth: function() {
                return 0
            },
            getWorkSpaceLeftOffset: function() {
                return 0
            },
            scrollToTime: function(hours, minutes, date) {
                var coordinates = this._getScrollCoordinates(hours, minutes, date);
                var scrollable = this.getScrollable();
                var offset = this.option("rtlEnabled") ? getBoundingRect(this.getScrollableContainer().get(0)).width : 0;
                if (this.option("templatesRenderAsynchronously")) {
                    setTimeout(function() {
                        scrollable.scrollBy({
                            left: coordinates.left - scrollable.scrollLeft() - offset,
                            top: 0
                        })
                    })
                } else {
                    scrollable.scrollBy({
                        left: coordinates.left - scrollable.scrollLeft() - offset,
                        top: 0
                    })
                }
            }
        });
        registerComponent("dxSchedulerTimeline", SchedulerTimeline);
        module.exports = SchedulerTimeline
    },
    /*!***********************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.base.js ***!
      \***********************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsPositioningStrategy = __webpack_require__( /*! ./ui.scheduler.appointmentsPositioning.strategy.base */ 406);
        var _uiSchedulerAppointmentsPositioningStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsPositioningStrategy);
        var _uiSchedulerAppointmentsPositioningStrategy3 = __webpack_require__( /*! ./ui.scheduler.appointmentsPositioning.strategy.adaptive */ 751);
        var _uiSchedulerAppointmentsPositioningStrategy4 = _interopRequireDefault(_uiSchedulerAppointmentsPositioningStrategy3);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _ui = __webpack_require__( /*! ../../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _themes = __webpack_require__( /*! ../../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _utils = __webpack_require__( /*! ../utils.timeZone */ 148);
        var _utils2 = _interopRequireDefault(_utils);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var toMs = _date2.default.dateToMilliseconds;
        var APPOINTMENT_MIN_SIZE = 2;
        var APPOINTMENT_DEFAULT_HEIGHT = 20;
        var COMPACT_THEME_APPOINTMENT_DEFAULT_HEIGHT = 18;
        var DROP_DOWN_BUTTON_ADAPTIVE_SIZE = 28;
        var BaseRenderingStrategy = function() {
            function BaseRenderingStrategy(instance) {
                _classCallCheck(this, BaseRenderingStrategy);
                this.instance = instance;
                this._initPositioningStrategy()
            }
            _createClass(BaseRenderingStrategy, [{
                key: "_isAdaptive",
                value: function() {
                    return this.instance.fire("isAdaptive")
                }
            }, {
                key: "_correctCollectorCoordinatesInAdaptive",
                value: function(coordinates, isAllDay) {
                    coordinates.top = coordinates.top + this.getCollectorTopOffset(isAllDay);
                    coordinates.left = coordinates.left + this.getCollectorLeftOffset()
                }
            }, {
                key: "_initPositioningStrategy",
                value: function() {
                    this._positioningStrategy = this._isAdaptive() ? new _uiSchedulerAppointmentsPositioningStrategy4.default(this) : new _uiSchedulerAppointmentsPositioningStrategy2.default(this)
                }
            }, {
                key: "getPositioningStrategy",
                value: function() {
                    return this._positioningStrategy
                }
            }, {
                key: "getAppointmentMinSize",
                value: function() {
                    return APPOINTMENT_MIN_SIZE
                }
            }, {
                key: "keepAppointmentSettings",
                value: function() {
                    return false
                }
            }, {
                key: "getDeltaTime",
                value: function() {}
            }, {
                key: "getAppointmentGeometry",
                value: function(coordinates) {
                    return coordinates
                }
            }, {
                key: "needCorrectAppointmentDates",
                value: function() {
                    return true
                }
            }, {
                key: "getDirection",
                value: function() {
                    return "horizontal"
                }
            }, {
                key: "createTaskPositionMap",
                value: function(items) {
                    delete this._maxAppointmentCountPerCell;
                    var length = items && items.length;
                    if (!length) {
                        return
                    }
                    this._defaultWidth = this.instance._cellWidth;
                    this._defaultHeight = this.instance._cellHeight;
                    this._allDayHeight = this.instance._allDayCellHeight;
                    var map = [];
                    for (var i = 0; i < length; i++) {
                        var coordinates = this._getItemPosition(items[i]);
                        if (this._isRtl()) {
                            coordinates = this._correctRtlCoordinates(coordinates)
                        }
                        map.push(coordinates)
                    }
                    var positionArray = this._getSortedPositions(map);
                    var resultPositions = this._getResultPositions(positionArray);
                    return this._getExtendedPositionMap(map, resultPositions)
                }
            }, {
                key: "_getDeltaWidth",
                value: function(args, initialSize) {
                    var intervalWidth = this.instance.fire("getResizableStep") || this.getAppointmentMinSize();
                    var initialWidth = initialSize.width;
                    return Math.round((args.width - initialWidth) / intervalWidth)
                }
            }, {
                key: "_correctRtlCoordinates",
                value: function(coordinates) {
                    var width = coordinates[0].width || this._getAppointmentMaxWidth();
                    coordinates.forEach(function(coordinate) {
                        if (!coordinate.appointmentReduced) {
                            coordinate.left -= width
                        }
                    });
                    return coordinates
                }
            }, {
                key: "_getAppointmentMaxWidth",
                value: function() {
                    return this.getDefaultCellWidth()
                }
            }, {
                key: "_getItemPosition",
                value: function(item) {
                    var position = this._getAppointmentCoordinates(item);
                    var allDay = this.isAllDay(item);
                    var result = [];
                    var startDate = new Date(this.instance.fire("getField", "startDate", item));
                    var isRecurring = !!this.instance.fire("getField", "recurrenceRule", item);
                    for (var j = 0; j < position.length; j++) {
                        var height = this.calculateAppointmentHeight(item, position[j], isRecurring);
                        var width = this.calculateAppointmentWidth(item, position[j], isRecurring);
                        var resultWidth = width;
                        var appointmentReduced = null;
                        var multiWeekAppointmentParts = [];
                        var initialRowIndex = position[j].rowIndex;
                        var initialCellIndex = position[j].cellIndex;
                        if (this._needVerifyItemSize() || allDay) {
                            var currentMaxAllowedPosition = position[j].hMax;
                            if (this.isAppointmentGreaterThan(currentMaxAllowedPosition, {
                                    left: position[j].left,
                                    width: width
                                })) {
                                appointmentReduced = "head";
                                initialRowIndex = position[j].rowIndex;
                                initialCellIndex = position[j].cellIndex;
                                resultWidth = this._reduceMultiWeekAppointment(width, {
                                    left: position[j].left,
                                    right: currentMaxAllowedPosition
                                });
                                multiWeekAppointmentParts = this._getAppointmentParts({
                                    sourceAppointmentWidth: width,
                                    reducedWidth: resultWidth,
                                    height: height
                                }, position[j], startDate);
                                if (this._isRtl()) {
                                    position[j].left = currentMaxAllowedPosition
                                }
                            }
                        }(0, _extend.extend)(position[j], {
                            height: height,
                            width: resultWidth,
                            allDay: allDay,
                            rowIndex: initialRowIndex,
                            cellIndex: initialCellIndex,
                            appointmentReduced: appointmentReduced,
                            originalAppointmentStartDate: this.startDate(item, true),
                            originalAppointmentEndDate: this.endDate(item),
                            endDate: this.endDate(item, position[j], isRecurring)
                        });
                        result = this._getAppointmentPartsPosition(multiWeekAppointmentParts, position[j], result)
                    }
                    return result
                }
            }, {
                key: "_getAppointmentPartsPosition",
                value: function(appointmentParts, position, result) {
                    if (appointmentParts.length) {
                        appointmentParts.unshift(position);
                        result = result.concat(appointmentParts)
                    } else {
                        result.push(position)
                    }
                    return result
                }
            }, {
                key: "_getAppointmentCoordinates",
                value: function(itemData) {
                    return this.instance.fire("needCoordinates", {
                        startDate: this.startDate(itemData),
                        originalStartDate: this.startDate(itemData, true),
                        appointmentData: itemData
                    })
                }
            }, {
                key: "_isRtl",
                value: function() {
                    return this.instance.option("rtlEnabled")
                }
            }, {
                key: "_getAppointmentParts",
                value: function() {
                    return []
                }
            }, {
                key: "_getCompactAppointmentParts",
                value: function(appointmentWidth) {
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    return Math.round(appointmentWidth / cellWidth)
                }
            }, {
                key: "_reduceMultiWeekAppointment",
                value: function(sourceAppointmentWidth, bound) {
                    if (this._isRtl()) {
                        sourceAppointmentWidth = Math.floor(bound.left - bound.right)
                    } else {
                        sourceAppointmentWidth = bound.right - Math.floor(bound.left)
                    }
                    return sourceAppointmentWidth
                }
            }, {
                key: "calculateAppointmentHeight",
                value: function() {
                    return 0
                }
            }, {
                key: "calculateAppointmentWidth",
                value: function() {
                    return 0
                }
            }, {
                key: "isAppointmentGreaterThan",
                value: function(etalon, comparisonParameters) {
                    var result = comparisonParameters.left + comparisonParameters.width - etalon;
                    if (this._isRtl()) {
                        result = etalon + comparisonParameters.width - comparisonParameters.left
                    }
                    return result > this.getDefaultCellWidth() / 2
                }
            }, {
                key: "isAllDay",
                value: function() {
                    return false
                }
            }, {
                key: "cropAppointmentWidth",
                value: function(width, cellWidth) {
                    if (this.instance.fire("isGroupedByDate")) {
                        width = cellWidth
                    }
                    return width
                }
            }, {
                key: "_getSortedPositions",
                value: function(positionList) {
                    var _this = this;
                    var result = [];
                    var round = function(value) {
                        return Math.round(100 * value) / 100
                    };
                    var createItem = function(rowIndex, cellIndex, top, left, bottom, right, position, allDay) {
                        return {
                            i: rowIndex,
                            j: cellIndex,
                            top: round(top),
                            left: round(left),
                            bottom: round(bottom),
                            right: round(right),
                            cellPosition: position,
                            allDay: allDay
                        }
                    };
                    for (var rowIndex = 0, rowCount = positionList.length; rowIndex < rowCount; rowIndex++) {
                        for (var cellIndex = 0, cellCount = positionList[rowIndex].length; cellIndex < cellCount; cellIndex++) {
                            var _positionList$rowInde = positionList[rowIndex][cellIndex],
                                top = _positionList$rowInde.top,
                                left = _positionList$rowInde.left,
                                height = _positionList$rowInde.height,
                                width = _positionList$rowInde.width,
                                cellPosition = _positionList$rowInde.cellPosition,
                                allDay = _positionList$rowInde.allDay;
                            result.push(createItem(rowIndex, cellIndex, top, left, top + height, left + width, cellPosition, allDay))
                        }
                    }
                    return result.sort(function(a, b) {
                        return _this._sortCondition(a, b)
                    })
                }
            }, {
                key: "_sortCondition",
                value: function() {}
            }, {
                key: "_getConditions",
                value: function(a, b) {
                    var isSomeEdge = this._isSomeEdge(a, b);
                    return {
                        columnCondition: isSomeEdge || this._normalizeCondition(a.left, b.left),
                        rowCondition: isSomeEdge || this._normalizeCondition(a.top, b.top),
                        cellPositionCondition: isSomeEdge || this._normalizeCondition(a.cellPosition, b.cellPosition)
                    }
                }
            }, {
                key: "_rowCondition",
                value: function(a, b) {
                    var conditions = this._getConditions(a, b);
                    return conditions.columnCondition || conditions.rowCondition
                }
            }, {
                key: "_columnCondition",
                value: function(a, b) {
                    var conditions = this._getConditions(a, b);
                    return conditions.rowCondition || conditions.columnCondition
                }
            }, {
                key: "_isSomeEdge",
                value: function(a, b) {
                    return a.i === b.i && a.j === b.j
                }
            }, {
                key: "_normalizeCondition",
                value: function(first, second) {
                    var result = first - second;
                    return Math.abs(result) > 1 ? result : 0
                }
            }, {
                key: "_isItemsCross",
                value: function(firstItem, secondItem, orientation) {
                    var firstItemSide_1 = Math.floor(firstItem[orientation[0]]);
                    var firstItemSide_2 = Math.floor(firstItem[orientation[1]]);
                    var secondItemSide_1 = Math.ceil(secondItem[orientation[0]]);
                    var secondItemSide_2 = Math.ceil(secondItem[orientation[1]]);
                    var isItemCross = Math.abs(firstItem[orientation[2]] - secondItem[orientation[2]]) <= 1;
                    return isItemCross && (firstItemSide_1 <= secondItemSide_1 && firstItemSide_2 > secondItemSide_1 || firstItemSide_1 < secondItemSide_2 && firstItemSide_2 >= secondItemSide_2 || firstItemSide_1 === secondItemSide_1 && firstItemSide_2 === secondItemSide_2)
                }
            }, {
                key: "_getOrientation",
                value: function() {
                    return ["top", "bottom", "left"]
                }
            }, {
                key: "_getResultPositions",
                value: function(sortedArray) {
                    var _this2 = this;
                    var result = [];
                    var i;
                    var sortedIndex = 0;
                    var currentItem;
                    var indexes;
                    var itemIndex;
                    var maxIndexInStack = 0;
                    var stack = {};
                    var orientation = this._getOrientation();
                    var findFreeIndex = function findFreeIndex(indexes, index) {
                        var isFind = indexes.some(function(item) {
                            return item === index
                        });
                        if (isFind) {
                            return findFreeIndex(indexes, ++index)
                        } else {
                            return index
                        }
                    };
                    var createItem = function(currentItem, index) {
                        var currentIndex = index || 0;
                        return {
                            index: currentIndex,
                            i: currentItem.i,
                            j: currentItem.j,
                            left: currentItem.left,
                            right: currentItem.right,
                            top: currentItem.top,
                            bottom: currentItem.bottom,
                            allDay: currentItem.allDay,
                            sortedIndex: _this2._skipSortedIndex(currentIndex) ? null : sortedIndex++
                        }
                    };
                    var startNewStack = function(currentItem) {
                        stack.items = [createItem(currentItem)];
                        stack.left = currentItem.left;
                        stack.right = currentItem.right;
                        stack.top = currentItem.top;
                        stack.bottom = currentItem.bottom;
                        stack.allDay = currentItem.allDay
                    };
                    var pushItemsInResult = function(items) {
                        items.forEach(function(item) {
                            result.push({
                                index: item.index,
                                count: maxIndexInStack + 1,
                                i: item.i,
                                j: item.j,
                                sortedIndex: item.sortedIndex
                            })
                        })
                    };
                    for (i = 0; i < sortedArray.length; i++) {
                        currentItem = sortedArray[i];
                        indexes = [];
                        if (!stack.items) {
                            startNewStack(currentItem)
                        } else {
                            if (this._isItemsCross(stack, currentItem, orientation)) {
                                stack.items.forEach(function(item, index) {
                                    if (_this2._isItemsCross(item, currentItem, orientation)) {
                                        indexes.push(item.index)
                                    }
                                });
                                itemIndex = indexes.length ? findFreeIndex(indexes, 0) : 0;
                                stack.items.push(createItem(currentItem, itemIndex));
                                maxIndexInStack = Math.max(itemIndex, maxIndexInStack);
                                stack.left = Math.min(stack.left, currentItem.left);
                                stack.right = Math.max(stack.right, currentItem.right);
                                stack.top = Math.min(stack.top, currentItem.top);
                                stack.bottom = Math.max(stack.bottom, currentItem.bottom);
                                stack.allDay = currentItem.allDay
                            } else {
                                pushItemsInResult(stack.items);
                                stack = {};
                                startNewStack(currentItem);
                                maxIndexInStack = 0
                            }
                        }
                    }
                    if (stack.items) {
                        pushItemsInResult(stack.items)
                    }
                    return result.sort(function(a, b) {
                        var columnCondition = a.j - b.j;
                        var rowCondition = a.i - b.i;
                        return rowCondition ? rowCondition : columnCondition
                    })
                }
            }, {
                key: "_skipSortedIndex",
                value: function(index) {
                    return index > this._getMaxAppointmentCountPerCell() - 1
                }
            }, {
                key: "_findIndexByKey",
                value: function(arr, iKey, jKey, iValue, jValue) {
                    var result = 0;
                    for (var i = 0, len = arr.length; i < len; i++) {
                        if (arr[i][iKey] === iValue && arr[i][jKey] === jValue) {
                            result = i;
                            break
                        }
                    }
                    return result
                }
            }, {
                key: "_getExtendedPositionMap",
                value: function(map, positions) {
                    var positionCounter = 0;
                    var result = [];
                    for (var i = 0, mapLength = map.length; i < mapLength; i++) {
                        var resultString = [];
                        for (var j = 0, itemLength = map[i].length; j < itemLength; j++) {
                            map[i][j].index = positions[positionCounter].index;
                            map[i][j].sortedIndex = positions[positionCounter].sortedIndex;
                            map[i][j].count = positions[positionCounter++].count;
                            resultString.push(map[i][j]);
                            this._checkLongCompactAppointment(map[i][j], resultString)
                        }
                        result.push(resultString)
                    }
                    return result
                }
            }, {
                key: "_checkLongCompactAppointment",
                value: function(item, result) {
                    this._splitLongCompactAppointment(item, result);
                    return result
                }
            }, {
                key: "_splitLongCompactAppointment",
                value: function(item, result) {
                    var appointmentCountPerCell = this._getMaxAppointmentCountPerCellByType(item.allDay);
                    var compactCount = 0;
                    if (void 0 !== appointmentCountPerCell && item.index > appointmentCountPerCell - 1) {
                        item.isCompact = true;
                        compactCount = this._getCompactAppointmentParts(item.width);
                        for (var k = 1; k < compactCount; k++) {
                            var compactPart = (0, _extend.extend)(true, {}, item);
                            compactPart.left = this._getCompactLeftCoordinate(item.left, k);
                            compactPart.cellIndex = compactPart.cellIndex + k;
                            compactPart.sortedIndex = null;
                            result.push(compactPart)
                        }
                    }
                    return result
                }
            }, {
                key: "startDate",
                value: function startDate(appointment, skipNormalize, position) {
                    var startDate = position && position.startDate;
                    var rangeStartDate = this.instance._getStartDate(appointment, skipNormalize);
                    var text = this.instance.fire("getField", "text", appointment);
                    if (startDate && rangeStartDate > startDate || !startDate) {
                        startDate = rangeStartDate
                    }
                    if (isNaN(startDate.getTime())) {
                        throw _ui2.default.Error("E1032", text)
                    }
                    return startDate
                }
            }, {
                key: "endDate",
                value: function endDate(appointment, position, isRecurring) {
                    var ignoreViewDates = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : false;
                    var endDate = this.instance._getEndDate(appointment, ignoreViewDates);
                    var realStartDate = this.startDate(appointment, true);
                    var viewStartDate = this.startDate(appointment, false, position);
                    if (viewStartDate.getTime() > endDate.getTime() || isRecurring) {
                        var recurrencePartStartDate = position ? position.initialStartDate || position.startDate : realStartDate;
                        var recurrencePartCroppedByViewStartDate = position ? position.startDate : realStartDate;
                        var fullDuration = viewStartDate.getTime() > endDate.getTime() ? this.instance.fire("getField", "endDate", appointment).getTime() - this.instance.fire("getField", "startDate", appointment).getTime() : endDate.getTime() - realStartDate.getTime();
                        fullDuration = this._adjustDurationByDaylightDiff(fullDuration, realStartDate, endDate);
                        endDate = new Date(viewStartDate.getTime() >= recurrencePartStartDate.getTime() ? recurrencePartStartDate.getTime() : viewStartDate.getTime());
                        if (isRecurring) {
                            endDate = new Date(endDate.getTime() + fullDuration)
                        }
                        if (!_date2.default.sameDate(realStartDate, endDate) && recurrencePartCroppedByViewStartDate.getTime() < viewStartDate.getTime()) {
                            var headDuration = _date2.default.trimTime(endDate).getTime() - recurrencePartCroppedByViewStartDate.getTime();
                            var tailDuration = fullDuration - headDuration || fullDuration;
                            endDate = new Date(_date2.default.trimTime(viewStartDate).getTime() + tailDuration)
                        }
                    }
                    if (!this.isAllDay(appointment)) {
                        var viewEndDate = _date2.default.roundToHour(this.instance.fire("getEndViewDate"));
                        if (endDate > viewEndDate) {
                            endDate = viewEndDate
                        }
                    }
                    var currentViewEndTime = new Date(new Date(endDate).setHours(this.instance.option("endDayHour"), 0, 0));
                    if (endDate.getTime() > currentViewEndTime.getTime()) {
                        endDate = currentViewEndTime
                    }
                    return endDate
                }
            }, {
                key: "_adjustDurationByDaylightDiff",
                value: function(duration, startDate, endDate) {
                    var daylightDiff = _utils2.default.getDaylightOffset(startDate, endDate);
                    return this._needAdjustDuration(daylightDiff) ? this._calculateDurationByDaylightDiff(duration, daylightDiff) : duration
                }
            }, {
                key: "_needAdjustDuration",
                value: function(diff) {
                    return 0 !== diff
                }
            }, {
                key: "_calculateDurationByDaylightDiff",
                value: function(duration, diff) {
                    return duration + diff * toMs("minute")
                }
            }, {
                key: "_getAppointmentDurationInMs",
                value: function(startDate, endDate, allDay) {
                    return this.instance.fire("getAppointmentDurationInMs", {
                        startDate: startDate,
                        endDate: endDate,
                        allDay: allDay
                    })
                }
            }, {
                key: "_markAppointmentAsVirtual",
                value: function(coordinates, isAllDay) {
                    var countFullWidthAppointmentInCell = this._getMaxAppointmentCountPerCellByType(isAllDay);
                    if (coordinates.count - countFullWidthAppointmentInCell > 0) {
                        coordinates.virtual = {
                            top: coordinates.top,
                            left: coordinates.left,
                            index: "tail" === coordinates.appointmentReduced ? coordinates.groupIndex + "-" + coordinates.rowIndex + "-" + coordinates.cellIndex : coordinates.groupIndex + "-" + coordinates.rowIndex + "-" + coordinates.cellIndex + "-tail",
                            isAllDay: isAllDay
                        }
                    }
                }
            }, {
                key: "_getMaxAppointmentCountPerCellByType",
                value: function(isAllDay) {
                    var appointmentCountPerCell = this._getMaxAppointmentCountPerCell();
                    if (_type2.default.isObject(appointmentCountPerCell)) {
                        return isAllDay ? this._getMaxAppointmentCountPerCell().allDay : this._getMaxAppointmentCountPerCell().simple
                    } else {
                        return appointmentCountPerCell
                    }
                }
            }, {
                key: "getDropDownAppointmentWidth",
                value: function(intervalCount, isAllDay) {
                    return this.getPositioningStrategy().getDropDownAppointmentWidth(intervalCount, isAllDay)
                }
            }, {
                key: "getDropDownAppointmentHeight",
                value: function() {
                    return this.getPositioningStrategy().getDropDownAppointmentHeight()
                }
            }, {
                key: "getDropDownButtonAdaptiveSize",
                value: function() {
                    return DROP_DOWN_BUTTON_ADAPTIVE_SIZE
                }
            }, {
                key: "getDefaultCellWidth",
                value: function() {
                    return this._defaultWidth
                }
            }, {
                key: "getDefaultCellHeight",
                value: function() {
                    return this._defaultHeight
                }
            }, {
                key: "getDefaultAllDayCellHeight",
                value: function() {
                    return this._allDayHeight
                }
            }, {
                key: "getCollectorTopOffset",
                value: function(allDay) {
                    return this.getPositioningStrategy().getCollectorTopOffset(allDay)
                }
            }, {
                key: "getCollectorLeftOffset",
                value: function() {
                    return this.getPositioningStrategy().getCollectorLeftOffset()
                }
            }, {
                key: "getAppointmentDataCalculator",
                value: function() {}
            }, {
                key: "_customizeCoordinates",
                value: function(coordinates, height, appointmentCountPerCell, topOffset, isAllDay) {
                    var index = coordinates.index;
                    var appointmentHeight = height / appointmentCountPerCell;
                    var appointmentTop = coordinates.top + index * appointmentHeight;
                    var top = appointmentTop + topOffset;
                    var width = coordinates.width;
                    var left = coordinates.left;
                    if (coordinates.isCompact) {
                        this._isAdaptive() && this._correctCollectorCoordinatesInAdaptive(coordinates, isAllDay);
                        this._markAppointmentAsVirtual(coordinates, isAllDay)
                    }
                    return {
                        height: appointmentHeight,
                        width: width,
                        top: top,
                        left: left,
                        empty: this._isAppointmentEmpty(height, width)
                    }
                }
            }, {
                key: "_isAppointmentEmpty",
                value: function(height, width) {
                    return height < this._getAppointmentMinHeight() || width < this._getAppointmentMinWidth()
                }
            }, {
                key: "_calculateGeometryConfig",
                value: function(coordinates) {
                    var overlappingMode = this.instance.fire("getMaxAppointmentsPerCell");
                    var offsets = this._getOffsets();
                    var appointmentDefaultOffset = this._getAppointmentDefaultOffset();
                    var appointmentCountPerCell = this._getAppointmentCount(overlappingMode, coordinates);
                    var ratio = this._getDefaultRatio(coordinates, appointmentCountPerCell);
                    var maxHeight = this._getMaxHeight();
                    if (!(0, _type.isNumeric)(appointmentCountPerCell)) {
                        appointmentCountPerCell = coordinates.count;
                        ratio = (maxHeight - offsets.unlimited) / maxHeight
                    }
                    var topOffset = (1 - ratio) * maxHeight;
                    if ("auto" === overlappingMode || (0, _type.isNumeric)(overlappingMode)) {
                        ratio = 1;
                        maxHeight -= appointmentDefaultOffset;
                        topOffset = appointmentDefaultOffset
                    }
                    return {
                        height: ratio * maxHeight,
                        appointmentCountPerCell: appointmentCountPerCell,
                        offset: topOffset
                    }
                }
            }, {
                key: "_getAppointmentCount",
                value: function() {}
            }, {
                key: "_getDefaultRatio",
                value: function() {}
            }, {
                key: "_getOffsets",
                value: function() {}
            }, {
                key: "_getMaxHeight",
                value: function() {}
            }, {
                key: "_needVerifyItemSize",
                value: function() {
                    return false
                }
            }, {
                key: "needSeparateAppointment",
                value: function(allDay) {
                    return this.instance.fire("isGroupedByDate") && allDay
                }
            }, {
                key: "_getMaxAppointmentCountPerCell",
                value: function() {
                    if (!this._maxAppointmentCountPerCell) {
                        var overlappingMode = this.instance.fire("getMaxAppointmentsPerCell");
                        var appointmentCountPerCell;
                        if ((0, _type.isNumeric)(overlappingMode)) {
                            appointmentCountPerCell = overlappingMode
                        }
                        if ("auto" === overlappingMode) {
                            appointmentCountPerCell = this._getDynamicAppointmentCountPerCell()
                        }
                        if ("unlimited" === overlappingMode) {
                            appointmentCountPerCell = void 0
                        }
                        this._maxAppointmentCountPerCell = appointmentCountPerCell
                    }
                    return this._maxAppointmentCountPerCell
                }
            }, {
                key: "_getDynamicAppointmentCountPerCell",
                value: function() {
                    return this.getPositioningStrategy().getDynamicAppointmentCountPerCell()
                }
            }, {
                key: "hasAllDayAppointments",
                value: function() {
                    return false
                }
            }, {
                key: "_isCompactTheme",
                value: function() {
                    return "compact" === (_themes2.default.current() || "").split(".").pop()
                }
            }, {
                key: "_getAppointmentDefaultOffset",
                value: function() {
                    return this.getPositioningStrategy().getAppointmentDefaultOffset()
                }
            }, {
                key: "_getAppointmentDefaultHeight",
                value: function() {
                    return this._getAppointmentHeightByTheme()
                }
            }, {
                key: "_getAppointmentMinHeight",
                value: function() {
                    return this._getAppointmentDefaultHeight()
                }
            }, {
                key: "_getAppointmentHeightByTheme",
                value: function() {
                    return this._isCompactTheme() ? COMPACT_THEME_APPOINTMENT_DEFAULT_HEIGHT : APPOINTMENT_DEFAULT_HEIGHT
                }
            }, {
                key: "_getAppointmentDefaultWidth",
                value: function() {
                    return this.getPositioningStrategy()._getAppointmentDefaultWidth()
                }
            }, {
                key: "_getAppointmentMinWidth",
                value: function() {
                    return this._getAppointmentDefaultWidth()
                }
            }, {
                key: "_needVerticalGroupBounds",
                value: function() {
                    return false
                }
            }, {
                key: "_needHorizontalGroupBounds",
                value: function() {
                    return false
                }
            }]);
            return BaseRenderingStrategy
        }();
        module.exports = BaseRenderingStrategy
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.dialog.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DIALOG_CONTENT = "dx-filemanager-dialog";
        var FILE_MANAGER_DIALOG_POPUP = "dx-filemanager-dialog-popup";
        var FileManagerDialogBase = function(_Widget) {
            _inherits(FileManagerDialogBase, _Widget);
            var _super = _createSuper(FileManagerDialogBase);

            function FileManagerDialogBase() {
                _classCallCheck(this, FileManagerDialogBase);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerDialogBase, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(FileManagerDialogBase.prototype), "_initMarkup", this).call(this);
                    this._createOnClosedAction();
                    var options = this._getDialogOptions();
                    var $popup = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_DIALOG_POPUP).appendTo(this.$element());
                    if (options.popupCssClass) {
                        $popup.addClass(options.popupCssClass)
                    }
                    this._popup = this._createComponent($popup, _popup2.default, {
                        showTitle: true,
                        title: options.title,
                        visible: false,
                        closeOnOutsideClick: true,
                        contentTemplate: this._createContentTemplate.bind(this),
                        toolbarItems: [{
                            widget: "dxButton",
                            toolbar: "bottom",
                            location: "after",
                            options: {
                                text: options.buttonText,
                                onClick: this._applyDialogChanges.bind(this)
                            }
                        }, {
                            widget: "dxButton",
                            toolbar: "bottom",
                            location: "after",
                            options: {
                                text: _message2.default.format("dxFileManager-dialogButtonCancel"),
                                onClick: this._closeDialog.bind(this)
                            }
                        }],
                        onInitialized: function(_ref) {
                            var component = _ref.component;
                            component.registerKeyHandler("enter", _this._applyDialogChanges.bind(_this))
                        },
                        onHidden: this._onPopupHidden.bind(this),
                        onShown: this._onPopupShown.bind(this)
                    })
                }
            }, {
                key: "show",
                value: function() {
                    this._dialogResult = null;
                    this._popup.show()
                }
            }, {
                key: "_getDialogOptions",
                value: function() {
                    return {
                        title: "Title",
                        buttonText: "ButtonText",
                        contentCssClass: "",
                        popupCssClass: ""
                    }
                }
            }, {
                key: "_createContentTemplate",
                value: function(element) {
                    this._$contentElement = (0, _renderer2.default)("<div>").appendTo(element).addClass(FILE_MANAGER_DIALOG_CONTENT);
                    var cssClass = this._getDialogOptions().contentCssClass;
                    if (cssClass) {
                        this._$contentElement.addClass(cssClass)
                    }
                }
            }, {
                key: "_getDialogResult",
                value: function() {
                    return null
                }
            }, {
                key: "_applyDialogChanges",
                value: function() {
                    var result = this._getDialogResult();
                    if (result) {
                        this._dialogResult = result;
                        this._popup.hide()
                    }
                }
            }, {
                key: "_closeDialog",
                value: function() {
                    this._popup.hide()
                }
            }, {
                key: "_onPopupHidden",
                value: function() {
                    this._onClosedAction({
                        dialogResult: this._dialogResult
                    })
                }
            }, {
                key: "_onPopupShown",
                value: function() {}
            }, {
                key: "_createOnClosedAction",
                value: function() {
                    this._onClosedAction = this._createActionByOption("onClosed")
                }
            }, {
                key: "_setTitle",
                value: function(newTitle) {
                    this._popup.option("title", newTitle)
                }
            }, {
                key: "_setButtonText",
                value: function(newText) {
                    this._popup.option("toolbarItems[0].options.text", newText)
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerDialogBase.prototype), "_getDefaultOptions", this).call(this), {
                        onClosed: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "onClosed":
                            this._createOnPathChangedAction();
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerDialogBase.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return FileManagerDialogBase
        }(_ui2.default);
        module.exports = FileManagerDialogBase
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.bar.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DiagramBar = function() {
            function DiagramBar(owner) {
                _classCallCheck(this, DiagramBar);
                var _getDiagram = (0, _diagram.getDiagram)(),
                    EventDispatcher = _getDiagram.EventDispatcher;
                this.onChanged = new EventDispatcher;
                this._owner = owner
            }
            _createClass(DiagramBar, [{
                key: "raiseBarCommandExecuted",
                value: function(key, parameter) {
                    this.onChanged.raise("notifyBarCommandExecuted", parseInt(key), parameter)
                }
            }, {
                key: "getCommandKeys",
                value: function() {
                    throw "Not Implemented"
                }
            }, {
                key: "setItemValue",
                value: function(key, value) {}
            }, {
                key: "setItemEnabled",
                value: function(key, enabled) {}
            }, {
                key: "setItemVisible",
                value: function(key, enabled) {}
            }, {
                key: "setEnabled",
                value: function(enabled) {}
            }, {
                key: "setItemSubItems",
                value: function(key, items) {}
            }, {
                key: "isVisible",
                value: function() {
                    return true
                }
            }, {
                key: "_getKeys",
                value: function(items) {
                    var _this = this;
                    var keys = items.reduce(function(commands, item) {
                        if (void 0 !== item.command) {
                            commands.push(item.command)
                        }
                        if (item.items) {
                            commands = commands.concat(_this._getKeys(item.items))
                        }
                        return commands
                    }, []);
                    return keys
                }
            }]);
            return DiagramBar
        }();
        module.exports = DiagramBar
    }, , , , , , , , , , , , , ,
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/renderer_base.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ./element_data */ 41);
        var domAdapter = __webpack_require__( /*! ./dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ./utils/window */ 7);
        var window = windowUtils.getWindow();
        var typeUtils = __webpack_require__( /*! ./utils/type */ 1);
        var styleUtils = __webpack_require__( /*! ./utils/style */ 93);
        var sizeUtils = __webpack_require__( /*! ./utils/size */ 180);
        var htmlParser = __webpack_require__( /*! ./utils/html_parser */ 270);
        var renderer;
        var initRender = function(selector, context) {
            if (!selector) {
                this.length = 0;
                return this
            }
            if ("string" === typeof selector) {
                if ("body" === selector) {
                    this[0] = context ? context.body : domAdapter.getBody();
                    this.length = 1;
                    return this
                }
                context = context || domAdapter.getDocument();
                if ("<" === selector[0]) {
                    this[0] = domAdapter.createElement(selector.slice(1, -1), context);
                    this.length = 1;
                    return this
                } [].push.apply(this, domAdapter.querySelectorAll(context, selector));
                return this
            } else {
                if (domAdapter.isNode(selector) || typeUtils.isWindow(selector)) {
                    this[0] = selector;
                    this.length = 1;
                    return this
                } else {
                    if (Array.isArray(selector)) {
                        [].push.apply(this, selector);
                        return this
                    }
                }
            }
            return renderer(selector.toArray ? selector.toArray() : [selector])
        };
        renderer = function(selector, context) {
            return new initRender(selector, context)
        };
        renderer.fn = {
            dxRenderer: true
        };
        initRender.prototype = renderer.fn;
        var repeatMethod = function(methodName, args) {
            for (var i = 0; i < this.length; i++) {
                var item = renderer(this[i]);
                item[methodName].apply(item, args)
            }
            return this
        };
        var setAttributeValue = function(element, attrName, value) {
            if (void 0 !== value && null !== value) {
                domAdapter.setAttribute(element, attrName, value)
            } else {
                domAdapter.removeAttribute(element, attrName)
            }
        };
        initRender.prototype.show = function() {
            return this.toggle(true)
        };
        initRender.prototype.hide = function() {
            return this.toggle(false)
        };
        initRender.prototype.toggle = function(value) {
            if (this[0]) {
                this.toggleClass("dx-state-invisible", !value)
            }
            return this
        };
        initRender.prototype.attr = function(attrName, value) {
            if (this.length > 1 && arguments.length > 1) {
                return repeatMethod.call(this, "attr", arguments)
            }
            if (!this[0]) {
                if (typeUtils.isObject(attrName) || void 0 !== value) {
                    return this
                } else {
                    return
                }
            }
            if (!this[0].getAttribute) {
                return this.prop(attrName, value)
            }
            if ("string" === typeof attrName && 1 === arguments.length) {
                var result = this[0].getAttribute(attrName);
                return null == result ? void 0 : result
            } else {
                if (typeUtils.isPlainObject(attrName)) {
                    for (var key in attrName) {
                        this.attr(key, attrName[key])
                    }
                } else {
                    setAttributeValue(this[0], attrName, value)
                }
            }
            return this
        };
        initRender.prototype.removeAttr = function(attrName) {
            this[0] && domAdapter.removeAttribute(this[0], attrName);
            return this
        };
        initRender.prototype.prop = function(propName, value) {
            if (!this[0]) {
                return this
            }
            if ("string" === typeof propName && 1 === arguments.length) {
                return this[0][propName]
            } else {
                if (typeUtils.isPlainObject(propName)) {
                    for (var key in propName) {
                        this.prop(key, propName[key])
                    }
                } else {
                    domAdapter.setProperty(this[0], propName, value)
                }
            }
            return this
        };
        initRender.prototype.addClass = function(className) {
            return this.toggleClass(className, true)
        };
        initRender.prototype.removeClass = function(className) {
            return this.toggleClass(className, false)
        };
        initRender.prototype.hasClass = function(className) {
            if (!this[0] || void 0 === this[0].className) {
                return false
            }
            var classNames = className.split(" ");
            for (var i = 0; i < classNames.length; i++) {
                if (this[0].classList) {
                    if (this[0].classList.contains(classNames[i])) {
                        return true
                    }
                } else {
                    var _className = typeUtils.isString(this[0].className) ? this[0].className : domAdapter.getAttribute(this[0], "class");
                    if ((_className || "").split(" ").indexOf(classNames[i]) >= 0) {
                        return true
                    }
                }
            }
            return false
        };
        initRender.prototype.toggleClass = function(className, value) {
            if (this.length > 1) {
                return repeatMethod.call(this, "toggleClass", arguments)
            }
            if (!this[0] || !className) {
                return this
            }
            value = void 0 === value ? !this.hasClass(className) : value;
            var classNames = className.split(" ");
            for (var i = 0; i < classNames.length; i++) {
                domAdapter.setClass(this[0], classNames[i], value)
            }
            return this
        };
        ["width", "height", "outerWidth", "outerHeight", "innerWidth", "innerHeight"].forEach(function(methodName) {
            var partialName = methodName.toLowerCase().indexOf("width") >= 0 ? "Width" : "Height";
            var propName = partialName.toLowerCase();
            var isOuter = 0 === methodName.indexOf("outer");
            var isInner = 0 === methodName.indexOf("inner");
            initRender.prototype[methodName] = function(value) {
                if (this.length > 1 && arguments.length > 0) {
                    return repeatMethod.call(this, methodName, arguments)
                }
                var element = this[0];
                if (!element) {
                    return
                }
                if (typeUtils.isWindow(element)) {
                    return isOuter ? element["inner" + partialName] : domAdapter.getDocumentElement()["client" + partialName]
                }
                if (domAdapter.isDocument(element)) {
                    var documentElement = domAdapter.getDocumentElement();
                    var body = domAdapter.getBody();
                    return Math.max(body["scroll" + partialName], body["offset" + partialName], documentElement["scroll" + partialName], documentElement["offset" + partialName], documentElement["client" + partialName])
                }
                if (0 === arguments.length || "boolean" === typeof value) {
                    var include = {
                        paddings: isInner || isOuter,
                        borders: isOuter,
                        margins: value
                    };
                    return sizeUtils.getSize(element, propName, include)
                }
                if (void 0 === value || null === value) {
                    return this
                }
                if (typeUtils.isNumeric(value)) {
                    var elementStyles = window.getComputedStyle(element);
                    var sizeAdjustment = sizeUtils.getElementBoxParams(propName, elementStyles);
                    var isBorderBox = "border-box" === elementStyles.boxSizing;
                    value = Number(value);
                    if (isOuter) {
                        value -= isBorderBox ? 0 : sizeAdjustment.border + sizeAdjustment.padding
                    } else {
                        if (isInner) {
                            value += isBorderBox ? sizeAdjustment.border : -sizeAdjustment.padding
                        } else {
                            if (isBorderBox) {
                                value += sizeAdjustment.border + sizeAdjustment.padding
                            }
                        }
                    }
                }
                value += typeUtils.isNumeric(value) ? "px" : "";
                domAdapter.setStyle(element, propName, value);
                return this
            }
        });
        initRender.prototype.html = function(value) {
            if (!arguments.length) {
                return this[0].innerHTML
            }
            this.empty();
            if ("string" === typeof value && !htmlParser.isTablePart(value) || "number" === typeof value) {
                this[0].innerHTML = value;
                return this
            }
            return this.append(htmlParser.parseHTML(value))
        };
        var appendElements = function(element, nextSibling) {
            if (!this[0] || !element) {
                return
            }
            if ("string" === typeof element) {
                element = htmlParser.parseHTML(element)
            } else {
                if (element.nodeType) {
                    element = [element]
                } else {
                    if (typeUtils.isNumeric(element)) {
                        element = [domAdapter.createTextNode(element)]
                    }
                }
            }
            for (var i = 0; i < element.length; i++) {
                var item = element[i];
                var container = this[0];
                var wrapTR = "TABLE" === container.tagName && "TR" === item.tagName;
                if (wrapTR && container.tBodies && container.tBodies.length) {
                    container = container.tBodies[0]
                }
                domAdapter.insertElement(container, item.nodeType ? item : item[0], nextSibling)
            }
        };
        var setCss = function(name, value) {
            if (!this[0] || !this[0].style) {
                return
            }
            if (null === value || "number" === typeof value && isNaN(value)) {
                return
            }
            name = styleUtils.styleProp(name);
            for (var i = 0; i < this.length; i++) {
                this[i].style[name] = styleUtils.normalizeStyleProp(name, value)
            }
        };
        initRender.prototype.css = function(name, value) {
            if (typeUtils.isString(name)) {
                if (2 === arguments.length) {
                    setCss.call(this, name, value)
                } else {
                    if (!this[0]) {
                        return
                    }
                    name = styleUtils.styleProp(name);
                    var result = window.getComputedStyle(this[0])[name] || this[0].style[name];
                    return typeUtils.isNumeric(result) ? result.toString() : result
                }
            } else {
                if (typeUtils.isPlainObject(name)) {
                    for (var key in name) {
                        setCss.call(this, key, name[key])
                    }
                }
            }
            return this
        };
        initRender.prototype.prepend = function(element) {
            if (arguments.length > 1) {
                for (var i = 0; i < arguments.length; i++) {
                    this.prepend(arguments[i])
                }
                return this
            }
            appendElements.apply(this, [element, this[0].firstChild]);
            return this
        };
        initRender.prototype.append = function(element) {
            if (arguments.length > 1) {
                for (var i = 0; i < arguments.length; i++) {
                    this.append(arguments[i])
                }
                return this
            }
            appendElements.apply(this, [element]);
            return this
        };
        initRender.prototype.prependTo = function(element) {
            if (this.length > 1) {
                for (var i = this.length - 1; i >= 0; i--) {
                    renderer(this[i]).prependTo(element)
                }
                return this
            }
            element = renderer(element);
            if (element[0]) {
                domAdapter.insertElement(element[0], this[0], element[0].firstChild)
            }
            return this
        };
        initRender.prototype.appendTo = function(element) {
            if (this.length > 1) {
                return repeatMethod.call(this, "appendTo", arguments)
            }
            domAdapter.insertElement(renderer(element)[0], this[0]);
            return this
        };
        initRender.prototype.insertBefore = function(element) {
            if (element && element[0]) {
                domAdapter.insertElement(element[0].parentNode, this[0], element[0])
            }
            return this
        };
        initRender.prototype.insertAfter = function(element) {
            if (element && element[0]) {
                domAdapter.insertElement(element[0].parentNode, this[0], element[0].nextSibling)
            }
            return this
        };
        initRender.prototype.before = function(element) {
            if (this[0]) {
                domAdapter.insertElement(this[0].parentNode, element[0], this[0])
            }
            return this
        };
        initRender.prototype.after = function(element) {
            if (this[0]) {
                domAdapter.insertElement(this[0].parentNode, element[0], this[0].nextSibling)
            }
            return this
        };
        initRender.prototype.wrap = function(wrapper) {
            if (this[0]) {
                var wrap = renderer(wrapper);
                wrap.insertBefore(this);
                wrap.append(this)
            }
            return this
        };
        initRender.prototype.wrapInner = function(wrapper) {
            var contents = this.contents();
            if (contents.length) {
                contents.wrap(wrapper)
            } else {
                this.append(wrapper)
            }
            return this
        };
        initRender.prototype.replaceWith = function(element) {
            if (!(element && element[0])) {
                return
            }
            if (element.is(this)) {
                return this
            }
            element.insertBefore(this);
            this.remove();
            return element
        };
        initRender.prototype.remove = function() {
            if (this.length > 1) {
                return repeatMethod.call(this, "remove", arguments)
            }
            dataUtils.cleanDataRecursive(this[0], true);
            domAdapter.removeElement(this[0]);
            return this
        };
        initRender.prototype.detach = function() {
            if (this.length > 1) {
                return repeatMethod.call(this, "detach", arguments)
            }
            domAdapter.removeElement(this[0]);
            return this
        };
        initRender.prototype.empty = function() {
            if (this.length > 1) {
                return repeatMethod.call(this, "empty", arguments)
            }
            dataUtils.cleanDataRecursive(this[0]);
            domAdapter.setText(this[0], "");
            return this
        };
        initRender.prototype.clone = function() {
            var result = [];
            for (var i = 0; i < this.length; i++) {
                result.push(this[i].cloneNode(true))
            }
            return renderer(result)
        };
        initRender.prototype.text = function(value) {
            if (!arguments.length) {
                var result = "";
                for (var i = 0; i < this.length; i++) {
                    result += this[i] && this[i].textContent || ""
                }
                return result
            }
            var text = typeUtils.isFunction(value) ? value() : value;
            dataUtils.cleanDataRecursive(this[0], false);
            domAdapter.setText(this[0], typeUtils.isDefined(text) ? text : "");
            return this
        };
        initRender.prototype.val = function(value) {
            if (1 === arguments.length) {
                return this.prop("value", typeUtils.isDefined(value) ? value : "")
            }
            return this.prop("value")
        };
        initRender.prototype.contents = function() {
            if (!this[0]) {
                return renderer()
            }
            var result = [];
            result.push.apply(result, this[0].childNodes);
            return renderer(result)
        };
        initRender.prototype.find = function(selector) {
            var result = renderer();
            if (!selector) {
                return result
            }
            var nodes = [];
            var i;
            if ("string" === typeof selector) {
                selector = selector.trim();
                for (i = 0; i < this.length; i++) {
                    var element = this[i];
                    if (domAdapter.isElementNode(element)) {
                        var elementId = element.getAttribute("id");
                        var queryId = elementId || "dx-query-children";
                        if (!elementId) {
                            setAttributeValue(element, "id", queryId)
                        }
                        queryId = "[id='" + queryId + "'] ";
                        var querySelector = queryId + selector.replace(/([^\\])(,)/g, "$1, " + queryId);
                        nodes.push.apply(nodes, domAdapter.querySelectorAll(element, querySelector));
                        setAttributeValue(element, "id", elementId)
                    } else {
                        if (domAdapter.isDocument(element)) {
                            nodes.push.apply(nodes, domAdapter.querySelectorAll(element, selector))
                        }
                    }
                }
            } else {
                for (i = 0; i < this.length; i++) {
                    selector = domAdapter.isNode(selector) ? selector : selector[0];
                    if (this[i] !== selector && this[i].contains(selector)) {
                        nodes.push(selector)
                    }
                }
            }
            return result.add(nodes)
        };
        var isVisible = function(_, element) {
            if (!element.nodeType) {
                return true
            }
            return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length)
        };
        initRender.prototype.filter = function(selector) {
            if (!selector) {
                return renderer()
            }
            if (":visible" === selector) {
                return this.filter(isVisible)
            } else {
                if (":hidden" === selector) {
                    return this.filter(function(_, element) {
                        return !isVisible(_, element)
                    })
                }
            }
            var result = [];
            for (var i = 0; i < this.length; i++) {
                var item = this[i];
                if (domAdapter.isElementNode(item) && "string" === typeUtils.type(selector)) {
                    domAdapter.elementMatches(item, selector) && result.push(item)
                } else {
                    if (domAdapter.isNode(selector) || typeUtils.isWindow(selector)) {
                        selector === item && result.push(item)
                    } else {
                        if (typeUtils.isFunction(selector)) {
                            selector.call(item, i, item) && result.push(item)
                        } else {
                            for (var j = 0; j < selector.length; j++) {
                                selector[j] === item && result.push(item)
                            }
                        }
                    }
                }
            }
            return renderer(result)
        };
        initRender.prototype.not = function(selector) {
            var result = [];
            var nodes = this.filter(selector).toArray();
            for (var i = 0; i < this.length; i++) {
                if (nodes.indexOf(this[i]) === -1) {
                    result.push(this[i])
                }
            }
            return renderer(result)
        };
        initRender.prototype.is = function(selector) {
            return !!this.filter(selector).length
        };
        initRender.prototype.children = function(selector) {
            var result = [];
            for (var i = 0; i < this.length; i++) {
                var nodes = this[i] ? this[i].childNodes : [];
                for (var j = 0; j < nodes.length; j++) {
                    if (domAdapter.isElementNode(nodes[j])) {
                        result.push(nodes[j])
                    }
                }
            }
            result = renderer(result);
            return selector ? result.filter(selector) : result
        };
        initRender.prototype.siblings = function() {
            var element = this[0];
            if (!element || !element.parentNode) {
                return renderer()
            }
            var result = [];
            var parentChildNodes = element.parentNode.childNodes || [];
            for (var i = 0; i < parentChildNodes.length; i++) {
                var node = parentChildNodes[i];
                if (domAdapter.isElementNode(node) && node !== element) {
                    result.push(node)
                }
            }
            return renderer(result)
        };
        initRender.prototype.each = function(callback) {
            for (var i = 0; i < this.length; i++) {
                if (false === callback.call(this[i], i, this[i])) {
                    break
                }
            }
        };
        initRender.prototype.index = function(element) {
            if (!element) {
                return this.parent().children().index(this)
            }
            element = renderer(element);
            return this.toArray().indexOf(element[0])
        };
        initRender.prototype.get = function(index) {
            return this[index < 0 ? this.length + index : index]
        };
        initRender.prototype.eq = function(index) {
            index = index < 0 ? this.length + index : index;
            return renderer(this[index])
        };
        initRender.prototype.first = function() {
            return this.eq(0)
        };
        initRender.prototype.last = function() {
            return this.eq(-1)
        };
        initRender.prototype.parent = function(selector) {
            if (!this[0]) {
                return renderer()
            }
            var result = renderer(this[0].parentNode);
            return !selector || result.is(selector) ? result : renderer()
        };
        initRender.prototype.parents = function(selector) {
            var result = [];
            var parent = this.parent();
            while (parent && parent[0] && !domAdapter.isDocument(parent[0])) {
                if (domAdapter.isElementNode(parent[0])) {
                    if (!selector || selector && parent.is(selector)) {
                        result.push(parent.get(0))
                    }
                }
                parent = parent.parent()
            }
            return renderer(result)
        };
        initRender.prototype.closest = function(selector) {
            if (this.is(selector)) {
                return this
            }
            var parent = this.parent();
            while (parent && parent.length) {
                if (parent.is(selector)) {
                    return parent
                }
                parent = parent.parent()
            }
            return renderer()
        };
        initRender.prototype.next = function(selector) {
            if (!this[0]) {
                return renderer()
            }
            var next = renderer(this[0].nextSibling);
            if (!arguments.length) {
                return next
            }
            while (next && next.length) {
                if (next.is(selector)) {
                    return next
                }
                next = next.next()
            }
            return renderer()
        };
        initRender.prototype.prev = function() {
            if (!this[0]) {
                return renderer()
            }
            return renderer(this[0].previousSibling)
        };
        initRender.prototype.add = function(selector) {
            var targets = renderer(selector);
            var result = this.toArray();
            for (var i = 0; i < targets.length; i++) {
                var target = targets[i];
                if (result.indexOf(target) === -1) {
                    result.push(target)
                }
            }
            return renderer(result)
        };
        var emptyArray = [];
        initRender.prototype.splice = function() {
            return renderer(emptyArray.splice.apply(this, arguments))
        };
        initRender.prototype.slice = function() {
            return renderer(emptyArray.slice.apply(this, arguments))
        };
        initRender.prototype.toArray = function() {
            return emptyArray.slice.call(this)
        };
        var getWindowByElement = function(element) {
            return typeUtils.isWindow(element) ? element : element.defaultView
        };
        initRender.prototype.offset = function() {
            if (!this[0]) {
                return
            }
            if (!this[0].getClientRects().length) {
                return {
                    top: 0,
                    left: 0
                }
            }
            var rect = this[0].getBoundingClientRect();
            var win = getWindowByElement(this[0].ownerDocument);
            var docElem = this[0].ownerDocument.documentElement;
            return {
                top: rect.top + win.pageYOffset - docElem.clientTop,
                left: rect.left + win.pageXOffset - docElem.clientLeft
            }
        };
        initRender.prototype.offsetParent = function() {
            if (!this[0]) {
                return renderer()
            }
            var offsetParent = renderer(this[0].offsetParent);
            while (offsetParent[0] && "static" === offsetParent.css("position")) {
                offsetParent = renderer(offsetParent[0].offsetParent)
            }
            offsetParent = offsetParent[0] ? offsetParent : renderer(domAdapter.getDocumentElement());
            return offsetParent
        };
        initRender.prototype.position = function() {
            if (!this[0]) {
                return
            }
            var offset;
            var marginTop = parseFloat(this.css("marginTop"));
            var marginLeft = parseFloat(this.css("marginLeft"));
            if ("fixed" === this.css("position")) {
                offset = this[0].getBoundingClientRect();
                return {
                    top: offset.top - marginTop,
                    left: offset.left - marginLeft
                }
            }
            offset = this.offset();
            var offsetParent = this.offsetParent();
            var parentOffset = {
                top: 0,
                left: 0
            };
            if ("HTML" !== offsetParent[0].nodeName) {
                parentOffset = offsetParent.offset()
            }
            parentOffset = {
                top: parentOffset.top + parseFloat(offsetParent.css("borderTopWidth")),
                left: parentOffset.left + parseFloat(offsetParent.css("borderLeftWidth"))
            };
            return {
                top: offset.top - parentOffset.top - marginTop,
                left: offset.left - parentOffset.left - marginLeft
            }
        };
        [{
            name: "scrollLeft",
            offsetProp: "pageXOffset",
            scrollWindow: function(win, value) {
                win.scrollTo(value, win.pageYOffset)
            }
        }, {
            name: "scrollTop",
            offsetProp: "pageYOffset",
            scrollWindow: function(win, value) {
                win.scrollTo(win.pageXOffset, value)
            }
        }].forEach(function(directionStrategy) {
            var propName = directionStrategy.name;
            initRender.prototype[propName] = function(value) {
                if (!this[0]) {
                    return
                }
                var window = getWindowByElement(this[0]);
                if (void 0 === value) {
                    return window ? window[directionStrategy.offsetProp] : this[0][propName]
                }
                if (window) {
                    directionStrategy.scrollWindow(window, value)
                } else {
                    this[0][propName] = value
                }
                return this
            }
        });
        initRender.prototype.data = function(key, value) {
            if (!this[0]) {
                return
            }
            if (arguments.length < 2) {
                return dataUtils.data.call(renderer, this[0], key)
            }
            dataUtils.data.call(renderer, this[0], key, value);
            return this
        };
        initRender.prototype.removeData = function(key) {
            this[0] && dataUtils.removeData(this[0], key);
            return this
        };
        var rendererWrapper = function() {
            return renderer.apply(this, arguments)
        };
        Object.defineProperty(rendererWrapper, "fn", {
            enumerable: true,
            configurable: true,
            get: function() {
                return renderer.fn
            },
            set: function(value) {
                renderer.fn = value
            }
        });
        module.exports = {
            set: function(strategy) {
                renderer = strategy
            },
            get: function() {
                return rendererWrapper
            }
        }
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/events/core/hook_touch_props.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var touchPropsToHook = ["pageX", "pageY", "screenX", "screenY", "clientX", "clientY"];
        var touchPropHook = function(name, event) {
            if (event[name] && !event.touches || !event.touches) {
                return event[name]
            }
            var touches = event.touches.length ? event.touches : event.changedTouches;
            if (!touches.length) {
                return
            }
            return touches[0][name]
        };
        module.exports = function(callback) {
            touchPropsToHook.forEach(function(name) {
                callback(name, function(event) {
                    return touchPropHook(name, event)
                })
            }, this)
        }
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/core/utils/html_parser.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var merge = __webpack_require__( /*! ./array */ 14).merge;
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var isTagName = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i;
        var tagWrappers = {
            "default": {
                tagsCount: 0,
                startTags: "",
                endTags: ""
            },
            thead: {
                tagsCount: 1,
                startTags: "<table>",
                endTags: "</table>"
            },
            td: {
                tagsCount: 3,
                startTags: "<table><tbody><tr>",
                endTags: "</tr></tbody></table>"
            },
            col: {
                tagsCount: 2,
                startTags: "<table><colgroup>",
                endTags: "</colgroup></table>"
            },
            tr: {
                tagsCount: 2,
                startTags: "<table><tbody>",
                endTags: "</tbody></table>"
            }
        };
        tagWrappers.tbody = tagWrappers.colgroup = tagWrappers.caption = tagWrappers.tfoot = tagWrappers.thead;
        tagWrappers.th = tagWrappers.td;
        var parseHTML = function(html) {
            if ("string" !== typeof html) {
                return null
            }
            var fragment = domAdapter.createDocumentFragment();
            var container = fragment.appendChild(domAdapter.createElement("div"));
            var tags = isTagName.exec(html);
            var firstRootTag = tags && tags[1].toLowerCase();
            var tagWrapper = tagWrappers[firstRootTag] || tagWrappers.default;
            container.innerHTML = tagWrapper.startTags + html + tagWrapper.endTags;
            for (var i = 0; i < tagWrapper.tagsCount; i++) {
                container = container.lastChild
            }
            return merge([], container.childNodes)
        };
        var isTablePart = function(html) {
            var tags = isTagName.exec(html);
            return tags && tags[1] in tagWrappers
        };
        exports.parseHTML = parseHTML;
        exports.isTablePart = isTablePart
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/localization/utils.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.toFixed = void 0;
        var _math = __webpack_require__( /*! ../core/utils/math */ 31);
        var DECIMAL_BASE = 10;

        function roundByAbs(value) {
            var valueSign = (0, _math.sign)(value);
            return valueSign * Math.round(Math.abs(value))
        }

        function adjustValue(value, precision) {
            var precisionMultiplier = Math.pow(DECIMAL_BASE, precision);
            var roundMultiplier = precisionMultiplier * DECIMAL_BASE;
            var intermediateValue = value * roundMultiplier / DECIMAL_BASE;
            return roundByAbs(intermediateValue) / precisionMultiplier
        }

        function toFixed(value, precision) {
            var valuePrecision = precision || 0;
            var adjustedValue = valuePrecision > 0 ? adjustValue.apply(void 0, arguments) : value;
            return adjustedValue.toFixed(valuePrecision)
        }
        exports.toFixed = toFixed
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/localization/open_xml_currency_format.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = function(currencySymbol, accountingFormat) {
            if (!accountingFormat) {
                return
            }
            var encodedCurrencySymbol = currencySymbol;
            if ("string" === typeof currencySymbol) {
                encodedCurrencySymbol = "";
                for (var i = 0; i < currencySymbol.length; i++) {
                    if ("$" !== currencySymbol[i]) {
                        encodedCurrencySymbol += "\\"
                    }
                    encodedCurrencySymbol += currencySymbol[i]
                }
            }
            var encodeSymbols = {
                ".00": "{0}",
                "'": "\\'",
                "\\(": "\\(",
                "\\)": "\\)",
                " ": "\\ ",
                '"': "&quot;",
                "\\\xa4": encodedCurrencySymbol
            };
            var result = accountingFormat.split(";");
            for (var _i = 0; _i < result.length; _i++) {
                for (var symbol in encodeSymbols) {
                    if (Object.prototype.hasOwnProperty.call(encodeSymbols, symbol)) {
                        result[_i] = result[_i].replace(new RegExp(symbol, "g"), encodeSymbols[symbol])
                    }
                }
            }
            return 2 === result.length ? result[0] + "_);" + result[1] : result[0]
        }
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/date.formatter.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function leftPad(text, length) {
            while (text.length < length) {
                text = "0" + text
            }
            return text
        }
        var FORMAT_TYPES = {
            3: "abbreviated",
            4: "wide",
            5: "narrow"
        };
        var LDML_FORMATTERS = {
            y: function(date, count, useUtc) {
                var year = date[useUtc ? "getUTCFullYear" : "getFullYear"]();
                if (2 === count) {
                    year %= 100
                }
                return leftPad(year.toString(), count)
            },
            M: function(date, count, useUtc, dateParts) {
                var month = date[useUtc ? "getUTCMonth" : "getMonth"]();
                var formatType = FORMAT_TYPES[count];
                if (formatType) {
                    return dateParts.getMonthNames(formatType, "format")[month]
                }
                return leftPad((month + 1).toString(), Math.min(count, 2))
            },
            L: function(date, count, useUtc, dateParts) {
                var month = date[useUtc ? "getUTCMonth" : "getMonth"]();
                var formatType = FORMAT_TYPES[count];
                if (formatType) {
                    return dateParts.getMonthNames(formatType, "standalone")[month]
                }
                return leftPad((month + 1).toString(), Math.min(count, 2))
            },
            Q: function(date, count, useUtc, dateParts) {
                var month = date[useUtc ? "getUTCMonth" : "getMonth"]();
                var quarter = Math.floor(month / 3);
                var formatType = FORMAT_TYPES[count];
                if (formatType) {
                    return dateParts.getQuarterNames(formatType)[quarter]
                }
                return leftPad((quarter + 1).toString(), Math.min(count, 2))
            },
            E: function(date, count, useUtc, dateParts) {
                var day = date[useUtc ? "getUTCDay" : "getDay"]();
                var formatType = FORMAT_TYPES[count < 3 ? 3 : count];
                return dateParts.getDayNames(formatType)[day]
            },
            a: function(date, count, useUtc, dateParts) {
                var hours = date[useUtc ? "getUTCHours" : "getHours"]();
                var period = hours < 12 ? 0 : 1;
                var formatType = FORMAT_TYPES[count];
                return dateParts.getPeriodNames(formatType)[period]
            },
            d: function(date, count, useUtc) {
                return leftPad(date[useUtc ? "getUTCDate" : "getDate"]().toString(), Math.min(count, 2))
            },
            H: function(date, count, useUtc) {
                return leftPad(date[useUtc ? "getUTCHours" : "getHours"]().toString(), Math.min(count, 2))
            },
            h: function(date, count, useUtc) {
                var hours = date[useUtc ? "getUTCHours" : "getHours"]();
                return leftPad((hours % 12 || 12).toString(), Math.min(count, 2))
            },
            m: function(date, count, useUtc) {
                return leftPad(date[useUtc ? "getUTCMinutes" : "getMinutes"]().toString(), Math.min(count, 2))
            },
            s: function(date, count, useUtc) {
                return leftPad(date[useUtc ? "getUTCSeconds" : "getSeconds"]().toString(), Math.min(count, 2))
            },
            S: function(date, count, useUtc) {
                return leftPad(date[useUtc ? "getUTCMilliseconds" : "getMilliseconds"]().toString(), 3).substr(0, count)
            },
            x: function(date, count, useUtc) {
                var timezoneOffset = useUtc ? 0 : date.getTimezoneOffset();
                var signPart = timezoneOffset > 0 ? "-" : "+";
                var timezoneOffsetAbs = Math.abs(timezoneOffset);
                var hours = Math.floor(timezoneOffsetAbs / 60);
                var minutes = timezoneOffsetAbs % 60;
                var hoursPart = leftPad(hours.toString(), 2);
                var minutesPart = leftPad(minutes.toString(), 2);
                return signPart + hoursPart + (count >= 3 ? ":" : "") + (count > 1 || minutes ? minutesPart : "")
            },
            X: function(date, count, useUtc) {
                if (useUtc || !date.getTimezoneOffset()) {
                    return "Z"
                }
                return LDML_FORMATTERS.x(date, count, useUtc)
            },
            Z: function(date, count, useUtc) {
                return LDML_FORMATTERS.X(date, count >= 5 ? 3 : 2, useUtc)
            }
        };
        var getFormatter = function(format, dateParts) {
            return function(date) {
                var charIndex;
                var formatter;
                var char;
                var charCount = 0;
                var separator = "'";
                var isEscaping = false;
                var isCurrentCharEqualsNext;
                var result = "";
                if (!date) {
                    return null
                }
                if (!format) {
                    return date
                }
                var useUtc = "Z" === format[format.length - 1] || "'Z'" === format.slice(-3);
                for (charIndex = 0; charIndex < format.length; charIndex++) {
                    char = format[charIndex];
                    formatter = LDML_FORMATTERS[char];
                    isCurrentCharEqualsNext = char === format[charIndex + 1];
                    charCount++;
                    if (!isCurrentCharEqualsNext) {
                        if (formatter && !isEscaping) {
                            result += formatter(date, charCount, useUtc, dateParts)
                        }
                        charCount = 0
                    }
                    if (char === separator && !isCurrentCharEqualsNext) {
                        isEscaping = !isEscaping
                    } else {
                        if (isEscaping || !formatter) {
                            result += char
                        }
                    }
                    if (char === separator && isCurrentCharEqualsNext) {
                        charIndex++
                    }
                }
                return result
            }
        };
        module.exports.getFormatter = getFormatter
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/localization/default_date_names.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
        var DAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        var PERIODS = ["AM", "PM"];
        var QUARTERS = ["Q1", "Q2", "Q3", "Q4"];
        var cutCaptions = function(captions, format) {
            var lengthByFormat = {
                abbreviated: 3,
                "short": 2,
                narrow: 1
            };
            return _iterator2.default.map(captions, function(caption) {
                return caption.substr(0, lengthByFormat[format])
            })
        };
        module.exports = {
            getMonthNames: function(format) {
                return cutCaptions(MONTHS, format)
            },
            getDayNames: function(format) {
                return cutCaptions(DAYS, format)
            },
            getQuarterNames: function(format) {
                return QUARTERS
            },
            getPeriodNames: function(format) {
                return PERIODS
            }
        }
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.fill_helper.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.pattern_fill_helper */ 460);
        var _excel4 = _interopRequireDefault(_excel3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var fillHelper = {
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    result = {
                        patternFill: _excel4.default.tryCreateTag(sourceObj.patternFill)
                    };
                    if (fillHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            tryCreateFillFromSimpleFormat: function() {
                var _ref = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                    backgroundColor = _ref.backgroundColor,
                    fillPatternType = _ref.fillPatternType,
                    fillPatternColor = _ref.fillPatternColor;
                if ((0, _type.isDefined)(backgroundColor) && !((0, _type.isDefined)(fillPatternType) && (0, _type.isDefined)(fillPatternColor))) {
                    return {
                        patternFill: {
                            patternType: "solid",
                            foregroundColor: {
                                rgb: backgroundColor
                            }
                        }
                    }
                } else {
                    if ((0, _type.isDefined)(fillPatternType) && (0, _type.isDefined)(fillPatternColor)) {
                        return {
                            patternFill: {
                                patternType: fillPatternType,
                                foregroundColor: {
                                    rgb: fillPatternColor
                                },
                                backgroundColor: {
                                    rgb: backgroundColor
                                }
                            }
                        }
                    }
                }
            },
            copySimpleFormat: function(source, target) {
                if (void 0 !== source.backgroundColor) {
                    target.backgroundColor = source.backgroundColor
                }
                if (void 0 !== source.fillPatternType) {
                    target.fillPatternType = source.fillPatternType
                }
                if (void 0 !== source.fillPatternColor) {
                    target.fillPatternColor = source.fillPatternColor
                }
            },
            copy: function(source) {
                var result = null;
                if ((0, _type.isDefined)(source)) {
                    result = {};
                    if (void 0 !== source.patternFill) {
                        result.patternFill = _excel4.default.copy(source.patternFill)
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return fillHelper.isEmpty(leftTag) && fillHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && _excel4.default.areEqual(leftTag.patternFill, rightTag.patternFill)
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || _excel4.default.isEmpty(tag.patternFill)
            },
            toXml: function(tag) {
                return _excel2.default.toXml("fill", {}, _excel4.default.toXml(tag.patternFill))
            }
        };
        exports.default = fillHelper
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.color_helper.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var colorHelper = {
            _tryConvertColor: function(source) {
                if ("string" !== typeof source) {
                    return source
                }
                var result;
                if (source.length > 0 && "#" === source[0]) {
                    var colorCode = source.substr(1, source.length);
                    if (6 === colorCode.length) {
                        result = "FF" + colorCode
                    } else {
                        if (8 === colorCode.length) {
                            result = colorCode[6] + colorCode[7] + colorCode.substr(0, 6)
                        } else {
                            result = colorCode
                        }
                    }
                } else {
                    result = source
                }
                return result
            },
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    if ("string" === typeof sourceObj) {
                        result = {
                            rgb: this._tryConvertColor(sourceObj)
                        }
                    } else {
                        result = {
                            rgb: this._tryConvertColor(sourceObj.rgb),
                            theme: sourceObj.theme
                        }
                    }
                    if (colorHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            copy: function(source) {
                var result = null;
                if ((0, _type.isDefined)(source)) {
                    if ("string" === typeof source) {
                        result = source
                    } else {
                        result = {};
                        if (void 0 !== source.rgb) {
                            result.rgb = source.rgb
                        }
                        if (void 0 !== source.theme) {
                            result.theme = source.theme
                        }
                    }
                }
                return result
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.rgb) && !(0, _type.isDefined)(tag.theme)
            },
            areEqual: function(leftTag, rightTag) {
                return colorHelper.isEmpty(leftTag) && colorHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.rgb === rightTag.rgb && leftTag.theme === rightTag.theme
            },
            toXml: function(tagName, tag) {
                return _excel2.default.toXml(tagName, {
                    rgb: tag.rgb,
                    theme: tag.theme
                })
            }
        };
        exports.default = colorHelper
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.font_helper.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.color_helper */ 276);
        var _excel4 = _interopRequireDefault(_excel3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var fontHelper = {
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    result = {
                        size: sourceObj.size,
                        name: sourceObj.name,
                        family: sourceObj.family,
                        scheme: sourceObj.scheme,
                        bold: sourceObj.bold,
                        italic: sourceObj.italic,
                        underline: sourceObj.underline,
                        color: _excel4.default.tryCreateTag(sourceObj.color)
                    };
                    if (fontHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            copy: function(source) {
                var result = null;
                if ((0, _type.isDefined)(source)) {
                    result = {};
                    if (void 0 !== source.size) {
                        result.size = source.size
                    }
                    if (void 0 !== source.name) {
                        result.name = source.name
                    }
                    if (void 0 !== source.family) {
                        result.family = source.family
                    }
                    if (void 0 !== source.scheme) {
                        result.scheme = source.scheme
                    }
                    if (void 0 !== source.bold) {
                        result.bold = source.bold
                    }
                    if (void 0 !== source.italic) {
                        result.italic = source.italic
                    }
                    if (void 0 !== source.underline) {
                        result.underline = source.underline
                    }
                    if (void 0 !== source.color) {
                        result.color = _excel4.default.copy(source.color)
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return fontHelper.isEmpty(leftTag) && fontHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.size === rightTag.size && leftTag.name === rightTag.name && leftTag.family === rightTag.family && leftTag.scheme === rightTag.scheme && (leftTag.bold === rightTag.bold || !leftTag.bold === !rightTag.bold) && (leftTag.italic === rightTag.italic || !leftTag.italic === !rightTag.italic) && leftTag.underline === rightTag.underline && _excel4.default.areEqual(leftTag.color, rightTag.color)
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.size) && !(0, _type.isDefined)(tag.name) && !(0, _type.isDefined)(tag.family) && !(0, _type.isDefined)(tag.scheme) && (!(0, _type.isDefined)(tag.bold) || !tag.bold) && (!(0, _type.isDefined)(tag.italic) || !tag.italic) && !(0, _type.isDefined)(tag.underline) && _excel4.default.isEmpty(tag.color)
            },
            toXml: function(tag) {
                var content = [(0, _type.isDefined)(tag.bold) && tag.bold ? _excel2.default.toXml("b", {}) : "", (0, _type.isDefined)(tag.size) ? _excel2.default.toXml("sz", {
                    val: tag.size
                }) : "", (0, _type.isDefined)(tag.color) ? _excel4.default.toXml("color", tag.color) : "", (0, _type.isDefined)(tag.name) ? _excel2.default.toXml("name", {
                    val: tag.name
                }) : "", (0, _type.isDefined)(tag.family) ? _excel2.default.toXml("family", {
                    val: tag.family
                }) : "", (0, _type.isDefined)(tag.scheme) ? _excel2.default.toXml("scheme", {
                    val: tag.scheme
                }) : "", (0, _type.isDefined)(tag.italic) && tag.italic ? _excel2.default.toXml("i", {}) : "", (0, _type.isDefined)(tag.underline) ? _excel2.default.toXml("u", {
                    val: tag.underline
                }) : ""].join("");
                return _excel2.default.toXml("font", {}, content)
            }
        };
        exports.default = fontHelper
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/exporter/image_creator.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _color = __webpack_require__( /*! ../color */ 91);
        var _color2 = _interopRequireDefault(_color);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _svg = __webpack_require__( /*! ../core/utils/svg */ 216);
        var _svg2 = _interopRequireDefault(_svg);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var window = _window2.default.getWindow();
        var _math = Math;
        var PI = _math.PI;
        var _min = _math.min;
        var _abs = _math.abs;
        var _sqrt = _math.sqrt;
        var _pow = _math.pow;
        var _atan2 = _math.atan2;
        var _cos = _math.cos;
        var _sin = _math.sin;
        var _number = Number;
        var IMAGE_QUALITY = 1;
        var TEXT_DECORATION_LINE_WIDTH_COEFF = .05;
        var DEFAULT_FONT_SIZE = "10px";
        var DEFAULT_FONT_FAMILY = "sans-serif";
        var DEFAULT_TEXT_COLOR = "#000";
        var parseAttributes;

        function createCanvas(width, height, margin) {
            var canvas = (0, _renderer2.default)("<canvas>")[0];
            canvas.width = width + 2 * margin;
            canvas.height = height + 2 * margin;
            canvas.hidden = true;
            return canvas
        }

        function getStringFromCanvas(canvas, mimeType) {
            var dataURL = canvas.toDataURL(mimeType, IMAGE_QUALITY);
            var imageData = window.atob(dataURL.substring(("data:" + mimeType + ";base64,").length));
            return imageData
        }

        function arcTo(x1, y1, x2, y2, radius, largeArcFlag, clockwise, context) {
            var cBx = (x1 + x2) / 2;
            var cBy = (y1 + y2) / 2;
            var aB = _atan2(y1 - y2, x1 - x2);
            var k = largeArcFlag ? 1 : -1;
            aB += 90 * (PI / 180) * (clockwise ? 1 : -1);
            var opSide = _sqrt(_pow(x2 - x1, 2) + _pow(y2 - y1, 2)) / 2;
            var adjSide = _sqrt(_abs(_pow(radius, 2) - _pow(opSide, 2)));
            var centerX = cBx + k * (adjSide * _cos(aB));
            var centerY = cBy + k * (adjSide * _sin(aB));
            var startAngle = _atan2(y1 - centerY, x1 - centerX);
            var endAngle = _atan2(y2 - centerY, x2 - centerX);
            context.arc(centerX, centerY, radius, startAngle, endAngle, !clockwise)
        }

        function getElementOptions(element, rootAppended) {
            var attr = parseAttributes(element.attributes || {});
            var options = (0, _extend.extend)({}, attr, {
                text: element.textContent.replace(/\s+/g, " "),
                textAlign: "middle" === attr["text-anchor"] ? "center" : attr["text-anchor"]
            });
            var transform = attr.transform;
            var coords;
            if (transform) {
                coords = transform.match(/translate\(-*\d+([.]\d+)*(,*\s*-*\d+([.]\d+)*)*/);
                if (coords) {
                    coords = coords[0].match(/-*\d+([.]\d+)*/g);
                    options.translateX = _number(coords[0]);
                    options.translateY = coords[1] ? _number(coords[1]) : 0
                }
                coords = transform.match(/rotate\(-*\d+([.]\d+)*(,*\s*-*\d+([.]\d+)*,*\s*-*\d+([.]\d+)*)*/);
                if (coords) {
                    coords = coords[0].match(/-*\d+([.]\d+)*/g);
                    options.rotationAngle = _number(coords[0]);
                    options.rotationX = coords[1] && _number(coords[1]);
                    options.rotationY = coords[2] && _number(coords[2])
                }
                coords = transform.match(/scale\(-*\d+([.]\d+)*(,*\s*-*\d+([.]\d+)*)*/);
                if (coords) {
                    coords = coords[0].match(/-*\d+([.]\d+)*/g);
                    options.scaleX = _number(coords[0]);
                    if (coords.length > 1) {
                        options.scaleY = _number(coords[1])
                    } else {
                        options.scaleY = options.scaleX
                    }
                }
            }
            parseStyles(element, options, rootAppended);
            return options
        }

        function drawRect(context, options) {
            var x = options.x;
            var y = options.y;
            var width = options.width;
            var height = options.height;
            var cornerRadius = options.rx;
            if (!cornerRadius) {
                context.rect(x, y, width, height)
            } else {
                cornerRadius = _min(cornerRadius, width / 2, height / 2);
                context.save();
                context.translate(x, y);
                context.moveTo(width / 2, 0);
                context.arcTo(width, 0, width, height, cornerRadius);
                context.arcTo(width, height, 0, height, cornerRadius);
                context.arcTo(0, height, 0, 0, cornerRadius);
                context.arcTo(0, 0, cornerRadius, 0, cornerRadius);
                context.lineTo(width / 2, 0);
                context.restore()
            }
        }

        function drawImage(context, options, shared) {
            var d = new _deferred.Deferred;
            var image = new window.Image;
            image.onload = function() {
                context.save();
                context.globalAlpha = options.globalAlpha;
                transformElement(context, options);
                clipElement(context, options, shared);
                context.drawImage(image, options.x, options.y, options.width, options.height);
                context.restore();
                d.resolve()
            };
            image.onerror = function() {
                d.resolve()
            };
            image.setAttribute("crossOrigin", "anonymous");
            image.src = options.href || options["xlink:href"];
            return d
        }

        function drawPath(context, dAttr) {
            var dArray = dAttr.replace(/,/g, " ").split(/([A-Z])/i).filter(function(item) {
                return "" !== item.trim()
            });
            var i = 0;
            var params;
            var prevParams;
            var prevParamsLen;
            do {
                params = (dArray[i + 1] || "").trim().split(" ");
                switch (dArray[i]) {
                    case "M":
                        context.moveTo(_number(params[0]), _number(params[1]));
                        i += 2;
                        break;
                    case "L":
                        for (var j = 0; j < params.length / 2; j++) {
                            context.lineTo(_number(params[2 * j]), _number(params[2 * j + 1]))
                        }
                        i += 2;
                        break;
                    case "C":
                        context.bezierCurveTo(_number(params[0]), _number(params[1]), _number(params[2]), _number(params[3]), _number(params[4]), _number(params[5]));
                        i += 2;
                        break;
                    case "a":
                        prevParams = dArray[i - 1].trim().split(" ");
                        prevParamsLen = prevParams.length - 1;
                        arcTo(_number(prevParams[prevParamsLen - 1]), _number(prevParams[prevParamsLen]), _number(prevParams[prevParamsLen - 1]) + _number(params[5]), _number(prevParams[prevParamsLen]) + _number(params[6]), _number(params[0]), _number(params[3]), _number(params[4]), context);
                        i += 2;
                        break;
                    case "A":
                        prevParams = dArray[i - 1].trim().split(" ");
                        prevParamsLen = prevParams.length - 1;
                        arcTo(_number(prevParams[prevParamsLen - 1]), _number(prevParams[prevParamsLen]), _number(params[5]), _number(params[6]), _number(params[0]), _number(params[3]), _number(params[4]), context);
                        i += 2;
                        break;
                    case "Z":
                        context.closePath();
                        i += 1;
                        break;
                    default:
                        i++
                }
            } while (i < dArray.length)
        }

        function parseStyles(element, options, rootAppended) {
            var style = element.style || {};
            var field;
            for (field in style) {
                if ("" !== style[field]) {
                    options[(0, _inflector.camelize)(field)] = style[field]
                }
            }
            if (rootAppended && _dom_adapter2.default.isElementNode(element)) {
                style = window.getComputedStyle(element);
                ["fill", "stroke", "stroke-width", "font-family", "font-size", "font-style", "font-weight"].forEach(function(prop) {
                    if (prop in style && "" !== style[prop]) {
                        options[(0, _inflector.camelize)(prop)] = style[prop]
                    }
                });
                ["opacity", "fill-opacity", "stroke-opacity"].forEach(function(prop) {
                    if (prop in style && "" !== style[prop] && "1" !== style[prop]) {
                        options[prop] = _number(style[prop])
                    }
                })
            }
            options.textDecoration = options.textDecoration || options.textDecorationLine;
            options.globalAlpha = (0, _type.isDefined)(options.opacity) ? options.opacity : options.globalAlpha
        }

        function parseUrl(urlString) {
            var matches = urlString && urlString.match(/url\(.*#(.*?)["']?\)/i);
            return matches && matches[1]
        }

        function setFontStyle(context, options) {
            var fontParams = [];
            options.fontSize = options.fontSize || DEFAULT_FONT_SIZE;
            options.fontFamily || DEFAULT_FONT_FAMILY;
            options.fill = options.fill || DEFAULT_TEXT_COLOR;
            options.fontStyle && fontParams.push(options.fontStyle);
            options.fontWeight && fontParams.push(options.fontWeight);
            fontParams.push(options.fontSize);
            fontParams.push(options.fontFamily);
            context.font = fontParams.join(" ");
            context.textAlign = options.textAlign;
            context.fillStyle = options.fill;
            context.globalAlpha = options.globalAlpha
        }

        function drawText(context, options, shared) {
            setFontStyle(context, options);
            applyFilter(context, options, shared);
            options.text && context.fillText(options.text, options.x || 0, options.y || 0);
            strokeElement(context, options, true);
            drawTextDecoration(context, options, shared)
        }

        function drawTextDecoration(context, options, shared) {
            if (!options.textDecoration || "none" === options.textDecoration) {
                return
            }
            var x = options.x;
            var textWidth = context.measureText(options.text).width;
            var textHeight = parseInt(options.fontSize, 10);
            var lineHeight = textHeight * TEXT_DECORATION_LINE_WIDTH_COEFF < 1 ? 1 : textHeight * TEXT_DECORATION_LINE_WIDTH_COEFF;
            var y = options.y;
            switch (options.textDecoration) {
                case "line-through":
                    y -= textHeight / 3 + lineHeight / 2;
                    break;
                case "overline":
                    y -= textHeight - lineHeight;
                    break;
                case "underline":
                    y += lineHeight
            }
            context.rect(x, y, textWidth, lineHeight);
            fillElement(context, options, shared);
            strokeElement(context, options)
        }

        function aggregateOpacity(options) {
            options.strokeOpacity = void 0 !== options["stroke-opacity"] ? options["stroke-opacity"] : 1;
            options.fillOpacity = void 0 !== options["fill-opacity"] ? options["fill-opacity"] : 1;
            if (void 0 !== options.opacity) {
                options.strokeOpacity *= options.opacity;
                options.fillOpacity *= options.opacity
            }
        }

        function hasTspan(element) {
            var nodes = element.childNodes;
            for (var i = 0; i < nodes.length; i++) {
                if ("tspan" === nodes[i].tagName) {
                    return true
                }
            }
            return false
        }

        function drawTextElement(childNodes, context, options, shared) {
            var lines = [];
            var line;
            var offset = 0;
            for (var i = 0; i < childNodes.length; i++) {
                var element = childNodes[i];
                if (void 0 === element.tagName) {
                    drawElement(element, context, options, shared)
                } else {
                    if ("tspan" === element.tagName || "text" === element.tagName) {
                        var elementOptions = getElementOptions(element, shared.rootAppended);
                        var mergedOptions = (0, _extend.extend)({}, options, elementOptions);
                        if ("tspan" === element.tagName && hasTspan(element)) {
                            drawTextElement(element.childNodes, context, mergedOptions, shared);
                            continue
                        }
                        mergedOptions.textAlign = "start";
                        if (!line || void 0 !== elementOptions.x) {
                            line = {
                                elements: [],
                                options: [],
                                widths: [],
                                offsets: []
                            };
                            lines.push(line)
                        }
                        if (void 0 !== elementOptions.y) {
                            offset = 0
                        }
                        if (void 0 !== elementOptions.dy) {
                            offset += parseFloat(elementOptions.dy)
                        }
                        line.elements.push(element);
                        line.options.push(mergedOptions);
                        line.offsets.push(offset);
                        setFontStyle(context, mergedOptions);
                        line.widths.push(context.measureText(mergedOptions.text).width)
                    }
                }
            }
            lines.forEach(function(line) {
                var commonWidth = line.widths.reduce(function(commonWidth, width) {
                    return commonWidth + width
                }, 0);
                var xDiff = 0;
                var currentOffset = 0;
                if ("center" === options.textAlign) {
                    xDiff = commonWidth / 2
                }
                if ("end" === options.textAlign) {
                    xDiff = commonWidth
                }
                line.options.forEach(function(o, index) {
                    var width = line.widths[index];
                    o.x = o.x - xDiff + currentOffset;
                    o.y += line.offsets[index];
                    currentOffset += width
                });
                line.elements.forEach(function(element, index) {
                    drawTextElement(element.childNodes, context, line.options[index], shared)
                })
            })
        }

        function drawElement(element, context, parentOptions, shared) {
            var tagName = element.tagName;
            var isText = "text" === tagName || "tspan" === tagName || void 0 === tagName;
            var isImage = "image" === tagName;
            var options = (0, _extend.extend)({}, parentOptions, getElementOptions(element, shared.rootAppended));
            if ("hidden" === options.visibility || options["hidden-for-export"]) {
                return
            }
            context.save();
            !isImage && transformElement(context, options);
            clipElement(context, options, shared);
            aggregateOpacity(options);
            var promise;
            context.beginPath();
            switch (element.tagName) {
                case void 0:
                    drawText(context, options, shared);
                    break;
                case "text":
                case "tspan":
                    drawTextElement(element.childNodes, context, options, shared);
                    break;
                case "image":
                    promise = drawImage(context, options, shared);
                    break;
                case "path":
                    drawPath(context, options.d);
                    break;
                case "rect":
                    drawRect(context, options);
                    context.closePath();
                    break;
                case "circle":
                    context.arc(options.cx, options.cy, options.r, 0, 2 * PI, 1)
            }
            if (!isText) {
                applyFilter(context, options, shared);
                fillElement(context, options, shared);
                strokeElement(context, options)
            }
            applyGradient(context, options, shared, element);
            context.restore();
            return promise
        }

        function applyGradient(context, options, _ref, element) {
            var gradients = _ref.gradients;
            if (0 === gradients.length) {
                return
            }
            var id = parseUrl(options.fill);
            if (id && gradients[id]) {
                var box = element.getBBox();
                var gradient = context.createLinearGradient(box.x, 0, box.x + box.width, 0);
                gradients[id].forEach(function(opt) {
                    var offset = parseInt(opt.offset.replace(/%/, ""));
                    gradient.addColorStop(offset / 100, opt.stopColor)
                });
                context.globalAlpha = options.opacity;
                context.fillStyle = gradient;
                context.fill()
            }
        }

        function applyFilter(context, options, shared) {
            var filterOptions;
            var id = parseUrl(options.filter);
            if (id) {
                filterOptions = shared.filters[id];
                if (!filterOptions) {
                    filterOptions = {
                        offsetX: 0,
                        offsetY: 0,
                        blur: 0,
                        color: "#000"
                    }
                }
                context.shadowOffsetX = filterOptions.offsetX;
                context.shadowOffsetY = filterOptions.offsetY;
                context.shadowColor = filterOptions.color;
                context.shadowBlur = filterOptions.blur
            }
        }

        function transformElement(context, options) {
            context.translate(options.translateX || 0, options.translateY || 0);
            options.translateX = void 0;
            options.translateY = void 0;
            if (options.rotationAngle) {
                context.translate(options.rotationX || 0, options.rotationY || 0);
                context.rotate(options.rotationAngle * PI / 180);
                context.translate(-(options.rotationX || 0), -(options.rotationY || 0));
                options.rotationAngle = void 0;
                options.rotationX = void 0;
                options.rotationY = void 0
            }
            if (isFinite(options.scaleX)) {
                context.scale(options.scaleX, options.scaleY);
                options.scaleX = void 0;
                options.scaleY = void 0
            }
        }

        function clipElement(context, options, shared) {
            if (options["clip-path"]) {
                drawElement(shared.clipPaths[parseUrl(options["clip-path"])], context, {}, shared);
                context.clip();
                options["clip-path"] = void 0
            }
        }

        function hex2rgba(hexColor, alpha) {
            var color = new _color2.default(hexColor);
            return "rgba(" + color.r + "," + color.g + "," + color.b + "," + alpha + ")"
        }

        function createGradient(element) {
            var options = [];
            (0, _iterator.each)(element.childNodes, function(_, _ref2) {
                var attributes = _ref2.attributes;
                options.push({
                    offset: attributes.offset.value,
                    stopColor: attributes["stop-color"].value
                })
            });
            return options
        }

        function createFilter(element) {
            var color;
            var opacity;
            var filterOptions = {};
            (0, _iterator.each)(element.childNodes, function(_, node) {
                var attr = node.attributes;
                if (!attr.result) {
                    return
                }
                switch (attr.result.value) {
                    case "gaussianBlurResult":
                        filterOptions.blur = _number(attr.stdDeviation.value);
                        break;
                    case "offsetResult":
                        filterOptions.offsetX = _number(attr.dx.value);
                        filterOptions.offsetY = _number(attr.dy.value);
                        break;
                    case "floodResult":
                        color = attr["flood-color"] ? attr["flood-color"].value : "#000";
                        opacity = attr["flood-opacity"] ? attr["flood-opacity"].value : 1;
                        filterOptions.color = hex2rgba(color, opacity)
                }
            });
            return filterOptions
        }

        function asyncEach(array, callback) {
            var d = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : new _deferred.Deferred;
            if (0 === array.length) {
                return d.resolve()
            }
            var result = callback(array[0]);

            function next() {
                asyncEach(Array.prototype.slice.call(array, 1), callback, d)
            }
            if ((0, _type.isPromise)(result)) {
                result.then(next)
            } else {
                next()
            }
            return d
        }

        function drawCanvasElements(elements, context, parentOptions, shared) {
            return asyncEach(elements, function(element) {
                switch (element.tagName && element.tagName.toLowerCase()) {
                    case "g":
                    case "svg":
                        var options = (0, _extend.extend)({}, parentOptions, getElementOptions(element, shared.rootAppended));
                        context.save();
                        transformElement(context, options);
                        clipElement(context, options, shared);
                        var onDone = function() {
                            context.restore()
                        };
                        var d = drawCanvasElements(element.childNodes, context, options, shared);
                        if ((0, _type.isPromise)(d)) {
                            d.then(onDone)
                        } else {
                            onDone()
                        }
                        return d;
                    case "defs":
                        return drawCanvasElements(element.childNodes, context, {}, shared);
                    case "clippath":
                        shared.clipPaths[element.attributes.id.textContent] = element.childNodes[0];
                        break;
                    case "pattern":
                        shared.patterns[element.attributes.id.textContent] = element;
                        break;
                    case "filter":
                        shared.filters[element.id] = createFilter(element);
                        break;
                    case "lineargradient":
                        shared.gradients[element.attributes.id.textContent] = createGradient(element);
                        break;
                    default:
                        return drawElement(element, context, parentOptions, shared)
                }
            })
        }

        function setLineDash(context, options) {
            var matches = options["stroke-dasharray"] && options["stroke-dasharray"].match(/(\d+)/g);
            if (matches && matches.length) {
                matches = (0, _iterator.map)(matches, function(item) {
                    return _number(item)
                });
                context.setLineDash(matches)
            }
        }

        function strokeElement(context, options, isText) {
            var stroke = options.stroke;
            if (stroke && "none" !== stroke && 0 !== options["stroke-width"]) {
                setLineDash(context, options);
                context.lineJoin = options["stroke-linejoin"];
                context.lineWidth = options["stroke-width"];
                context.globalAlpha = options.strokeOpacity;
                context.strokeStyle = stroke;
                isText ? context.strokeText(options.text, options.x, options.y) : context.stroke();
                context.globalAlpha = 1
            }
        }

        function getPattern(context, pattern, shared) {
            var options = getElementOptions(pattern, shared.rootAppended);
            var patternCanvas = createCanvas(options.width, options.height, 0);
            var patternContext = patternCanvas.getContext("2d");
            drawCanvasElements(pattern.childNodes, patternContext, options, shared);
            return context.createPattern(patternCanvas, "repeat")
        }

        function fillElement(context, options, shared) {
            var fill = options.fill;
            if (fill && "none" !== fill) {
                if (fill.search(/url/) === -1) {
                    context.fillStyle = fill
                } else {
                    var pattern = shared.patterns[parseUrl(fill)];
                    if (!pattern) {
                        return
                    }
                    context.fillStyle = getPattern(context, pattern, shared)
                }
                context.globalAlpha = options.fillOpacity;
                context.fill();
                context.globalAlpha = 1
            }
        }
        parseAttributes = function(attributes) {
            var newAttributes = {};
            var attr;
            (0, _iterator.each)(attributes, function(index, item) {
                attr = item.textContent;
                if (isFinite(attr)) {
                    attr = _number(attr)
                }
                newAttributes[item.name.toLowerCase()] = attr
            });
            return newAttributes
        };

        function drawBackground(context, width, height, backgroundColor, margin) {
            context.fillStyle = backgroundColor || "#ffffff";
            context.fillRect(-margin, -margin, width + 2 * margin, height + 2 * margin)
        }

        function createInvisibleDiv() {
            var invisibleDiv = _dom_adapter2.default.createElement("div");
            invisibleDiv.style.left = "-9999px";
            invisibleDiv.style.position = "absolute";
            return invisibleDiv
        }

        function convertSvgToCanvas(svg, canvas, rootAppended) {
            return drawCanvasElements(svg.childNodes, canvas.getContext("2d"), {}, {
                clipPaths: {},
                patterns: {},
                filters: {},
                gradients: {},
                rootAppended: rootAppended
            })
        }

        function getCanvasFromSvg(markup, width, height, backgroundColor, margin) {
            var svgToCanvas = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : convertSvgToCanvas;
            var canvas = createCanvas(width, height, margin);
            var context = canvas.getContext("2d");
            var svgElem = _svg2.default.getSvgElement(markup);
            var invisibleDiv;
            var markupIsDomElement = _dom_adapter2.default.isElementNode(markup);
            context.translate(margin, margin);
            _dom_adapter2.default.getBody().appendChild(canvas);
            if (!markupIsDomElement) {
                invisibleDiv = createInvisibleDiv();
                invisibleDiv.appendChild(svgElem);
                _dom_adapter2.default.getBody().appendChild(invisibleDiv)
            }
            if (svgElem.attributes.direction) {
                canvas.dir = svgElem.attributes.direction.textContent
            }
            drawBackground(context, width, height, backgroundColor, margin);
            return (0, _deferred.fromPromise)(svgToCanvas(svgElem, canvas, markupIsDomElement && _dom2.default.contains(_dom_adapter2.default.getBody(), markup))).then(function() {
                return canvas
            }).always(function() {
                invisibleDiv && _dom_adapter2.default.getBody().removeChild(invisibleDiv);
                _dom_adapter2.default.getBody().removeChild(canvas)
            })
        }
        exports.imageCreator = {
            getImageData: function(markup, options) {
                var mimeType = "image/" + options.format;
                var width = options.width;
                var height = options.height;
                var backgroundColor = options.backgroundColor;
                if ((0, _type.isFunction)(options.__parseAttributesFn)) {
                    parseAttributes = options.__parseAttributesFn
                }
                return getCanvasFromSvg(markup, width, height, backgroundColor, options.margin, options.svgToCanvas).then(function(canvas) {
                    return getStringFromCanvas(canvas, mimeType)
                })
            },
            getData: function(markup, options) {
                var that = this;
                return exports.imageCreator.getImageData(markup, options).then(function(binaryData) {
                    var mimeType = "image/" + options.format;
                    var data = (0, _type.isFunction)(window.Blob) && !options.forceProxy ? that._getBlob(binaryData, mimeType) : that._getBase64(binaryData);
                    return data
                })
            },
            _getBlob: function(binaryData, mimeType) {
                var i;
                var dataArray = new Uint8Array(binaryData.length);
                for (i = 0; i < binaryData.length; i++) {
                    dataArray[i] = binaryData.charCodeAt(i)
                }
                return new window.Blob([dataArray.buffer], {
                    type: mimeType
                })
            },
            _getBase64: function(binaryData) {
                return window.btoa(binaryData)
            }
        };
        exports.getData = function(data, options) {
            return exports.imageCreator.getData(data, options)
        };
        exports.testFormats = function(formats) {
            var canvas = createCanvas(100, 100, 0);
            return formats.reduce(function(r, f) {
                var mimeType = ("image/" + f).toLowerCase();
                if (canvas.toDataURL(mimeType).indexOf(mimeType) !== -1) {
                    r.supported.push(f)
                } else {
                    r.unsupported.push(f)
                }
                return r
            }, {
                supported: [],
                unsupported: []
            })
        }
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/comparator.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dom_adapter = __webpack_require__( /*! ../dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _data = __webpack_require__( /*! ./data */ 20);
        var _type = __webpack_require__( /*! ./type */ 1);
        var _type2 = _interopRequireDefault(_type);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var hasNegation = function(oldValue, newValue) {
            return 1 / oldValue === 1 / newValue
        };
        var equals = function(oldValue, newValue) {
            oldValue = (0, _data.toComparable)(oldValue, true);
            newValue = (0, _data.toComparable)(newValue, true);
            if (oldValue && newValue && _type2.default.isRenderer(oldValue) && _type2.default.isRenderer(newValue)) {
                return newValue.is(oldValue)
            }
            var oldValueIsNaN = oldValue !== oldValue;
            var newValueIsNaN = newValue !== newValue;
            if (oldValueIsNaN && newValueIsNaN) {
                return true
            }
            if (0 === oldValue && 0 === newValue) {
                return hasNegation(oldValue, newValue)
            }
            if (null === oldValue || "object" !== _typeof(oldValue) || _dom_adapter2.default.isElementNode(oldValue)) {
                return oldValue === newValue
            }
            return false
        };
        exports.equals = equals
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/queue.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 22);
        var when = __webpack_require__( /*! ../../core/utils/deferred */ 6).when;

        function createQueue(discardPendingTasks) {
            var _tasks = [];
            var _busy = false;

            function exec() {
                while (_tasks.length) {
                    _busy = true;
                    var task = _tasks.shift();
                    var result = task();
                    if (void 0 === result) {
                        continue
                    }
                    if (result.then) {
                        when(result).always(exec);
                        return
                    }
                    throw errors.Error("E0015")
                }
                _busy = false
            }

            function add(task, removeTaskCallback) {
                if (!discardPendingTasks) {
                    _tasks.push(task)
                } else {
                    if (_tasks[0] && removeTaskCallback) {
                        removeTaskCallback(_tasks[0])
                    }
                    _tasks = [task]
                }
                if (!_busy) {
                    exec()
                }
            }

            function busy() {
                return _busy
            }
            return {
                add: add,
                busy: busy
            }
        }
        exports.create = createQueue;
        exports.enqueue = createQueue().add
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/animation/easing.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var CSS_TRANSITION_EASING_REGEX = /cubic-bezier\((\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\)/;
        var TransitionTimingFuncMap = {
            linear: "cubic-bezier(0, 0, 1, 1)",
            swing: "cubic-bezier(0.445, 0.05, 0.55, 0.95)",
            ease: "cubic-bezier(0.25, 0.1, 0.25, 1)",
            "ease-in": "cubic-bezier(0.42, 0, 1, 1)",
            "ease-out": "cubic-bezier(0, 0, 0.58, 1)",
            "ease-in-out": "cubic-bezier(0.42, 0, 0.58, 1)"
        };
        var polynomBezier = function(x1, y1, x2, y2) {
            var Cx = 3 * x1;
            var Bx = 3 * (x2 - x1) - Cx;
            var Ax = 1 - Cx - Bx;
            var Cy = 3 * y1;
            var By = 3 * (y2 - y1) - Cy;
            var Ay = 1 - Cy - By;
            var bezierX = function(t) {
                return t * (Cx + t * (Bx + t * Ax))
            };
            var bezierY = function(t) {
                return t * (Cy + t * (By + t * Ay))
            };
            var derivativeX = function(t) {
                return Cx + t * (2 * Bx + 3 * t * Ax)
            };
            var findXFor = function(t) {
                var x = t;
                var i = 0;
                var z;
                while (i < 14) {
                    z = bezierX(x) - t;
                    if (Math.abs(z) < .001) {
                        break
                    }
                    x -= z / derivativeX(x);
                    i++
                }
                return x
            };
            return function(t) {
                return bezierY(findXFor(t))
            }
        };
        var easing = {};
        var convertTransitionTimingFuncToEasing = function(cssTransitionEasing) {
            cssTransitionEasing = TransitionTimingFuncMap[cssTransitionEasing] || cssTransitionEasing;
            var coeffs = cssTransitionEasing.match(CSS_TRANSITION_EASING_REGEX);
            var forceName;
            if (!coeffs) {
                forceName = "linear";
                coeffs = TransitionTimingFuncMap[forceName].match(CSS_TRANSITION_EASING_REGEX)
            }
            coeffs = coeffs.slice(1, 5);
            for (var i = 0; i < coeffs.length; i++) {
                coeffs[i] = parseFloat(coeffs[i])
            }
            var easingName = forceName || "cubicbezier_" + coeffs.join("_").replace(/\./g, "p");
            if (!isFunction(easing[easingName])) {
                easing[easingName] = function(x, t, b, c, d) {
                    return c * polynomBezier(coeffs[0], coeffs[1], coeffs[2], coeffs[3])(t / d) + b
                }
            }
            return easingName
        };
        exports.setEasing = function(value) {
            easing = value
        };
        exports.getEasing = function(name) {
            return easing[name]
        };
        exports.convertTransitionTimingFuncToEasing = convertTransitionTimingFuncToEasing
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/touch.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var BaseStrategy = __webpack_require__( /*! ./base */ 160);
        var eventMap = {
            dxpointerdown: "touchstart",
            dxpointermove: "touchmove",
            dxpointerup: "touchend",
            dxpointercancel: "touchcancel",
            dxpointerover: "",
            dxpointerout: "",
            dxpointerenter: "",
            dxpointerleave: ""
        };
        var normalizeTouchEvent = function(e) {
            var pointers = [];
            each(e.touches, function(_, touch) {
                pointers.push(extend({
                    pointerId: touch.identifier
                }, touch))
            });
            return {
                pointers: pointers,
                pointerId: e.changedTouches[0].identifier
            }
        };
        var skipTouchWithSameIdentifier = function(pointerEvent) {
            return "ios" === devices.real().platform && ("dxpointerdown" === pointerEvent || "dxpointerup" === pointerEvent)
        };
        var TouchStrategy = BaseStrategy.inherit({
            ctor: function() {
                this.callBase.apply(this, arguments);
                this._pointerId = 0
            },
            _handler: function(e) {
                if (skipTouchWithSameIdentifier(this._eventName)) {
                    var touch = e.changedTouches[0];
                    if (this._pointerId === touch.identifier && 0 !== this._pointerId) {
                        return
                    }
                    this._pointerId = touch.identifier
                }
                return this.callBase.apply(this, arguments)
            },
            _fireEvent: function(args) {
                return this.callBase(extend(normalizeTouchEvent(args.originalEvent), args))
            }
        });
        TouchStrategy.map = eventMap;
        TouchStrategy.normalize = normalizeTouchEvent;
        module.exports = TouchStrategy
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/observer.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var addEventsListener = function(events, handler) {
            readyCallbacks.add(function() {
                events.split(" ").forEach(function(event) {
                    domAdapter.listen(domAdapter.getDocument(), event, handler, true)
                })
            })
        };
        var Observer = function(eventMap, pointerEquals, onPointerAdding) {
            onPointerAdding = onPointerAdding || function() {};
            var pointers = [];
            var getPointerIndex = function(e) {
                var index = -1;
                each(pointers, function(i, pointer) {
                    if (!pointerEquals(e, pointer)) {
                        return true
                    }
                    index = i;
                    return false
                });
                return index
            };
            var addPointer = function(e) {
                if (getPointerIndex(e) === -1) {
                    onPointerAdding(e);
                    pointers.push(e)
                }
            };
            var removePointer = function(e) {
                var index = getPointerIndex(e);
                if (index > -1) {
                    pointers.splice(index, 1)
                }
            };
            var updatePointer = function(e) {
                pointers[getPointerIndex(e)] = e
            };
            addEventsListener(eventMap.dxpointerdown, addPointer);
            addEventsListener(eventMap.dxpointermove, updatePointer);
            addEventsListener(eventMap.dxpointerup, removePointer);
            addEventsListener(eventMap.dxpointercancel, removePointer);
            this.pointers = function() {
                return pointers
            };
            this.reset = function() {
                pointers = []
            }
        };
        module.exports = Observer
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/mouse.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var BaseStrategy = __webpack_require__( /*! ./base */ 160);
        var Observer = __webpack_require__( /*! ./observer */ 283);
        var eventMap = {
            dxpointerdown: "mousedown",
            dxpointermove: "mousemove",
            dxpointerup: "mouseup",
            dxpointercancel: "",
            dxpointerover: "mouseover",
            dxpointerout: "mouseout",
            dxpointerenter: "mouseenter",
            dxpointerleave: "mouseleave"
        };
        var normalizeMouseEvent = function(e) {
            e.pointerId = 1;
            return {
                pointers: observer.pointers(),
                pointerId: 1
            }
        };
        var observer;
        var activated = false;
        var activateStrategy = function() {
            if (activated) {
                return
            }
            observer = new Observer(eventMap, function() {
                return true
            });
            activated = true
        };
        var MouseStrategy = BaseStrategy.inherit({
            ctor: function() {
                this.callBase.apply(this, arguments);
                activateStrategy()
            },
            _fireEvent: function(args) {
                return this.callBase(extend(normalizeMouseEvent(args.originalEvent), args))
            }
        });
        MouseStrategy.map = eventMap;
        MouseStrategy.normalize = normalizeMouseEvent;
        MouseStrategy.activate = activateStrategy;
        MouseStrategy.resetObserver = function() {
            observer.reset()
        };
        module.exports = MouseStrategy
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _jquery = __webpack_require__( /*! jquery */ 57);
        var _jquery2 = _interopRequireDefault(_jquery);
        var _version = __webpack_require__( /*! ../core/utils/version */ 60);
        var _error = __webpack_require__( /*! ../core/utils/error */ 138);
        var _error2 = _interopRequireDefault(_error);
        var _use_jquery = __webpack_require__( /*! ./jquery/use_jquery */ 85);
        var _use_jquery2 = _interopRequireDefault(_use_jquery);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var useJQuery = (0, _use_jquery2.default)();
        if (useJQuery && (0, _version.compare)(_jquery2.default.fn.jquery, [1, 10]) < 0) {
            throw _error2.default.Error("E0012")
        }
        __webpack_require__( /*! ./jquery/renderer */ 482);
        __webpack_require__( /*! ./jquery/hooks */ 483);
        __webpack_require__( /*! ./jquery/deferred */ 484);
        __webpack_require__( /*! ./jquery/hold_ready */ 485);
        __webpack_require__( /*! ./jquery/events */ 486);
        __webpack_require__( /*! ./jquery/easing */ 487);
        __webpack_require__( /*! ./jquery/element_data */ 488);
        __webpack_require__( /*! ./jquery/element */ 489);
        __webpack_require__( /*! ./jquery/component_registrator */ 490);
        __webpack_require__( /*! ./jquery/ajax */ 491)
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/themes_callback.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 27);
        module.exports = new Callbacks
    },
    /*!*********************************!*\
      !*** external "window.angular" ***!
      \*********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.angular
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/locker.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 22);
        var Locker = function() {
            var info = {};
            var currentCount = function(lockName) {
                return info[lockName] || 0
            };
            return {
                obtain: function(lockName) {
                    info[lockName] = currentCount(lockName) + 1
                },
                release: function(lockName) {
                    var count = currentCount(lockName);
                    if (count < 1) {
                        throw errors.Error("E0014")
                    }
                    if (1 === count) {
                        delete info[lockName]
                    } else {
                        info[lockName] = count - 1
                    }
                },
                locked: function(lockName) {
                    return currentCount(lockName) > 0
                }
            }
        };
        module.exports = Locker
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/selection/selection.strategy.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataQuery = __webpack_require__( /*! ../../data/query */ 45);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var getKeyHash = commonUtils.getKeyHash;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        module.exports = Class.inherit({
            ctor: function(options) {
                this.options = options;
                this._setOption("disabledItemKeys", []);
                this._clearItemKeys()
            },
            _clearItemKeys: function() {
                this._setOption("addedItemKeys", []);
                this._setOption("removedItemKeys", []);
                this._setOption("removedItems", []);
                this._setOption("addedItems", [])
            },
            validate: commonUtils.noop,
            _setOption: function(name, value) {
                this.options[name] = value
            },
            onSelectionChanged: function onSelectionChanged() {
                var addedItemKeys = this.options.addedItemKeys;
                var removedItemKeys = this.options.removedItemKeys;
                var addedItems = this.options.addedItems;
                var removedItems = this.options.removedItems;
                var selectedItems = this.options.selectedItems;
                var selectedItemKeys = this.options.selectedItemKeys;
                var onSelectionChanged = this.options.onSelectionChanged || commonUtils.noop;
                this._clearItemKeys();
                onSelectionChanged({
                    selectedItems: selectedItems,
                    selectedItemKeys: selectedItemKeys,
                    addedItemKeys: addedItemKeys,
                    removedItemKeys: removedItemKeys,
                    addedItems: addedItems,
                    removedItems: removedItems
                })
            },
            equalKeys: function(key1, key2) {
                if (this.options.equalByReference) {
                    if (typeUtils.isObject(key1) && typeUtils.isObject(key2)) {
                        return key1 === key2
                    }
                }
                return commonUtils.equalByValue(key1, key2)
            },
            getSelectableItems: function(items) {
                return items.filter(function(item) {
                    return !item.disabled
                })
            },
            _clearSelection: function(keys, preserve, isDeselect, isSelectAll) {
                keys = keys || [];
                keys = Array.isArray(keys) ? keys : [keys];
                this.validate();
                return this.selectedItemKeys(keys, preserve, isDeselect, isSelectAll)
            },
            _loadFilteredData: function(remoteFilter, localFilter, select, isSelectAll) {
                var filterLength = encodeURI(JSON.stringify(remoteFilter)).length;
                var needLoadAllData = this.options.maxFilterLengthInRequest && filterLength > this.options.maxFilterLengthInRequest;
                var deferred = new Deferred;
                var loadOptions = {
                    filter: needLoadAllData ? void 0 : remoteFilter,
                    select: needLoadAllData ? this.options.dataFields() : select || this.options.dataFields()
                };
                if (remoteFilter && 0 === remoteFilter.length) {
                    deferred.resolve([])
                } else {
                    this.options.load(loadOptions).done(function(items) {
                        var filteredItems = typeUtils.isPlainObject(items) ? items.data : items;
                        if (localFilter && !isSelectAll) {
                            filteredItems = filteredItems.filter(localFilter)
                        } else {
                            if (needLoadAllData) {
                                filteredItems = dataQuery(filteredItems).filter(remoteFilter).toArray()
                            }
                        }
                        deferred.resolve(filteredItems)
                    }).fail(deferred.reject.bind(deferred))
                }
                return deferred
            },
            updateSelectedItemKeyHash: function(keys) {
                for (var i = 0; i < keys.length; i++) {
                    var keyHash = getKeyHash(keys[i]);
                    if (!typeUtils.isObject(keyHash)) {
                        this.options.keyHashIndices[keyHash] = this.options.keyHashIndices[keyHash] || [];
                        var keyIndices = this.options.keyHashIndices[keyHash];
                        keyIndices.push(i)
                    }
                }
            },
            _isAnyItemSelected: function(items) {
                for (var i = 0; i < items.length; i++) {
                    if (this.options.isItemSelected(items[i])) {
                        return
                    }
                }
                return false
            },
            _getFullSelectAllState: function() {
                var items = this.options.plainItems();
                var dataFilter = this.options.filter();
                var selectedItems = this.options.selectedItems;
                if (dataFilter) {
                    selectedItems = dataQuery(selectedItems).filter(dataFilter).toArray()
                }
                var selectedItemsLength = selectedItems.length;
                if (!selectedItemsLength) {
                    return this._isAnyItemSelected(items)
                }
                if (selectedItemsLength >= this.options.totalCount() - this.options.disabledItemKeys.length) {
                    return true
                }
                return
            },
            _getVisibleSelectAllState: function() {
                var items = this.getSelectableItems(this.options.plainItems());
                var hasSelectedItems = false;
                var hasUnselectedItems = false;
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    var itemData = this.options.getItemData(item);
                    var key = this.options.keyOf(itemData);
                    if (this.options.isSelectableItem(item)) {
                        if (this.isItemKeySelected(key)) {
                            hasSelectedItems = true
                        } else {
                            hasUnselectedItems = true
                        }
                    }
                }
                if (hasSelectedItems) {
                    return !hasUnselectedItems ? true : void 0
                } else {
                    return false
                }
            }
        })
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/utils.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 62);
        var getClosestNodeWithContext = function getClosestNodeWithContext(node) {
            var context = ko.contextFor(node);
            if (!context && node.parentNode) {
                return getClosestNodeWithContext(node.parentNode)
            }
            return node
        };
        module.exports.getClosestNodeWithContext = getClosestNodeWithContext
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/data.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 155);
        module.exports = DevExpress.data = DevExpress.data || {};
        Object.defineProperty(DevExpress.data, "errorHandler", {
            get: function() {
                /*! ../../data/errors */
                return __webpack_require__(38).errorHandler
            },
            set: function(value) {
                __webpack_require__( /*! ../../data/errors */ 38).errorHandler = value
            }
        });
        Object.defineProperty(DevExpress.data, "_errorHandler", {
            get: function() {
                /*! ../../data/errors */
                return __webpack_require__(38)._errorHandler
            },
            set: function(value) {
                __webpack_require__( /*! ../../data/errors */ 38)._errorHandler = value
            }
        });
        DevExpress.data.DataSource = __webpack_require__( /*! ../../data/data_source */ 516);
        DevExpress.data.query = __webpack_require__( /*! ../../data/query */ 45);
        DevExpress.data.Store = __webpack_require__( /*! ../../data/abstract_store */ 103);
        DevExpress.data.ArrayStore = __webpack_require__( /*! ../../data/array_store */ 70);
        DevExpress.data.CustomStore = __webpack_require__( /*! ../../data/custom_store */ 118);
        DevExpress.data.LocalStore = __webpack_require__( /*! ../../data/local_store */ 517);
        DevExpress.data.base64_encode = __webpack_require__( /*! ../../data/utils */ 42).base64_encode;
        DevExpress.data.Guid = __webpack_require__( /*! ../../core/guid */ 36);
        DevExpress.data.utils = {};
        DevExpress.data.utils.compileGetter = __webpack_require__( /*! ../../core/utils/data */ 20).compileGetter;
        DevExpress.data.utils.compileSetter = __webpack_require__( /*! ../../core/utils/data */ 20).compileSetter;
        DevExpress.EndpointSelector = __webpack_require__( /*! ../../data/endpoint_selector */ 518);
        DevExpress.data.queryImpl = __webpack_require__( /*! ../../data/query */ 45).queryImpl;
        DevExpress.data.queryAdapters = __webpack_require__( /*! ../../data/query_adapters */ 190);
        var dataUtils = __webpack_require__( /*! ../../data/utils */ 42);
        DevExpress.data.utils.normalizeBinaryCriterion = dataUtils.normalizeBinaryCriterion;
        DevExpress.data.utils.normalizeSortingInfo = dataUtils.normalizeSortingInfo;
        DevExpress.data.utils.errorMessageFromXhr = dataUtils.errorMessageFromXhr;
        DevExpress.data.utils.aggregators = dataUtils.aggregators;
        DevExpress.data.utils.keysEqual = dataUtils.keysEqual;
        DevExpress.data.utils.isDisjunctiveOperator = dataUtils.isDisjunctiveOperator;
        DevExpress.data.utils.isConjunctiveOperator = dataUtils.isConjunctiveOperator;
        DevExpress.data.utils.processRequestResultLock = dataUtils.processRequestResultLock;
        DevExpress.data.utils.toComparable = __webpack_require__( /*! ../../core/utils/data */ 20).toComparable;
        DevExpress.data.utils.multiLevelGroup = __webpack_require__( /*! ../../data/store_helper */ 86).multiLevelGroup;
        DevExpress.data.utils.arrangeSortingInfo = __webpack_require__( /*! ../../data/store_helper */ 86).arrangeSortingInfo;
        DevExpress.data.utils.normalizeDataSourceOptions = __webpack_require__( /*! ../../data/data_source/utils */ 64).normalizeDataSourceOptions
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/data/proxy_url_formatter.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var callOnce = __webpack_require__( /*! ../core/utils/call_once */ 80);
        var DXPROXY_HOST = "dxproxy.devexpress.com:8000";
        var urlMapping = {};
        var getUrlParser = callOnce(function() {
            var a = domAdapter.createElement("a");
            var props = ["protocol", "hostname", "port", "pathname", "search", "hash"];
            var normalizePath = function(value) {
                if ("/" !== value.charAt(0)) {
                    value = "/" + value
                }
                return value
            };
            return function(url) {
                a.href = url;
                var result = {};
                each(props, function() {
                    result[this] = a[this]
                });
                result.pathname = normalizePath(result.pathname);
                return result
            }
        });
        var parseUrl = function(url) {
            var urlParser = getUrlParser();
            return urlParser(url)
        };
        var extractProxyAppId = function() {
            return window.location.pathname.split("/")[1]
        };
        module.exports = {
            parseUrl: parseUrl,
            isProxyUsed: function() {
                return window.location.host === DXPROXY_HOST
            },
            formatProxyUrl: function(localUrl) {
                var urlData = parseUrl(localUrl);
                if (!/^(localhost$|127\.)/i.test(urlData.hostname)) {
                    return localUrl
                }
                var proxyUrlPart = DXPROXY_HOST + "/" + extractProxyAppId() + "_" + urlData.port;
                urlMapping[proxyUrlPart] = urlData.hostname + ":" + urlData.port;
                var resultUrl = "http://" + proxyUrlPart + urlData.pathname + urlData.search;
                return resultUrl
            },
            formatLocalUrl: function(proxyUrl) {
                if (proxyUrl.indexOf(DXPROXY_HOST) < 0) {
                    return proxyUrl
                }
                var resultUrl = proxyUrl;
                for (var proxyUrlPart in urlMapping) {
                    if (Object.prototype.hasOwnProperty.call(urlMapping, proxyUrlPart)) {
                        if (proxyUrl.indexOf(proxyUrlPart) >= 0) {
                            resultUrl = proxyUrl.replace(proxyUrlPart, urlMapping[proxyUrlPart]);
                            break
                        }
                    }
                }
                return resultUrl
            }
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/odata/store.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _utils = __webpack_require__( /*! ./utils */ 96);
        var _proxy_url_formatter = __webpack_require__( /*! ../proxy_url_formatter */ 292);
        var _proxy_url_formatter2 = _interopRequireDefault(_proxy_url_formatter);
        var _errors = __webpack_require__( /*! ../errors */ 38);
        var _query = __webpack_require__( /*! ../query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _abstract_store = __webpack_require__( /*! ../abstract_store */ 103);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _request_dispatcher = __webpack_require__( /*! ./request_dispatcher */ 294);
        var _request_dispatcher2 = _interopRequireDefault(_request_dispatcher);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        __webpack_require__( /*! ./query_adapter */ 162);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var ANONYMOUS_KEY_NAME = "5d46402c-7899-4ea9-bd81-8b73c47c7683";
        var expandKeyType = function(key, keyType) {
            return _defineProperty({}, key, keyType)
        };
        var mergeFieldTypesWithKeyType = function(fieldTypes, keyType) {
            var result = {};
            for (var field in fieldTypes) {
                result[field] = fieldTypes[field]
            }
            for (var keyName in keyType) {
                if (keyName in result) {
                    if (result[keyName] !== keyType[keyName]) {
                        _errors.errors.log("W4001", keyName)
                    }
                } else {
                    result[keyName] = keyType[keyName]
                }
            }
            return result
        };
        var ODataStore = _abstract_store2.default.inherit({
            ctor: function(options) {
                this.callBase(options);
                this._requestDispatcher = new _request_dispatcher2.default(options);
                var key = this.key();
                var fieldTypes = options.fieldTypes;
                var keyType = options.keyType;
                if (keyType) {
                    var keyTypeIsString = "string" === typeof keyType;
                    if (!key) {
                        key = keyTypeIsString ? ANONYMOUS_KEY_NAME : Object.keys(keyType);
                        this._legacyAnonymousKey = key
                    }
                    if (keyTypeIsString) {
                        keyType = expandKeyType(key, keyType)
                    }
                    fieldTypes = mergeFieldTypesWithKeyType(fieldTypes, keyType)
                }
                this._fieldTypes = fieldTypes || {};
                if (2 === this.version()) {
                    this._updateMethod = "MERGE"
                } else {
                    this._updateMethod = "PATCH"
                }
            },
            _customLoadOptions: function() {
                return ["expand", "customQueryParams"]
            },
            _byKeyImpl: function(key, extraOptions) {
                var params = {};
                if (extraOptions) {
                    params.$expand = (0, _utils.generateExpand)(this.version(), extraOptions.expand, extraOptions.select) || void 0;
                    params.$select = (0, _utils.generateSelect)(this.version(), extraOptions.select) || void 0
                }
                return this._requestDispatcher.sendRequest(this._byKeyUrl(key), "GET", params)
            },
            createQuery: function(loadOptions) {
                var _loadOptions$urlOverr;
                var url;
                var queryOptions = {
                    adapter: "odata",
                    beforeSend: this._requestDispatcher.beforeSend,
                    errorHandler: this._errorHandler,
                    jsonp: this._requestDispatcher.jsonp,
                    version: this._requestDispatcher.version,
                    withCredentials: this._requestDispatcher._withCredentials,
                    expand: null === loadOptions || void 0 === loadOptions ? void 0 : loadOptions.expand,
                    requireTotalCount: null === loadOptions || void 0 === loadOptions ? void 0 : loadOptions.requireTotalCount,
                    deserializeDates: this._requestDispatcher._deserializeDates,
                    fieldTypes: this._fieldTypes
                };
                url = null !== (_loadOptions$urlOverr = null === loadOptions || void 0 === loadOptions ? void 0 : loadOptions.urlOverride) && void 0 !== _loadOptions$urlOverr ? _loadOptions$urlOverr : this._requestDispatcher.url;
                if ((0, _type.isDefined)(this._requestDispatcher.filterToLower)) {
                    queryOptions.filterToLower = this._requestDispatcher.filterToLower
                }
                if (null === loadOptions || void 0 === loadOptions ? void 0 : loadOptions.customQueryParams) {
                    var params = (0, _utils.escapeServiceOperationParams)(null === loadOptions || void 0 === loadOptions ? void 0 : loadOptions.customQueryParams, this.version());
                    if (4 === this.version()) {
                        url = (0, _utils.formatFunctionInvocationUrl)(url, params)
                    } else {
                        queryOptions.params = params
                    }
                }
                return (0, _query2.default)(url, queryOptions)
            },
            _insertImpl: function(values) {
                var _this = this;
                this._requireKey();
                var d = new _deferred.Deferred;
                (0, _deferred.when)(this._requestDispatcher.sendRequest(this._requestDispatcher.url, "POST", null, values)).done(function(serverResponse) {
                    return d.resolve(serverResponse && !(0, _config2.default)().useLegacyStoreResult ? serverResponse : values, _this.keyOf(serverResponse))
                }).fail(d.reject);
                return d.promise()
            },
            _updateImpl: function(key, values) {
                var d = new _deferred.Deferred;
                (0, _deferred.when)(this._requestDispatcher.sendRequest(this._byKeyUrl(key), this._updateMethod, null, values)).done(function(serverResponse) {
                    return (0, _config2.default)().useLegacyStoreResult ? d.resolve(key, values) : d.resolve(serverResponse || values, key)
                }).fail(d.reject);
                return d.promise()
            },
            _removeImpl: function(key) {
                var d = new _deferred.Deferred;
                (0, _deferred.when)(this._requestDispatcher.sendRequest(this._byKeyUrl(key), "DELETE")).done(function() {
                    return d.resolve(key)
                }).fail(d.reject);
                return d.promise()
            },
            _convertKey: function(value) {
                var result = value;
                var fieldTypes = this._fieldTypes;
                var key = this.key() || this._legacyAnonymousKey;
                if (Array.isArray(key)) {
                    result = {};
                    for (var i = 0; i < key.length; i++) {
                        var keyName = key[i];
                        result[keyName] = (0, _utils.convertPrimitiveValue)(fieldTypes[keyName], value[keyName])
                    }
                } else {
                    if (fieldTypes[key]) {
                        result = (0, _utils.convertPrimitiveValue)(fieldTypes[key], value)
                    }
                }
                return result
            },
            _byKeyUrl: function(value, useOriginalHost) {
                var baseUrl = useOriginalHost ? _proxy_url_formatter2.default.formatLocalUrl(this._requestDispatcher.url) : this._requestDispatcher.url;
                var convertedKey = this._convertKey(value);
                return "".concat(baseUrl, "(").concat(encodeURIComponent((0, _utils.serializeKey)(convertedKey, this.version())), ")")
            },
            version: function() {
                return this._requestDispatcher.version
            }
        }, "odata");
        module.exports = ODataStore
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/data/odata/request_dispatcher.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _utils = __webpack_require__( /*! ./utils */ 96);
        __webpack_require__( /*! ./query_adapter */ 162);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DEFAULT_PROTOCOL_VERSION = 2;
        var RequestDispatcher = function() {
            function RequestDispatcher(options) {
                _classCallCheck(this, RequestDispatcher);
                options = options || {};
                this._url = String(options.url).replace(/\/+$/, "");
                this._beforeSend = options.beforeSend;
                this._jsonp = options.jsonp;
                this._version = options.version || DEFAULT_PROTOCOL_VERSION;
                this._withCredentials = options.withCredentials;
                this._deserializeDates = options.deserializeDates;
                this._filterToLower = options.filterToLower
            }
            _createClass(RequestDispatcher, [{
                key: "sendRequest",
                value: function(url, method, params, payload) {
                    return (0, _utils.sendRequest)(this.version, {
                        url: url,
                        method: method,
                        params: params || {},
                        payload: payload
                    }, {
                        beforeSend: this._beforeSend,
                        jsonp: this._jsonp,
                        withCredentials: this._withCredentials,
                        deserializeDates: this._deserializeDates
                    })
                }
            }, {
                key: "version",
                get: function() {
                    return this._version
                }
            }, {
                key: "beforeSend",
                get: function() {
                    return this._beforeSend
                }
            }, {
                key: "url",
                get: function() {
                    return this._url
                }
            }, {
                key: "jsonp",
                get: function() {
                    return this._jsonp
                }
            }, {
                key: "filterToLower",
                get: function() {
                    return this._filterToLower
                }
            }]);
            return RequestDispatcher
        }();
        exports.default = RequestDispatcher
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/file_management/file_system_item.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _utils = __webpack_require__( /*! ./utils */ 221);

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var FileSystemItem = function() {
            function FileSystemItem() {
                _classCallCheck(this, FileSystemItem);
                var ctor = (0, _type.isString)(arguments[0]) ? this._publicCtor : this._internalCtor;
                ctor.apply(this, arguments)
            }
            _createClass(FileSystemItem, [{
                key: "_internalCtor",
                value: function(pathInfo, name, isDirectory) {
                    this.name = name || "";
                    this.pathInfo = pathInfo && _toConsumableArray(pathInfo) || [];
                    this.parentPath = this._getPathByPathInfo(this.pathInfo);
                    this.relativeName = (0, _utils.pathCombine)(this.parentPath, name);
                    this.key = this._getPathByPathInfo(this.getFullPathInfo(), true);
                    this.path = (0, _utils.pathCombine)(this.parentPath, name);
                    this.pathKeys = this.pathInfo.map(function(_ref) {
                        var key = _ref.key;
                        return key
                    });
                    if (!this.isRoot()) {
                        this.pathKeys.push(this.key)
                    }
                    this._initialize(isDirectory)
                }
            }, {
                key: "_publicCtor",
                value: function(path, isDirectory, pathKeys) {
                    this.path = path || "";
                    this.pathKeys = pathKeys || [];
                    var pathInfo = [];
                    var parts = (0, _utils.getPathParts)(path, true);
                    for (var i = 0; i < parts.length - 1; i++) {
                        var part = parts[i];
                        var pathInfoPart = {
                            key: this.pathKeys[i] || part,
                            name: (0, _utils.getName)(part)
                        };
                        pathInfo.push(pathInfoPart)
                    }
                    this.pathInfo = pathInfo;
                    this.relativeName = path;
                    this.name = (0, _utils.getName)(path);
                    this.key = this.pathKeys.length ? this.pathKeys[this.pathKeys.length - 1] : path;
                    this.parentPath = parts.length > 1 ? parts[parts.length - 2] : "";
                    this._initialize(isDirectory)
                }
            }, {
                key: "_initialize",
                value: function(isDirectory) {
                    this.isDirectory = !!isDirectory;
                    this.size = 0;
                    this.dateModified = new Date;
                    this.thumbnail = "";
                    this.tooltipText = ""
                }
            }, {
                key: "getFullPathInfo",
                value: function() {
                    var pathInfo = _toConsumableArray(this.pathInfo);
                    if (!this.isRoot()) {
                        pathInfo.push({
                            key: this.key,
                            name: this.name
                        })
                    }
                    return pathInfo
                }
            }, {
                key: "isRoot",
                value: function() {
                    return "" === this.path
                }
            }, {
                key: "getFileExtension",
                value: function() {
                    return this.isDirectory ? "" : (0, _utils.getFileExtension)(this.name)
                }
            }, {
                key: "equals",
                value: function(item) {
                    return item && this.key === item.key
                }
            }, {
                key: "createClone",
                value: function() {
                    var result = new FileSystemItem(this.pathInfo, this.name, this.isDirectory);
                    result.key = this.key;
                    result.size = this.size;
                    result.dateModified = this.dateModified;
                    result.thumbnail = this.thumbnail;
                    result.tooltipText = this.tooltipText;
                    result.hasSubDirectories = this.hasSubDirectories;
                    result.dataItem = this.dataItem;
                    return result
                }
            }, {
                key: "_getPathByPathInfo",
                value: function(pathInfo, escape) {
                    return pathInfo.map(function(info) {
                        return escape ? (0, _utils.getEscapedFileName)(info.name) : info.name
                    }).join(_utils.PATH_SEPARATOR)
                }
            }]);
            return FileSystemItem
        }();
        module.exports = FileSystemItem
    },
    /*!*******************************!*\
      !*** external "window.JSZip" ***!
      \*******************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.JSZip
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/number.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 31).fitIntoRange;
        var toFixed = __webpack_require__( /*! ../utils */ 271).toFixed;
        var DEFAULT_CONFIG = {
            thousandsSeparator: ",",
            decimalSeparator: "."
        };
        var ESCAPING_CHAR = "'";
        var MAXIMUM_NUMBER_LENGTH = 15;

        function getGroupSizes(formatString) {
            return formatString.split(",").slice(1).map(function(str) {
                return str.split("").filter(function(char) {
                    return "#" === char || "0" === char
                }).length
            })
        }

        function getSignParts(format) {
            var signParts = format.split(";");
            if (1 === signParts.length) {
                signParts.push("-" + signParts[0])
            }
            return signParts
        }

        function reverseString(str) {
            return str.toString().split("").reverse().join("")
        }

        function isPercentFormat(format) {
            return format.indexOf("%") !== -1 && !format.match(/'[^']*%[^']*'/g)
        }

        function getNonRequiredDigitCount(floatFormat) {
            if (!floatFormat) {
                return 0
            }
            return floatFormat.length - floatFormat.replace(/[#]/g, "").length
        }

        function getRequiredDigitCount(floatFormat) {
            if (!floatFormat) {
                return 0
            }
            return floatFormat.length - floatFormat.replace(/[0]/g, "").length
        }

        function normalizeValueString(valuePart, minDigitCount, maxDigitCount) {
            if (!valuePart) {
                return ""
            }
            if (valuePart.length > maxDigitCount) {
                valuePart = valuePart.substr(0, maxDigitCount)
            }
            while (valuePart.length > minDigitCount && "0" === valuePart.slice(-1)) {
                valuePart = valuePart.substr(0, valuePart.length - 1)
            }
            while (valuePart.length < minDigitCount) {
                valuePart += "0"
            }
            return valuePart
        }

        function applyGroups(valueString, groupSizes, thousandsSeparator) {
            if (!groupSizes.length) {
                return valueString
            }
            var groups = [];
            var index = 0;
            while (valueString) {
                var groupSize = groupSizes[index];
                if (!groupSize) {
                    break
                }
                groups.push(valueString.slice(0, groupSize));
                valueString = valueString.slice(groupSize);
                if (index < groupSizes.length - 1) {
                    index++
                }
            }
            return groups.join(thousandsSeparator)
        }

        function formatNumberPart(format, valueString) {
            return format.split(ESCAPING_CHAR).map(function(formatPart, escapeIndex) {
                var isEscape = escapeIndex % 2;
                if (!formatPart && isEscape) {
                    return ESCAPING_CHAR
                }
                return isEscape ? formatPart : formatPart.replace(/[,#0]+/, valueString)
            }).join("")
        }

        function getFloatPointIndex(format) {
            var isEscape = false;
            for (var index = 0; index < format.length; index++) {
                if ("'" === format[index]) {
                    isEscape = !isEscape
                }
                if ("." === format[index] && !isEscape) {
                    return index
                }
            }
            return format.length
        }

        function getFormatter(format, config) {
            config = config || DEFAULT_CONFIG;
            return function(value) {
                if ("number" !== typeof value || isNaN(value)) {
                    return ""
                }
                var signFormatParts = getSignParts(format);
                var isPositiveZero = 1 / value === 1 / 0;
                var isPositive = value > 0 || isPositiveZero;
                var numberFormat = signFormatParts[isPositive ? 0 : 1];
                if (isPercentFormat(numberFormat)) {
                    value = 100 * value
                }
                if (!isPositive) {
                    value = -value
                }
                var floatPointIndex = getFloatPointIndex(numberFormat);
                var floatFormatParts = [numberFormat.substr(0, floatPointIndex), numberFormat.substr(floatPointIndex + 1)];
                var minFloatPrecision = getRequiredDigitCount(floatFormatParts[1]);
                var maxFloatPrecision = minFloatPrecision + getNonRequiredDigitCount(floatFormatParts[1]);
                var minIntegerPrecision = getRequiredDigitCount(floatFormatParts[0]);
                var maxIntegerPrecision = getNonRequiredDigitCount(floatFormatParts[0]) || config.unlimitedIntegerDigits ? void 0 : minIntegerPrecision;
                var integerLength = Math.floor(value).toString().length;
                var floatPrecision = fitIntoRange(maxFloatPrecision, 0, MAXIMUM_NUMBER_LENGTH - integerLength);
                var groupSizes = getGroupSizes(floatFormatParts[0]).reverse();
                var valueParts = toFixed(value, floatPrecision < 0 ? 0 : floatPrecision).split(".");
                var valueIntegerPart = normalizeValueString(reverseString(valueParts[0]), minIntegerPrecision, maxIntegerPrecision);
                var valueFloatPart = normalizeValueString(valueParts[1], minFloatPrecision, maxFloatPrecision);
                valueIntegerPart = applyGroups(valueIntegerPart, groupSizes, config.thousandsSeparator);
                var integerString = reverseString(formatNumberPart(reverseString(floatFormatParts[0]), valueIntegerPart));
                var floatString = maxFloatPrecision ? formatNumberPart(floatFormatParts[1], valueFloatPart) : "";
                var result = integerString + (floatString.match(/\d/) ? config.decimalSeparator : "") + floatString;
                return result
            }
        }

        function parseValue(text, isPercent, isNegative) {
            var value = (isPercent ? .01 : 1) * parseFloat(text) || 0;
            return isNegative ? -value : value
        }

        function prepareValueText(valueText, formatter, isPercent, isIntegerPart) {
            var nextValueText = valueText;
            var char;
            var text;
            var nextText;
            do {
                if (nextText) {
                    char = text.length === nextText.length ? "0" : "1";
                    valueText = isIntegerPart ? char + valueText : valueText + char
                }
                text = nextText || formatter(parseValue(nextValueText, isPercent));
                nextValueText = isIntegerPart ? "1" + nextValueText : nextValueText + "1";
                nextText = formatter(parseValue(nextValueText, isPercent))
            } while (text !== nextText && (isIntegerPart ? text.length === nextText.length : text.length <= nextText.length));
            if (isIntegerPart && nextText.length > text.length) {
                var hasGroups = formatter(12345).indexOf("12345") === -1;
                do {
                    valueText = "1" + valueText
                } while (hasGroups && parseValue(valueText, isPercent) < 1e5)
            }
            return valueText
        }

        function getFormatByValueText(valueText, formatter, isPercent, isNegative) {
            var format = formatter(parseValue(valueText, isPercent, isNegative));
            var valueTextParts = valueText.split(".");
            var valueTextWithModifiedFloat = valueTextParts[0] + ".3" + valueTextParts[1].slice(1);
            var valueWithModifiedFloat = parseValue(valueTextWithModifiedFloat, isPercent, isNegative);
            var decimalSeparatorIndex = formatter(valueWithModifiedFloat).indexOf("3") - 1;
            format = format.replace(/(\d)\D(\d)/g, "$1,$2");
            if (decimalSeparatorIndex >= 0) {
                format = format.slice(0, decimalSeparatorIndex) + "." + format.slice(decimalSeparatorIndex + 1)
            }
            format = format.replace(/1+/, "1").replace(/1/g, "#");
            if (!isPercent) {
                format = format.replace("%", "'%'")
            }
            return format
        }

        function getFormat(formatter) {
            var valueText = ".";
            var isPercent = formatter(1).indexOf("100") >= 0;
            valueText = prepareValueText(valueText, formatter, isPercent, true);
            valueText = prepareValueText(valueText, formatter, isPercent, false);
            var positiveFormat = getFormatByValueText(valueText, formatter, isPercent, false);
            var negativeFormat = getFormatByValueText(valueText, formatter, isPercent, true);
            return negativeFormat === "-" + positiveFormat ? positiveFormat : positiveFormat + ";" + negativeFormat
        }
        exports.getFormatter = getFormatter;
        exports.getFormat = getFormat
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/language_codes.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var locale = __webpack_require__( /*! ./core */ 83).locale;
        var LANGUAGE_CODES = {
            ar: 1,
            bg: 2,
            ca: 3,
            "zh-Hans": 4,
            cs: 5,
            da: 6,
            de: 7,
            el: 8,
            en: 9,
            es: 10,
            fi: 11,
            fr: 12,
            he: 13,
            hu: 14,
            is: 15,
            it: 16,
            ja: 17,
            ko: 18,
            nl: 19,
            no: 20,
            pl: 21,
            pt: 22,
            rm: 23,
            ro: 24,
            ru: 25,
            hr: 26,
            sk: 27,
            sq: 28,
            sv: 29,
            th: 30,
            tr: 31,
            ur: 32,
            id: 33,
            uk: 34,
            be: 35,
            sl: 36,
            et: 37,
            lv: 38,
            lt: 39,
            tg: 40,
            fa: 41,
            vi: 42,
            hy: 43,
            az: 44,
            eu: 45,
            hsb: 46,
            mk: 47,
            tn: 50,
            xh: 52,
            zu: 53,
            af: 54,
            ka: 55,
            fo: 56,
            hi: 57,
            mt: 58,
            se: 59,
            ga: 60,
            ms: 62,
            kk: 63,
            ky: 64,
            sw: 65,
            tk: 66,
            uz: 67,
            tt: 68,
            bn: 69,
            pa: 70,
            gu: 71,
            or: 72,
            ta: 73,
            te: 74,
            kn: 75,
            ml: 76,
            as: 77,
            mr: 78,
            sa: 79,
            mn: 80,
            bo: 81,
            cy: 82,
            km: 83,
            lo: 84,
            gl: 86,
            kok: 87,
            syr: 90,
            si: 91,
            iu: 93,
            am: 94,
            tzm: 95,
            ne: 97,
            fy: 98,
            ps: 99,
            fil: 100,
            dv: 101,
            ha: 104,
            yo: 106,
            quz: 107,
            nso: 108,
            ba: 109,
            lb: 110,
            kl: 111,
            ig: 112,
            ii: 120,
            arn: 122,
            moh: 124,
            br: 126,
            ug: 128,
            mi: 129,
            oc: 130,
            co: 131,
            gsw: 132,
            sah: 133,
            qut: 134,
            rw: 135,
            wo: 136,
            prs: 140,
            gd: 145,
            "ar-SA": 1025,
            "bg-BG": 1026,
            "ca-ES": 1027,
            "zh-TW": 1028,
            "cs-CZ": 1029,
            "da-DK": 1030,
            "de-DE": 1031,
            "el-GR": 1032,
            "en-US": 1033,
            "fi-FI": 1035,
            "fr-FR": 1036,
            "he-IL": 1037,
            "hu-HU": 1038,
            "is-IS": 1039,
            "it-IT": 1040,
            "ja-JP": 1041,
            "ko-KR": 1042,
            "nl-NL": 1043,
            "nb-NO": 1044,
            "pl-PL": 1045,
            "pt-BR": 1046,
            "rm-CH": 1047,
            "ro-RO": 1048,
            "ru-RU": 1049,
            "hr-HR": 1050,
            "sk-SK": 1051,
            "sq-AL": 1052,
            "sv-SE": 1053,
            "th-TH": 1054,
            "tr-TR": 1055,
            "ur-PK": 1056,
            "id-ID": 1057,
            "uk-UA": 1058,
            "be-BY": 1059,
            "sl-SI": 1060,
            "et-EE": 1061,
            "lv-LV": 1062,
            "lt-LT": 1063,
            "tg-Cyrl-TJ": 1064,
            "fa-IR": 1065,
            "vi-VN": 1066,
            "hy-AM": 1067,
            "az-Latn-AZ": 1068,
            "eu-ES": 1069,
            "hsb-DE": 1070,
            "mk-MK": 1071,
            "tn-ZA": 1074,
            "xh-ZA": 1076,
            "zu-ZA": 1077,
            "af-ZA": 1078,
            "ka-GE": 1079,
            "fo-FO": 1080,
            "hi-IN": 1081,
            "mt-MT": 1082,
            "se-NO": 1083,
            "ms-MY": 1086,
            "kk-KZ": 1087,
            "ky-KG": 1088,
            "sw-KE": 1089,
            "tk-TM": 1090,
            "uz-Latn-UZ": 1091,
            "tt-RU": 1092,
            "bn-IN": 1093,
            "pa-IN": 1094,
            "gu-IN": 1095,
            "or-IN": 1096,
            "ta-IN": 1097,
            "te-IN": 1098,
            "kn-IN": 1099,
            "ml-IN": 1100,
            "as-IN": 1101,
            "mr-IN": 1102,
            "sa-IN": 1103,
            "mn-MN": 1104,
            "bo-CN": 1105,
            "cy-GB": 1106,
            "km-KH": 1107,
            "lo-LA": 1108,
            "gl-ES": 1110,
            "kok-IN": 1111,
            "syr-SY": 1114,
            "si-LK": 1115,
            "iu-Cans-CA": 1117,
            "am-ET": 1118,
            "ne-NP": 1121,
            "fy-NL": 1122,
            "ps-AF": 1123,
            "fil-PH": 1124,
            "dv-MV": 1125,
            "ha-Latn-NG": 1128,
            "yo-NG": 1130,
            "quz-BO": 1131,
            "nso-ZA": 1132,
            "ba-RU": 1133,
            "lb-LU": 1134,
            "kl-GL": 1135,
            "ig-NG": 1136,
            "ii-CN": 1144,
            "arn-CL": 1146,
            "moh-CA": 1148,
            "br-FR": 1150,
            "ug-CN": 1152,
            "mi-NZ": 1153,
            "oc-FR": 1154,
            "co-FR": 1155,
            "gsw-FR": 1156,
            "sah-RU": 1157,
            "qut-GT": 1158,
            "rw-RW": 1159,
            "wo-SN": 1160,
            "prs-AF": 1164,
            "gd-GB": 1169,
            "ar-IQ": 2049,
            "zh-CN": 2052,
            "de-CH": 2055,
            "en-GB": 2057,
            "es-MX": 2058,
            "fr-BE": 2060,
            "it-CH": 2064,
            "nl-BE": 2067,
            "nn-NO": 2068,
            "pt-PT": 2070,
            "sr-Latn-CS": 2074,
            "sv-FI": 2077,
            "az-Cyrl-AZ": 2092,
            "dsb-DE": 2094,
            "se-SE": 2107,
            "ga-IE": 2108,
            "ms-BN": 2110,
            "uz-Cyrl-UZ": 2115,
            "bn-BD": 2117,
            "mn-Mong-CN": 2128,
            "iu-Latn-CA": 2141,
            "tzm-Latn-DZ": 2143,
            "quz-EC": 2155,
            "ar-EG": 3073,
            "zh-HK": 3076,
            "de-AT": 3079,
            "en-AU": 3081,
            "es-ES": 3082,
            "fr-CA": 3084,
            "sr-Cyrl-CS": 3098,
            "se-FI": 3131,
            "quz-PE": 3179,
            "ar-LY": 4097,
            "zh-SG": 4100,
            "de-LU": 4103,
            "en-CA": 4105,
            "es-GT": 4106,
            "fr-CH": 4108,
            "hr-BA": 4122,
            "smj-NO": 4155,
            "ar-DZ": 5121,
            "zh-MO": 5124,
            "de-LI": 5127,
            "en-NZ": 5129,
            "es-CR": 5130,
            "fr-LU": 5132,
            "bs-Latn-BA": 5146,
            "smj-SE": 5179,
            "ar-MA": 6145,
            "en-IE": 6153,
            "es-PA": 6154,
            "fr-MC": 6156,
            "sr-Latn-BA": 6170,
            "sma-NO": 6203,
            "ar-TN": 7169,
            "en-ZA": 7177,
            "es-DO": 7178,
            "sr-Cyrl-BA": 7194,
            "sma-SE": 7227,
            "ar-OM": 8193,
            "en-JM": 8201,
            "es-VE": 8202,
            "bs-Cyrl-BA": 8218,
            "sms-FI": 8251,
            "ar-YE": 9217,
            "en-029": 9225,
            "es-CO": 9226,
            "sr-Latn-RS": 9242,
            "smn-FI": 9275,
            "ar-SY": 10241,
            "en-BZ": 10249,
            "es-PE": 10250,
            "sr-Cyrl-RS": 10266,
            "ar-JO": 11265,
            "en-TT": 11273,
            "es-AR": 11274,
            "sr-Latn-ME": 11290,
            "ar-LB": 12289,
            "en-ZW": 12297,
            "es-EC": 12298,
            "sr-Cyrl-ME": 12314,
            "ar-KW": 13313,
            "en-PH": 13321,
            "es-CL": 13322,
            "ar-AE": 14337,
            "es-UY": 14346,
            "ar-BH": 15361,
            "es-PY": 15370,
            "ar-QA": 16385,
            "en-IN": 16393,
            "es-BO": 16394,
            "en-MY": 17417,
            "es-SV": 17418,
            "en-SG": 18441,
            "es-HN": 18442,
            "es-NI": 19466,
            "es-PR": 20490,
            "es-US": 21514,
            "bs-Cyrl": 25626,
            "bs-Latn": 26650,
            "sr-Cyrl": 27674,
            "sr-Latn": 28698,
            smn: 28731,
            "az-Cyrl": 29740,
            sms: 29755,
            zh: 30724,
            nn: 30740,
            bs: 30746,
            "az-Latn": 30764,
            sma: 30779,
            "uz-Cyrl": 30787,
            "mn-Cyrl": 30800,
            "iu-Cans": 30813,
            "zh-Hant": 31748,
            nb: 31764,
            sr: 31770,
            "tg-Cyrl": 31784,
            dsb: 31790,
            smj: 31803,
            "uz-Latn": 31811,
            "mn-Mong": 31824,
            "iu-Latn": 31837,
            "tzm-Latn": 31839,
            "ha-Latn": 31848
        };
        exports.getLanguageId = function() {
            return LANGUAGE_CODES[locale()]
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/storage.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var getSessionStorage = function() {
            var sessionStorage;
            try {
                sessionStorage = window.sessionStorage
            } catch (e) {}
            return sessionStorage
        };
        exports.sessionStorage = getSessionStorage
    },
    /*!***********************************************************************************!*\
      !*** ./artifacts/transpiled/animation/transition_executor/transition_executor.js ***!
      \***********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var fx = __webpack_require__( /*! ../fx */ 40);
        var animationPresetsModule = __webpack_require__( /*! ../presets/presets */ 188);
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var when = deferredUtils.when;
        var Deferred = deferredUtils.Deferred;
        var directionPostfixes = {
            forward: " dx-forward",
            backward: " dx-backward",
            none: " dx-no-direction",
            undefined: " dx-no-direction"
        };
        var DX_ANIMATING_CLASS = "dx-animating";
        var TransitionExecutor = Class.inherit({
            ctor: function() {
                this._accumulatedDelays = {
                    enter: 0,
                    leave: 0
                };
                this._animations = [];
                this.reset()
            },
            _createAnimations: function($elements, initialConfig, configModifier, type) {
                var that = this;
                var result = [];
                configModifier = configModifier || {};
                var animationConfig = this._prepareElementAnimationConfig(initialConfig, configModifier, type);
                if (animationConfig) {
                    $elements.each(function() {
                        var animation = that._createAnimation($(this), animationConfig, configModifier);
                        if (animation) {
                            animation.element.addClass(DX_ANIMATING_CLASS);
                            animation.setup();
                            result.push(animation)
                        }
                    })
                }
                return result
            },
            _prepareElementAnimationConfig: function(config, configModifier, type) {
                var result;
                if ("string" === typeof config) {
                    var presetName = config;
                    config = animationPresetsModule.presets.getPreset(presetName)
                }
                if (!config) {
                    result = void 0
                } else {
                    if (typeUtils.isFunction(config[type])) {
                        result = config[type]
                    } else {
                        result = extend({
                            skipElementInitialStyles: true,
                            cleanupWhen: this._completePromise
                        }, config, configModifier);
                        if (!result.type || "css" === result.type) {
                            var cssClass = "dx-" + type;
                            var extraCssClasses = (result.extraCssClasses ? " " + result.extraCssClasses : "") + directionPostfixes[result.direction];
                            result.type = "css";
                            result.from = (result.from || cssClass) + extraCssClasses;
                            result.to = result.to || cssClass + "-active"
                        }
                        result.staggerDelay = result.staggerDelay || 0;
                        result.delay = result.delay || 0;
                        if (result.staggerDelay) {
                            result.delay += this._accumulatedDelays[type];
                            this._accumulatedDelays[type] += result.staggerDelay
                        }
                    }
                }
                return result
            },
            _createAnimation: function($element, animationConfig, configModifier) {
                var result;
                if (typeUtils.isPlainObject(animationConfig)) {
                    result = fx.createAnimation($element, animationConfig)
                } else {
                    if (typeUtils.isFunction(animationConfig)) {
                        result = animationConfig($element, configModifier)
                    }
                }
                return result
            },
            _startAnimations: function() {
                var animations = this._animations;
                for (var i = 0; i < animations.length; i++) {
                    animations[i].start()
                }
            },
            _stopAnimations: function(jumpToEnd) {
                var animations = this._animations;
                for (var i = 0; i < animations.length; i++) {
                    animations[i].stop(jumpToEnd)
                }
            },
            _clearAnimations: function() {
                var animations = this._animations;
                for (var i = 0; i < animations.length; i++) {
                    animations[i].element.removeClass(DX_ANIMATING_CLASS)
                }
                this._animations.length = 0
            },
            reset: function() {
                this._accumulatedDelays.enter = 0;
                this._accumulatedDelays.leave = 0;
                this._clearAnimations();
                this._completeDeferred = new Deferred;
                this._completePromise = this._completeDeferred.promise()
            },
            enter: function($elements, animationConfig, configModifier) {
                var animations = this._createAnimations($elements, animationConfig, configModifier, "enter");
                this._animations.push.apply(this._animations, animations)
            },
            leave: function($elements, animationConfig, configModifier) {
                var animations = this._createAnimations($elements, animationConfig, configModifier, "leave");
                this._animations.push.apply(this._animations, animations)
            },
            start: function() {
                var that = this;
                var result;
                if (!this._animations.length) {
                    that.reset();
                    result = (new Deferred).resolve().promise()
                } else {
                    var animationDeferreds = iteratorUtils.map(this._animations, function(animation) {
                        var result = new Deferred;
                        animation.deferred.always(function() {
                            result.resolve()
                        });
                        return result.promise()
                    });
                    result = when.apply($, animationDeferreds).always(function() {
                        that._completeDeferred.resolve();
                        that.reset()
                    });
                    commonUtils.executeAsync(function() {
                        that._startAnimations()
                    })
                }
                return result
            },
            stop: function(jumpToEnd) {
                this._stopAnimations(jumpToEnd)
            }
        });
        exports.TransitionExecutor = TransitionExecutor
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/overlay/ui.overlay.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var ready = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51).add;
        var window = windowUtils.getWindow();
        var navigator = windowUtils.getNavigator();
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var compareVersions = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var viewPortUtils = __webpack_require__( /*! ../../core/utils/view_port */ 76);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 11).getPublicElement;
        var viewPortChanged = viewPortUtils.changeCallback;
        var hideTopOverlayCallback = __webpack_require__( /*! ../../mobile/hide_top_overlay */ 220).hideCallback;
        var positionUtils = __webpack_require__( /*! ../../animation/position */ 74);
        var fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 31).fitIntoRange;
        var domUtils = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var Widget = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var keyboard = __webpack_require__( /*! ../../events/short */ 116).keyboard;
        var selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var dragEvents = __webpack_require__( /*! ../../events/drag */ 69);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../../events/pointer */ 23);
        var Resizable = __webpack_require__( /*! ../resizable */ 181);
        var EmptyTemplate = __webpack_require__( /*! ../../core/templates/empty_template */ 87).EmptyTemplate;
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var zIndexPool = __webpack_require__( /*! ./z_index */ 182);
        var swatch = __webpack_require__( /*! ../widget/swatch_container */ 157);
        var OVERLAY_CLASS = "dx-overlay";
        var OVERLAY_WRAPPER_CLASS = "dx-overlay-wrapper";
        var OVERLAY_CONTENT_CLASS = "dx-overlay-content";
        var OVERLAY_SHADER_CLASS = "dx-overlay-shader";
        var OVERLAY_MODAL_CLASS = "dx-overlay-modal";
        var INNER_OVERLAY_CLASS = "dx-inner-overlay";
        var INVISIBLE_STATE_CLASS = "dx-state-invisible";
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var RTL_DIRECTION_CLASS = "dx-rtl";
        var ACTIONS = ["onShowing", "onShown", "onHiding", "onHidden", "onPositioning", "onPositioned", "onResizeStart", "onResize", "onResizeEnd"];
        var OVERLAY_STACK = [];
        var DISABLED_STATE_CLASS = "dx-state-disabled";
        var PREVENT_SAFARI_SCROLLING_CLASS = "dx-prevent-safari-scrolling";
        var TAB_KEY = "tab";
        var POSITION_ALIASES = {
            top: {
                my: "top center",
                at: "top center"
            },
            bottom: {
                my: "bottom center",
                at: "bottom center"
            },
            right: {
                my: "right center",
                at: "right center"
            },
            left: {
                my: "left center",
                at: "left center"
            },
            center: {
                my: "center",
                at: "center"
            },
            "right bottom": {
                my: "right bottom",
                at: "right bottom"
            },
            "right top": {
                my: "right top",
                at: "right top"
            },
            "left bottom": {
                my: "left bottom",
                at: "left bottom"
            },
            "left top": {
                my: "left top",
                at: "left top"
            }
        };
        var realDevice = devices.real();
        var realVersion = realDevice.version;
        var firefoxDesktop = browser.mozilla && "desktop" === realDevice.deviceType;
        var iOS = "ios" === realDevice.platform;
        var hasSafariAddressBar = browser.safari && "desktop" !== realDevice.deviceType;
        var android4_0nativeBrowser = "android" === realDevice.platform && 0 === compareVersions(realVersion, [4, 0], 2) && navigator.userAgent.indexOf("Chrome") === -1;
        var forceRepaint = function($element) {
            if (firefoxDesktop) {
                $element.width()
            }
            if (android4_0nativeBrowser) {
                var $parents = $element.parents();
                var inScrollView = $parents.is(".dx-scrollable-native");
                if (!inScrollView) {
                    $parents.css("backfaceVisibility", "hidden");
                    $parents.css("backfaceVisibility");
                    $parents.css("backfaceVisibility", "visible")
                }
            }
        };
        var getElement = function(value) {
            return value && $(value.target || value)
        };
        ready(function() {
            eventsEngine.subscribeGlobal(domAdapter.getDocument(), pointerEvents.down, function(e) {
                for (var i = OVERLAY_STACK.length - 1; i >= 0; i--) {
                    if (!OVERLAY_STACK[i]._proxiedDocumentDownHandler(e)) {
                        return
                    }
                }
            })
        });
        var Overlay = Widget.inherit({
            _supportedKeys: function() {
                var offsetSize = 5;
                var move = function(top, left, e) {
                    if (!this.option("dragEnabled")) {
                        return
                    }
                    e.preventDefault();
                    e.stopPropagation();
                    var allowedOffsets = this._allowedOffsets();
                    var offset = {
                        top: fitIntoRange(top, -allowedOffsets.top, allowedOffsets.bottom),
                        left: fitIntoRange(left, -allowedOffsets.left, allowedOffsets.right)
                    };
                    this._changePosition(offset)
                };
                return extend(this.callBase(), {
                    escape: function() {
                        this.hide()
                    },
                    upArrow: move.bind(this, -offsetSize, 0),
                    downArrow: move.bind(this, offsetSize, 0),
                    leftArrow: move.bind(this, 0, -offsetSize),
                    rightArrow: move.bind(this, 0, offsetSize)
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    activeStateEnabled: false,
                    visible: false,
                    deferRendering: true,
                    shading: true,
                    shadingColor: "",
                    position: {
                        my: "center",
                        at: "center"
                    },
                    width: function() {
                        return .8 * $(window).width()
                    },
                    minWidth: null,
                    maxWidth: null,
                    height: function() {
                        return .8 * $(window).height()
                    },
                    minHeight: null,
                    maxHeight: null,
                    animation: {
                        show: {
                            type: "pop",
                            duration: 300,
                            from: {
                                scale: .55
                            }
                        },
                        hide: {
                            type: "pop",
                            duration: 300,
                            to: {
                                opacity: 0,
                                scale: .55
                            },
                            from: {
                                opacity: 1,
                                scale: 1
                            }
                        }
                    },
                    closeOnOutsideClick: false,
                    onShowing: null,
                    onShown: null,
                    onHiding: null,
                    onHidden: null,
                    contentTemplate: "content",
                    dragEnabled: false,
                    resizeEnabled: false,
                    onResizeStart: null,
                    onResize: null,
                    onResizeEnd: null,
                    innerOverlay: false,
                    target: void 0,
                    container: void 0,
                    hideTopOverlayHandler: function() {
                        this.hide()
                    }.bind(this),
                    closeOnTargetScroll: false,
                    onPositioned: null,
                    boundaryOffset: {
                        h: 0,
                        v: 0
                    },
                    propagateOutsideClick: false,
                    ignoreChildEvents: true,
                    _checkParentVisibility: true
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        var realDevice = devices.real();
                        var realPlatform = realDevice.platform;
                        var realVersion = realDevice.version;
                        return "android" === realPlatform && compareVersions(realVersion, [4, 2]) < 0
                    },
                    options: {
                        animation: {
                            show: {
                                type: "fade",
                                duration: 400
                            },
                            hide: {
                                type: "fade",
                                duration: 400,
                                to: {
                                    opacity: 0
                                },
                                from: {
                                    opacity: 1
                                }
                            }
                        }
                    }
                }, {
                    device: function() {
                        return !windowUtils.hasWindow()
                    },
                    options: {
                        width: null,
                        height: null,
                        animation: null,
                        _checkParentVisibility: false
                    }
                }])
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    animation: true
                })
            },
            _wrapper: function() {
                return this._$wrapper
            },
            _container: function() {
                return this._$content
            },
            _eventBindingTarget: function() {
                return this._$content
            },
            _init: function() {
                this.callBase();
                this._initActions();
                this._initCloseOnOutsideClickHandler();
                this._initTabTerminatorHandler();
                this._$wrapper = $("<div>").addClass(OVERLAY_WRAPPER_CLASS);
                this._$content = $("<div>").addClass(OVERLAY_CONTENT_CLASS);
                this._initInnerOverlayClass();
                var $element = this.$element();
                this._$wrapper.addClass($element.attr("class"));
                $element.addClass(OVERLAY_CLASS);
                this._$wrapper.attr("data-bind", "dxControlsDescendantBindings: true");
                eventsEngine.on(this._$wrapper, "MSPointerDown", noop);
                eventsEngine.on(this._$wrapper, "focusin", function(e) {
                    e.stopPropagation()
                });
                this._toggleViewPortSubscription(true);
                this._initHideTopOverlayHandler(this.option("hideTopOverlayHandler"))
            },
            _initOptions: function(options) {
                this._initTarget(options.target);
                var container = void 0 === options.container ? this.option("container") : options.container;
                this._initContainer(container);
                this.callBase(options)
            },
            _initInnerOverlayClass: function() {
                this._$content.toggleClass(INNER_OVERLAY_CLASS, this.option("innerOverlay"))
            },
            _initTarget: function(target) {
                if (!typeUtils.isDefined(target)) {
                    return
                }
                var options = this.option();
                each(["position.of", "animation.show.from.position.of", "animation.show.to.position.of", "animation.hide.from.position.of", "animation.hide.to.position.of"], function(_, path) {
                    var pathParts = path.split(".");
                    var option = options;
                    while (option) {
                        if (1 === pathParts.length) {
                            if (typeUtils.isPlainObject(option)) {
                                option[pathParts.shift()] = target
                            }
                            break
                        } else {
                            option = option[pathParts.shift()]
                        }
                    }
                })
            },
            _initContainer: function(container) {
                container = void 0 === container ? viewPortUtils.value() : container;
                var $element = this.$element();
                var $container = $element.closest(container);
                if (!$container.length) {
                    $container = $(container).first()
                }
                this._$container = $container.length ? $container : $element.parent()
            },
            _initHideTopOverlayHandler: function(handler) {
                this._hideTopOverlayHandler = handler
            },
            _initActions: function() {
                this._actions = {};
                each(ACTIONS, function(_, action) {
                    this._actions[action] = this._createActionByOption(action, {
                        excludeValidators: ["disabled", "readOnly"]
                    }) || noop
                }.bind(this))
            },
            _initCloseOnOutsideClickHandler: function() {
                var that = this;
                this._proxiedDocumentDownHandler = function() {
                    return that._documentDownHandler.apply(that, arguments)
                }
            },
            _documentDownHandler: function(e) {
                if (this._showAnimationProcessing) {
                    this._stopAnimation()
                }
                var closeOnOutsideClick = this.option("closeOnOutsideClick");
                if (typeUtils.isFunction(closeOnOutsideClick)) {
                    closeOnOutsideClick = closeOnOutsideClick(e)
                }
                var $container = this._$content;
                var isAttachedTarget = $(window.document).is(e.target) || domUtils.contains(window.document, e.target);
                var isInnerOverlay = $(e.target).closest("." + INNER_OVERLAY_CLASS).length;
                var outsideClick = isAttachedTarget && !isInnerOverlay && !($container.is(e.target) || domUtils.contains($container.get(0), e.target));
                if (outsideClick && closeOnOutsideClick) {
                    this._outsideClickHandler(e)
                }
                return this.option("propagateOutsideClick")
            },
            _outsideClickHandler: function(e) {
                if (this.option("shading")) {
                    e.preventDefault()
                }
                this.hide()
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates({
                    content: new EmptyTemplate
                });
                this.callBase()
            },
            _isTopOverlay: function() {
                var overlayStack = this._overlayStack();
                for (var i = overlayStack.length - 1; i >= 0; i--) {
                    var tabbableElements = overlayStack[i]._findTabbableBounds();
                    if (tabbableElements.first || tabbableElements.last) {
                        return overlayStack[i] === this
                    }
                }
                return false
            },
            _overlayStack: function() {
                return OVERLAY_STACK
            },
            _zIndexInitValue: function() {
                return Overlay.baseZIndex()
            },
            _toggleViewPortSubscription: function(toggle) {
                viewPortChanged.remove(this._viewPortChangeHandle);
                if (toggle) {
                    this._viewPortChangeHandle = this._viewPortChangeHandler.bind(this);
                    viewPortChanged.add(this._viewPortChangeHandle)
                }
            },
            _viewPortChangeHandler: function() {
                this._initContainer(this.option("container"));
                this._refresh()
            },
            _renderVisibilityAnimate: function(visible) {
                this._stopAnimation();
                return visible ? this._show() : this._hide()
            },
            _normalizePosition: function() {
                var position = this.option("position");
                this._position = "function" === typeof position ? position() : position
            },
            _getAnimationConfig: function() {
                var animation = this.option("animation");
                if (typeUtils.isFunction(animation)) {
                    animation = animation.call(this)
                }
                return animation
            },
            _show: function() {
                var that = this;
                var deferred = new Deferred;
                this._parentHidden = this._isParentHidden();
                deferred.done(function() {
                    delete that._parentHidden
                });
                if (this._parentHidden) {
                    this._isHidden = true;
                    return deferred.resolve()
                }
                if (this._currentVisible) {
                    return (new Deferred).resolve().promise()
                }
                this._currentVisible = true;
                this._isShown = false;
                this._normalizePosition();
                var animation = that._getAnimationConfig() || {};
                var showAnimation = this._normalizeAnimation(animation.show, "to");
                var startShowAnimation = showAnimation && showAnimation.start || noop;
                var completeShowAnimation = showAnimation && showAnimation.complete || noop;
                if (this._isHidingActionCanceled) {
                    delete this._isHidingActionCanceled;
                    deferred.resolve()
                } else {
                    var show = function() {
                        this._renderVisibility(true);
                        if (this._isShowingActionCanceled) {
                            delete this._isShowingActionCanceled;
                            deferred.resolve();
                            return
                        }
                        this._animate(showAnimation, function() {
                            if (that.option("focusStateEnabled")) {
                                eventsEngine.trigger(that._focusTarget(), "focus")
                            }
                            completeShowAnimation.apply(this, arguments);
                            that._showAnimationProcessing = false;
                            that._isShown = true;
                            that._actions.onShown();
                            that._toggleSafariScrolling(false);
                            deferred.resolve()
                        }, function() {
                            startShowAnimation.apply(this, arguments);
                            that._showAnimationProcessing = true
                        })
                    }.bind(this);
                    if (this.option("templatesRenderAsynchronously")) {
                        this._stopShowTimer();
                        this._asyncShowTimeout = setTimeout(show)
                    } else {
                        show()
                    }
                }
                return deferred.promise()
            },
            _normalizeAnimation: function(animation, prop) {
                if (animation) {
                    animation = extend({
                        type: "slide"
                    }, animation);
                    if (animation[prop] && "object" === _typeof(animation[prop])) {
                        extend(animation[prop], {
                            position: this._position
                        })
                    }
                }
                return animation
            },
            _hide: function() {
                if (!this._currentVisible) {
                    return (new Deferred).resolve().promise()
                }
                this._currentVisible = false;
                var that = this;
                var deferred = new Deferred;
                var animation = that._getAnimationConfig() || {};
                var hideAnimation = this._normalizeAnimation(animation.hide, "from");
                var startHideAnimation = hideAnimation && hideAnimation.start || noop;
                var completeHideAnimation = hideAnimation && hideAnimation.complete || noop;
                var hidingArgs = {
                    cancel: false
                };
                if (this._isShowingActionCanceled) {
                    deferred.resolve()
                } else {
                    this._actions.onHiding(hidingArgs);
                    that._toggleSafariScrolling(true);
                    if (hidingArgs.cancel) {
                        this._isHidingActionCanceled = true;
                        this.option("visible", true);
                        deferred.resolve()
                    } else {
                        this._forceFocusLost();
                        this._toggleShading(false);
                        this._toggleSubscriptions(false);
                        this._stopShowTimer();
                        this._animate(hideAnimation, function() {
                            that._$content.css("pointerEvents", "");
                            that._renderVisibility(false);
                            completeHideAnimation.apply(this, arguments);
                            that._actions.onHidden();
                            deferred.resolve()
                        }, function() {
                            that._$content.css("pointerEvents", "none");
                            startHideAnimation.apply(this, arguments)
                        })
                    }
                }
                return deferred.promise()
            },
            _forceFocusLost: function() {
                var activeElement = domAdapter.getActiveElement();
                var shouldResetActiveElement = !!this._$content.find(activeElement).length;
                if (shouldResetActiveElement) {
                    domUtils.resetActiveElement()
                }
            },
            _animate: function(animation, completeCallback, startCallback) {
                if (animation) {
                    startCallback = startCallback || animation.start || noop;
                    fx.animate(this._$content, extend({}, animation, {
                        start: startCallback,
                        complete: completeCallback
                    }))
                } else {
                    completeCallback()
                }
            },
            _stopAnimation: function() {
                fx.stop(this._$content, true)
            },
            _renderVisibility: function(visible) {
                if (visible && this._isParentHidden()) {
                    return
                }
                this._currentVisible = visible;
                this._stopAnimation();
                if (!visible) {
                    domUtils.triggerHidingEvent(this._$content)
                }
                this._toggleVisibility(visible);
                this._$content.toggleClass(INVISIBLE_STATE_CLASS, !visible);
                this._updateZIndexStackPosition(visible);
                if (visible) {
                    this._renderContent();
                    var showingArgs = {
                        cancel: false
                    };
                    this._actions.onShowing(showingArgs);
                    if (showingArgs.cancel) {
                        this._toggleVisibility(false);
                        this._$content.toggleClass(INVISIBLE_STATE_CLASS, true);
                        this._updateZIndexStackPosition(false);
                        this._moveFromContainer();
                        this._isShowingActionCanceled = true;
                        this.option("visible", false);
                        return
                    }
                    this._moveToContainer();
                    this._renderGeometry();
                    domUtils.triggerShownEvent(this._$content);
                    domUtils.triggerResizeEvent(this._$content)
                } else {
                    this._moveFromContainer()
                }
                this._toggleShading(visible);
                this._toggleSubscriptions(visible)
            },
            _updateZIndexStackPosition: function(pushToStack) {
                var overlayStack = this._overlayStack();
                var index = inArray(this, overlayStack);
                if (pushToStack) {
                    if (index === -1) {
                        this._zIndex = zIndexPool.create(this._zIndexInitValue());
                        overlayStack.push(this)
                    }
                    this._$wrapper.css("zIndex", this._zIndex);
                    this._$content.css("zIndex", this._zIndex)
                } else {
                    if (index !== -1) {
                        overlayStack.splice(index, 1);
                        zIndexPool.remove(this._zIndex)
                    }
                }
            },
            _toggleShading: function(visible) {
                this._$wrapper.toggleClass(OVERLAY_MODAL_CLASS, this.option("shading") && !this.option("container"));
                this._$wrapper.toggleClass(OVERLAY_SHADER_CLASS, visible && this.option("shading"));
                this._$wrapper.css("backgroundColor", this.option("shading") ? this.option("shadingColor") : "");
                this._toggleTabTerminator(visible && this.option("shading"))
            },
            _initTabTerminatorHandler: function() {
                var that = this;
                this._proxiedTabTerminatorHandler = function() {
                    that._tabKeyHandler.apply(that, arguments)
                }
            },
            _toggleTabTerminator: function(enabled) {
                var eventName = eventUtils.addNamespace("keydown", this.NAME);
                if (enabled) {
                    eventsEngine.on(domAdapter.getDocument(), eventName, this._proxiedTabTerminatorHandler)
                } else {
                    eventsEngine.off(domAdapter.getDocument(), eventName, this._proxiedTabTerminatorHandler)
                }
            },
            _findTabbableBounds: function() {
                var $elements = this._$wrapper.find("*");
                var elementsCount = $elements.length - 1;
                var result = {
                    first: null,
                    last: null
                };
                for (var i = 0; i <= elementsCount; i++) {
                    if (!result.first && $elements.eq(i).is(selectors.tabbable)) {
                        result.first = $elements.eq(i)
                    }
                    if (!result.last && $elements.eq(elementsCount - i).is(selectors.tabbable)) {
                        result.last = $elements.eq(elementsCount - i)
                    }
                    if (result.first && result.last) {
                        break
                    }
                }
                return result
            },
            _tabKeyHandler: function(e) {
                if (eventUtils.normalizeKeyName(e) !== TAB_KEY || !this._isTopOverlay()) {
                    return
                }
                var tabbableElements = this._findTabbableBounds();
                var $firstTabbable = tabbableElements.first;
                var $lastTabbable = tabbableElements.last;
                var isTabOnLast = !e.shiftKey && e.target === $lastTabbable.get(0);
                var isShiftTabOnFirst = e.shiftKey && e.target === $firstTabbable.get(0);
                var isEmptyTabList = 0 === tabbableElements.length;
                var isOutsideTarget = !domUtils.contains(this._$wrapper.get(0), e.target);
                if (isTabOnLast || isShiftTabOnFirst || isEmptyTabList || isOutsideTarget) {
                    e.preventDefault();
                    var $focusElement = e.shiftKey ? $lastTabbable : $firstTabbable;
                    eventsEngine.trigger($focusElement, "focusin");
                    eventsEngine.trigger($focusElement, "focus")
                }
            },
            _toggleSubscriptions: function(enabled) {
                if (windowUtils.hasWindow()) {
                    this._toggleHideTopOverlayCallback(enabled);
                    this._toggleParentsScrollSubscription(enabled)
                }
            },
            _toggleHideTopOverlayCallback: function(subscribe) {
                if (!this._hideTopOverlayHandler) {
                    return
                }
                if (subscribe) {
                    hideTopOverlayCallback.add(this._hideTopOverlayHandler)
                } else {
                    hideTopOverlayCallback.remove(this._hideTopOverlayHandler)
                }
            },
            _toggleParentsScrollSubscription: function(subscribe) {
                if (!this._position) {
                    return
                }
                var target = this._position.of || $();
                var closeOnScroll = this.option("closeOnTargetScroll");
                var $parents = getElement(target).parents();
                var scrollEvent = eventUtils.addNamespace("scroll", this.NAME);
                if ("desktop" === devices.real().deviceType) {
                    $parents = $parents.add(window)
                }
                this._proxiedTargetParentsScrollHandler = this._proxiedTargetParentsScrollHandler || function(e) {
                    this._targetParentsScrollHandler(e)
                }.bind(this);
                eventsEngine.off($().add(this._$prevTargetParents), scrollEvent, this._proxiedTargetParentsScrollHandler);
                if (subscribe && closeOnScroll) {
                    eventsEngine.on($parents, scrollEvent, this._proxiedTargetParentsScrollHandler);
                    this._$prevTargetParents = $parents
                }
            },
            _targetParentsScrollHandler: function(e) {
                var closeHandled = false;
                var closeOnScroll = this.option("closeOnTargetScroll");
                if (typeUtils.isFunction(closeOnScroll)) {
                    closeHandled = closeOnScroll(e)
                }
                if (!closeHandled && !this._showAnimationProcessing) {
                    this.hide()
                }
            },
            _render: function() {
                this.callBase();
                this._appendContentToElement();
                this._renderVisibilityAnimate(this.option("visible"))
            },
            _appendContentToElement: function() {
                if (!this._$content.parent().is(this.$element())) {
                    this._$content.appendTo(this.$element())
                }
            },
            _renderContent: function() {
                var shouldDeferRendering = !this._currentVisible && this.option("deferRendering");
                var isParentHidden = this.option("visible") && this._isParentHidden();
                if (isParentHidden) {
                    this._isHidden = true;
                    return
                }
                if (this._contentAlreadyRendered || shouldDeferRendering) {
                    return
                }
                this._contentAlreadyRendered = true;
                this._appendContentToElement();
                this.callBase()
            },
            _isParentHidden: function() {
                if (!this.option("_checkParentVisibility")) {
                    return false
                }
                if (void 0 !== this._parentHidden) {
                    return this._parentHidden
                }
                var $parent = this.$element().parent();
                if ($parent.is(":visible")) {
                    return false
                }
                var isHidden = false;
                $parent.add($parent.parents()).each(function() {
                    var $element = $(this);
                    if ("none" === $element.css("display")) {
                        isHidden = true;
                        return false
                    }
                });
                return isHidden || !domAdapter.getBody().contains($parent.get(0))
            },
            _renderContentImpl: function() {
                var _this = this;
                var whenContentRendered = new Deferred;
                var contentTemplateOption = this.option("contentTemplate");
                var contentTemplate = this._getTemplate(contentTemplateOption);
                var transclude = this._templateManager.anonymousTemplateName === contentTemplateOption;
                contentTemplate && contentTemplate.render({
                    container: getPublicElement(this.$content()),
                    noModel: true,
                    transclude: transclude,
                    onRendered: function() {
                        whenContentRendered.resolve()
                    }
                });
                this._renderDrag();
                this._renderResize();
                this._renderScrollTerminator();
                whenContentRendered.done(function() {
                    if (_this.option("visible")) {
                        _this._moveToContainer()
                    }
                });
                return whenContentRendered.promise()
            },
            _renderDrag: function() {
                var $dragTarget = this._getDragTarget();
                if (!$dragTarget) {
                    return
                }
                var startEventName = eventUtils.addNamespace(dragEvents.start, this.NAME);
                var updateEventName = eventUtils.addNamespace(dragEvents.move, this.NAME);
                eventsEngine.off($dragTarget, startEventName);
                eventsEngine.off($dragTarget, updateEventName);
                if (!this.option("dragEnabled")) {
                    return
                }
                eventsEngine.on($dragTarget, startEventName, this._dragStartHandler.bind(this));
                eventsEngine.on($dragTarget, updateEventName, this._dragUpdateHandler.bind(this))
            },
            _renderResize: function() {
                this._resizable = this._createComponent(this._$content, Resizable, {
                    handles: this.option("resizeEnabled") ? "all" : "none",
                    onResizeEnd: this._resizeEndHandler.bind(this),
                    onResize: this._actions.onResize.bind(this),
                    onResizeStart: this._actions.onResizeStart.bind(this),
                    minHeight: 100,
                    minWidth: 100,
                    area: this._getDragResizeContainer()
                })
            },
            _resizeEndHandler: function() {
                this._positionChangeHandled = true;
                var width = this._resizable.option("width");
                var height = this._resizable.option("height");
                width && this.option("width", width);
                height && this.option("height", height);
                this._actions.onResizeEnd()
            },
            _renderScrollTerminator: function() {
                var $scrollTerminator = this._wrapper();
                var terminatorEventName = eventUtils.addNamespace(dragEvents.move, this.NAME);
                eventsEngine.off($scrollTerminator, terminatorEventName);
                eventsEngine.on($scrollTerminator, terminatorEventName, {
                    validate: function() {
                        return true
                    },
                    getDirection: function() {
                        return "both"
                    },
                    _toggleGestureCover: function(toggle) {
                        if (!toggle) {
                            this._toggleGestureCoverImpl(toggle)
                        }
                    },
                    _clearSelection: noop,
                    isNative: true
                }, function(e) {
                    var originalEvent = e.originalEvent.originalEvent;
                    e._cancelPreventDefault = true;
                    if (originalEvent && "mousemove" !== originalEvent.type && false !== e.cancelable) {
                        e.preventDefault()
                    }
                })
            },
            _getDragTarget: function() {
                return this.$content()
            },
            _dragStartHandler: function(e) {
                e.targetElements = [];
                this._prevOffset = {
                    x: 0,
                    y: 0
                };
                var allowedOffsets = this._allowedOffsets();
                e.maxTopOffset = allowedOffsets.top;
                e.maxBottomOffset = allowedOffsets.bottom;
                e.maxLeftOffset = allowedOffsets.left;
                e.maxRightOffset = allowedOffsets.right
            },
            _getDragResizeContainer: function() {
                var isContainerDefined = viewPortUtils.originalViewPort().get(0) || this.option("container");
                var $container = !isContainerDefined ? $(window) : this._$container;
                return $container
            },
            _deltaSize: function() {
                var $content = this._$content;
                var $container = this._getDragResizeContainer();
                var contentWidth = $content.outerWidth();
                var contentHeight = $content.outerHeight();
                var containerWidth = $container.outerWidth();
                var containerHeight = $container.outerHeight();
                if (this._isWindow($container)) {
                    var document = domAdapter.getDocument();
                    var fullPageHeight = Math.max($(document).outerHeight(), containerHeight);
                    var fullPageWidth = Math.max($(document).outerWidth(), containerWidth);
                    containerHeight = fullPageHeight;
                    containerWidth = fullPageWidth
                }
                return {
                    width: containerWidth - contentWidth,
                    height: containerHeight - contentHeight
                }
            },
            _dragUpdateHandler: function(e) {
                var offset = e.offset;
                var prevOffset = this._prevOffset;
                var targetOffset = {
                    top: offset.y - prevOffset.y,
                    left: offset.x - prevOffset.x
                };
                this._changePosition(targetOffset);
                this._prevOffset = offset
            },
            _changePosition: function(offset) {
                var position = translator.locate(this._$content);
                translator.move(this._$content, {
                    left: position.left + offset.left,
                    top: position.top + offset.top
                });
                this._positionChangeHandled = true
            },
            _allowedOffsets: function() {
                var position = translator.locate(this._$content);
                var deltaSize = this._deltaSize();
                var isAllowedDrag = deltaSize.height >= 0 && deltaSize.width >= 0;
                var shaderOffset = this.option("shading") && !this.option("container") && !this._isWindow(this._getContainer()) ? translator.locate(this._$wrapper) : {
                    top: 0,
                    left: 0
                };
                var boundaryOffset = this.option("boundaryOffset");
                return {
                    top: isAllowedDrag ? position.top + shaderOffset.top + boundaryOffset.v : 0,
                    bottom: isAllowedDrag ? -position.top - shaderOffset.top + deltaSize.height - boundaryOffset.v : 0,
                    left: isAllowedDrag ? position.left + shaderOffset.left + boundaryOffset.h : 0,
                    right: isAllowedDrag ? -position.left - shaderOffset.left + deltaSize.width - boundaryOffset.h : 0
                }
            },
            _moveFromContainer: function() {
                this._$content.appendTo(this.$element());
                this._detachWrapperToContainer()
            },
            _detachWrapperToContainer: function() {
                this._$wrapper.detach()
            },
            _moveToContainer: function() {
                this._attachWrapperToContainer();
                this._$content.appendTo(this._$wrapper)
            },
            _attachWrapperToContainer: function() {
                var $element = this.$element();
                var containerDefined = void 0 !== this.option("container");
                var renderContainer = containerDefined ? this._$container : swatch.getSwatchContainer($element);
                if (renderContainer && renderContainer[0] === $element.parent()[0]) {
                    renderContainer = $element
                }
                this._$wrapper.appendTo(renderContainer)
            },
            _fixHeightAfterSafariAddressBarResizing: function() {
                if (this._isWindow(this._getContainer()) && hasSafariAddressBar) {
                    this._$wrapper.css("minHeight", window.innerHeight)
                }
            },
            _renderGeometry: function(isDimensionChanged) {
                if (this.option("visible") && windowUtils.hasWindow()) {
                    this._renderGeometryImpl(isDimensionChanged)
                }
            },
            _renderGeometryImpl: function(isDimensionChanged) {
                this._stopAnimation();
                this._normalizePosition();
                this._renderWrapper();
                this._fixHeightAfterSafariAddressBarResizing();
                this._renderDimensions();
                var resultPosition = this._renderPosition();
                this._actions.onPositioned({
                    position: resultPosition
                })
            },
            _fixWrapperPosition: function() {
                this._$wrapper.css("position", this._useFixedPosition() ? "fixed" : "absolute")
            },
            _useFixedPosition: function() {
                var $container = this._getContainer();
                return this._isWindow($container) && (!iOS || void 0 !== this._bodyScrollTop)
            },
            _toggleSafariScrolling: function(scrollingEnabled) {
                if (iOS && this._useFixedPosition()) {
                    var body = domAdapter.getBody();
                    if (scrollingEnabled) {
                        $(body).removeClass(PREVENT_SAFARI_SCROLLING_CLASS);
                        window.scrollTo(0, this._bodyScrollTop);
                        this._bodyScrollTop = void 0
                    } else {
                        if (this.option("visible")) {
                            this._bodyScrollTop = window.pageYOffset;
                            $(body).addClass(PREVENT_SAFARI_SCROLLING_CLASS)
                        }
                    }
                }
            },
            _renderWrapper: function() {
                this._fixWrapperPosition();
                this._renderWrapperDimensions();
                this._renderWrapperPosition()
            },
            _renderWrapperDimensions: function() {
                var wrapperWidth;
                var wrapperHeight;
                var $container = this._getContainer();
                if (!$container) {
                    return
                }
                var isWindow = this._isWindow($container);
                wrapperWidth = isWindow ? null : $container.outerWidth(), wrapperHeight = isWindow ? null : $container.outerHeight();
                this._$wrapper.css({
                    width: wrapperWidth,
                    height: wrapperHeight
                })
            },
            _isWindow: function($element) {
                return !!$element && typeUtils.isWindow($element.get(0))
            },
            _renderWrapperPosition: function() {
                var $container = this._getContainer();
                if ($container) {
                    positionUtils.setup(this._$wrapper, {
                        my: "top left",
                        at: "top left",
                        of: $container
                    })
                }
            },
            _getContainer: function() {
                var position = this._position;
                var container = this.option("container");
                var positionOf = null;
                if (!container && position) {
                    var isEvent = !!(position.of && position.of.preventDefault);
                    positionOf = isEvent ? window : position.of || window
                }
                return getElement(container || positionOf)
            },
            _renderDimensions: function() {
                var content = this._$content.get(0);
                this._$content.css({
                    minWidth: this._getOptionValue("minWidth", content),
                    maxWidth: this._getOptionValue("maxWidth", content),
                    minHeight: this._getOptionValue("minHeight", content),
                    maxHeight: this._getOptionValue("maxHeight", content),
                    width: this._getOptionValue("width", content),
                    height: this._getOptionValue("height", content)
                })
            },
            _renderPosition: function() {
                if (this._positionChangeHandled) {
                    var allowedOffsets = this._allowedOffsets();
                    this._changePosition({
                        top: fitIntoRange(0, -allowedOffsets.top, allowedOffsets.bottom),
                        left: fitIntoRange(0, -allowedOffsets.left, allowedOffsets.right)
                    })
                } else {
                    this._renderOverlayBoundaryOffset();
                    translator.resetPosition(this._$content);
                    var position = this._transformStringPosition(this._position, POSITION_ALIASES);
                    var resultPosition = positionUtils.setup(this._$content, position);
                    forceRepaint(this._$content);
                    this._actions.onPositioning();
                    return resultPosition
                }
            },
            _transformStringPosition: function(position, positionAliases) {
                if (typeUtils.isString(position)) {
                    position = extend({}, positionAliases[position])
                }
                return position
            },
            _renderOverlayBoundaryOffset: function() {
                var boundaryOffset = this.option("boundaryOffset");
                this._$content.css("margin", boundaryOffset.v + "px " + boundaryOffset.h + "px")
            },
            _focusTarget: function() {
                return this._$content
            },
            _attachKeyboardEvents: function() {
                var _this2 = this;
                this._keyboardListenerId = keyboard.on(this._$content, null, function(opts) {
                    return _this2._keyboardHandler(opts)
                })
            },
            _keyboardHandler: function(options) {
                var e = options.originalEvent;
                var $target = $(e.target);
                if ($target.is(this._$content) || !this.option("ignoreChildEvents")) {
                    this.callBase.apply(this, arguments)
                }
            },
            _isVisible: function() {
                return this.option("visible")
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    if (this.option("visible")) {
                        this._renderVisibilityAnimate(visible)
                    }
                } else {
                    this._renderVisibilityAnimate(visible)
                }
            },
            _dimensionChanged: function() {
                this._renderGeometry(true)
            },
            _clean: function() {
                if (!this._contentAlreadyRendered) {
                    this.$content().empty()
                }
                this._renderVisibility(false);
                this._stopShowTimer();
                this._cleanFocusState()
            },
            _stopShowTimer: function() {
                if (this._asyncShowTimeout) {
                    clearTimeout(this._asyncShowTimeout)
                }
                this._asyncShowTimeout = null
            },
            _dispose: function() {
                fx.stop(this._$content, false);
                clearTimeout(this._deferShowTimer);
                this._toggleViewPortSubscription(false);
                this._toggleSubscriptions(false);
                this._updateZIndexStackPosition(false);
                this._toggleTabTerminator(false);
                this._toggleSafariScrolling(true);
                this._actions = null;
                this.callBase();
                zIndexPool.remove(this._zIndex);
                this._$wrapper.remove();
                this._$content.remove()
            },
            _toggleDisabledState: function(value) {
                this.callBase.apply(this, arguments);
                this._$content.toggleClass(DISABLED_STATE_CLASS, Boolean(value))
            },
            _toggleRTLDirection: function(rtl) {
                this._$content.toggleClass(RTL_DIRECTION_CLASS, rtl)
            },
            _optionChanged: function(args) {
                var value = args.value;
                if (inArray(args.name, ACTIONS) > -1) {
                    this._initActions();
                    return
                }
                switch (args.name) {
                    case "dragEnabled":
                        this._renderDrag();
                        this._renderGeometry();
                        break;
                    case "resizeEnabled":
                        this._renderResize();
                        this._renderGeometry();
                        break;
                    case "shading":
                    case "shadingColor":
                        this._toggleShading(this.option("visible"));
                        break;
                    case "width":
                    case "height":
                    case "minWidth":
                    case "maxWidth":
                    case "minHeight":
                    case "maxHeight":
                    case "boundaryOffset":
                        this._renderGeometry();
                        break;
                    case "position":
                        this._positionChangeHandled = false;
                        this._renderGeometry();
                        break;
                    case "visible":
                        this._renderVisibilityAnimate(value).done(function() {
                            if (!this._animateDeferred) {
                                return
                            }
                            this._animateDeferred.resolveWith(this)
                        }.bind(this));
                        break;
                    case "target":
                        this._initTarget(value);
                        this._invalidate();
                        break;
                    case "container":
                        this._initContainer(value);
                        this._invalidate();
                        break;
                    case "innerOverlay":
                        this._initInnerOverlayClass();
                        break;
                    case "deferRendering":
                    case "contentTemplate":
                        this._contentAlreadyRendered = false;
                        this._clean();
                        this._invalidate();
                        break;
                    case "hideTopOverlayHandler":
                        this._toggleHideTopOverlayCallback(false);
                        this._initHideTopOverlayHandler(args.value);
                        this._toggleHideTopOverlayCallback(this.option("visible"));
                        break;
                    case "closeOnTargetScroll":
                        this._toggleParentsScrollSubscription(this.option("visible"));
                        break;
                    case "closeOnOutsideClick":
                    case "animation":
                    case "propagateOutsideClick":
                        break;
                    case "rtlEnabled":
                        this._contentAlreadyRendered = false;
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            toggle: function(showing) {
                showing = void 0 === showing ? !this.option("visible") : showing;
                var result = new Deferred;
                if (showing === this.option("visible")) {
                    return result.resolveWith(this, [showing]).promise()
                }
                var animateDeferred = new Deferred;
                this._animateDeferred = animateDeferred;
                this.option("visible", showing);
                animateDeferred.promise().done(function() {
                    delete this._animateDeferred;
                    result.resolveWith(this, [this.option("visible")])
                }.bind(this));
                return result.promise()
            },
            $content: function() {
                return this._$content
            },
            show: function() {
                return this.toggle(true)
            },
            hide: function() {
                return this.toggle(false)
            },
            content: function() {
                return getPublicElement(this._$content)
            },
            repaint: function() {
                if (this._contentAlreadyRendered) {
                    this._renderGeometry();
                    domUtils.triggerResizeEvent(this._$content)
                } else {
                    this.callBase()
                }
            }
        });
        Overlay.baseZIndex = function(zIndex) {
            return zIndexPool.base(zIndex)
        };
        registerComponent("dxOverlay", Overlay);
        module.exports = Overlay
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/selection_filter.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var getKeyHash = __webpack_require__( /*! ./common */ 3).getKeyHash;
        var equalByValue = __webpack_require__( /*! ./common */ 3).equalByValue;
        var typeUtils = __webpack_require__( /*! ./type */ 1);
        var SelectionFilterCreator = function(selectedItemKeys, isSelectAll) {
            this.getLocalFilter = function(keyGetter, equalKeys, equalByReference, keyExpr) {
                equalKeys = void 0 === equalKeys ? equalByValue : equalKeys;
                return functionFilter.bind(this, equalKeys, keyGetter, equalByReference, keyExpr)
            };
            this.getExpr = function(keyExpr) {
                if (!keyExpr) {
                    return
                }
                var filterExpr;
                selectedItemKeys.forEach(function(key, index) {
                    filterExpr = filterExpr || [];
                    var filterExprPart;
                    if (index > 0) {
                        filterExpr.push(isSelectAll ? "and" : "or")
                    }
                    if (typeUtils.isString(keyExpr)) {
                        filterExprPart = getFilterForPlainKey(keyExpr, key)
                    } else {
                        filterExprPart = getFilterForCompositeKey(keyExpr, key)
                    }
                    filterExpr.push(filterExprPart)
                });
                if (filterExpr && 1 === filterExpr.length) {
                    filterExpr = filterExpr[0]
                }
                return filterExpr
            };
            this.getCombinedFilter = function(keyExpr, dataSourceFilter) {
                var filterExpr = this.getExpr(keyExpr);
                var combinedFilter = filterExpr;
                if (isSelectAll && dataSourceFilter) {
                    if (filterExpr) {
                        combinedFilter = [];
                        combinedFilter.push(filterExpr);
                        combinedFilter.push(dataSourceFilter)
                    } else {
                        combinedFilter = dataSourceFilter
                    }
                }
                return combinedFilter
            };
            var selectedItemKeyHashesMap;
            var getSelectedItemKeyHashesMap = function(selectedItemKeys) {
                if (!selectedItemKeyHashesMap) {
                    selectedItemKeyHashesMap = {};
                    for (var i = 0; i < selectedItemKeys.length; i++) {
                        selectedItemKeyHashesMap[getKeyHash(selectedItemKeys[i])] = true
                    }
                }
                return selectedItemKeyHashesMap
            };
            var normalizeKeys = function(keys, keyOf, keyExpr) {
                return Array.isArray(keyExpr) ? keys.map(function(key) {
                    return keyOf(key)
                }) : keys
            };

            function functionFilter(equalKeys, keyOf, equalByReference, keyExpr, item) {
                var key = keyOf(item);
                var keyHash;
                var i;
                if (!equalByReference) {
                    keyHash = getKeyHash(key);
                    if (!typeUtils.isObject(keyHash)) {
                        var selectedKeyHashesMap = getSelectedItemKeyHashesMap(normalizeKeys(selectedItemKeys, keyOf, keyExpr));
                        if (selectedKeyHashesMap[keyHash]) {
                            return !isSelectAll
                        }
                        return !!isSelectAll
                    }
                }
                for (i = 0; i < selectedItemKeys.length; i++) {
                    if (equalKeys(selectedItemKeys[i], key)) {
                        return !isSelectAll
                    }
                }
                return !!isSelectAll
            }

            function getFilterForPlainKey(keyExpr, keyValue) {
                if (void 0 === keyValue) {
                    return
                }
                return [keyExpr, isSelectAll ? "<>" : "=", keyValue]
            }

            function getFilterForCompositeKey(keyExpr, itemKeyValue) {
                var filterExpr = [];
                for (var i = 0, length = keyExpr.length; i < length; i++) {
                    var currentKeyExpr = keyExpr[i];
                    var currentKeyValue = itemKeyValue && itemKeyValue[currentKeyExpr];
                    var filterExprPart = getFilterForPlainKey(currentKeyExpr, currentKeyValue);
                    if (!filterExprPart) {
                        break
                    }
                    if (i > 0) {
                        filterExpr.push(isSelectAll ? "or" : "and")
                    }
                    filterExpr.push(filterExprPart)
                }
                return filterExpr
            }
        };
        exports.SelectionFilterCreator = SelectionFilterCreator
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/events/transform.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var mathUtils = __webpack_require__( /*! ../core/utils/math */ 31);
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var errors = __webpack_require__( /*! ../core/errors */ 22);
        var eventUtils = __webpack_require__( /*! ./utils */ 8);
        var Emitter = __webpack_require__( /*! ./core/emitter */ 132);
        var registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 101);
        var DX_PREFIX = "dx";
        var TRANSFORM = "transform";
        var TRANSLATE = "translate";
        var ZOOM = "zoom";
        var PINCH = "pinch";
        var ROTATE = "rotate";
        var START_POSTFIX = "start";
        var UPDATE_POSTFIX = "";
        var END_POSTFIX = "end";
        var eventAliases = [];
        var addAlias = function(eventName, eventArgs) {
            eventAliases.push({
                name: eventName,
                args: eventArgs
            })
        };
        addAlias(TRANSFORM, {
            scale: true,
            deltaScale: true,
            rotation: true,
            deltaRotation: true,
            translation: true,
            deltaTranslation: true
        });
        addAlias(TRANSLATE, {
            translation: true,
            deltaTranslation: true
        });
        addAlias(ZOOM, {
            scale: true,
            deltaScale: true
        });
        addAlias(PINCH, {
            scale: true,
            deltaScale: true
        });
        addAlias(ROTATE, {
            rotation: true,
            deltaRotation: true
        });
        var getVector = function(first, second) {
            return {
                x: second.pageX - first.pageX,
                y: -second.pageY + first.pageY,
                centerX: .5 * (second.pageX + first.pageX),
                centerY: .5 * (second.pageY + first.pageY)
            }
        };
        var getEventVector = function(e) {
            var pointers = e.pointers;
            return getVector(pointers[0], pointers[1])
        };
        var getDistance = function(vector) {
            return Math.sqrt(vector.x * vector.x + vector.y * vector.y)
        };
        var getScale = function(firstVector, secondVector) {
            return getDistance(firstVector) / getDistance(secondVector)
        };
        var getRotation = function(firstVector, secondVector) {
            var scalarProduct = firstVector.x * secondVector.x + firstVector.y * secondVector.y;
            var distanceProduct = getDistance(firstVector) * getDistance(secondVector);
            if (0 === distanceProduct) {
                return 0
            }
            var sign = mathUtils.sign(firstVector.x * secondVector.y - secondVector.x * firstVector.y);
            var angle = Math.acos(mathUtils.fitIntoRange(scalarProduct / distanceProduct, -1, 1));
            return sign * angle
        };
        var getTranslation = function(firstVector, secondVector) {
            return {
                x: firstVector.centerX - secondVector.centerX,
                y: firstVector.centerY - secondVector.centerY
            }
        };
        var TransformEmitter = Emitter.inherit({
            configure: function(data, eventName) {
                if (eventName.indexOf(ZOOM) > -1) {
                    errors.log("W0005", eventName, "15.1", "Use '" + eventName.replace(ZOOM, PINCH) + "' event instead")
                }
                this.callBase(data)
            },
            validatePointers: function(e) {
                return eventUtils.hasTouches(e) > 1
            },
            start: function(e) {
                this._accept(e);
                var startVector = getEventVector(e);
                this._startVector = startVector;
                this._prevVector = startVector;
                this._fireEventAliases(START_POSTFIX, e)
            },
            move: function(e) {
                var currentVector = getEventVector(e);
                var eventArgs = this._getEventArgs(currentVector);
                this._fireEventAliases(UPDATE_POSTFIX, e, eventArgs);
                this._prevVector = currentVector
            },
            end: function(e) {
                var eventArgs = this._getEventArgs(this._prevVector);
                this._fireEventAliases(END_POSTFIX, e, eventArgs)
            },
            _getEventArgs: function(vector) {
                return {
                    scale: getScale(vector, this._startVector),
                    deltaScale: getScale(vector, this._prevVector),
                    rotation: getRotation(vector, this._startVector),
                    deltaRotation: getRotation(vector, this._prevVector),
                    translation: getTranslation(vector, this._startVector),
                    deltaTranslation: getTranslation(vector, this._prevVector)
                }
            },
            _fireEventAliases: function(eventPostfix, originalEvent, eventArgs) {
                eventArgs = eventArgs || {};
                iteratorUtils.each(eventAliases, function(_, eventAlias) {
                    var args = {};
                    iteratorUtils.each(eventAlias.args, function(name) {
                        if (name in eventArgs) {
                            args[name] = eventArgs[name]
                        }
                    });
                    this._fireEvent(DX_PREFIX + eventAlias.name + eventPostfix, originalEvent, args)
                }.bind(this))
            }
        });
        var eventNames = eventAliases.reduce(function(result, eventAlias) {
            [START_POSTFIX, UPDATE_POSTFIX, END_POSTFIX].forEach(function(eventPostfix) {
                result.push(DX_PREFIX + eventAlias.name + eventPostfix)
            });
            return result
        }, []);
        registerEmitter({
            emitter: TransformEmitter,
            events: eventNames
        });
        iteratorUtils.each(eventNames, function(_, eventName) {
            exports[eventName.substring(DX_PREFIX.length)] = eventName
        })
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/shared/grouped_data_converter_mixin.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var isCorrectStructure = function(data) {
            return Array.isArray(data) && data.every(function(item) {
                var hasTwoFields = 2 === Object.keys(item).length;
                var hasCorrectFields = "key" in item && "items" in item;
                return hasTwoFields && hasCorrectFields && Array.isArray(item.items)
            })
        };
        exports.default = {
            _getSpecificDataSourceOption: function() {
                var groupKey = "key";
                var dataSource = this.option("dataSource");
                var hasSimpleItems = false;
                var data = {};
                if (this._getGroupedOption() && isCorrectStructure(dataSource)) {
                    data = dataSource.reduce(function(accumulator, item) {
                        var items = item.items.map(function(innerItem) {
                            if (!(0, _type.isObject)(innerItem)) {
                                innerItem = {
                                    text: innerItem
                                };
                                hasSimpleItems = true
                            }
                            if (!(groupKey in innerItem)) {
                                innerItem[groupKey] = item.key
                            }
                            return innerItem
                        });
                        return accumulator.concat(items)
                    }, []);
                    dataSource = {
                        store: {
                            type: "array",
                            data: data
                        },
                        group: {
                            selector: "key",
                            keepInitialKeyOrder: true
                        }
                    };
                    if (hasSimpleItems) {
                        dataSource.searchExpr = "text"
                    }
                }
                return dataSource
            }
        }
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/data.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 219);
        var data = DevExpress.data = __webpack_require__( /*! ../../../bundles/modules/data */ 291);
        data.odata = __webpack_require__( /*! ../../../bundles/modules/data.odata */ 519);
        module.exports = data
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.base.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _uiCollection_widget = __webpack_require__( /*! ../collection/ui.collection_widget.async */ 522);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var _promise2 = _interopRequireDefault(_promise);
        var _bindable_template = __webpack_require__( /*! ../../core/templates/bindable_template */ 59);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TOOLBAR_CLASS = "dx-toolbar";
        var TOOLBAR_BEFORE_CLASS = "dx-toolbar-before";
        var TOOLBAR_CENTER_CLASS = "dx-toolbar-center";
        var TOOLBAR_AFTER_CLASS = "dx-toolbar-after";
        var TOOLBAR_BOTTOM_CLASS = "dx-toolbar-bottom";
        var TOOLBAR_MINI_CLASS = "dx-toolbar-mini";
        var TOOLBAR_ITEM_CLASS = "dx-toolbar-item";
        var TOOLBAR_LABEL_CLASS = "dx-toolbar-label";
        var TOOLBAR_BUTTON_CLASS = "dx-toolbar-button";
        var TOOLBAR_ITEMS_CONTAINER_CLASS = "dx-toolbar-items-container";
        var TOOLBAR_GROUP_CLASS = "dx-toolbar-group";
        var TOOLBAR_COMPACT_CLASS = "dx-toolbar-compact";
        var TOOLBAR_LABEL_SELECTOR = "." + TOOLBAR_LABEL_CLASS;
        var TOOLBAR_MULTILINE_CLASS = "dx-toolbar-multiline";
        var TEXT_BUTTON_MODE = "text";
        var DEFAULT_BUTTON_TYPE = "default";
        var TOOLBAR_ITEM_DATA_KEY = "dxToolbarItemDataKey";
        var ToolbarBase = _uiCollection_widget2.default.inherit({
            compactMode: false,
            ctor: function(element, options) {
                this._userOptions = options || {};
                this.callBase(element, options);
                if ("height" in this._userOptions) {
                    _errors2.default.log("W0001", this.NAME, "height", "20.1", "Functionality associated with this option is not intended for the Toolbar widget.")
                }
            },
            _getSynchronizableOptionsForCreateComponent: function() {
                return this.callBase().filter(function(item) {
                    return "disabled" !== item
                })
            },
            _initTemplates: function() {
                this.callBase();
                var template = new _bindable_template.BindableTemplate(function($container, data, rawModel) {
                    if ((0, _type.isPlainObject)(data)) {
                        if (data.text) {
                            $container.text(data.text).wrapInner("<div>")
                        }
                        if (data.html) {
                            $container.html(data.html)
                        }
                        if ("dxButton" === data.widget) {
                            if (this.option("useFlatButtons")) {
                                data.options = data.options || {};
                                data.options.stylingMode = data.options.stylingMode || TEXT_BUTTON_MODE
                            }
                            if (this.option("useDefaultButtons")) {
                                data.options = data.options || {};
                                data.options.type = data.options.type || DEFAULT_BUTTON_TYPE
                            }
                        }
                    } else {
                        $container.text(String(data))
                    }
                    this._getTemplate("dx-polymorph-widget").render({
                        container: $container,
                        model: rawModel,
                        parent: this
                    })
                }.bind(this), ["text", "html", "widget", "options"], this.option("integrationOptions.watchMethod"));
                this._templateManager.addDefaultTemplates({
                    item: template,
                    menuItem: template
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    renderAs: "topToolbar",
                    grouped: false,
                    useFlatButtons: false,
                    useDefaultButtons: false,
                    multiline: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        useFlatButtons: true
                    }
                }])
            },
            _itemContainer: function() {
                return this._$toolbarItemsContainer.find(["." + TOOLBAR_BEFORE_CLASS, "." + TOOLBAR_CENTER_CLASS, "." + TOOLBAR_AFTER_CLASS].join(","))
            },
            _itemClass: function() {
                return TOOLBAR_ITEM_CLASS
            },
            _itemDataKey: function() {
                return TOOLBAR_ITEM_DATA_KEY
            },
            _buttonClass: function() {
                return TOOLBAR_BUTTON_CLASS
            },
            _dimensionChanged: function() {
                this._arrangeItems();
                this._applyCompactMode()
            },
            _initMarkup: function() {
                this._renderToolbar();
                this._renderSections();
                this.callBase();
                this.setAria("role", "toolbar")
            },
            _waitParentAnimationFinished: function() {
                var _this = this;
                var $element = this.$element();
                var timeout = 15;
                return new _promise2.default(function(resolve) {
                    var check = function() {
                        var readyToResolve = true;
                        $element.parents().each(function(_, parent) {
                            if (_fx2.default.isAnimating((0, _renderer2.default)(parent))) {
                                readyToResolve = false;
                                return false
                            }
                        });
                        if (readyToResolve) {
                            resolve()
                        }
                        return readyToResolve
                    };
                    var runCheck = function runCheck() {
                        clearTimeout(_this._waitParentAnimationTimeout);
                        _this._waitParentAnimationTimeout = setTimeout(function() {
                            return check() || runCheck()
                        }, timeout)
                    };
                    runCheck()
                })
            },
            _render: function() {
                this.callBase();
                this._renderItemsAsync();
                if (_themes2.default.isMaterial()) {
                    _promise2.default.all([this._waitParentAnimationFinished(), this._checkWebFontForLabelsLoaded()]).then(this._dimensionChanged.bind(this))
                }
            },
            _postProcessRenderItems: function() {
                this._arrangeItems()
            },
            _renderToolbar: function() {
                this.$element().addClass(TOOLBAR_CLASS).toggleClass(TOOLBAR_BOTTOM_CLASS, "bottomToolbar" === this.option("renderAs")).toggleClass(TOOLBAR_MULTILINE_CLASS, this.option("multiline"));
                this._$toolbarItemsContainer = (0, _renderer2.default)("<div>").addClass(TOOLBAR_ITEMS_CONTAINER_CLASS).appendTo(this.$element())
            },
            _renderSections: function() {
                var $container = this._$toolbarItemsContainer;
                var that = this;
                (0, _iterator.each)(["before", "center", "after"], function() {
                    var sectionClass = "dx-toolbar-" + this;
                    var $section = $container.find("." + sectionClass);
                    if (!$section.length) {
                        that["_$" + this + "Section"] = $section = (0, _renderer2.default)("<div>").addClass(sectionClass).appendTo($container)
                    }
                })
            },
            _checkWebFontForLabelsLoaded: function() {
                var $labels = this.$element().find(TOOLBAR_LABEL_SELECTOR);
                var promises = [];
                $labels.each(function(_, label) {
                    var text = (0, _renderer2.default)(label).text();
                    var fontWeight = (0, _renderer2.default)(label).css("fontWeight");
                    promises.push(_themes2.default.waitWebFont(text, fontWeight))
                });
                return _promise2.default.all(promises)
            },
            _arrangeItems: function(elementWidth) {
                elementWidth = elementWidth || this.$element().width();
                this._$centerSection.css({
                    margin: "0 auto",
                    "float": "none"
                });
                var beforeRect = (0, _position.getBoundingRect)(this._$beforeSection.get(0));
                var afterRect = (0, _position.getBoundingRect)(this._$afterSection.get(0));
                this._alignCenterSection(beforeRect, afterRect, elementWidth);
                var $label = this._$toolbarItemsContainer.find(TOOLBAR_LABEL_SELECTOR).eq(0);
                var $section = $label.parent();
                if (!$label.length) {
                    return
                }
                var labelOffset = beforeRect.width ? beforeRect.width : $label.position().left;
                var widthBeforeSection = $section.hasClass(TOOLBAR_BEFORE_CLASS) ? 0 : labelOffset;
                var widthAfterSection = $section.hasClass(TOOLBAR_AFTER_CLASS) ? 0 : afterRect.width;
                var elemsAtSectionWidth = 0;
                $section.children().not(TOOLBAR_LABEL_SELECTOR).each(function() {
                    elemsAtSectionWidth += (0, _renderer2.default)(this).outerWidth()
                });
                var freeSpace = elementWidth - elemsAtSectionWidth;
                var sectionMaxWidth = Math.max(freeSpace - widthBeforeSection - widthAfterSection, 0);
                if ($section.hasClass(TOOLBAR_BEFORE_CLASS)) {
                    this._alignSection(this._$beforeSection, sectionMaxWidth)
                } else {
                    var labelPaddings = $label.outerWidth() - $label.width();
                    $label.css("maxWidth", sectionMaxWidth - labelPaddings)
                }
            },
            _alignCenterSection: function(beforeRect, afterRect, elementWidth) {
                this._alignSection(this._$centerSection, elementWidth - beforeRect.width - afterRect.width);
                var isRTL = this.option("rtlEnabled");
                var leftRect = isRTL ? afterRect : beforeRect;
                var rightRect = isRTL ? beforeRect : afterRect;
                var centerRect = (0, _position.getBoundingRect)(this._$centerSection.get(0));
                if (leftRect.right > centerRect.left || centerRect.right > rightRect.left) {
                    this._$centerSection.css({
                        marginLeft: leftRect.width,
                        marginRight: rightRect.width,
                        "float": leftRect.width > rightRect.width ? "none" : "right"
                    })
                }
            },
            _alignSection: function($section, maxWidth) {
                var $labels = $section.find(TOOLBAR_LABEL_SELECTOR);
                var labels = $labels.toArray();
                maxWidth -= this._getCurrentLabelsPaddings(labels);
                var currentWidth = this._getCurrentLabelsWidth(labels);
                var difference = Math.abs(currentWidth - maxWidth);
                if (maxWidth < currentWidth) {
                    labels = labels.reverse();
                    this._alignSectionLabels(labels, difference, false)
                } else {
                    this._alignSectionLabels(labels, difference, true)
                }
            },
            _alignSectionLabels: function(labels, difference, expanding) {
                var getRealLabelWidth = function(label) {
                    return (0, _position.getBoundingRect)(label).width
                };
                for (var i = 0; i < labels.length; i++) {
                    var $label = (0, _renderer2.default)(labels[i]);
                    var currentLabelWidth = Math.ceil(getRealLabelWidth(labels[i]));
                    var labelMaxWidth = void 0;
                    if (expanding) {
                        $label.css("maxWidth", "inherit")
                    }
                    var possibleLabelWidth = Math.ceil(expanding ? getRealLabelWidth(labels[i]) : currentLabelWidth);
                    if (possibleLabelWidth < difference) {
                        labelMaxWidth = expanding ? possibleLabelWidth : 0;
                        difference -= possibleLabelWidth
                    } else {
                        labelMaxWidth = expanding ? currentLabelWidth + difference : currentLabelWidth - difference;
                        $label.css("maxWidth", labelMaxWidth);
                        break
                    }
                    $label.css("maxWidth", labelMaxWidth)
                }
            },
            _applyCompactMode: function() {
                var $element = this.$element();
                $element.removeClass(TOOLBAR_COMPACT_CLASS);
                if (this.option("compactMode") && this._getSummaryItemsWidth(this.itemElements(), true) > $element.width()) {
                    $element.addClass(TOOLBAR_COMPACT_CLASS)
                }
            },
            _getCurrentLabelsWidth: function(labels) {
                var width = 0;
                labels.forEach(function(label, index) {
                    width += (0, _renderer2.default)(label).outerWidth()
                });
                return width
            },
            _getCurrentLabelsPaddings: function(labels) {
                var padding = 0;
                labels.forEach(function(label, index) {
                    padding += (0, _renderer2.default)(label).outerWidth() - (0, _renderer2.default)(label).width()
                });
                return padding
            },
            _renderItem: function(index, item, itemContainer, $after) {
                var location = item.location || "center";
                var container = itemContainer || this["_$" + location + "Section"];
                var itemHasText = !!(item.text || item.html);
                var itemElement = this.callBase(index, item, container, $after);
                itemElement.toggleClass(this._buttonClass(), !itemHasText).toggleClass(TOOLBAR_LABEL_CLASS, itemHasText).addClass(item.cssClass);
                return itemElement
            },
            _renderGroupedItems: function() {
                var that = this;
                (0, _iterator.each)(this.option("items"), function(groupIndex, group) {
                    var groupItems = group.items;
                    var $container = (0, _renderer2.default)("<div>").addClass(TOOLBAR_GROUP_CLASS);
                    var location = group.location || "center";
                    if (!groupItems || !groupItems.length) {
                        return
                    }(0, _iterator.each)(groupItems, function(itemIndex, item) {
                        that._renderItem(itemIndex, item, $container, null)
                    });
                    that._$toolbarItemsContainer.find(".dx-toolbar-" + location).append($container)
                })
            },
            _renderItems: function(items) {
                var grouped = this.option("grouped") && items.length && items[0].items;
                grouped ? this._renderGroupedItems() : this.callBase(items)
            },
            _getToolbarItems: function() {
                return this.option("items") || []
            },
            _renderContentImpl: function() {
                var items = this._getToolbarItems();
                this.$element().toggleClass(TOOLBAR_MINI_CLASS, 0 === items.length);
                if (this._renderedItemsCount) {
                    this._renderItems(items.slice(this._renderedItemsCount))
                } else {
                    this._renderItems(items)
                }
                this._applyCompactMode()
            },
            _renderEmptyMessage: _common2.default.noop,
            _clean: function() {
                this._$toolbarItemsContainer.children().empty();
                this.$element().empty()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._arrangeItems()
                }
            },
            _isVisible: function() {
                return this.$element().width() > 0 && this.$element().height() > 0
            },
            _getIndexByItem: function(item) {
                return (0, _array.inArray)(item, this._getToolbarItems())
            },
            _itemOptionChanged: function(item, property, value) {
                this.callBase.apply(this, [item, property, value]);
                this._arrangeItems()
            },
            _optionChanged: function(args) {
                var name = args.name;
                switch (name) {
                    case "width":
                        this.callBase.apply(this, arguments);
                        this._dimensionChanged();
                        break;
                    case "multiline":
                        this.$element().toggleClass(TOOLBAR_MULTILINE_CLASS, args.value);
                        break;
                    case "renderAs":
                    case "useFlatButtons":
                    case "useDefaultButtons":
                        this._invalidate();
                        break;
                    case "compactMode":
                        this._applyCompactMode();
                        break;
                    case "grouped":
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            _dispose: function() {
                this.callBase();
                clearTimeout(this._waitParentAnimationTimeout)
            }
        });
        (0, _component_registrator2.default)("dxToolbarBase", ToolbarBase);
        module.exports = ToolbarBase
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/notify.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _action = __webpack_require__( /*! ../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _view_port = __webpack_require__( /*! ../core/utils/view_port */ 76);
        var _view_port2 = _interopRequireDefault(_view_port);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _toast = __webpack_require__( /*! ./toast */ 308);
        var _toast2 = _interopRequireDefault(_toast);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var $notify = null;
        var notify = function(message, type, displayTime) {
            var options = (0, _type.isPlainObject)(message) ? message : {
                message: message
            };
            var userHiddenAction = options.onHidden;
            (0, _extend.extend)(options, {
                type: type,
                displayTime: displayTime,
                onHidden: function(args) {
                    (0, _renderer2.default)(args.element).remove();
                    new _action2.default(userHiddenAction, {
                        context: args.model
                    }).execute(arguments)
                }
            });
            $notify = (0, _renderer2.default)("<div>").appendTo(_view_port2.default.value());
            new _toast2.default($notify, options).show()
        };
        module.exports = notify
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/toast.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var ready = __webpack_require__( /*! ../core/utils/ready_callbacks */ 51).add;
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../core/utils/array */ 14).inArray;
        var pointerEvents = __webpack_require__( /*! ../events/pointer */ 23);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var Overlay = __webpack_require__( /*! ./overlay */ 58);
        var themes = __webpack_require__( /*! ./themes */ 32);
        var TOAST_CLASS = "dx-toast";
        var TOAST_CLASS_PREFIX = TOAST_CLASS + "-";
        var TOAST_WRAPPER_CLASS = TOAST_CLASS_PREFIX + "wrapper";
        var TOAST_CONTENT_CLASS = TOAST_CLASS_PREFIX + "content";
        var TOAST_MESSAGE_CLASS = TOAST_CLASS_PREFIX + "message";
        var TOAST_ICON_CLASS = TOAST_CLASS_PREFIX + "icon";
        var WIDGET_NAME = "dxToast";
        var toastTypes = ["info", "warning", "error", "success"];
        var TOAST_STACK = [];
        var FIRST_Z_INDEX_OFFSET = 8e3;
        var visibleToastInstance = null;
        var POSITION_ALIASES = {
            top: {
                my: "top",
                at: "top",
                of: null,
                offset: "0 0"
            },
            bottom: {
                my: "bottom",
                at: "bottom",
                of: null,
                offset: "0 -20"
            },
            center: {
                my: "center",
                at: "center",
                of: null,
                offset: "0 0"
            },
            right: {
                my: "center right",
                at: "center right",
                of: null,
                offset: "0 0"
            },
            left: {
                my: "center left",
                at: "center left",
                of: null,
                offset: "0 0"
            }
        };
        ready(function() {
            eventsEngine.subscribeGlobal(domAdapter.getDocument(), pointerEvents.down, function(e) {
                for (var i = TOAST_STACK.length - 1; i >= 0; i--) {
                    if (!TOAST_STACK[i]._proxiedDocumentDownHandler(e)) {
                        return
                    }
                }
            })
        });
        var Toast = Overlay.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    message: "",
                    type: "info",
                    displayTime: 2e3,
                    position: "bottom center",
                    animation: {
                        show: {
                            type: "fade",
                            duration: 400,
                            from: 0,
                            to: 1
                        },
                        hide: {
                            type: "fade",
                            duration: 400,
                            to: 0
                        }
                    },
                    shading: false,
                    height: "auto",
                    hideTopOverlayHandler: null,
                    closeOnSwipe: true,
                    closeOnClick: false,
                    resizeEnabled: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "android"
                    },
                    options: {
                        closeOnOutsideClick: true,
                        width: "auto",
                        position: {
                            at: "bottom left",
                            my: "bottom left",
                            offset: "20 -20"
                        },
                        animation: {
                            show: {
                                type: "slide",
                                duration: 200,
                                from: {
                                    position: {
                                        my: "top",
                                        at: "bottom",
                                        of: window
                                    }
                                }
                            },
                            hide: {
                                type: "slide",
                                duration: 200,
                                to: {
                                    position: {
                                        my: "top",
                                        at: "bottom",
                                        of: window
                                    }
                                }
                            }
                        }
                    }
                }, {
                    device: function(_device) {
                        var isPhone = "phone" === _device.deviceType;
                        var isAndroid = "android" === _device.platform;
                        return isPhone && isAndroid
                    },
                    options: {
                        width: function() {
                            return $(window).width()
                        },
                        position: {
                            at: "bottom center",
                            my: "bottom center",
                            offset: "0 0"
                        }
                    }
                }, {
                    device: function() {
                        return themes.isMaterial()
                    },
                    options: {
                        minWidth: 344,
                        maxWidth: 568,
                        displayTime: 4e3
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._posStringToObject()
            },
            _renderContentImpl: function() {
                if (this.option("message")) {
                    this._message = $("<div>").addClass(TOAST_MESSAGE_CLASS).text(this.option("message")).appendTo(this.$content())
                }
                this.setAria("role", "alert", this._message);
                if (inArray(this.option("type").toLowerCase(), toastTypes) > -1) {
                    this.$content().prepend($("<div>").addClass(TOAST_ICON_CLASS))
                }
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(TOAST_CLASS);
                this._wrapper().addClass(TOAST_WRAPPER_CLASS);
                this._$content.addClass(TOAST_CLASS_PREFIX + String(this.option("type")).toLowerCase());
                this.$content().addClass(TOAST_CONTENT_CLASS);
                this._toggleCloseEvents("Swipe");
                this._toggleCloseEvents("Click")
            },
            _renderScrollTerminator: commonUtils.noop,
            _toggleCloseEvents: function(event) {
                var dxEvent = "dx" + event.toLowerCase();
                eventsEngine.off(this._$content, dxEvent);
                this.option("closeOn" + event) && eventsEngine.on(this._$content, dxEvent, this.hide.bind(this))
            },
            _posStringToObject: function() {
                if (!typeUtils.isString(this.option("position"))) {
                    return
                }
                var verticalPosition = this.option("position").split(" ")[0];
                var horizontalPosition = this.option("position").split(" ")[1];
                this.option("position", extend({}, POSITION_ALIASES[verticalPosition]));
                switch (horizontalPosition) {
                    case "center":
                    case "left":
                    case "right":
                        this.option("position").at += " " + horizontalPosition;
                        this.option("position").my += " " + horizontalPosition
                }
            },
            _show: function() {
                if (visibleToastInstance && visibleToastInstance !== this) {
                    clearTimeout(visibleToastInstance._hideTimeout);
                    visibleToastInstance.hide()
                }
                visibleToastInstance = this;
                return this.callBase.apply(this, arguments).done(function() {
                    clearTimeout(this._hideTimeout);
                    this._hideTimeout = setTimeout(this.hide.bind(this), this.option("displayTime"))
                }.bind(this))
            },
            _hide: function() {
                visibleToastInstance = null;
                return this.callBase.apply(this, arguments)
            },
            _overlayStack: function() {
                return TOAST_STACK
            },
            _zIndexInitValue: function() {
                return this.callBase() + FIRST_Z_INDEX_OFFSET
            },
            _dispose: function() {
                clearTimeout(this._hideTimeout);
                visibleToastInstance = null;
                this.callBase()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "type":
                        this._$content.removeClass(TOAST_CLASS_PREFIX + args.previousValue);
                        this._$content.addClass(TOAST_CLASS_PREFIX + String(args.value).toLowerCase());
                        break;
                    case "message":
                        if (this._message) {
                            this._message.text(args.value)
                        }
                        break;
                    case "closeOnSwipe":
                        this._toggleCloseEvents("Swipe");
                        break;
                    case "closeOnClick":
                        this._toggleCloseEvents("Click");
                        break;
                    case "displayTime":
                    case "position":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent(WIDGET_NAME, Toast);
        module.exports = Toast
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/speed_dial_action/speed_dial_main_item.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _swatch_container = __webpack_require__( /*! ../widget/swatch_container */ 157);
        var _speed_dial_item = __webpack_require__( /*! ./speed_dial_item */ 524);
        var _speed_dial_item2 = _interopRequireDefault(_speed_dial_item);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FAB_MAIN_CLASS = "dx-fa-button-main";
        var FAB_MAIN_CLASS_WITH_LABEL = "dx-fa-button-with-label";
        var FAB_CLOSE_ICON_CLASS = "dx-fa-button-icon-close";
        var INVISIBLE_STATE_CLASS = "dx-state-invisible";
        var speedDialMainItem = null;
        var modifyActionOptions = function(action) {
            return (0, _extend.extend)({}, action._options.silent(), {
                onInitialized: null,
                onDisposing: null
            })
        };
        var SpeedDialMainItem = function(_SpeedDialItem) {
            _inherits(SpeedDialMainItem, _SpeedDialItem);
            var _super = _createSuper(SpeedDialMainItem);

            function SpeedDialMainItem() {
                _classCallCheck(this, SpeedDialMainItem);
                return _super.apply(this, arguments)
            }
            _createClass(SpeedDialMainItem, [{
                key: "_getDefaultOptions",
                value: function() {
                    var defaultOptions = {
                        icon: "add",
                        closeIcon: "close",
                        position: {
                            at: "right bottom",
                            my: "right bottom",
                            offset: {
                                x: -16,
                                y: -16
                            }
                        },
                        maxSpeedDialActionCount: 5,
                        hint: "",
                        label: "",
                        direction: "auto",
                        actions: [],
                        activeStateEnabled: true,
                        hoverStateEnabled: true,
                        indent: 55,
                        childIndent: 40,
                        childOffset: 9,
                        callOverlayRenderShading: true,
                        closeOnOutsideClick: true
                    };
                    return (0, _extend.extend)(_get(_getPrototypeOf(SpeedDialMainItem.prototype), "_getDefaultOptions", this).call(this), (0, _extend.extend)(defaultOptions, (0, _config2.default)().floatingActionButtonConfig, {
                        shading: false
                    }))
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(SpeedDialMainItem.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return _themes2.default.isMaterial()
                        },
                        options: {
                            indent: 72,
                            childIndent: 56,
                            childOffset: 8
                        }
                    }])
                }
            }, {
                key: "_render",
                value: function() {
                    this.$element().addClass(FAB_MAIN_CLASS);
                    _get(_getPrototypeOf(SpeedDialMainItem.prototype), "_render", this).call(this);
                    this._moveToContainer();
                    this._renderCloseIcon();
                    this._renderClick()
                }
            }, {
                key: "_renderLabel",
                value: function() {
                    _get(_getPrototypeOf(SpeedDialMainItem.prototype), "_renderLabel", this).call(this);
                    this.$element().toggleClass(FAB_MAIN_CLASS_WITH_LABEL, !!this._$label)
                }
            }, {
                key: "_renderCloseIcon",
                value: function() {
                    this._$closeIcon = this._renderButtonIcon(this._$closeIcon, this._options.silent("closeIcon"), FAB_CLOSE_ICON_CLASS);
                    this._$closeIcon.addClass(INVISIBLE_STATE_CLASS)
                }
            }, {
                key: "_renderClick",
                value: function() {
                    this._clickAction = 1 === this._getVisibleActions().length ? this._getActionComponent()._createActionByOption("onClick") : this._createAction(this._clickHandler.bind(this));
                    this._setClickAction()
                }
            }, {
                key: "_getVisibleActions",
                value: function(actions) {
                    var currentActions = actions || this.option("actions");
                    return currentActions.filter(function(action) {
                        return action.option("visible")
                    })
                }
            }, {
                key: "_getCurrentOptions",
                value: function(actions) {
                    var visibleActions = speedDialMainItem._getVisibleActions(actions);
                    return 1 === visibleActions.length ? (0, _extend.extend)(visibleActions[0]._options.silent(), {
                        position: this._getPosition()
                    }) : (0, _extend.extend)(this._getDefaultOptions(), {
                        visible: 0 !== visibleActions.length
                    })
                }
            }, {
                key: "_clickHandler",
                value: function() {
                    var actions = this._actionItems.filter(function(action) {
                        return action.option("actionVisible")
                    }).sort(function(action, nextAction) {
                        return action.option("index") - nextAction.option("index")
                    });
                    if (1 === actions.length) {
                        return
                    }
                    var lastActionIndex = actions.length - 1;
                    for (var i = 0; i < actions.length; i++) {
                        actions[i].option("animation", this._getActionAnimation(actions[i], i, lastActionIndex));
                        actions[i].option("position", this._getActionPosition(actions, i));
                        actions[i]._$wrapper.css("position", this._$wrapper.css("position"));
                        actions[i].toggle()
                    }
                    if ((0, _config2.default)().floatingActionButtonConfig.shading) {
                        this._isShadingShown = !this.option("shading");
                        this.option("shading", this._isShadingShown)
                    }
                    this._$icon.toggleClass(INVISIBLE_STATE_CLASS);
                    this._$closeIcon.toggleClass(INVISIBLE_STATE_CLASS)
                }
            }, {
                key: "_updateZIndexStackPosition",
                value: function() {
                    _get(_getPrototypeOf(SpeedDialMainItem.prototype), "_updateZIndexStackPosition", this).call(this);
                    var overlayStack = this._overlayStack();
                    overlayStack.push(this)
                }
            }, {
                key: "_renderActions",
                value: function() {
                    var _this = this;
                    var actions = this.option("actions");
                    var minActionButtonCount = 1;
                    if (this._actionItems && this._actionItems.length) {
                        this._actionItems.forEach(function(actionItem) {
                            actionItem.dispose();
                            actionItem.$element().remove()
                        });
                        this._actionItems = []
                    }
                    this._actionItems = [];
                    if (actions.length === minActionButtonCount) {
                        return
                    }
                    for (var i = 0; i < actions.length; i++) {
                        var action = actions[i];
                        var $actionElement = (0, _renderer2.default)("<div>").appendTo((0, _swatch_container.getSwatchContainer)(action.$element()));
                        _events_engine2.default.off($actionElement, "click");
                        _events_engine2.default.on($actionElement, "click", function() {
                            _this._clickHandler()
                        });
                        action._options.silent("actionComponent", action);
                        action._options.silent("parentPosition", this._getPosition());
                        action._options.silent("actionVisible", action._options.silent("visible"));
                        this._actionItems.push(this._createComponent($actionElement, _speed_dial_item2.default, (0, _extend.extend)({}, modifyActionOptions(action), {
                            visible: false
                        })))
                    }
                }
            }, {
                key: "_getActionAnimation",
                value: function(action, index, lastActionIndex) {
                    var actionAnimationDelay = 30;
                    action._options.silent("animation.show.delay", actionAnimationDelay * index);
                    action._options.silent("animation.hide.delay", actionAnimationDelay * (lastActionIndex - index));
                    return action._options.silent("animation")
                }
            }, {
                key: "_getDirectionIndex",
                value: function(actions, direction) {
                    var directionIndex = 1;
                    if ("auto" === direction) {
                        var contentHeight = this.$content().height();
                        var actionsHeight = this.initialOption("indent") + this.initialOption("childIndent") * actions.length - contentHeight;
                        var offsetTop = this.$content().offset().top;
                        if (actionsHeight < offsetTop) {
                            return -directionIndex
                        } else {
                            var offsetBottom = this._getContainer().height() - contentHeight - offsetTop;
                            return offsetTop >= offsetBottom ? -directionIndex : directionIndex
                        }
                    }
                    return "down" !== direction ? -directionIndex : directionIndex
                }
            }, {
                key: "_getActionPosition",
                value: function(actions, index) {
                    var action = actions[index];
                    var actionOffsetXValue = this.initialOption("childOffset");
                    var actionOffsetX = action._options.silent("label") && !this._$label ? this._isPositionLeft(this._getPosition()) ? actionOffsetXValue : -actionOffsetXValue : 0;
                    var actionOffsetYValue = this.initialOption("indent") + this.initialOption("childIndent") * index;
                    var actionOffsetY = this._getDirectionIndex(actions, this.option("direction")) * actionOffsetYValue;
                    var actionPositionAtMy = action._options.silent("label") ? this._isPositionLeft(this._getPosition()) ? "left" : "right" : "center";
                    return {
                        of: this.$content(),
                        at: actionPositionAtMy,
                        my: actionPositionAtMy,
                        offset: {
                            x: actionOffsetX,
                            y: actionOffsetY
                        }
                    }
                }
            }, {
                key: "_outsideClickHandler",
                value: function(e) {
                    if (this._isShadingShown) {
                        var isShadingClick = (0, _renderer2.default)(e.target)[0] === this._$wrapper[0];
                        if (isShadingClick) {
                            this._clickHandler()
                        }
                    }
                }
            }, {
                key: "_setPosition",
                value: function() {
                    if (this.option("visible")) {
                        this._hide();
                        this._show()
                    }
                }
            }, {
                key: "_getPosition",
                value: function() {
                    return this._getDefaultOptions().position
                }
            }, {
                key: "_getInkRippleContainer",
                value: function() {
                    return this.$content()
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "actions":
                            if (this._isVisible()) {
                                this._renderIcon()
                            }
                            this._renderCloseIcon();
                            this._renderClick();
                            this._renderActions();
                            break;
                        case "maxSpeedDialActionCount":
                            this._renderActions();
                            break;
                        case "closeIcon":
                            this._renderCloseIcon();
                            break;
                        case "position":
                            this._setPosition();
                            break;
                        case "label":
                            if (this._isVisible()) {
                                this._renderLabel()
                            }
                            this._setPosition();
                            break;
                        case "icon":
                            if (this._isVisible()) {
                                this._renderIcon()
                            }
                            break;
                        default:
                            _get(_getPrototypeOf(SpeedDialMainItem.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return SpeedDialMainItem
        }(_speed_dial_item2.default);
        exports.initAction = function(newAction) {
            newAction._options.silent("onInitializing", null);
            var isActionExist = false;
            if (!speedDialMainItem) {
                var $fabMainElement = (0, _renderer2.default)("<div>").appendTo((0, _swatch_container.getSwatchContainer)(newAction.$element()));
                speedDialMainItem = newAction._createComponent($fabMainElement, SpeedDialMainItem, (0, _extend.extend)({}, modifyActionOptions(newAction), {
                    actions: [newAction]
                }))
            } else {
                var savedActions = speedDialMainItem.option("actions");
                savedActions.forEach(function(action) {
                    if (action._options.silent("id") === newAction._options.silent("id")) {
                        isActionExist = true;
                        return newAction
                    }
                });
                delete speedDialMainItem._options.silent("position");
                if (!isActionExist) {
                    if (speedDialMainItem._getVisibleActions(savedActions).length >= speedDialMainItem.option("maxSpeedDialActionCount")) {
                        newAction.dispose();
                        _ui2.default.log("W1014");
                        return
                    }
                    savedActions.push(newAction);
                    speedDialMainItem.option((0, _extend.extend)(speedDialMainItem._getCurrentOptions(savedActions), {
                        actions: savedActions
                    }))
                } else {
                    if (1 === savedActions.length) {
                        speedDialMainItem.option((0, _extend.extend)({}, modifyActionOptions(savedActions[0]), {
                            actions: savedActions,
                            position: speedDialMainItem._getPosition()
                        }))
                    } else {
                        speedDialMainItem.option((0, _extend.extend)(speedDialMainItem._getCurrentOptions(savedActions), {
                            actions: savedActions
                        }))
                    }
                }
            }
        };
        exports.disposeAction = function(actionId) {
            if (!speedDialMainItem) {
                return
            }
            var savedActions = speedDialMainItem.option("actions");
            var savedActionsCount = savedActions.length;
            savedActions = savedActions.filter(function(action) {
                return action._options.silent("id") !== actionId
            });
            if (savedActionsCount === savedActions.length) {
                return
            }
            if (!savedActions.length) {
                speedDialMainItem.dispose();
                speedDialMainItem.$element().remove();
                speedDialMainItem = null
            } else {
                if (1 === savedActions.length) {
                    speedDialMainItem.option((0, _extend.extend)({}, modifyActionOptions(savedActions[0]), {
                        actions: savedActions
                    }))
                } else {
                    speedDialMainItem.option({
                        actions: savedActions
                    })
                }
            }
        };
        exports.repaint = function() {
            if (!speedDialMainItem) {
                return
            }
            var visibleActions = speedDialMainItem._getVisibleActions();
            var icon = 1 === visibleActions.length ? visibleActions[0].option("icon") : speedDialMainItem._getDefaultOptions().icon;
            var label = 1 === visibleActions.length ? visibleActions[0].option("label") : speedDialMainItem._getDefaultOptions().label;
            speedDialMainItem.option({
                actions: speedDialMainItem.option("actions"),
                icon: icon,
                closeIcon: speedDialMainItem._getDefaultOptions().closeIcon,
                position: speedDialMainItem._getPosition(),
                label: label,
                maxSpeedDialActionCount: speedDialMainItem._getDefaultOptions().maxSpeedDialActionCount,
                direction: speedDialMainItem._getDefaultOptions().direction
            })
        }
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var TextEditorMask = __webpack_require__( /*! ./ui.text_editor.mask */ 528);
        registerComponent("dxTextEditor", TextEditorMask);
        module.exports = TextEditorMask
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/utils.caret.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var _devices$real = _devices2.default.real(),
            ios = _devices$real.ios,
            mac = _devices$real.mac;
        var isFocusingOnCaretChange = _browser2.default.msie || ios || mac;
        var getCaret = function(input) {
            var range;
            try {
                range = {
                    start: input.selectionStart,
                    end: input.selectionEnd
                }
            } catch (e) {
                range = {
                    start: 0,
                    end: 0
                }
            }
            return range
        };
        var setCaret = function(input, position) {
            if (!_dom_adapter2.default.getBody().contains(input)) {
                return
            }
            try {
                input.selectionStart = position.start;
                input.selectionEnd = position.end
            } catch (e) {}
        };
        var caret = function(input, position) {
            input = (0, _renderer2.default)(input).get(0);
            if (!(0, _type.isDefined)(position)) {
                return getCaret(input)
            }
            if (isFocusingOnCaretChange && _dom_adapter2.default.getActiveElement() !== input) {
                return
            }
            setCaret(input, position)
        };
        module.exports = caret
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.mask.strategy.base.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var MASK_EVENT_NAMESPACE = "dxMask";
        var BLUR_EVENT = "blur beforedeactivate";
        var EMPTY_CHAR = " ";
        var BaseMaskStrategy = function() {
            function BaseMaskStrategy(editor) {
                _classCallCheck(this, BaseMaskStrategy);
                this.editor = editor;
                this.DIRECTION = {
                    FORWARD: "forward",
                    BACKWARD: "backward"
                };
                this.NAME = this._getStrategyName()
            }
            _createClass(BaseMaskStrategy, [{
                key: "_getStrategyName",
                value: function() {
                    return "base"
                }
            }, {
                key: "editorOption",
                value: function() {
                    var _this$editor;
                    return (_this$editor = this.editor).option.apply(_this$editor, arguments)
                }
            }, {
                key: "editorInput",
                value: function() {
                    return this.editor._input()
                }
            }, {
                key: "editorCaret",
                value: function(newCaret) {
                    if (!newCaret) {
                        return this.editor._caret()
                    }
                    this.editor._caret(newCaret)
                }
            }, {
                key: "getHandler",
                value: function(handlerName) {
                    var handler = this["_".concat(handlerName, "Handler")] || function() {};
                    return handler.bind(this)
                }
            }, {
                key: "attachEvents",
                value: function() {
                    var _this = this;
                    var $input = this.editorInput();
                    this.getHandleEventNames().forEach(function(eventName) {
                        var subscriptionName = (0, _utils.addNamespace)(eventName.toLowerCase(), MASK_EVENT_NAMESPACE);
                        _events_engine2.default.on($input, subscriptionName, _this.getEventHandler(eventName))
                    });
                    this._attachChangeEventHandlers()
                }
            }, {
                key: "getHandleEventNames",
                value: function() {
                    return ["focusIn", "focusOut", "keyDown", "input", "paste", "cut", "drop"]
                }
            }, {
                key: "getEventHandler",
                value: function(eventName) {
                    return this["_".concat(eventName, "Handler")].bind(this)
                }
            }, {
                key: "detachEvents",
                value: function() {
                    _events_engine2.default.off(this.editorInput(), ".".concat(MASK_EVENT_NAMESPACE))
                }
            }, {
                key: "_attachChangeEventHandlers",
                value: function() {
                    if ((0, _array.inArray)("change", this.editorOption("valueChangeEvent").split(" ")) === -1) {
                        return
                    }
                    _events_engine2.default.on(this.editorInput(), (0, _utils.addNamespace)(BLUR_EVENT, MASK_EVENT_NAMESPACE), function(e) {
                        this._suppressCaretChanging(this._changeHandler, [e]);
                        this._changeHandler(e)
                    }.bind(this.editor))
                }
            }, {
                key: "_focusInHandler",
                value: function() {
                    this.editor._showMaskPlaceholder();
                    this.editor._direction(this.DIRECTION.FORWARD);
                    if (!this.editor._isValueEmpty() && this.editorOption("isValid")) {
                        this.editor._adjustCaret()
                    } else {
                        var caret = this.editor._maskRulesChain.first();
                        this._caretTimeout = setTimeout(function() {
                            this._caret({
                                start: caret,
                                end: caret
                            })
                        }.bind(this.editor), 0)
                    }
                }
            }, {
                key: "_focusOutHandler",
                value: function(event) {
                    this.editor._changeHandler(event);
                    if ("onFocus" === this.editorOption("showMaskMode") && this.editor._isValueEmpty()) {
                        this.editorOption("text", "");
                        this.editor._renderDisplayText("")
                    }
                }
            }, {
                key: "_cutHandler",
                value: function(event) {
                    var caret = this.editorCaret();
                    var selectedText = this.editorInput().val().substring(caret.start, caret.end);
                    this.editor._maskKeyHandler(event, function() {
                        return (0, _dom.clipboardText)(event, selectedText)
                    })
                }
            }, {
                key: "_dropHandler",
                value: function() {
                    this._clearDragTimer();
                    this._dragTimer = setTimeout(function() {
                        this.option("value", this._convertToValue(this._input().val()))
                    }.bind(this.editor))
                }
            }, {
                key: "_clearDragTimer",
                value: function() {
                    clearTimeout(this._dragTimer)
                }
            }, {
                key: "_keyDownHandler",
                value: function() {
                    this._keyPressHandled = false
                }
            }, {
                key: "_pasteHandler",
                value: function(event) {
                    var editor = this.editor;
                    this._keyPressHandled = true;
                    var caret = this.editorCaret();
                    editor._maskKeyHandler(event, function() {
                        var pastedText = (0, _dom.clipboardText)(event);
                        var restText = editor._maskRulesChain.text().substring(caret.end);
                        var accepted = editor._handleChain({
                            text: pastedText,
                            start: caret.start,
                            length: pastedText.length
                        });
                        var newCaret = caret.start + accepted;
                        editor._handleChain({
                            text: restText,
                            start: newCaret,
                            length: restText.length
                        });
                        editor._caret({
                            start: newCaret,
                            end: newCaret
                        })
                    })
                }
            }, {
                key: "_autoFillHandler",
                value: function(event) {
                    var _this2 = this;
                    var editor = this.editor;
                    var inputVal = this.editorInput().val();
                    this._inputHandlerTimer = setTimeout(function() {
                        _this2._keyPressHandled = true;
                        if (_this2._isAutoFill()) {
                            _this2._keyPressHandled = true;
                            editor._maskKeyHandler(event, function() {
                                editor._handleChain({
                                    text: inputVal,
                                    start: 0,
                                    length: inputVal.length
                                })
                            });
                            editor._validateMask()
                        }
                    })
                }
            }, {
                key: "_isAutoFill",
                value: function() {
                    var $input = this.editor._input();
                    var result = false;
                    if (_browser2.default.msie && _browser2.default.version > 11) {
                        result = $input.hasClass("edge-autofilled")
                    } else {
                        if (_browser2.default.webkit) {
                            var input = $input.get(0);
                            result = input && input.matches(":-webkit-autofill")
                        }
                    }
                    return result
                }
            }, {
                key: "runWithoutEventProcessing",
                value: function(action) {
                    var keyPressHandled = this._keyPressHandled;
                    this._keyPressHandled = true;
                    action();
                    this._keyPressHandled = keyPressHandled
                }
            }, {
                key: "_backspaceHandler",
                value: function() {}
            }, {
                key: "_delHandler",
                value: function(event) {
                    var editor = this.editor;
                    this._keyPressHandled = true;
                    editor._maskKeyHandler(event, function() {
                        return !editor._hasSelection() && editor._handleKey(EMPTY_CHAR)
                    })
                }
            }, {
                key: "clean",
                value: function() {
                    this._clearDragTimer();
                    clearTimeout(this._backspaceHandlerTimeout);
                    clearTimeout(this._caretTimeout);
                    clearTimeout(this._inputHandlerTimer)
                }
            }]);
            return BaseMaskStrategy
        }();
        exports.default = BaseMaskStrategy
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiListEditStrategy = __webpack_require__( /*! ./ui.list.edit.strategy.grouped */ 537);
        var _uiListEditStrategy2 = _interopRequireDefault(_uiListEditStrategy);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _uiListEdit = __webpack_require__( /*! ./ui.list.edit.provider */ 538);
        var _uiListEdit2 = _interopRequireDefault(_uiListEdit);
        var _uiList = __webpack_require__( /*! ./ui.list.base */ 226);
        var _uiList2 = _interopRequireDefault(_uiList);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var LIST_ITEM_SELECTED_CLASS = "dx-list-item-selected";
        var LIST_ITEM_RESPONSE_WAIT_CLASS = "dx-list-item-response-wait";
        var ListEdit = _uiList2.default.inherit({
            _supportedKeys: function() {
                var _this = this;
                var that = this;
                var parent = this.callBase();
                var deleteFocusedItem = function(e) {
                    if (that.option("allowItemDeleting")) {
                        e.preventDefault();
                        that.deleteItem(that.option("focusedElement"))
                    }
                };
                var moveFocusedItem = function(e, moveUp) {
                    var editStrategy = _this._editStrategy;
                    var focusedElement = _this.option("focusedElement");
                    var focusedItemIndex = editStrategy.getNormalizedIndex(focusedElement);
                    var isLastIndexFocused = focusedItemIndex === _this._getLastItemIndex();
                    if (isLastIndexFocused && _this._isDataSourceLoading()) {
                        return
                    }
                    if (e.shiftKey && that.option("itemDragging.allowReordering")) {
                        var nextItemIndex = focusedItemIndex + (moveUp ? -1 : 1);
                        var $nextItem = editStrategy.getItemElement(nextItemIndex);
                        _this.reorderItem(focusedElement, $nextItem);
                        _this.scrollToItem(focusedElement);
                        e.preventDefault()
                    } else {
                        var editProvider = _this._editProvider;
                        var isInternalMoving = editProvider.handleKeyboardEvents(focusedItemIndex, moveUp);
                        if (!isInternalMoving) {
                            moveUp ? parent.upArrow(e) : parent.downArrow(e)
                        }
                    }
                };
                var enter = function(e) {
                    if (!this._editProvider.handleEnterPressing()) {
                        parent.enter.apply(this, arguments)
                    }
                };
                var space = function(e) {
                    if (!this._editProvider.handleEnterPressing()) {
                        parent.space.apply(this, arguments)
                    }
                };
                return (0, _extend.extend)({}, parent, {
                    del: deleteFocusedItem,
                    upArrow: function(e) {
                        return moveFocusedItem(e, true)
                    },
                    downArrow: function(e) {
                        return moveFocusedItem(e)
                    },
                    enter: enter,
                    space: space
                })
            },
            _updateSelection: function() {
                this._editProvider.afterItemsRendered();
                this.callBase()
            },
            _getLastItemIndex: function() {
                return this._itemElements().length - 1
            },
            _refreshItemElements: function() {
                this.callBase();
                var excludedSelectors = this._editProvider.getExcludedItemSelectors();
                if (excludedSelectors.length) {
                    this._itemElementsCache = this._itemElementsCache.not(excludedSelectors)
                }
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    allowItemReordering: {
                        since: "19.2",
                        alias: "itemDragging.allowReordering"
                    }
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    showSelectionControls: false,
                    selectionMode: "none",
                    selectAllMode: "page",
                    onSelectAllValueChanged: null,
                    selectAllText: (0, _message.format)("dxList-selectAll"),
                    menuItems: [],
                    menuMode: "context",
                    allowItemDeleting: false,
                    itemDeleteMode: "static",
                    allowItemReordering: false,
                    itemDragging: {}
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "ios" === _device.platform
                    },
                    options: {
                        menuMode: "slide",
                        itemDeleteMode: "slideItem"
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        itemDeleteMode: "swipe"
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._initEditProvider()
            },
            _initDataSource: function() {
                this.callBase();
                if (!this._isPageSelectAll()) {
                    this._dataSource && this._dataSource.requireTotalCount(true)
                }
            },
            _isPageSelectAll: function() {
                return "page" === this.option("selectAllMode")
            },
            _initEditProvider: function() {
                this._editProvider = new _uiListEdit2.default(this)
            },
            _disposeEditProvider: function() {
                if (this._editProvider) {
                    this._editProvider.dispose()
                }
            },
            _refreshEditProvider: function() {
                this._disposeEditProvider();
                this._initEditProvider()
            },
            _initEditStrategy: function() {
                if (this.option("grouped")) {
                    this._editStrategy = new _uiListEditStrategy2.default(this)
                } else {
                    this.callBase()
                }
            },
            _initMarkup: function() {
                this._refreshEditProvider();
                this.callBase()
            },
            _renderItems: function() {
                this.callBase.apply(this, arguments);
                this._editProvider.afterItemsRendered()
            },
            _selectedItemClass: function() {
                return LIST_ITEM_SELECTED_CLASS
            },
            _itemResponseWaitClass: function() {
                return LIST_ITEM_RESPONSE_WAIT_CLASS
            },
            _itemClickHandler: function(e) {
                var $itemElement = (0, _renderer2.default)(e.currentTarget);
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                var handledByEditProvider = this._editProvider.handleClick($itemElement, e);
                if (handledByEditProvider) {
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _shouldFireContextMenuEvent: function() {
                return this.callBase.apply(this, arguments) || this._editProvider.contextMenuHandlerExists()
            },
            _itemHoldHandler: function(e) {
                var $itemElement = (0, _renderer2.default)(e.currentTarget);
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                var handledByEditProvider = (0, _utils.isTouchEvent)(e) && this._editProvider.handleContextMenu($itemElement, e);
                if (handledByEditProvider) {
                    e.handledByEditProvider = true;
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _itemContextMenuHandler: function(e) {
                var $itemElement = (0, _renderer2.default)(e.currentTarget);
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                var handledByEditProvider = !e.handledByEditProvider && this._editProvider.handleContextMenu($itemElement, e);
                if (handledByEditProvider) {
                    e.preventDefault();
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _postprocessRenderItem: function(args) {
                this.callBase.apply(this, arguments);
                this._editProvider.modifyItemElement(args)
            },
            _clean: function() {
                this._disposeEditProvider();
                this.callBase()
            },
            focusListItem: function(index) {
                var $item = this._editStrategy.getItemElement(index);
                this.option("focusedElement", $item);
                this.focus();
                this.scrollToItem(this.option("focusedElement"))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "selectAllMode":
                        this._initDataSource();
                        this._dataSource.pageIndex(0);
                        this._dataSource.load();
                        break;
                    case "grouped":
                        this._clearSelectedItems();
                        delete this._renderingGroupIndex;
                        this._initEditStrategy();
                        this.callBase(args);
                        break;
                    case "showSelectionControls":
                    case "menuItems":
                    case "menuMode":
                    case "allowItemDeleting":
                    case "itemDeleteMode":
                    case "allowItemReordering":
                    case "itemDragging":
                    case "selectAllText":
                        this._invalidate();
                        break;
                    case "onSelectAllValueChanged":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            selectAll: function() {
                return this._selection.selectAll(this._isPageSelectAll())
            },
            unselectAll: function() {
                return this._selection.deselectAll(this._isPageSelectAll())
            },
            isSelectAll: function() {
                return this._selection.getSelectAllState(this._isPageSelectAll())
            },
            getFlatIndexByItemElement: function(itemElement) {
                return this._itemElements().index(itemElement)
            },
            getItemElementByFlatIndex: function(flatIndex) {
                var $itemElements = this._itemElements();
                if (flatIndex < 0 || flatIndex >= $itemElements.length) {
                    return (0, _renderer2.default)()
                }
                return $itemElements.eq(flatIndex)
            },
            getItemByIndex: function(index) {
                return this._editStrategy.getItemDataByIndex(index)
            }
        });
        module.exports = ListEdit
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.switchable.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var abstract = EditDecorator.abstract;
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../../events/pointer */ 23);
        var feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 134);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator";
        var POINTER_DOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, LIST_EDIT_DECORATOR);
        var ACTIVE_EVENT_NAME = eventUtils.addNamespace(feedbackEvents.active, LIST_EDIT_DECORATOR);
        var LIST_ITEM_CONTENT_CLASS = "dx-list-item-content";
        var SWITCHABLE_DELETE_READY_CLASS = "dx-list-switchable-delete-ready";
        var SWITCHABLE_MENU_SHIELD_POSITIONING_CLASS = "dx-list-switchable-menu-shield-positioning";
        var SWITCHABLE_DELETE_TOP_SHIELD_CLASS = "dx-list-switchable-delete-top-shield";
        var SWITCHABLE_DELETE_BOTTOM_SHIELD_CLASS = "dx-list-switchable-delete-bottom-shield";
        var SWITCHABLE_MENU_ITEM_SHIELD_POSITIONING_CLASS = "dx-list-switchable-menu-item-shield-positioning";
        var SWITCHABLE_DELETE_ITEM_CONTENT_SHIELD_CLASS = "dx-list-switchable-delete-item-content-shield";
        var SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-switchable-delete-button-container";
        var SwitchableEditDecorator = EditDecorator.inherit({
            _init: function() {
                this._$topShield = $("<div>").addClass(SWITCHABLE_DELETE_TOP_SHIELD_CLASS);
                this._$bottomShield = $("<div>").addClass(SWITCHABLE_DELETE_BOTTOM_SHIELD_CLASS);
                this._$itemContentShield = $("<div>").addClass(SWITCHABLE_DELETE_ITEM_CONTENT_SHIELD_CLASS);
                eventsEngine.on(this._$topShield, POINTER_DOWN_EVENT_NAME, this._cancelDeleteReadyItem.bind(this));
                eventsEngine.on(this._$bottomShield, POINTER_DOWN_EVENT_NAME, this._cancelDeleteReadyItem.bind(this));
                this._list.$element().append(this._$topShield.toggle(false)).append(this._$bottomShield.toggle(false))
            },
            handleClick: function() {
                return this._cancelDeleteReadyItem()
            },
            _cancelDeleteReadyItem: function() {
                if (!this._$readyToDeleteItem) {
                    return false
                }
                this._cancelDelete(this._$readyToDeleteItem);
                return true
            },
            _cancelDelete: function($itemElement) {
                this._toggleDeleteReady($itemElement, false)
            },
            _toggleDeleteReady: function($itemElement, readyToDelete) {
                if (void 0 === readyToDelete) {
                    readyToDelete = !this._isReadyToDelete($itemElement)
                }
                this._toggleShields($itemElement, readyToDelete);
                this._toggleScrolling(readyToDelete);
                this._cacheReadyToDeleteItem($itemElement, readyToDelete);
                this._animateToggleDelete($itemElement, readyToDelete)
            },
            _isReadyToDelete: function($itemElement) {
                return $itemElement.hasClass(SWITCHABLE_DELETE_READY_CLASS)
            },
            _toggleShields: function($itemElement, enabled) {
                this._list.$element().toggleClass(SWITCHABLE_MENU_SHIELD_POSITIONING_CLASS, enabled);
                this._$topShield.toggle(enabled);
                this._$bottomShield.toggle(enabled);
                if (enabled) {
                    this._updateShieldsHeight($itemElement)
                }
                this._toggleContentShield($itemElement, enabled)
            },
            _updateShieldsHeight: function($itemElement) {
                var $list = this._list.$element();
                var listTopOffset = $list.offset().top;
                var listHeight = $list.outerHeight();
                var itemTopOffset = $itemElement.offset().top;
                var itemHeight = $itemElement.outerHeight();
                var dirtyTopShieldHeight = itemTopOffset - listTopOffset;
                var dirtyBottomShieldHeight = listHeight - itemHeight - dirtyTopShieldHeight;
                this._$topShield.height(Math.max(dirtyTopShieldHeight, 0));
                this._$bottomShield.height(Math.max(dirtyBottomShieldHeight, 0))
            },
            _toggleContentShield: function($itemElement, enabled) {
                if (enabled) {
                    $itemElement.find("." + LIST_ITEM_CONTENT_CLASS).first().append(this._$itemContentShield)
                } else {
                    this._$itemContentShield.detach()
                }
            },
            _toggleScrolling: function(readyToDelete) {
                var scrollView = this._list.$element().dxScrollView("instance");
                if (readyToDelete) {
                    scrollView.on("start", this._cancelScrolling)
                } else {
                    scrollView.off("start", this._cancelScrolling)
                }
            },
            _cancelScrolling: function(args) {
                args.event.cancel = true
            },
            _cacheReadyToDeleteItem: function($itemElement, cache) {
                if (cache) {
                    this._$readyToDeleteItem = $itemElement
                } else {
                    delete this._$readyToDeleteItem
                }
            },
            _animateToggleDelete: function($itemElement, readyToDelete) {
                if (readyToDelete) {
                    this._enablePositioning($itemElement);
                    this._prepareDeleteReady($itemElement);
                    this._animatePrepareDeleteReady($itemElement);
                    eventsEngine.off($itemElement, pointerEvents.up)
                } else {
                    this._forgetDeleteReady($itemElement);
                    this._animateForgetDeleteReady($itemElement).done(this._disablePositioning.bind(this, $itemElement))
                }
            },
            _enablePositioning: function($itemElement) {
                $itemElement.addClass(SWITCHABLE_MENU_ITEM_SHIELD_POSITIONING_CLASS);
                eventsEngine.on($itemElement, ACTIVE_EVENT_NAME, noop);
                eventsEngine.one($itemElement, pointerEvents.up, this._disablePositioning.bind(this, $itemElement))
            },
            _disablePositioning: function($itemElement) {
                $itemElement.removeClass(SWITCHABLE_MENU_ITEM_SHIELD_POSITIONING_CLASS);
                eventsEngine.off($itemElement, ACTIVE_EVENT_NAME)
            },
            _prepareDeleteReady: function($itemElement) {
                $itemElement.addClass(SWITCHABLE_DELETE_READY_CLASS)
            },
            _forgetDeleteReady: function($itemElement) {
                $itemElement.removeClass(SWITCHABLE_DELETE_READY_CLASS)
            },
            _animatePrepareDeleteReady: abstract,
            _animateForgetDeleteReady: abstract,
            _getDeleteButtonContainer: function($itemElement) {
                $itemElement = $itemElement || this._$readyToDeleteItem;
                return $itemElement.children("." + SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS)
            },
            _deleteItem: function($itemElement) {
                $itemElement = $itemElement || this._$readyToDeleteItem;
                this._getDeleteButtonContainer($itemElement).detach();
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                this._list.deleteItem($itemElement).always(this._cancelDelete.bind(this, $itemElement))
            },
            _isRtlEnabled: function() {
                return this._list.option("rtlEnabled")
            },
            dispose: function() {
                if (this._$topShield) {
                    this._$topShield.remove()
                }
                if (this._$bottomShield) {
                    this._$bottomShield.remove()
                }
                this.callBase.apply(this, arguments)
            }
        });
        module.exports = SwitchableEditDecorator
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator_menu_helper.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var EditDecoratorMenuHelperMixin = {
            _menuEnabled: function() {
                return !!this._menuItems().length
            },
            _menuItems: function() {
                return this._list.option("menuItems")
            },
            _deleteEnabled: function() {
                return this._list.option("allowItemDeleting")
            },
            _fireMenuAction: function($itemElement, action) {
                this._list._itemEventHandlerByHandler($itemElement, action, {}, {
                    excludeValidators: ["disabled", "readOnly"]
                })
            }
        };
        module.exports = EditDecoratorMenuHelperMixin
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scrollbar.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _ready_callbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        var _ready_callbacks2 = _interopRequireDefault(_ready_callbacks);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCROLLBAR = "dxScrollbar";
        var SCROLLABLE_SCROLLBAR_CLASS = "dx-scrollable-scrollbar";
        var SCROLLABLE_SCROLLBAR_ACTIVE_CLASS = "".concat(SCROLLABLE_SCROLLBAR_CLASS, "-active");
        var SCROLLABLE_SCROLL_CLASS = "dx-scrollable-scroll";
        var SCROLLABLE_SCROLL_CONTENT_CLASS = "dx-scrollable-scroll-content";
        var HOVER_ENABLED_STATE = "dx-scrollbar-hoverable";
        var HORIZONTAL = "horizontal";
        var THUMB_MIN_SIZE = 15;
        var SCROLLBAR_VISIBLE = {
            onScroll: "onScroll",
            onHover: "onHover",
            always: "always",
            never: "never"
        };
        var activeScrollbar = null;
        var Scrollbar = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    direction: null,
                    visible: false,
                    activeStateEnabled: false,
                    visibilityMode: SCROLLBAR_VISIBLE.onScroll,
                    containerSize: 0,
                    contentSize: 0,
                    expandable: true,
                    scaleRatio: 1
                })
            },
            _init: function() {
                this.callBase();
                this._isHovered = false
            },
            _initMarkup: function() {
                this._renderThumb();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._renderDirection();
                this._update();
                this._attachPointerDownHandler();
                this.option("hoverStateEnabled", this._isHoverMode());
                this.$element().toggleClass(HOVER_ENABLED_STATE, this.option("hoverStateEnabled"))
            },
            _renderThumb: function() {
                this._$thumb = (0, _renderer2.default)("<div>").addClass(SCROLLABLE_SCROLL_CLASS);
                (0, _renderer2.default)("<div>").addClass(SCROLLABLE_SCROLL_CONTENT_CLASS).appendTo(this._$thumb);
                this.$element().addClass(SCROLLABLE_SCROLLBAR_CLASS).append(this._$thumb)
            },
            isThumb: function($element) {
                return !!this.$element().find($element).length
            },
            _isHoverMode: function() {
                var visibilityMode = this.option("visibilityMode");
                return (visibilityMode === SCROLLBAR_VISIBLE.onHover || visibilityMode === SCROLLBAR_VISIBLE.always) && this.option("expandable")
            },
            _renderDirection: function() {
                var direction = this.option("direction");
                this.$element().addClass("dx-scrollbar-" + direction);
                this._dimension = direction === HORIZONTAL ? "width" : "height";
                this._prop = direction === HORIZONTAL ? "left" : "top"
            },
            _attachPointerDownHandler: function() {
                _events_engine2.default.on(this._$thumb, eventUtils.addNamespace(_pointer2.default.down, SCROLLBAR), this.feedbackOn.bind(this))
            },
            feedbackOn: function() {
                this.$element().addClass(SCROLLABLE_SCROLLBAR_ACTIVE_CLASS);
                activeScrollbar = this
            },
            feedbackOff: function() {
                this.$element().removeClass(SCROLLABLE_SCROLLBAR_ACTIVE_CLASS);
                activeScrollbar = null
            },
            cursorEnter: function() {
                this._isHovered = true;
                if (this._needScrollbar()) {
                    this.option("visible", true)
                }
            },
            cursorLeave: function() {
                this._isHovered = false;
                this.option("visible", false)
            },
            _renderDimensions: function() {
                this._$thumb.css({
                    width: this.option("width"),
                    height: this.option("height")
                })
            },
            _toggleVisibility: function(visible) {
                if (this.option("visibilityMode") === SCROLLBAR_VISIBLE.onScroll) {
                    this._$thumb.css("opacity")
                }
                visible = this._adjustVisibility(visible);
                this.option().visible = visible;
                this._$thumb.toggleClass("dx-state-invisible", !visible)
            },
            _adjustVisibility: function(visible) {
                if (this._baseContainerToContentRatio && !this._needScrollbar()) {
                    return false
                }
                switch (this.option("visibilityMode")) {
                    case SCROLLBAR_VISIBLE.onScroll:
                        break;
                    case SCROLLBAR_VISIBLE.onHover:
                        visible = visible || !!this._isHovered;
                        break;
                    case SCROLLBAR_VISIBLE.never:
                        visible = false;
                        break;
                    case SCROLLBAR_VISIBLE.always:
                        visible = true
                }
                return visible
            },
            moveTo: function(location) {
                if (this._isHidden()) {
                    return
                }
                if ((0, _type.isPlainObject)(location)) {
                    location = location[this._prop] || 0
                }
                var scrollBarLocation = {};
                scrollBarLocation[this._prop] = this._calculateScrollBarPosition(location);
                _translator2.default.move(this._$thumb, scrollBarLocation)
            },
            _calculateScrollBarPosition: function(location) {
                return -location * this._thumbRatio
            },
            _update: function() {
                var containerSize = Math.round(this.option("containerSize"));
                var contentSize = Math.round(this.option("contentSize"));
                var baseContainerSize = Math.round(this.option("baseContainerSize"));
                var baseContentSize = Math.round(this.option("baseContentSize"));
                if (isNaN(baseContainerSize)) {
                    baseContainerSize = containerSize;
                    baseContentSize = contentSize
                }
                this._baseContainerToContentRatio = baseContentSize ? baseContainerSize / baseContentSize : baseContainerSize;
                this._realContainerToContentRatio = contentSize ? containerSize / contentSize : containerSize;
                var thumbSize = Math.round(Math.max(Math.round(containerSize * this._realContainerToContentRatio), THUMB_MIN_SIZE));
                this._thumbRatio = (containerSize - thumbSize) / (this.option("scaleRatio") * (contentSize - containerSize));
                this.option(this._dimension, thumbSize / this.option("scaleRatio"));
                this.$element().css("display", this._needScrollbar() ? "" : "none")
            },
            _isHidden: function() {
                return this.option("visibilityMode") === SCROLLBAR_VISIBLE.never
            },
            _needScrollbar: function() {
                return !this._isHidden() && this._baseContainerToContentRatio < 1
            },
            containerToContentRatio: function() {
                return this._realContainerToContentRatio
            },
            _normalizeSize: function(size) {
                return (0, _type.isPlainObject)(size) ? size[this._dimension] || 0 : size
            },
            _clean: function() {
                this.callBase();
                if (this === activeScrollbar) {
                    activeScrollbar = null
                }
                _events_engine2.default.off(this._$thumb, "." + SCROLLBAR)
            },
            _optionChanged: function(args) {
                if (this._isHidden()) {
                    return
                }
                switch (args.name) {
                    case "containerSize":
                    case "contentSize":
                        this.option()[args.name] = this._normalizeSize(args.value);
                        this._update();
                        break;
                    case "baseContentSize":
                    case "baseContainerSize":
                        this._update();
                        break;
                    case "visibilityMode":
                    case "direction":
                        this._invalidate();
                        break;
                    case "scaleRatio":
                        this._update();
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            update: _common2.default.deferRenderer(function() {
                this._adjustVisibility() && this.option("visible", true)
            })
        });
        _ready_callbacks2.default.add(function() {
            _events_engine2.default.subscribeGlobal(_dom_adapter2.default.getDocument(), eventUtils.addNamespace(_pointer2.default.up, SCROLLBAR), function() {
                if (activeScrollbar) {
                    activeScrollbar.feedbackOff()
                }
            })
        });
        module.exports = Scrollbar
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scrollable.simulated.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _animator = __webpack_require__( /*! ./animator */ 318);
        var _animator2 = _interopRequireDefault(_animator);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _ui = __webpack_require__( /*! ./ui.scrollbar */ 316);
        var _ui2 = _interopRequireDefault(_ui);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var realDevice = _devices2.default.real;
        var isSluggishPlatform = "android" === realDevice.platform;
        var SCROLLABLE_SIMULATED = "dxSimulatedScrollable";
        var SCROLLABLE_STRATEGY = "dxScrollableStrategy";
        var SCROLLABLE_SIMULATED_CURSOR = SCROLLABLE_SIMULATED + "Cursor";
        var SCROLLABLE_SIMULATED_KEYBOARD = SCROLLABLE_SIMULATED + "Keyboard";
        var SCROLLABLE_SIMULATED_CLASS = "dx-scrollable-simulated";
        var SCROLLABLE_SCROLLBARS_HIDDEN = "dx-scrollable-scrollbars-hidden";
        var SCROLLABLE_SCROLLBARS_ALWAYSVISIBLE = "dx-scrollable-scrollbars-alwaysvisible";
        var SCROLLABLE_SCROLLBAR_CLASS = "dx-scrollable-scrollbar";
        var VERTICAL = "vertical";
        var HORIZONTAL = "horizontal";
        var ACCELERATION = isSluggishPlatform ? .95 : .92;
        var OUT_BOUNDS_ACCELERATION = .5;
        var MIN_VELOCITY_LIMIT = 1;
        var FRAME_DURATION = Math.round(1e3 / 60);
        var SCROLL_LINE_HEIGHT = 40;
        var VALIDATE_WHEEL_TIMEOUT = 500;
        var BOUNCE_MIN_VELOCITY_LIMIT = MIN_VELOCITY_LIMIT / 5;
        var BOUNCE_DURATION = isSluggishPlatform ? 300 : 400;
        var BOUNCE_FRAMES = BOUNCE_DURATION / FRAME_DURATION;
        var BOUNCE_ACCELERATION_SUM = (1 - Math.pow(ACCELERATION, BOUNCE_FRAMES)) / (1 - ACCELERATION);
        var KEY_CODES = {
            PAGE_UP: "pageUp",
            PAGE_DOWN: "pageDown",
            END: "end",
            HOME: "home",
            LEFT: "leftArrow",
            UP: "upArrow",
            RIGHT: "rightArrow",
            DOWN: "downArrow",
            TAB: "tab"
        };
        var InertiaAnimator = _animator2.default.inherit({
            ctor: function(scroller) {
                this.callBase();
                this.scroller = scroller
            },
            VELOCITY_LIMIT: MIN_VELOCITY_LIMIT,
            _isFinished: function() {
                return Math.abs(this.scroller._velocity) <= this.VELOCITY_LIMIT
            },
            _step: function() {
                this.scroller._scrollStep(this.scroller._velocity);
                this.scroller._velocity *= this._acceleration()
            },
            _acceleration: function() {
                return this.scroller._inBounds() ? ACCELERATION : OUT_BOUNDS_ACCELERATION
            },
            _complete: function() {
                this.scroller._scrollComplete()
            },
            _stop: function() {
                this.scroller._stopComplete()
            }
        });
        var BounceAnimator = InertiaAnimator.inherit({
            VELOCITY_LIMIT: BOUNCE_MIN_VELOCITY_LIMIT,
            _isFinished: function() {
                return this.scroller._crossBoundOnNextStep() || this.callBase()
            },
            _acceleration: function() {
                return ACCELERATION
            },
            _complete: function() {
                this.scroller._move(this.scroller._bounceLocation);
                this.callBase()
            }
        });
        var Scroller = _class2.default.inherit({
            ctor: function(options) {
                this._initOptions(options);
                this._initAnimators();
                this._initScrollbar()
            },
            _initOptions: function(options) {
                var _this = this;
                this._location = 0;
                this._topReached = false;
                this._bottomReached = false;
                this._axis = options.direction === HORIZONTAL ? "x" : "y";
                this._prop = options.direction === HORIZONTAL ? "left" : "top";
                this._dimension = options.direction === HORIZONTAL ? "width" : "height";
                this._scrollProp = options.direction === HORIZONTAL ? "scrollLeft" : "scrollTop";
                (0, _iterator.each)(options, function(optionName, optionValue) {
                    _this["_" + optionName] = optionValue
                })
            },
            _initAnimators: function() {
                this._inertiaAnimator = new InertiaAnimator(this);
                this._bounceAnimator = new BounceAnimator(this)
            },
            _initScrollbar: function() {
                this._scrollbar = new _ui2.default((0, _renderer2.default)("<div>").appendTo(this._$container), {
                    direction: this._direction,
                    visible: this._scrollByThumb,
                    visibilityMode: this._visibilityModeNormalize(this._scrollbarVisible),
                    expandable: this._scrollByThumb
                });
                this._$scrollbar = this._scrollbar.$element()
            },
            _visibilityModeNormalize: function(mode) {
                return true === mode ? "onScroll" : false === mode ? "never" : mode
            },
            _scrollStep: function(delta) {
                var prevLocation = this._location;
                this._location += delta;
                this._suppressBounce();
                this._move();
                if (Math.abs(prevLocation - this._location) < 1) {
                    return
                }
                _events_engine2.default.triggerHandler(this._$container, {
                    type: "scroll"
                })
            },
            _suppressBounce: function() {
                if (this._bounceEnabled || this._inBounds(this._location)) {
                    return
                }
                this._velocity = 0;
                this._location = this._boundLocation()
            },
            _boundLocation: function(location) {
                location = void 0 !== location ? location : this._location;
                return Math.max(Math.min(location, this._maxOffset), this._minOffset)
            },
            _move: function(location) {
                this._location = void 0 !== location ? location * this._getScaleRatio() : this._location;
                this._moveContent();
                this._moveScrollbar()
            },
            _moveContent: function() {
                var location = this._location;
                this._$container[this._scrollProp](-location / this._getScaleRatio());
                this._moveContentByTranslator(location)
            },
            _getScaleRatio: function() {
                if ((0, _window.hasWindow)() && !this._scaleRatio) {
                    var element = this._$element.get(0);
                    var realDimension = this._getRealDimension(element, this._dimension);
                    var baseDimension = this._getBaseDimension(element, this._dimension);
                    this._scaleRatio = Math.round(realDimension / baseDimension * 100) / 100
                }
                return this._scaleRatio || 1
            },
            _getRealDimension: function(element, dimension) {
                return Math.round((0, _position.getBoundingRect)(element)[dimension])
            },
            _getBaseDimension: function(element, dimension) {
                var dimensionName = "offset" + (0, _inflector.titleize)(dimension);
                return element[dimensionName]
            },
            _moveContentByTranslator: function(location) {
                var translateOffset;
                var minOffset = -this._maxScrollPropValue;
                if (location > 0) {
                    translateOffset = location
                } else {
                    if (location <= minOffset) {
                        translateOffset = location - minOffset
                    } else {
                        translateOffset = location % 1
                    }
                }
                if (this._translateOffset === translateOffset) {
                    return
                }
                var targetLocation = {};
                targetLocation[this._prop] = translateOffset;
                this._translateOffset = translateOffset;
                if (0 === translateOffset) {
                    _translator2.default.resetPosition(this._$content);
                    return
                }
                _translator2.default.move(this._$content, targetLocation)
            },
            _moveScrollbar: function() {
                this._scrollbar.moveTo(this._location)
            },
            _scrollComplete: function() {
                if (this._inBounds()) {
                    this._hideScrollbar();
                    if (this._completeDeferred) {
                        this._completeDeferred.resolve()
                    }
                }
                this._scrollToBounds()
            },
            _scrollToBounds: function() {
                if (this._inBounds()) {
                    return
                }
                this._bounceAction();
                this._setupBounce();
                this._bounceAnimator.start()
            },
            _setupBounce: function() {
                var boundLocation = this._bounceLocation = this._boundLocation();
                var bounceDistance = boundLocation - this._location;
                this._velocity = bounceDistance / BOUNCE_ACCELERATION_SUM
            },
            _inBounds: function(location) {
                location = void 0 !== location ? location : this._location;
                return this._boundLocation(location) === location
            },
            _crossBoundOnNextStep: function() {
                var location = this._location;
                var nextLocation = location + this._velocity;
                return location < this._minOffset && nextLocation >= this._minOffset || location > this._maxOffset && nextLocation <= this._maxOffset
            },
            _initHandler: function(e) {
                this._stopDeferred = new _deferred.Deferred;
                this._stopScrolling();
                this._prepareThumbScrolling(e);
                return this._stopDeferred.promise()
            },
            _stopScrolling: (0, _common.deferRenderer)(function() {
                this._hideScrollbar();
                this._inertiaAnimator.stop();
                this._bounceAnimator.stop()
            }),
            _prepareThumbScrolling: function(e) {
                if ((0, _utils.isDxMouseWheelEvent)(e.originalEvent)) {
                    return
                }
                var $target = (0, _renderer2.default)(e.originalEvent.target);
                var scrollbarClicked = this._isScrollbar($target);
                if (scrollbarClicked) {
                    this._moveToMouseLocation(e)
                }
                this._thumbScrolling = scrollbarClicked || this._isThumb($target);
                this._crossThumbScrolling = !this._thumbScrolling && this._isAnyThumbScrolling($target);
                if (this._thumbScrolling) {
                    this._scrollbar.feedbackOn()
                }
            },
            _isThumbScrollingHandler: function($target) {
                return this._isThumb($target)
            },
            _moveToMouseLocation: function(e) {
                var mouseLocation = e["page" + this._axis.toUpperCase()] - this._$element.offset()[this._prop];
                var location = this._location + mouseLocation / this._containerToContentRatio() - this._$container.height() / 2;
                this._scrollStep(-Math.round(location))
            },
            _stopComplete: function() {
                if (this._stopDeferred) {
                    this._stopDeferred.resolve()
                }
            },
            _startHandler: function() {
                this._showScrollbar()
            },
            _moveHandler: function(delta) {
                if (this._crossThumbScrolling) {
                    return
                }
                if (this._thumbScrolling) {
                    delta[this._axis] = -Math.round(delta[this._axis] / this._containerToContentRatio())
                }
                this._scrollBy(delta)
            },
            _scrollBy: function(delta) {
                delta = delta[this._axis];
                if (!this._inBounds()) {
                    delta *= OUT_BOUNDS_ACCELERATION
                }
                this._scrollStep(delta)
            },
            _scrollByHandler: function(delta) {
                this._scrollBy(delta);
                this._scrollComplete()
            },
            _containerToContentRatio: function() {
                return this._scrollbar.containerToContentRatio()
            },
            _endHandler: function(velocity) {
                this._completeDeferred = new _deferred.Deferred;
                this._velocity = velocity[this._axis];
                this._inertiaHandler();
                this._resetThumbScrolling();
                return this._completeDeferred.promise()
            },
            _inertiaHandler: function() {
                this._suppressInertia();
                this._inertiaAnimator.start()
            },
            _suppressInertia: function() {
                if (!this._inertiaEnabled || this._thumbScrolling) {
                    this._velocity = 0
                }
            },
            _resetThumbScrolling: function() {
                this._thumbScrolling = false;
                this._crossThumbScrolling = false
            },
            _stopHandler: function() {
                if (this._thumbScrolling) {
                    this._scrollComplete()
                }
                this._resetThumbScrolling();
                this._scrollToBounds()
            },
            _disposeHandler: function() {
                this._stopScrolling();
                this._$scrollbar.remove()
            },
            _updateHandler: function() {
                this._update();
                this._moveToBounds()
            },
            _update: function() {
                var _this2 = this;
                this._stopScrolling();
                return (0, _common.deferUpdate)(function() {
                    _this2._resetScaleRatio();
                    _this2._updateLocation();
                    _this2._updateBounds();
                    _this2._updateScrollbar();
                    (0, _common.deferRender)(function() {
                        _this2._moveScrollbar();
                        _this2._scrollbar.update()
                    })
                })
            },
            _resetScaleRatio: function() {
                this._scaleRatio = null
            },
            _updateLocation: function() {
                this._location = (_translator2.default.locate(this._$content)[this._prop] - this._$container[this._scrollProp]()) * this._getScaleRatio()
            },
            _updateBounds: function() {
                this._maxOffset = Math.round(this._getMaxOffset());
                this._minOffset = Math.round(this._getMinOffset())
            },
            _getMaxOffset: function() {
                return 0
            },
            _getMinOffset: function() {
                this._maxScrollPropValue = Math.max(this._contentSize() - this._containerSize(), 0);
                return -this._maxScrollPropValue
            },
            _updateScrollbar: (0, _common.deferUpdater)(function() {
                var _this3 = this;
                var containerSize = this._containerSize();
                var contentSize = this._contentSize();
                var baseContainerSize = this._getBaseDimension(this._$container.get(0), this._dimension);
                var baseContentSize = this._getBaseDimension(this._$content.get(0), this._dimension);
                (0, _common.deferRender)(function() {
                    _this3._scrollbar.option({
                        containerSize: containerSize,
                        contentSize: contentSize,
                        baseContainerSize: baseContainerSize,
                        baseContentSize: baseContentSize,
                        scaleRatio: _this3._getScaleRatio()
                    })
                })
            }),
            _moveToBounds: (0, _common.deferRenderer)((0, _common.deferUpdater)((0, _common.deferRenderer)(function() {
                var location = this._boundLocation();
                var locationChanged = location !== this._location;
                this._location = location;
                this._move();
                if (locationChanged) {
                    this._scrollAction()
                }
            }))),
            _createActionsHandler: function(actions) {
                this._scrollAction = actions.scroll;
                this._bounceAction = actions.bounce
            },
            _showScrollbar: function() {
                this._scrollbar.option("visible", true)
            },
            _hideScrollbar: function() {
                this._scrollbar.option("visible", false)
            },
            _containerSize: function() {
                return this._getRealDimension(this._$container.get(0), this._dimension)
            },
            _contentSize: function() {
                var isOverflowHidden = "hidden" === this._$content.css("overflow" + this._axis.toUpperCase());
                var contentSize = this._getRealDimension(this._$content.get(0), this._dimension);
                if (!isOverflowHidden) {
                    var containerScrollSize = this._$content[0]["scroll" + (0, _inflector.titleize)(this._dimension)] * this._getScaleRatio();
                    contentSize = Math.max(containerScrollSize, contentSize)
                }
                return contentSize
            },
            _validateEvent: function(e) {
                var $target = (0, _renderer2.default)(e.originalEvent.target);
                return this._isThumb($target) || this._isScrollbar($target) || this._isContent($target)
            },
            _isThumb: function($element) {
                return this._scrollByThumb && this._scrollbar.isThumb($element)
            },
            _isScrollbar: function($element) {
                return this._scrollByThumb && $element && $element.is(this._$scrollbar)
            },
            _isContent: function($element) {
                return this._scrollByContent && !!$element.closest(this._$element).length
            },
            _reachedMin: function() {
                return this._location <= this._minOffset
            },
            _reachedMax: function() {
                return this._location >= this._maxOffset
            },
            _cursorEnterHandler: function() {
                this._resetScaleRatio();
                this._updateScrollbar();
                this._scrollbar.cursorEnter()
            },
            _cursorLeaveHandler: function() {
                this._scrollbar.cursorLeave()
            },
            dispose: _common.noop
        });
        var hoveredScrollable;
        var activeScrollable;
        var SimulatedStrategy = _class2.default.inherit({
            ctor: function(scrollable) {
                this._init(scrollable)
            },
            _init: function(scrollable) {
                this._component = scrollable;
                this._$element = scrollable.$element();
                this._$container = scrollable._$container;
                this._$wrapper = scrollable._$wrapper;
                this._$content = scrollable._$content;
                this.option = scrollable.option.bind(scrollable);
                this._createActionByOption = scrollable._createActionByOption.bind(scrollable);
                this._isLocked = scrollable._isLocked.bind(scrollable);
                this._isDirection = scrollable._isDirection.bind(scrollable);
                this._allowedDirection = scrollable._allowedDirection.bind(scrollable)
            },
            render: function() {
                this._$element.addClass(SCROLLABLE_SIMULATED_CLASS);
                this._createScrollers();
                if (this.option("useKeyboard")) {
                    this._$container.prop("tabIndex", 0)
                }
                this._attachKeyboardHandler();
                this._attachCursorHandlers()
            },
            _createScrollers: function() {
                this._scrollers = {};
                if (this._isDirection(HORIZONTAL)) {
                    this._createScroller(HORIZONTAL)
                }
                if (this._isDirection(VERTICAL)) {
                    this._createScroller(VERTICAL)
                }
                this._$element.toggleClass(SCROLLABLE_SCROLLBARS_ALWAYSVISIBLE, "always" === this.option("showScrollbar"));
                this._$element.toggleClass(SCROLLABLE_SCROLLBARS_HIDDEN, !this.option("showScrollbar"))
            },
            _createScroller: function(direction) {
                this._scrollers[direction] = new Scroller(this._scrollerOptions(direction))
            },
            _scrollerOptions: function(direction) {
                return {
                    direction: direction,
                    $content: this._$content,
                    $container: this._$container,
                    $wrapper: this._$wrapper,
                    $element: this._$element,
                    scrollByContent: this.option("scrollByContent"),
                    scrollByThumb: this.option("scrollByThumb"),
                    scrollbarVisible: this.option("showScrollbar"),
                    bounceEnabled: this.option("bounceEnabled"),
                    inertiaEnabled: this.option("inertiaEnabled"),
                    isAnyThumbScrolling: this._isAnyThumbScrolling.bind(this)
                }
            },
            _applyScaleRatio: function(targetLocation) {
                for (var direction in this._scrollers) {
                    var prop = this._getPropByDirection(direction);
                    if ((0, _type.isDefined)(targetLocation[prop])) {
                        var scroller = this._scrollers[direction];
                        targetLocation[prop] *= scroller._getScaleRatio()
                    }
                }
                return targetLocation
            },
            _isAnyThumbScrolling: function($target) {
                var result = false;
                this._eventHandler("isThumbScrolling", $target).done(function(isThumbScrollingVertical, isThumbScrollingHorizontal) {
                    result = isThumbScrollingVertical || isThumbScrollingHorizontal
                });
                return result
            },
            handleInit: function(e) {
                this._suppressDirections(e);
                this._eventForUserAction = e;
                this._eventHandler("init", e).done(this._stopAction)
            },
            _suppressDirections: function(e) {
                if ((0, _utils.isDxMouseWheelEvent)(e.originalEvent)) {
                    this._prepareDirections(true);
                    return
                }
                this._prepareDirections();
                this._eachScroller(function(scroller, direction) {
                    var isValid = scroller._validateEvent(e);
                    this._validDirections[direction] = isValid
                })
            },
            _prepareDirections: function(value) {
                value = value || false;
                this._validDirections = {};
                this._validDirections[HORIZONTAL] = value;
                this._validDirections[VERTICAL] = value
            },
            _eachScroller: function(callback) {
                callback = callback.bind(this);
                (0, _iterator.each)(this._scrollers, function(direction, scroller) {
                    callback(scroller, direction)
                })
            },
            handleStart: function(e) {
                this._eventForUserAction = e;
                this._eventHandler("start").done(this._startAction)
            },
            _saveActive: function() {
                activeScrollable = this
            },
            _resetActive: function() {
                if (activeScrollable === this) {
                    activeScrollable = null
                }
            },
            handleMove: function(e) {
                if (this._isLocked()) {
                    e.cancel = true;
                    this._resetActive();
                    return
                }
                this._saveActive();
                e.preventDefault && e.preventDefault();
                this._adjustDistance(e, e.delta);
                this._eventForUserAction = e;
                this._eventHandler("move", e.delta)
            },
            _adjustDistance: function(e, distance) {
                distance.x *= this._validDirections[HORIZONTAL];
                distance.y *= this._validDirections[VERTICAL];
                var devicePixelRatio = this._tryGetDevicePixelRatio();
                if (devicePixelRatio && (0, _utils.isDxMouseWheelEvent)(e.originalEvent)) {
                    distance.x = Math.round(distance.x / devicePixelRatio * 100) / 100;
                    distance.y = Math.round(distance.y / devicePixelRatio * 100) / 100
                }
            },
            _tryGetDevicePixelRatio: function() {
                if ((0, _window.hasWindow)()) {
                    return (0, _window.getWindow)().devicePixelRatio
                }
            },
            handleEnd: function(e) {
                this._resetActive();
                this._refreshCursorState(e.originalEvent && e.originalEvent.target);
                this._adjustDistance(e, e.velocity);
                this._eventForUserAction = e;
                return this._eventHandler("end", e.velocity).done(this._endAction)
            },
            handleCancel: function(e) {
                this._resetActive();
                this._eventForUserAction = e;
                return this._eventHandler("end", {
                    x: 0,
                    y: 0
                })
            },
            handleStop: function() {
                this._resetActive();
                this._eventHandler("stop")
            },
            handleScroll: function() {
                this._scrollAction()
            },
            _attachKeyboardHandler: function() {
                _events_engine2.default.off(this._$element, ".".concat(SCROLLABLE_SIMULATED_KEYBOARD));
                if (!this.option("disabled") && this.option("useKeyboard")) {
                    _events_engine2.default.on(this._$element, (0, _utils.addNamespace)("keydown", SCROLLABLE_SIMULATED_KEYBOARD), this._keyDownHandler.bind(this))
                }
            },
            _keyDownHandler: function(e) {
                var _this4 = this;
                clearTimeout(this._updateHandlerTimeout);
                this._updateHandlerTimeout = setTimeout(function() {
                    if ((0, _utils.normalizeKeyName)(e) === KEY_CODES.TAB) {
                        _this4._eachScroller(function(scroller) {
                            scroller._updateHandler()
                        })
                    }
                });
                if (!this._$container.is(_dom_adapter2.default.getActiveElement())) {
                    return
                }
                var handled = true;
                switch ((0, _utils.normalizeKeyName)(e)) {
                    case KEY_CODES.DOWN:
                        this._scrollByLine({
                            y: 1
                        });
                        break;
                    case KEY_CODES.UP:
                        this._scrollByLine({
                            y: -1
                        });
                        break;
                    case KEY_CODES.RIGHT:
                        this._scrollByLine({
                            x: 1
                        });
                        break;
                    case KEY_CODES.LEFT:
                        this._scrollByLine({
                            x: -1
                        });
                        break;
                    case KEY_CODES.PAGE_DOWN:
                        this._scrollByPage(1);
                        break;
                    case KEY_CODES.PAGE_UP:
                        this._scrollByPage(-1);
                        break;
                    case KEY_CODES.HOME:
                        this._scrollToHome();
                        break;
                    case KEY_CODES.END:
                        this._scrollToEnd();
                        break;
                    default:
                        handled = false
                }
                if (handled) {
                    e.stopPropagation();
                    e.preventDefault()
                }
            },
            _scrollByLine: function(lines) {
                var devicePixelRatio = this._tryGetDevicePixelRatio();
                var scrollOffset = SCROLL_LINE_HEIGHT;
                if (devicePixelRatio) {
                    scrollOffset = Math.abs(scrollOffset / devicePixelRatio * 100) / 100
                }
                this.scrollBy({
                    top: (lines.y || 0) * -scrollOffset,
                    left: (lines.x || 0) * -scrollOffset
                })
            },
            _scrollByPage: function(page) {
                var prop = this._wheelProp();
                var dimension = this._dimensionByProp(prop);
                var distance = {};
                distance[prop] = page * -this._$container[dimension]();
                this.scrollBy(distance)
            },
            _dimensionByProp: function(prop) {
                return "left" === prop ? "width" : "height"
            },
            _getPropByDirection: function(direction) {
                return direction === HORIZONTAL ? "left" : "top"
            },
            _scrollToHome: function() {
                var prop = this._wheelProp();
                var distance = {};
                distance[prop] = 0;
                this._component.scrollTo(distance)
            },
            _scrollToEnd: function() {
                var prop = this._wheelProp();
                var dimension = this._dimensionByProp(prop);
                var distance = {};
                distance[prop] = this._$content[dimension]() - this._$container[dimension]();
                this._component.scrollTo(distance)
            },
            createActions: function() {
                this._startAction = this._createActionHandler("onStart");
                this._stopAction = this._createActionHandler("onStop");
                this._endAction = this._createActionHandler("onEnd");
                this._updateAction = this._createActionHandler("onUpdated");
                this._createScrollerActions()
            },
            _createScrollerActions: function() {
                this._scrollAction = this._createActionHandler("onScroll");
                this._bounceAction = this._createActionHandler("onBounce");
                this._eventHandler("createActions", {
                    scroll: this._scrollAction,
                    bounce: this._bounceAction
                })
            },
            _createActionHandler: function(optionName) {
                var _arguments = arguments,
                    _this5 = this;
                var actionHandler = this._createActionByOption(optionName);
                return function() {
                    actionHandler((0, _extend.extend)(_this5._createActionArgs(), _arguments))
                }
            },
            _createActionArgs: function() {
                var scrollerX = this._scrollers[HORIZONTAL];
                var scrollerY = this._scrollers[VERTICAL];
                var location = this.location();
                this._scrollOffset = {
                    top: scrollerY && -location.top,
                    left: scrollerX && -location.left
                };
                return {
                    event: this._eventForUserAction,
                    scrollOffset: this._scrollOffset,
                    reachedLeft: scrollerX && scrollerX._reachedMax(),
                    reachedRight: scrollerX && scrollerX._reachedMin(),
                    reachedTop: scrollerY && scrollerY._reachedMax(),
                    reachedBottom: scrollerY && scrollerY._reachedMin()
                }
            },
            _eventHandler: function(eventName) {
                var args = [].slice.call(arguments).slice(1);
                var deferreds = (0, _iterator.map)(this._scrollers, function(scroller) {
                    return scroller["_" + eventName + "Handler"].apply(scroller, args)
                });
                return _deferred.when.apply(_renderer2.default, deferreds).promise()
            },
            location: function location() {
                var location = _translator2.default.locate(this._$content);
                location.top -= this._$container.scrollTop();
                location.left -= this._$container.scrollLeft();
                return location
            },
            disabledChanged: function() {
                this._attachCursorHandlers()
            },
            _attachCursorHandlers: function() {
                _events_engine2.default.off(this._$element, ".".concat(SCROLLABLE_SIMULATED_CURSOR));
                if (!this.option("disabled") && this._isHoverMode()) {
                    _events_engine2.default.on(this._$element, (0, _utils.addNamespace)("mouseenter", SCROLLABLE_SIMULATED_CURSOR), this._cursorEnterHandler.bind(this));
                    _events_engine2.default.on(this._$element, (0, _utils.addNamespace)("mouseleave", SCROLLABLE_SIMULATED_CURSOR), this._cursorLeaveHandler.bind(this))
                }
            },
            _isHoverMode: function() {
                return "onHover" === this.option("showScrollbar")
            },
            _cursorEnterHandler: function(e) {
                e = e || {};
                e.originalEvent = e.originalEvent || {};
                if (activeScrollable || e.originalEvent._hoverHandled) {
                    return
                }
                if (hoveredScrollable) {
                    hoveredScrollable._cursorLeaveHandler()
                }
                hoveredScrollable = this;
                this._eventHandler("cursorEnter");
                e.originalEvent._hoverHandled = true
            },
            _cursorLeaveHandler: function(e) {
                if (hoveredScrollable !== this || activeScrollable === hoveredScrollable) {
                    return
                }
                this._eventHandler("cursorLeave");
                hoveredScrollable = null;
                this._refreshCursorState(e && e.relatedTarget)
            },
            _refreshCursorState: function(target) {
                if (!this._isHoverMode() && (!target || activeScrollable)) {
                    return
                }
                var $target = (0, _renderer2.default)(target);
                var $scrollable = $target.closest(".".concat(SCROLLABLE_SIMULATED_CLASS, ":not(.dx-state-disabled)"));
                var targetScrollable = $scrollable.length && $scrollable.data(SCROLLABLE_STRATEGY);
                if (hoveredScrollable && hoveredScrollable !== targetScrollable) {
                    hoveredScrollable._cursorLeaveHandler()
                }
                if (targetScrollable) {
                    targetScrollable._cursorEnterHandler()
                }
            },
            update: function() {
                var _this6 = this;
                var result = this._eventHandler("update").done(this._updateAction);
                return (0, _deferred.when)(result, (0, _common.deferUpdate)(function() {
                    var allowedDirections = _this6._allowedDirections();
                    (0, _common.deferRender)(function() {
                        var touchDirection = allowedDirections.vertical ? "pan-x" : "";
                        touchDirection = allowedDirections.horizontal ? "pan-y" : touchDirection;
                        touchDirection = allowedDirections.vertical && allowedDirections.horizontal ? "none" : touchDirection;
                        _this6._$container.css("touchAction", touchDirection)
                    });
                    return (0, _deferred.when)().promise()
                }))
            },
            _allowedDirections: function() {
                var bounceEnabled = this.option("bounceEnabled");
                var verticalScroller = this._scrollers[VERTICAL];
                var horizontalScroller = this._scrollers[HORIZONTAL];
                return {
                    vertical: verticalScroller && (verticalScroller._minOffset < 0 || bounceEnabled),
                    horizontal: horizontalScroller && (horizontalScroller._minOffset < 0 || bounceEnabled)
                }
            },
            updateBounds: function() {
                this._scrollers[HORIZONTAL] && this._scrollers[HORIZONTAL]._updateBounds()
            },
            scrollBy: function(distance) {
                var verticalScroller = this._scrollers[VERTICAL];
                var horizontalScroller = this._scrollers[HORIZONTAL];
                if (verticalScroller) {
                    distance.top = verticalScroller._boundLocation(distance.top + verticalScroller._location) - verticalScroller._location
                }
                if (horizontalScroller) {
                    distance.left = horizontalScroller._boundLocation(distance.left + horizontalScroller._location) - horizontalScroller._location
                }
                this._prepareDirections(true);
                this._startAction();
                this._eventHandler("scrollBy", {
                    x: distance.left,
                    y: distance.top
                });
                this._endAction()
            },
            validate: function(e) {
                if (this.option("disabled")) {
                    return false
                }
                if (this.option("bounceEnabled")) {
                    return true
                }
                return (0, _utils.isDxMouseWheelEvent)(e) ? this._validateWheel(e) : this._validateMove(e)
            },
            _validateWheel: function(e) {
                var _this7 = this;
                var scroller = this._scrollers[this._wheelDirection(e)];
                var reachedMin = scroller._reachedMin();
                var reachedMax = scroller._reachedMax();
                var contentGreaterThanContainer = !reachedMin || !reachedMax;
                var locatedNotAtBound = !reachedMin && !reachedMax;
                var scrollFromMin = reachedMin && e.delta > 0;
                var scrollFromMax = reachedMax && e.delta < 0;
                var validated = contentGreaterThanContainer && (locatedNotAtBound || scrollFromMin || scrollFromMax);
                validated = validated || void 0 !== this._validateWheelTimer;
                if (validated) {
                    clearTimeout(this._validateWheelTimer);
                    this._validateWheelTimer = setTimeout(function() {
                        _this7._validateWheelTimer = void 0
                    }, VALIDATE_WHEEL_TIMEOUT)
                }
                return validated
            },
            _validateMove: function(e) {
                if (!this.option("scrollByContent") && !(0, _renderer2.default)(e.target).closest(".".concat(SCROLLABLE_SCROLLBAR_CLASS)).length) {
                    return false
                }
                return this._allowedDirection()
            },
            getDirection: function(e) {
                return (0, _utils.isDxMouseWheelEvent)(e) ? this._wheelDirection(e) : this._allowedDirection()
            },
            _wheelProp: function() {
                return this._wheelDirection() === HORIZONTAL ? "left" : "top"
            },
            _wheelDirection: function(e) {
                switch (this.option("direction")) {
                    case HORIZONTAL:
                        return HORIZONTAL;
                    case VERTICAL:
                        return VERTICAL;
                    default:
                        return e && e.shiftKey ? HORIZONTAL : VERTICAL
                }
            },
            verticalOffset: function() {
                return 0
            },
            dispose: function() {
                this._resetActive();
                if (hoveredScrollable === this) {
                    hoveredScrollable = null
                }
                this._eventHandler("dispose");
                this._detachEventHandlers();
                this._$element.removeClass(SCROLLABLE_SIMULATED_CLASS);
                this._eventForUserAction = null;
                clearTimeout(this._validateWheelTimer);
                clearTimeout(this._updateHandlerTimeout)
            },
            _detachEventHandlers: function() {
                _events_engine2.default.off(this._$element, ".".concat(SCROLLABLE_SIMULATED_CURSOR));
                _events_engine2.default.off(this._$container, ".".concat(SCROLLABLE_SIMULATED_KEYBOARD))
            }
        });
        exports.SimulatedStrategy = SimulatedStrategy;
        exports.Scroller = Scroller;
        exports.ACCELERATION = ACCELERATION;
        exports.MIN_VELOCITY_LIMIT = MIN_VELOCITY_LIMIT;
        exports.FRAME_DURATION = FRAME_DURATION;
        exports.SCROLL_LINE_HEIGHT = SCROLL_LINE_HEIGHT
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/animator.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var abstract = Class.abstract;
        var animationFrame = __webpack_require__( /*! ../../animation/frame */ 117);
        var Animator = Class.inherit({
            ctor: function() {
                this._finished = true;
                this._stopped = false;
                this._proxiedStepCore = this._stepCore.bind(this)
            },
            start: function() {
                this._stopped = false;
                this._finished = false;
                this._stepCore()
            },
            stop: function() {
                this._stopped = true;
                animationFrame.cancelAnimationFrame(this._stepAnimationFrame)
            },
            _stepCore: function() {
                if (this._isStopped()) {
                    this._stop();
                    return
                }
                if (this._isFinished()) {
                    this._finished = true;
                    this._complete();
                    return
                }
                this._step();
                this._stepAnimationFrame = animationFrame.requestAnimationFrame(this._proxiedStepCore)
            },
            _step: abstract,
            _isFinished: noop,
            _stop: noop,
            _complete: noop,
            _isStopped: function() {
                return this._stopped
            },
            inProgress: function() {
                return !(this._stopped || this._finished)
            }
        });
        module.exports = Animator
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/core/utils/array_compare.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.findChanges = void 0;
        var _type = __webpack_require__( /*! ./type */ 1);
        var getKeyWrapper = function(item, getKey) {
            var key = getKey(item);
            if ((0, _type.isObject)(key)) {
                try {
                    return JSON.stringify(key)
                } catch (e) {
                    return key
                }
            }
            return key
        };
        var getSameNewByOld = function(oldItem, newItems, newIndexByKey, getKey) {
            var key = getKeyWrapper(oldItem, getKey);
            return newItems[newIndexByKey[key]]
        };
        exports.findChanges = function(oldItems, newItems, getKey, isItemEquals) {
            var oldIndexByKey = {};
            var newIndexByKey = {};
            var addedCount = 0;
            var removeCount = 0;
            var result = [];
            oldItems.forEach(function(item, index) {
                var key = getKeyWrapper(item, getKey);
                oldIndexByKey[key] = index
            });
            newItems.forEach(function(item, index) {
                var key = getKeyWrapper(item, getKey);
                newIndexByKey[key] = index
            });
            var itemCount = Math.max(oldItems.length, newItems.length);
            for (var index = 0; index < itemCount + addedCount; index++) {
                var newItem = newItems[index];
                var oldNextIndex = index - addedCount + removeCount;
                var nextOldItem = oldItems[oldNextIndex];
                var isRemoved = !newItem || nextOldItem && !getSameNewByOld(nextOldItem, newItems, newIndexByKey, getKey);
                if (isRemoved) {
                    if (nextOldItem) {
                        result.push({
                            type: "remove",
                            key: getKey(nextOldItem),
                            index: index,
                            oldItem: nextOldItem
                        });
                        removeCount++;
                        index--
                    }
                } else {
                    var key = getKeyWrapper(newItem, getKey);
                    var oldIndex = oldIndexByKey[key];
                    var oldItem = oldItems[oldIndex];
                    if (!oldItem) {
                        addedCount++;
                        result.push({
                            type: "insert",
                            data: newItem,
                            index: index
                        })
                    } else {
                        if (oldIndex === oldNextIndex) {
                            if (!isItemEquals(oldItem, newItem)) {
                                result.push({
                                    type: "update",
                                    data: newItem,
                                    key: getKey(newItem),
                                    index: index,
                                    oldItem: oldItem
                                })
                            }
                        } else {
                            return
                        }
                    }
                }
            }
            return result
        }
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_button.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _function_template = __webpack_require__( /*! ../core/templates/function_template */ 113);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _button_group = __webpack_require__( /*! ./button_group */ 233);
        var _button_group2 = _interopRequireDefault(_button_group);
        var _popup = __webpack_require__( /*! ./popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _list = __webpack_require__( /*! ./list */ 104);
        var _list2 = _interopRequireDefault(_list);
        var _data = __webpack_require__( /*! ../core/utils/data */ 20);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _icon = __webpack_require__( /*! ../core/utils/icon */ 53);
        var _data_helper = __webpack_require__( /*! ../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);
        var _data_source = __webpack_require__( /*! ../data/data_source/data_source */ 61);
        var _array_store = __webpack_require__( /*! ../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _message = __webpack_require__( /*! ../localization/message */ 10);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DROP_DOWN_BUTTON_CLASS = "dx-dropdownbutton";
        var DROP_DOWN_BUTTON_CONTENT = "dx-dropdownbutton-content";
        var DROP_DOWN_BUTTON_ACTION_CLASS = "dx-dropdownbutton-action";
        var DROP_DOWN_BUTTON_TOGGLE_CLASS = "dx-dropdownbutton-toggle";
        var DROP_DOWN_BUTTON_HAS_ARROW_CLASS = "dx-dropdownbutton-has-arrow";
        var DROP_DOWN_BUTTON_POPUP_WRAPPER_CLASS = "dx-dropdownbutton-popup-wrapper";
        var DX_BUTTON_TEXT_CLASS = "dx-button-text";
        var DX_ICON_RIGHT_CLASS = "dx-icon-right";
        var DropDownButton = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    itemTemplate: "item",
                    keyExpr: "this",
                    displayExpr: "this",
                    selectedItem: null,
                    selectedItemKey: null,
                    stylingMode: "outlined",
                    deferRendering: true,
                    noDataText: (0, _message.format)("dxCollectionWidget-noDataText"),
                    useSelectMode: false,
                    splitButton: false,
                    showArrowIcon: true,
                    text: "",
                    icon: void 0,
                    onButtonClick: null,
                    onSelectionChanged: null,
                    onItemClick: null,
                    opened: false,
                    items: null,
                    dataSource: null,
                    focusStateEnabled: true,
                    hoverStateEnabled: true,
                    dropDownOptions: {},
                    dropDownContentTemplate: "content",
                    wrapItemText: false,
                    grouped: false,
                    groupTemplate: "group",
                    buttonGroupOptions: {}
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    selectedItem: true
                })
            },
            _init: function() {
                this.callBase();
                this._createItemClickAction();
                this._createActionClickAction();
                this._createSelectionChangedAction();
                this._compileKeyGetter();
                this._compileDisplayGetter();
                this._initDataSource();
                this._itemsToDataSource();
                this._options.cache("buttonGroupOptions", this.option("buttonGroupOptions"));
                this._options.cache("dropDownOptions", this.option("dropDownOptions"))
            },
            _initTemplates: function() {
                var _this = this;
                this._templateManager.addDefaultTemplates({
                    content: new _function_template.FunctionTemplate(function(options) {
                        var $popupContent = (0, _renderer2.default)(options.container);
                        var $listContainer = (0, _renderer2.default)("<div>").appendTo($popupContent);
                        _this._list = _this._createComponent($listContainer, _list2.default, _this._listOptions());
                        _this._list.registerKeyHandler("escape", _this._escHandler.bind(_this));
                        _this._list.registerKeyHandler("tab", _this._escHandler.bind(_this));
                        _this._list.registerKeyHandler("leftArrow", _this._escHandler.bind(_this));
                        _this._list.registerKeyHandler("rightArrow", _this._escHandler.bind(_this))
                    })
                });
                this.callBase()
            },
            _itemsToDataSource: function() {
                if (!this._dataSource) {
                    this._dataSource = new _data_source.DataSource({
                        store: new _array_store2.default(this.option("items")),
                        pageSize: 0
                    })
                }
            },
            _compileKeyGetter: function() {
                this._keyGetter = (0, _data.compileGetter)(this.option("keyExpr"))
            },
            _compileDisplayGetter: function() {
                this._displayGetter = (0, _data.compileGetter)(this.option("displayExpr"))
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(DROP_DOWN_BUTTON_CLASS);
                this._renderButtonGroup();
                this._updateArrowClass();
                this._loadSelectedItem().done(this._updateActionButton.bind(this))
            },
            _render: function() {
                if (!this.option("deferRendering") || this.option("opened")) {
                    this._renderPopup()
                }
                this.callBase()
            },
            _renderContentImpl: function() {
                if (this._popup) {
                    this._renderPopupContent()
                }
                return this.callBase()
            },
            _loadSelectedItem: function() {
                var d = new _deferred.Deferred;
                if (this._list) {
                    var cachedResult = this.option("useSelectMode") ? this._list.option("selectedItem") : this._lastSelectedItemData;
                    return d.resolve(cachedResult)
                }
                this._lastSelectedItemData = void 0;
                var selectedItemKey = this.option("selectedItemKey");
                this._loadSingle(this.option("keyExpr"), selectedItemKey).done(d.resolve).fail(function() {
                    d.resolve(null)
                });
                return d.promise()
            },
            _createActionClickAction: function() {
                this._actionClickAction = this._createActionByOption("onButtonClick")
            },
            _createSelectionChangedAction: function() {
                this._selectionChangedAction = this._createActionByOption("onSelectionChanged")
            },
            _createItemClickAction: function() {
                this._itemClickAction = this._createActionByOption("onItemClick")
            },
            _fireSelectionChangedAction: function(_ref) {
                var previousValue = _ref.previousValue,
                    value = _ref.value;
                this._selectionChangedAction({
                    item: value,
                    previousItem: previousValue
                })
            },
            _fireItemClickAction: function(_ref2) {
                var event = _ref2.event,
                    itemElement = _ref2.itemElement,
                    itemData = _ref2.itemData;
                return this._itemClickAction({
                    event: event,
                    itemElement: itemElement,
                    itemData: this._actionItem || itemData
                })
            },
            _actionButtonConfig: function() {
                return {
                    text: this.option("text"),
                    icon: this.option("icon"),
                    elementAttr: {
                        "class": DROP_DOWN_BUTTON_ACTION_CLASS
                    }
                }
            },
            _getButtonGroupItems: function() {
                var items = [];
                items.push(this._actionButtonConfig());
                if (this.option("splitButton")) {
                    items.push({
                        icon: "spindown",
                        elementAttr: {
                            "class": DROP_DOWN_BUTTON_TOGGLE_CLASS
                        }
                    })
                }
                return items
            },
            _buttonGroupItemClick: function(_ref3) {
                var event = _ref3.event,
                    itemData = _ref3.itemData;
                var isActionButton = itemData.elementAttr.class === DROP_DOWN_BUTTON_ACTION_CLASS;
                var isToggleButton = itemData.elementAttr.class === DROP_DOWN_BUTTON_TOGGLE_CLASS;
                if (isToggleButton) {
                    this.toggle()
                } else {
                    if (isActionButton) {
                        this._actionClickAction({
                            event: event,
                            selectedItem: this.option("selectedItem")
                        });
                        if (!this.option("splitButton")) {
                            this.toggle()
                        }
                    }
                }
            },
            _buttonGroupOptions: function() {
                var _this2 = this;
                return (0, _extend.extend)({
                    items: this._getButtonGroupItems(),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    onItemClick: this._buttonGroupItemClick.bind(this),
                    width: "100%",
                    height: "100%",
                    stylingMode: this.option("stylingMode"),
                    selectionMode: "none",
                    buttonTemplate: function(_ref4, buttonContent) {
                        var text = _ref4.text,
                            icon = _ref4.icon;
                        if (_this2.option("splitButton") || !_this2.option("showArrowIcon")) {
                            return "content"
                        }
                        var $firstIcon = (0, _icon.getImageContainer)(icon);
                        var $textContainer = text ? (0, _renderer2.default)("<span>").text(text).addClass(DX_BUTTON_TEXT_CLASS) : void 0;
                        var $secondIcon = (0, _icon.getImageContainer)("spindown").addClass(DX_ICON_RIGHT_CLASS);
                        (0, _renderer2.default)(buttonContent).append($firstIcon, $textContainer, $secondIcon)
                    }
                }, this._options.cache("buttonGroupOptions"))
            },
            _renderPopupContent: function() {
                var $content = this._popup.$content();
                var template = this._getTemplateByOption("dropDownContentTemplate");
                $content.empty();
                this._popupContentId = "dx-" + new _guid2.default;
                this.setAria("id", this._popupContentId, $content);
                return template.render({
                    container: _dom2.default.getPublicElement($content),
                    model: this.option("items") || this._dataSource
                })
            },
            _popupOptions: function() {
                var _this3 = this;
                var horizontalAlignment = this.option("rtlEnabled") ? "right" : "left";
                return (0, _extend.extend)({
                    dragEnabled: false,
                    focusStateEnabled: false,
                    deferRendering: this.option("deferRendering"),
                    minWidth: function() {
                        if (!_window2.default.hasWindow()) {
                            return
                        }
                        return _this3.$element().outerWidth()
                    },
                    closeOnOutsideClick: function(e) {
                        var $element = _this3.$element();
                        var $buttonClicked = (0, _renderer2.default)(e.target).closest(".".concat(DROP_DOWN_BUTTON_CLASS));
                        return !$buttonClicked.is($element)
                    },
                    showTitle: false,
                    animation: {
                        show: {
                            type: "fade",
                            duration: 0,
                            from: 0,
                            to: 1
                        },
                        hide: {
                            type: "fade",
                            duration: 400,
                            from: 1,
                            to: 0
                        }
                    },
                    width: "auto",
                    height: "auto",
                    shading: false,
                    position: {
                        of: this.$element(),
                        collision: "flipfit",
                        my: "top " + horizontalAlignment,
                        at: "bottom " + horizontalAlignment,
                        offset: {
                            y: -1
                        }
                    }
                }, this._options.cache("dropDownOptions"), {
                    visible: this.option("opened")
                })
            },
            _listOptions: function() {
                var _this4 = this;
                var selectedItemKey = this.option("selectedItemKey");
                var useSelectMode = this.option("useSelectMode");
                return {
                    selectionMode: useSelectMode ? "single" : "none",
                    wrapItemText: this.option("wrapItemText"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    showItemDataTitle: true,
                    onContentReady: function() {
                        return _this4._fireContentReadyAction()
                    },
                    selectedItemKeys: selectedItemKey && useSelectMode ? [selectedItemKey] : [],
                    grouped: this.option("grouped"),
                    groupTemplate: this.option("groupTemplate"),
                    keyExpr: this.option("keyExpr"),
                    noDataText: this.option("noDataText"),
                    displayExpr: this.option("displayExpr"),
                    itemTemplate: this.option("itemTemplate"),
                    items: this.option("items"),
                    dataSource: this._dataSource,
                    onItemClick: function(e) {
                        if (!_this4.option("useSelectMode")) {
                            _this4._lastSelectedItemData = e.itemData
                        }
                        _this4.option("selectedItemKey", _this4._keyGetter(e.itemData));
                        var actionResult = _this4._fireItemClickAction(e);
                        if (false !== actionResult) {
                            _this4.toggle(false);
                            _this4._buttonGroup.focus()
                        }
                    }
                }
            },
            _upDownKeyHandler: function() {
                if (this._popup && this._popup.option("visible") && this._list) {
                    this._list.focus()
                } else {
                    this.open()
                }
            },
            _escHandler: function() {
                this.close();
                this._buttonGroup.focus()
            },
            _renderPopup: function() {
                var $popup = (0, _renderer2.default)("<div>");
                this.$element().append($popup);
                this._popup = this._createComponent($popup, _popup2.default, this._popupOptions());
                this._popup.$content().addClass(DROP_DOWN_BUTTON_CONTENT);
                this._popup._wrapper().addClass(DROP_DOWN_BUTTON_POPUP_WRAPPER_CLASS);
                this._popup.on("hiding", this._popupHidingHandler.bind(this));
                this._popup.on("showing", this._popupShowingHandler.bind(this));
                this._bindInnerWidgetOptions(this._popup, "dropDownOptions")
            },
            _popupHidingHandler: function() {
                this.option("opened", false);
                this.setAria({
                    expanded: false,
                    owns: void 0
                })
            },
            _popupShowingHandler: function() {
                this.option("opened", true);
                this.setAria({
                    expanded: true,
                    owns: this._popupContentId
                })
            },
            _renderButtonGroup: function() {
                var $buttonGroup = this._buttonGroup && this._buttonGroup.$element() || (0, _renderer2.default)("<div>");
                if (!this._buttonGroup) {
                    this.$element().append($buttonGroup)
                }
                this._buttonGroup = this._createComponent($buttonGroup, _button_group2.default, this._buttonGroupOptions());
                this._buttonGroup.registerKeyHandler("downArrow", this._upDownKeyHandler.bind(this));
                this._buttonGroup.registerKeyHandler("tab", this.close.bind(this));
                this._buttonGroup.registerKeyHandler("upArrow", this._upDownKeyHandler.bind(this));
                this._buttonGroup.registerKeyHandler("escape", this._escHandler.bind(this));
                this._bindInnerWidgetOptions(this._buttonGroup, "buttonGroupOptions")
            },
            _updateArrowClass: function() {
                var hasArrow = this.option("splitButton") || this.option("showArrowIcon");
                this.$element().toggleClass(DROP_DOWN_BUTTON_HAS_ARROW_CLASS, hasArrow)
            },
            toggle: function(visible) {
                if (!this._popup) {
                    this._renderPopup();
                    this._renderContent()
                }
                return this._popup.toggle(visible)
            },
            open: function() {
                return this.toggle(true)
            },
            close: function() {
                return this.toggle(false)
            },
            _setListOption: function(name, value) {
                this._list && this._list.option(name, value)
            },
            _getDisplayValue: function(item) {
                var isPrimitiveItem = !(0, _type.isPlainObject)(item);
                var displayValue = isPrimitiveItem ? item : this._displayGetter(item);
                return !(0, _type.isPlainObject)(displayValue) ? String((0, _common.ensureDefined)(displayValue, "")) : ""
            },
            _updateActionButton: function(selectedItem) {
                if (this.option("useSelectMode")) {
                    this.option({
                        text: this._getDisplayValue(selectedItem),
                        icon: (0, _type.isPlainObject)(selectedItem) ? selectedItem.icon : void 0
                    })
                }
                this._setOptionWithoutOptionChange("selectedItem", selectedItem);
                this._setOptionWithoutOptionChange("selectedItemKey", this._keyGetter(selectedItem))
            },
            _clean: function() {
                this._list && this._list.$element().remove();
                this._popup && this._popup.$element().remove()
            },
            _selectedItemKeyChanged: function(value) {
                var _this5 = this;
                this._setListOption("selectedItemKeys", this.option("useSelectMode") && (0, _type.isDefined)(value) ? [value] : []);
                var previousItem = this.option("selectedItem");
                this._loadSelectedItem().done(function(selectedItem) {
                    _this5._updateActionButton(selectedItem);
                    if (_this5._displayGetter(previousItem) !== _this5._displayGetter(selectedItem)) {
                        _this5._fireSelectionChangedAction({
                            previousValue: previousItem,
                            value: selectedItem
                        })
                    }
                })
            },
            _actionButtonOptionChanged: function(_ref5) {
                var name = _ref5.name,
                    value = _ref5.value;
                var newConfig = {};
                newConfig[name] = value;
                this._buttonGroup.option("items[0]", (0, _extend.extend)({}, this._actionButtonConfig(), newConfig));
                this._popup && this._popup.repaint()
            },
            _selectModeChanged: function(value) {
                if (value) {
                    this._setListOption("selectionMode", "single");
                    var selectedItemKey = this.option("selectedItemKey");
                    this._setListOption("selectedItemKeys", selectedItemKey ? [selectedItemKey] : [])
                } else {
                    this._setListOption("selectionMode", "none");
                    this.option({
                        selectedItemKey: void 0,
                        selectedItem: void 0
                    })
                }
            },
            _updateItemCollection: function(optionName) {
                this._setWidgetOption("_list", [optionName]);
                this._setListOption("selectedItemKeys", []);
                this._loadSelectedItem().done(this._updateActionButton.bind(this))
            },
            _optionChanged: function(args) {
                var name = args.name,
                    value = args.value;
                switch (name) {
                    case "useSelectMode":
                        this._selectModeChanged(value);
                        break;
                    case "splitButton":
                        this._updateArrowClass();
                        this._renderButtonGroup();
                        break;
                    case "displayExpr":
                        this._compileDisplayGetter();
                        this._setListOption(name, value);
                        this._updateActionButton(this.option("selectedItem"));
                        break;
                    case "keyExpr":
                        this._compileKeyGetter();
                        this._setListOption(name, value);
                        break;
                    case "buttonGroupOptions":
                        this._innerWidgetOptionChanged(this._buttonGroup, args);
                        break;
                    case "dropDownOptions":
                        if ("dropDownOptions.visible" === args.fullName) {
                            break
                        }
                        if (void 0 !== args.value.visible) {
                            delete args.value.visible
                        }
                        this._innerWidgetOptionChanged(this._popup, args);
                        break;
                    case "opened":
                        this.toggle(value);
                        break;
                    case "focusStateEnabled":
                    case "hoverStateEnabled":
                        this._setListOption(name, value);
                        this._buttonGroup.option(name, value);
                        this.callBase(args);
                        break;
                    case "items":
                        this._dataSource = null;
                        this._itemsToDataSource();
                        this._updateItemCollection(name);
                        break;
                    case "dataSource":
                        this._initDataSource();
                        this._updateItemCollection(name);
                        break;
                    case "icon":
                    case "text":
                        this._actionButtonOptionChanged(args);
                        break;
                    case "showArrowIcon":
                        this._updateArrowClass();
                        this._buttonGroup.repaint();
                        this._popup && this._popup.repaint();
                        break;
                    case "width":
                    case "height":
                        this.callBase(args);
                        this._popup && this._popup.repaint();
                        break;
                    case "stylingMode":
                        this._buttonGroup.option(name, value);
                        break;
                    case "itemTemplate":
                    case "grouped":
                    case "noDataText":
                    case "groupTemplate":
                    case "wrapItemText":
                        this._setListOption(name, value);
                        break;
                    case "dropDownContentTemplate":
                        this._renderContent();
                        break;
                    case "selectedItemKey":
                        this._selectedItemKeyChanged(value);
                        break;
                    case "selectedItem":
                        break;
                    case "onItemClick":
                        this._createItemClickAction();
                        break;
                    case "onButtonClick":
                        this._createActionClickAction();
                        break;
                    case "onSelectionChanged":
                        this._createSelectionChangedAction();
                        break;
                    case "deferRendering":
                        this.toggle(this.option("opened"));
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(_data_helper2.default);
        (0, _component_registrator2.default)("dxDropDownButton", DropDownButton);
        module.exports = DropDownButton
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/color_box.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./color_box/color_box */ 555)
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/color_box/color_view.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var Color = __webpack_require__( /*! ../../color */ 91);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var Editor = __webpack_require__( /*! ../editor/editor */ 48);
        var NumberBox = __webpack_require__( /*! ../number_box */ 121);
        var TextBox = __webpack_require__( /*! ../text_box */ 88);
        var Draggable = __webpack_require__( /*! ../draggable */ 196);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var COLOR_VIEW_CLASS = "dx-colorview";
        var COLOR_VIEW_CONTAINER_CLASS = "dx-colorview-container";
        var COLOR_VIEW_ROW_CLASS = "dx-colorview-container-row";
        var COLOR_VIEW_CELL_CLASS = "dx-colorview-container-cell";
        var COLOR_VIEW_PALETTE_CLASS = "dx-colorview-palette";
        var COLOR_VIEW_PALETTE_CELL_CLASS = "dx-colorview-palette-cell";
        var COLOR_VIEW_PALETTE_HANDLE_CLASS = "dx-colorview-palette-handle";
        var COLOR_VIEW_PALETTE_GRADIENT_CLASS = "dx-colorview-palette-gradient";
        var COLOR_VIEW_PALETTE_GRADIENT_WHITE_CLASS = "dx-colorview-palette-gradient-white";
        var COLOR_VIEW_PALETTE_GRADIENT_BLACK_CLASS = "dx-colorview-palette-gradient-black";
        var COLOR_VIEW_HUE_SCALE_CLASS = "dx-colorview-hue-scale";
        var COLOR_VIEW_HUE_SCALE_CELL_CLASS = "dx-colorview-hue-scale-cell";
        var COLOR_VIEW_HUE_SCALE_HANDLE_CLASS = "dx-colorview-hue-scale-handle";
        var COLOR_VIEW_HUE_SCALE_WRAPPER_CLASS = "dx-colorview-hue-scale-wrapper";
        var COLOR_VIEW_CONTROLS_CONTAINER_CLASS = "dx-colorview-controls-container";
        var COLOR_VIEW_RED_LABEL_CLASS = "dx-colorview-label-red";
        var COLOR_VIEW_GREEN_LABEL_CLASS = "dx-colorview-label-green";
        var COLOR_VIEW_BLUE_LABEL_CLASS = "dx-colorview-label-blue";
        var COLOR_VIEW_HEX_LABEL_CLASS = "dx-colorview-label-hex";
        var COLOR_VIEW_ALPHA_CHANNEL_SCALE_CLASS = "dx-colorview-alpha-channel-scale";
        var COLOR_VIEW_APLHA_CHANNEL_ROW_CLASS = "dx-colorview-alpha-channel-row";
        var COLOR_VIEW_ALPHA_CHANNEL_SCALE_WRAPPER_CLASS = "dx-colorview-alpha-channel-wrapper";
        var COLOR_VIEW_ALPHA_CHANNEL_LABEL_CLASS = "dx-colorview-alpha-channel-label";
        var COLOR_VIEW_ALPHA_CHANNEL_HANDLE_CLASS = "dx-colorview-alpha-channel-handle";
        var COLOR_VIEW_ALPHA_CHANNEL_CELL_CLASS = "dx-colorview-alpha-channel-cell";
        var COLOR_VIEW_ALPHA_CHANNEL_BORDER_CLASS = "dx-colorview-alpha-channel-border";
        var COLOR_VIEW_COLOR_PREVIEW = "dx-colorview-color-preview";
        var COLOR_VIEW_COLOR_PREVIEW_CONTAINER_CLASS = "dx-colorview-color-preview-container";
        var COLOR_VIEW_COLOR_PREVIEW_CONTAINER_INNER_CLASS = "dx-colorview-color-preview-container-inner";
        var COLOR_VIEW_COLOR_PREVIEW_COLOR_CURRENT = "dx-colorview-color-preview-color-current";
        var COLOR_VIEW_COLOR_PREVIEW_COLOR_NEW = "dx-colorview-color-preview-color-new";
        var ColorView = Editor.inherit({
            _supportedKeys: function() {
                var isRTL = this.option("rtlEnabled");
                var that = this;
                var getHorizontalPaletteStep = function(e) {
                    var step = 100 / that._paletteWidth;
                    if (e.shiftKey) {
                        step *= that.option("keyStep")
                    }
                    step = step > 1 ? step : 1;
                    return Math.round(step)
                };
                var updateHorizontalPaletteValue = function(step) {
                    var value = that._currentColor.hsv.s + step;
                    if (value > 100) {
                        value = 100
                    } else {
                        if (value < 0) {
                            value = 0
                        }
                    }
                    that._currentColor.hsv.s = value;
                    updatePaletteValue()
                };
                var getVerticalPaletteStep = function(e) {
                    var step = 100 / that._paletteHeight;
                    if (e.shiftKey) {
                        step *= that.option("keyStep")
                    }
                    step = step > 1 ? step : 1;
                    return Math.round(step)
                };
                var updateVerticalPaletteValue = function(step) {
                    var value = that._currentColor.hsv.v + step;
                    if (value > 100) {
                        value = 100
                    } else {
                        if (value < 0) {
                            value = 0
                        }
                    }
                    that._currentColor.hsv.v = value;
                    updatePaletteValue()
                };

                function updatePaletteValue() {
                    that._placePaletteHandle();
                    that._updateColorFromHsv(that._currentColor.hsv.h, that._currentColor.hsv.s, that._currentColor.hsv.v)
                }
                var getHueScaleStep = function(e) {
                    var step = 360 / (that._hueScaleWrapperHeight - that._hueScaleHandleHeight);
                    if (e.shiftKey) {
                        step *= that.option("keyStep")
                    }
                    step = step > 1 ? step : 1;
                    return step
                };
                var updateHueScaleValue = function(step) {
                    that._currentColor.hsv.h += step;
                    that._placeHueScaleHandle();
                    var handleLocation = translator.locate(that._$hueScaleHandle);
                    that._updateColorHue(handleLocation.top + that._hueScaleHandleHeight / 2)
                };
                var getAlphaScaleStep = function(e) {
                    var step = 1 / that._alphaChannelScaleWorkWidth;
                    if (e.shiftKey) {
                        step *= that.option("keyStep")
                    }
                    step = step > .01 ? step : .01;
                    step = isRTL ? -step : step;
                    return step
                };
                var updateAlphaScaleValue = function(step) {
                    that._currentColor.a += step;
                    that._placeAlphaChannelHandle();
                    var handleLocation = translator.locate(that._$alphaChannelHandle);
                    that._calculateColorTransparencyByScaleWidth(handleLocation.left + that._alphaChannelHandleWidth / 2)
                };
                return extend(this.callBase(), {
                    upArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.ctrlKey) {
                            if (this._currentColor.hsv.h <= 360 && !this._isTopColorHue) {
                                updateHueScaleValue(getHueScaleStep(e))
                            }
                        } else {
                            if (this._currentColor.hsv.v < 100) {
                                updateVerticalPaletteValue(getVerticalPaletteStep(e))
                            }
                        }
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.ctrlKey) {
                            if (this._currentColor.hsv.h >= 0) {
                                if (this._isTopColorHue) {
                                    this._currentColor.hsv.h = 360
                                }
                                updateHueScaleValue(-getHueScaleStep(e))
                            }
                        } else {
                            if (this._currentColor.hsv.v > 0) {
                                updateVerticalPaletteValue(-getVerticalPaletteStep(e))
                            }
                        }
                    },
                    rightArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.ctrlKey) {
                            if (isRTL ? this._currentColor.a < 1 : this._currentColor.a > 0 && this.option("editAlphaChannel")) {
                                updateAlphaScaleValue(-getAlphaScaleStep(e))
                            }
                        } else {
                            if (this._currentColor.hsv.s < 100) {
                                updateHorizontalPaletteValue(getHorizontalPaletteStep(e))
                            }
                        }
                    },
                    leftArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (e.ctrlKey) {
                            if (isRTL ? this._currentColor.a > 0 : this._currentColor.a < 1 && this.option("editAlphaChannel")) {
                                updateAlphaScaleValue(getAlphaScaleStep(e))
                            }
                        } else {
                            if (this._currentColor.hsv.s > 0) {
                                updateHorizontalPaletteValue(-getHorizontalPaletteStep(e))
                            }
                        }
                    },
                    enter: function(e) {
                        this._fireEnterKeyPressed(e)
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: null,
                    matchValue: null,
                    onEnterKeyPressed: void 0,
                    editAlphaChannel: false,
                    keyStep: 1,
                    stylingMode: void 0
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._initColorAndOpacity();
                this._initEnterKeyPressedAction()
            },
            _initEnterKeyPressedAction: function() {
                this._onEnterKeyPressedAction = this._createActionByOption("onEnterKeyPressed")
            },
            _fireEnterKeyPressed: function(e) {
                if (!this._onEnterKeyPressedAction) {
                    return
                }
                this._onEnterKeyPressedAction({
                    event: e
                })
            },
            _initColorAndOpacity: function() {
                this._setCurrentColor(this.option("value"))
            },
            _setCurrentColor: function(value) {
                value = value || "#000000";
                var newColor = new Color(value);
                if (!newColor.colorIsInvalid) {
                    if (!this._currentColor || this._makeRgba(this._currentColor) !== this._makeRgba(newColor)) {
                        this._currentColor = newColor;
                        if (this._$currentColor) {
                            this._makeTransparentBackground(this._$currentColor, newColor)
                        }
                    }
                } else {
                    this.option("value", this._currentColor.baseColor)
                }
            },
            _setBaseColor: function(value) {
                var color = value || "#000000";
                var newColor = new Color(color);
                if (!newColor.colorIsInvalid) {
                    var isBaseColorChanged = this._makeRgba(this.option("matchValue") !== this._makeRgba(newColor));
                    if (isBaseColorChanged) {
                        if (this._$baseColor) {
                            this._makeTransparentBackground(this._$baseColor, newColor)
                        }
                    }
                }
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(COLOR_VIEW_CLASS);
                this._renderColorPickerContainer()
            },
            _render: function() {
                this.callBase();
                this._renderPalette();
                this._renderHueScale();
                this._renderControlsContainer();
                this._renderControls();
                this._renderAlphaChannelElements()
            },
            _makeTransparentBackground: function($el, color) {
                if (!(color instanceof Color)) {
                    color = new Color(color)
                }
                $el.css("backgroundColor", this._makeRgba(color))
            },
            _makeRgba: function(color) {
                if (!(color instanceof Color)) {
                    color = new Color(color)
                }
                return "rgba(" + [color.r, color.g, color.b, color.a].join(", ") + ")"
            },
            _renderValue: function() {
                this.callBase(this.option("editAlphaChannel") ? this._makeRgba(this._currentColor) : this.option("value"))
            },
            _renderColorPickerContainer: function() {
                var $parent = this.$element();
                this._$colorPickerContainer = $("<div>").addClass(COLOR_VIEW_CONTAINER_CLASS).appendTo($parent);
                this._renderHtmlRows()
            },
            _renderHtmlRows: function(updatedOption) {
                var $renderedRows = this._$colorPickerContainer.find("." + COLOR_VIEW_ROW_CLASS);
                var renderedRowsCount = $renderedRows.length;
                var rowCount = this.option("editAlphaChannel") ? 2 : 1;
                var delta = renderedRowsCount - rowCount;
                if (delta > 0) {
                    $renderedRows.eq(-1).remove()
                }
                if (delta < 0) {
                    delta = Math.abs(delta);
                    var rows = [];
                    var i;
                    for (i = 0; i < delta; i++) {
                        rows.push($("<div>").addClass(COLOR_VIEW_ROW_CLASS))
                    }
                    if (renderedRowsCount) {
                        for (i = 0; i < rows.length; i++) {
                            $renderedRows.eq(0).after(rows[i])
                        }
                    } else {
                        this._$colorPickerContainer.append(rows)
                    }
                }
            },
            _renderHtmlCellInsideRow: function(index, $rowParent, additionalClass) {
                return $("<div>").addClass(COLOR_VIEW_CELL_CLASS).addClass(additionalClass).appendTo($rowParent.find("." + COLOR_VIEW_ROW_CLASS).eq(index))
            },
            _renderPalette: function() {
                var $paletteCell = this._renderHtmlCellInsideRow(0, this._$colorPickerContainer, COLOR_VIEW_PALETTE_CELL_CLASS);
                var $paletteGradientWhite = $("<div>").addClass([COLOR_VIEW_PALETTE_GRADIENT_CLASS, COLOR_VIEW_PALETTE_GRADIENT_WHITE_CLASS].join(" "));
                var $paletteGradientBlack = $("<div>").addClass([COLOR_VIEW_PALETTE_GRADIENT_CLASS, COLOR_VIEW_PALETTE_GRADIENT_BLACK_CLASS].join(" "));
                this._$palette = $("<div>").addClass(COLOR_VIEW_PALETTE_CLASS).css("backgroundColor", this._currentColor.getPureColor().toHex()).appendTo($paletteCell);
                this._paletteHeight = this._$palette.height();
                this._paletteWidth = this._$palette.width();
                this._renderPaletteHandle();
                this._$palette.append([$paletteGradientWhite, $paletteGradientBlack])
            },
            _renderPaletteHandle: function() {
                this._$paletteHandle = $("<div>").addClass(COLOR_VIEW_PALETTE_HANDLE_CLASS).appendTo(this._$palette);
                this._createComponent(this._$paletteHandle, Draggable, {
                    contentTemplate: null,
                    boundary: this._$palette,
                    allowMoveByClick: true,
                    boundOffset: function() {
                        return -this._paletteHandleHeight / 2
                    }.bind(this),
                    onDragMove: function() {
                        var paletteHandlePosition = translator.locate(this._$paletteHandle);
                        this._updateByDrag = true;
                        this._updateColorFromHsv(this._currentColor.hsv.h, this._calculateColorSaturation(paletteHandlePosition), this._calculateColorValue(paletteHandlePosition))
                    }.bind(this)
                });
                this._paletteHandleWidth = this._$paletteHandle.width();
                this._paletteHandleHeight = this._$paletteHandle.height();
                this._placePaletteHandle()
            },
            _placePaletteHandle: function() {
                translator.move(this._$paletteHandle, {
                    left: Math.round(this._paletteWidth * this._currentColor.hsv.s / 100 - this._paletteHandleWidth / 2),
                    top: Math.round(this._paletteHeight - this._paletteHeight * this._currentColor.hsv.v / 100 - this._paletteHandleHeight / 2)
                })
            },
            _calculateColorValue: function(paletteHandlePosition) {
                var value = Math.floor(paletteHandlePosition.top + this._paletteHandleHeight / 2);
                return 100 - Math.round(100 * value / this._paletteHeight)
            },
            _calculateColorSaturation: function(paletteHandlePosition) {
                var saturation = Math.floor(paletteHandlePosition.left + this._paletteHandleWidth / 2);
                return Math.round(100 * saturation / this._paletteWidth)
            },
            _updateColorFromHsv: function(hue, saturation, value) {
                var a = this._currentColor.a;
                this._currentColor = new Color("hsv(" + [hue, saturation, value].join(",") + ")");
                this._currentColor.a = a;
                this._updateColorParamsAndColorPreview();
                this.applyColor()
            },
            _renderHueScale: function() {
                var $hueScaleCell = this._renderHtmlCellInsideRow(0, this._$colorPickerContainer, COLOR_VIEW_HUE_SCALE_CELL_CLASS);
                this._$hueScaleWrapper = $("<div>").addClass(COLOR_VIEW_HUE_SCALE_WRAPPER_CLASS).appendTo($hueScaleCell);
                this._$hueScale = $("<div>").addClass(COLOR_VIEW_HUE_SCALE_CLASS).appendTo(this._$hueScaleWrapper);
                this._hueScaleHeight = this._$hueScale.height();
                this._hueScaleWrapperHeight = this._$hueScaleWrapper.outerHeight();
                this._renderHueScaleHandle()
            },
            _renderHueScaleHandle: function() {
                this._$hueScaleHandle = $("<div>").addClass(COLOR_VIEW_HUE_SCALE_HANDLE_CLASS).appendTo(this._$hueScaleWrapper);
                this._createComponent(this._$hueScaleHandle, Draggable, {
                    contentTemplate: null,
                    boundary: this._$hueScaleWrapper,
                    allowMoveByClick: true,
                    dragDirection: "vertical",
                    onDragMove: function() {
                        this._updateByDrag = true;
                        this._updateColorHue(translator.locate(this._$hueScaleHandle).top + this._hueScaleHandleHeight / 2)
                    }.bind(this)
                });
                this._hueScaleHandleHeight = this._$hueScaleHandle.height();
                this._placeHueScaleHandle()
            },
            _placeHueScaleHandle: function() {
                var hueScaleHeight = this._hueScaleWrapperHeight;
                var handleHeight = this._hueScaleHandleHeight;
                var top = (hueScaleHeight - handleHeight) * (360 - this._currentColor.hsv.h) / 360;
                if (hueScaleHeight < top + handleHeight) {
                    top = hueScaleHeight - handleHeight
                }
                if (top < 0) {
                    top = 0
                }
                translator.move(this._$hueScaleHandle, {
                    top: Math.round(top)
                })
            },
            _updateColorHue: function(handlePosition) {
                var hue = 360 - Math.round(360 * (handlePosition - this._hueScaleHandleHeight / 2) / (this._hueScaleWrapperHeight - this._hueScaleHandleHeight));
                var saturation = this._currentColor.hsv.s;
                var value = this._currentColor.hsv.v;
                this._isTopColorHue = false;
                hue = hue < 0 ? 0 : hue;
                if (hue >= 360) {
                    this._isTopColorHue = true;
                    hue = 0
                }
                this._updateColorFromHsv(hue, saturation, value);
                this._$palette.css("backgroundColor", this._currentColor.getPureColor().toHex())
            },
            _renderControlsContainer: function() {
                var $controlsContainerCell = this._renderHtmlCellInsideRow(0, this._$colorPickerContainer);
                this._$controlsContainer = $("<div>").addClass(COLOR_VIEW_CONTROLS_CONTAINER_CLASS).appendTo($controlsContainerCell)
            },
            _renderControls: function() {
                this._renderColorsPreview();
                this._renderRgbInputs();
                this._renderHexInput()
            },
            _renderColorsPreview: function() {
                var $colorsPreviewContainer = $("<div>").addClass(COLOR_VIEW_COLOR_PREVIEW_CONTAINER_CLASS).appendTo(this._$controlsContainer);
                var $colorsPreviewContainerInner = $("<div>").addClass(COLOR_VIEW_COLOR_PREVIEW_CONTAINER_INNER_CLASS).appendTo($colorsPreviewContainer);
                this._$currentColor = $("<div>").addClass([COLOR_VIEW_COLOR_PREVIEW, COLOR_VIEW_COLOR_PREVIEW_COLOR_NEW].join(" "));
                this._$baseColor = $("<div>").addClass([COLOR_VIEW_COLOR_PREVIEW, COLOR_VIEW_COLOR_PREVIEW_COLOR_CURRENT].join(" "));
                this._makeTransparentBackground(this._$baseColor, this.option("matchValue"));
                this._makeTransparentBackground(this._$currentColor, this._currentColor);
                $colorsPreviewContainerInner.append([this._$baseColor, this._$currentColor])
            },
            _renderAlphaChannelElements: function() {
                if (this.option("editAlphaChannel")) {
                    this._$colorPickerContainer.find("." + COLOR_VIEW_ROW_CLASS).eq(1).addClass(COLOR_VIEW_APLHA_CHANNEL_ROW_CLASS);
                    this._renderAlphaChannelScale();
                    this._renderAlphaChannelInput()
                }
            },
            _renderRgbInputs: function() {
                this._rgbInputsWithLabels = [this._renderEditorWithLabel({
                    editorType: NumberBox,
                    value: this._currentColor.r,
                    onValueChanged: this._updateColor.bind(this, false),
                    labelText: "R",
                    labelAriaText: messageLocalization.format("dxColorView-ariaRed"),
                    labelClass: COLOR_VIEW_RED_LABEL_CLASS
                }), this._renderEditorWithLabel({
                    editorType: NumberBox,
                    value: this._currentColor.g,
                    onValueChanged: this._updateColor.bind(this, false),
                    labelText: "G",
                    labelAriaText: messageLocalization.format("dxColorView-ariaGreen"),
                    labelClass: COLOR_VIEW_GREEN_LABEL_CLASS
                }), this._renderEditorWithLabel({
                    editorType: NumberBox,
                    value: this._currentColor.b,
                    onValueChanged: this._updateColor.bind(this, false),
                    labelText: "B",
                    labelAriaText: messageLocalization.format("dxColorView-ariaBlue"),
                    labelClass: COLOR_VIEW_BLUE_LABEL_CLASS
                })];
                this._$controlsContainer.append(this._rgbInputsWithLabels);
                this._rgbInputs = [this._rgbInputsWithLabels[0].find(".dx-numberbox").dxNumberBox("instance"), this._rgbInputsWithLabels[1].find(".dx-numberbox").dxNumberBox("instance"), this._rgbInputsWithLabels[2].find(".dx-numberbox").dxNumberBox("instance")]
            },
            _renderEditorWithLabel: function(options) {
                var _this = this;
                var $editor = $("<div>");
                var $label = $("<label>").addClass(options.labelClass).text(options.labelText + ":").append($editor);
                eventsEngine.off($label, clickEvent.name);
                eventsEngine.on($label, clickEvent.name, function(e) {
                    e.preventDefault()
                });
                var editorType = options.editorType;
                var editorOptions = extend({
                    value: options.value,
                    onValueChanged: options.onValueChanged,
                    onKeyboardHandled: function(opts) {
                        return _this._keyboardHandler(opts)
                    }
                }, {
                    stylingMode: this.option("stylingMode")
                });
                if (editorType === NumberBox) {
                    editorOptions.min = options.min || 0;
                    editorOptions.max = options.max || 255;
                    editorOptions.step = options.step || 1
                }
                var editor = new editorType($editor, editorOptions);
                editor.registerKeyHandler("enter", function(e) {
                    this._fireEnterKeyPressed(e)
                }.bind(this));
                this.setAria("label", options.labelAriaText, $editor);
                return $label
            },
            hexInputOptions: function() {
                return {
                    editorType: TextBox,
                    value: this._currentColor.toHex().replace("#", ""),
                    onValueChanged: this._updateColor.bind(this, true),
                    labelClass: COLOR_VIEW_HEX_LABEL_CLASS,
                    labelText: "#",
                    labelAriaText: messageLocalization.format("dxColorView-ariaHex")
                }
            },
            _renderHexInput: function() {
                this._hexInput = TextBox.getInstance(this._renderEditorWithLabel(this.hexInputOptions()).appendTo(this._$controlsContainer).find(".dx-textbox"))
            },
            _renderAlphaChannelScale: function() {
                var $alphaChannelScaleCell = this._renderHtmlCellInsideRow(1, this._$colorPickerContainer, COLOR_VIEW_ALPHA_CHANNEL_CELL_CLASS);
                var $alphaChannelBorder = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_BORDER_CLASS).appendTo($alphaChannelScaleCell);
                var $alphaChannelScaleWrapper = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_SCALE_WRAPPER_CLASS).appendTo($alphaChannelBorder);
                this._$alphaChannelScale = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_SCALE_CLASS).appendTo($alphaChannelScaleWrapper);
                this._makeCSSLinearGradient(this._$alphaChannelScale);
                this._renderAlphaChannelHandle($alphaChannelScaleCell)
            },
            _makeCSSLinearGradient: function($el) {
                var color = this._currentColor;
                var colorAsRgb = [color.r, color.g, color.b].join(",");
                var colorAsHex = color.toHex().replace("#", "");
                var combineGradientString = function(colorAsRgb, colorAsHex) {
                    var rtlEnabled = this.option("rtlEnabled");
                    var startColor = "rgba(" + colorAsRgb + ", " + (rtlEnabled ? "1" : "0") + ")";
                    var finishColor = "rgba(" + colorAsRgb + ", " + (rtlEnabled ? "0" : "1") + ")";
                    var startColorIE = "'#" + (rtlEnabled ? "00" : "") + colorAsHex + "'";
                    var finishColorIE = "'#" + (rtlEnabled ? "" : "00") + colorAsHex + "'";
                    return ["background-image: -webkit-linear-gradient(180deg, " + startColor + ", " + finishColor + ")", "background-image: -moz-linear-gradient(-90deg, " + startColor + ", " + finishColor + ")", "background-image: -o-linear-gradient(-90deg, " + startColor + ", " + finishColor + ")", "background-image: linear-gradient(-90deg, " + startColor + ", " + finishColor + ")", "filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=" + startColorIE + ", endColorstr=" + finishColorIE + ")"].join(";")
                };
                $el.attr("style", combineGradientString.call(this, colorAsRgb, colorAsHex))
            },
            _renderAlphaChannelInput: function() {
                var that = this;
                var $alphaChannelInputCell = this._renderHtmlCellInsideRow(1, this._$colorPickerContainer);
                that._alphaChannelInput = this._renderEditorWithLabel({
                    editorType: NumberBox,
                    value: this._currentColor.a,
                    max: 1,
                    step: .1,
                    onValueChanged: function(e) {
                        var value = e.value;
                        value = that._currentColor.isValidAlpha(value) ? value : that._currentColor.a;
                        that._updateColorTransparency(value);
                        that._placeAlphaChannelHandle()
                    },
                    labelClass: COLOR_VIEW_ALPHA_CHANNEL_LABEL_CLASS,
                    labelText: "Alpha",
                    labelAriaText: messageLocalization.format("dxColorView-ariaAlpha")
                }).appendTo($alphaChannelInputCell).find(".dx-numberbox").dxNumberBox("instance")
            },
            _updateColorTransparency: function(transparency) {
                this._currentColor.a = transparency;
                this.applyColor()
            },
            _renderAlphaChannelHandle: function($parent) {
                this._$alphaChannelHandle = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_HANDLE_CLASS).appendTo($parent);
                this._createComponent(this._$alphaChannelHandle, Draggable, {
                    contentTemplate: null,
                    boundary: $parent,
                    allowMoveByClick: true,
                    dragDirection: "horizontal",
                    onDragMove: function() {
                        this._updateByDrag = true;
                        var $alphaChannelHandle = this._$alphaChannelHandle;
                        var alphaChannelHandlePosition = translator.locate($alphaChannelHandle).left + this._alphaChannelHandleWidth / 2;
                        this._calculateColorTransparencyByScaleWidth(alphaChannelHandlePosition)
                    }.bind(this)
                });
                this._alphaChannelHandleWidth = this._$alphaChannelHandle.width();
                this._alphaChannelScaleWorkWidth = $parent.width() - this._alphaChannelHandleWidth;
                this._placeAlphaChannelHandle()
            },
            _calculateColorTransparencyByScaleWidth: function(handlePosition) {
                var transparency = (handlePosition - this._alphaChannelHandleWidth / 2) / this._alphaChannelScaleWorkWidth;
                var rtlEnabled = this.option("rtlEnabled");
                transparency = rtlEnabled ? transparency : 1 - transparency;
                if (handlePosition >= this._alphaChannelScaleWorkWidth + this._alphaChannelHandleWidth / 2) {
                    transparency = rtlEnabled ? 1 : 0
                } else {
                    if (transparency < 1) {
                        transparency = transparency.toFixed(2)
                    }
                }
                transparency = Math.max(transparency, 0);
                transparency = Math.min(transparency, 1);
                this._alphaChannelInput.option("value", transparency)
            },
            _placeAlphaChannelHandle: function() {
                var left = this._alphaChannelScaleWorkWidth * (1 - this._currentColor.a);
                if (left < 0) {
                    left = 0
                }
                if (this._alphaChannelScaleWorkWidth < left) {
                    left = this._alphaChannelScaleWorkWidth
                }
                translator.move(this._$alphaChannelHandle, {
                    left: this.option("rtlEnabled") ? this._alphaChannelScaleWorkWidth - left : left
                })
            },
            applyColor: function() {
                var colorValue = this.option("editAlphaChannel") ? this._makeRgba(this._currentColor) : this._currentColor.toHex();
                this._makeTransparentBackground(this._$currentColor, this._currentColor);
                this.option("value", colorValue)
            },
            cancelColor: function() {
                this._initColorAndOpacity();
                this._refreshMarkup()
            },
            _updateColor: function(isHex, e) {
                var rgba;
                var newColor;
                if (isHex) {
                    newColor = this._validateHex("#" + this._hexInput.option("value"))
                } else {
                    rgba = this._validateRgb();
                    if (this._alphaChannelInput) {
                        rgba.push(this._alphaChannelInput.option("value"));
                        newColor = "rgba(" + rgba.join(", ") + ")"
                    } else {
                        newColor = "rgb(" + rgba.join(", ") + ")"
                    }
                }
                if (!this._suppressEditorsValueUpdating) {
                    this._currentColor = new Color(newColor);
                    this.applyColor();
                    this._refreshMarkup()
                }
            },
            _validateHex: function(hex) {
                return this._currentColor.isValidHex(hex) ? hex : this._currentColor.toHex()
            },
            _validateRgb: function() {
                var r = this._rgbInputs[0].option("value");
                var g = this._rgbInputs[1].option("value");
                var b = this._rgbInputs[2].option("value");
                if (!this._currentColor.isValidRGB(r, g, b)) {
                    r = this._currentColor.r;
                    g = this._currentColor.g;
                    b = this._currentColor.b
                }
                return [r, g, b]
            },
            _refreshMarkup: function() {
                this._placeHueScaleHandle();
                this._placePaletteHandle();
                this._updateColorParamsAndColorPreview();
                this._$palette.css("backgroundColor", this._currentColor.getPureColor().toHex());
                if (this._$alphaChannelHandle) {
                    this._updateColorTransparency(this._currentColor.a);
                    this._placeAlphaChannelHandle()
                }
            },
            _updateColorParamsAndColorPreview: function() {
                this._suppressEditorsValueUpdating = true;
                this._hexInput.option("value", this._currentColor.toHex().replace("#", ""));
                this._rgbInputs[0].option("value", this._currentColor.r);
                this._rgbInputs[1].option("value", this._currentColor.g);
                this._rgbInputs[2].option("value", this._currentColor.b);
                this._suppressEditorsValueUpdating = false;
                if (this.option("editAlphaChannel")) {
                    this._makeCSSLinearGradient.call(this, this._$alphaChannelScale);
                    this._alphaChannelInput.option("value", this._currentColor.a)
                }
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "value":
                        this._setCurrentColor(value);
                        if (!this._updateByDrag) {
                            this._refreshMarkup()
                        }
                        this._updateByDrag = false;
                        this.callBase(args);
                        break;
                    case "matchValue":
                        this._setBaseColor(value);
                        break;
                    case "onEnterKeyPressed":
                        this._initEnterKeyPressedAction();
                        break;
                    case "editAlphaChannel":
                        if (this._$colorPickerContainer) {
                            this._renderHtmlRows("editAlphaChannel");
                            this._renderAlphaChannelElements()
                        }
                        break;
                    case "keyStep":
                        break;
                    case "stylingMode":
                        this._renderControls();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxColorView", ColorView);
        module.exports = ColorView
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.calendar.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Calendar = __webpack_require__( /*! ../calendar */ 234);
        var DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 199);
        var dateUtils = __webpack_require__( /*! ../../core/utils/date */ 24);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var isFunction = __webpack_require__( /*! ../../core/utils/type */ 1).isFunction;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var CalendarStrategy = DateBoxStrategy.inherit({
            NAME: "Calendar",
            supportedKeys: function() {
                var homeEndHandler = function(e) {
                    if (this.option("opened")) {
                        e.preventDefault();
                        return true
                    }
                    return false
                };
                return {
                    rightArrow: function() {
                        if (this.option("opened")) {
                            return true
                        }
                    },
                    leftArrow: function() {
                        if (this.option("opened")) {
                            return true
                        }
                    },
                    enter: function(e) {
                        if (this.dateBox.option("opened")) {
                            e.preventDefault();
                            if (this._widget.option("zoomLevel") === this._widget.option("maxZoomLevel")) {
                                var contouredDate = this._widget._view.option("contouredDate");
                                var lastActionElement = this._lastActionElement;
                                if (contouredDate && "calendar" === lastActionElement) {
                                    this.dateBoxValue(contouredDate, e)
                                }
                                this.dateBox.close();
                                this.dateBox._valueChangeEventHandler(e)
                            } else {
                                return true
                            }
                        } else {
                            this.dateBox._valueChangeEventHandler(e)
                        }
                    }.bind(this),
                    home: homeEndHandler,
                    end: homeEndHandler
                }
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || "shortdate"
            },
            _getWidgetName: function() {
                return Calendar
            },
            getKeyboardListener: function() {
                return this._widget
            },
            _getWidgetOptions: function() {
                var disabledDates = this.dateBox.option("disabledDates");
                return extend(this.dateBox.option("calendarOptions"), {
                    value: this.dateBoxValue() || null,
                    dateSerializationFormat: null,
                    min: this.dateBox.dateOption("min"),
                    max: this.dateBox.dateOption("max"),
                    onValueChanged: this._valueChangedHandler.bind(this),
                    onCellClick: this._cellClickHandler.bind(this),
                    tabIndex: null,
                    disabledDates: isFunction(disabledDates) ? this._injectComponent(disabledDates.bind(this.dateBox)) : disabledDates,
                    onContouredChanged: this._refreshActiveDescendant.bind(this),
                    hasFocus: function() {
                        return true
                    }
                })
            },
            _injectComponent: function(func) {
                var that = this;
                return function(params) {
                    extend(params, {
                        component: that.dateBox
                    });
                    return func(params)
                }
            },
            _refreshActiveDescendant: function(e) {
                this._lastActionElement = "calendar";
                this.dateBox.setAria("activedescendant", e.actionValue)
            },
            popupConfig: function(_popupConfig) {
                var toolbarItems = _popupConfig.toolbarItems;
                var buttonsLocation = this.dateBox.option("buttonsLocation");
                var position = [];
                if ("default" !== buttonsLocation) {
                    position = commonUtils.splitPair(buttonsLocation)
                } else {
                    position = ["bottom", "center"]
                }
                if ("useButtons" === this.dateBox.option("applyValueMode")) {
                    toolbarItems.unshift({
                        widget: "dxButton",
                        toolbar: position[0],
                        location: "after" === position[1] ? "before" : position[1],
                        options: {
                            onInitialized: function(e) {
                                e.component.registerKeyHandler("escape", this._escapeHandler.bind(this))
                            }.bind(this),
                            onClick: function() {
                                this._widget._toTodayView()
                            }.bind(this),
                            text: messageLocalization.format("dxCalendar-todayButtonText"),
                            type: "today"
                        }
                    })
                }
                return extend(true, _popupConfig, {
                    toolbarItems: toolbarItems,
                    position: {
                        collision: "flipfit flip"
                    }
                })
            },
            _escapeHandler: function() {
                this.dateBox.close();
                this.dateBox.focus()
            },
            _valueChangedHandler: function(e) {
                var dateBox = this.dateBox;
                var value = e.value;
                var prevValue = e.previousValue;
                if (dateUtils.sameDate(value, prevValue)) {
                    return
                }
                if ("instantly" === dateBox.option("applyValueMode")) {
                    this.dateBoxValue(this.getValue(), e.event)
                }
            },
            _updateValue: function() {
                if (!this._widget) {
                    return
                }
                this._widget.option("value", this.dateBoxValue())
            },
            textChangedHandler: function() {
                this._lastActionElement = "input";
                if (this.dateBox.option("opened") && this._widget) {
                    this._updateValue(true)
                }
            },
            _cellClickHandler: function(e) {
                var dateBox = this.dateBox;
                if ("instantly" === dateBox.option("applyValueMode")) {
                    dateBox.option("opened", false);
                    this.dateBoxValue(this.getValue(), e.event)
                }
            }
        });
        module.exports = CalendarStrategy
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.items_runtime_info.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var FormItemsRunTimeInfo = function() {
            function FormItemsRunTimeInfo() {
                _classCallCheck(this, FormItemsRunTimeInfo);
                this._map = {}
            }
            _createClass(FormItemsRunTimeInfo, [{
                key: "_findWidgetInstance",
                value: function(condition) {
                    var result;
                    (0, _iterator.each)(this._map, function(guid, _ref) {
                        var widgetInstance = _ref.widgetInstance,
                            item = _ref.item;
                        if (condition(item)) {
                            result = widgetInstance;
                            return false
                        }
                    });
                    return result
                }
            }, {
                key: "_findFieldByCondition",
                value: function(callback, valueExpr) {
                    var result;
                    (0, _iterator.each)(this._map, function(key, value) {
                        if (callback(value)) {
                            result = "guid" === valueExpr ? key : value[valueExpr];
                            return false
                        }
                    });
                    return result
                }
            }, {
                key: "clear",
                value: function() {
                    this._map = {}
                }
            }, {
                key: "removeItemsByItems",
                value: function(itemsRunTimeInfo) {
                    var _this = this;
                    (0, _iterator.each)(itemsRunTimeInfo.getItems(), function(guid) {
                        return _this.removeItemByKey(guid)
                    })
                }
            }, {
                key: "removeItemByKey",
                value: function(key) {
                    delete this._map[key]
                }
            }, {
                key: "add",
                value: function(options) {
                    var key = options.guid || new _guid2.default;
                    this._map[key] = options;
                    return key
                }
            }, {
                key: "addItemsOrExtendFrom",
                value: function(itemsRunTimeInfo) {
                    var _this2 = this;
                    itemsRunTimeInfo.each(function(key, itemRunTimeInfo) {
                        if (_this2._map[key]) {
                            if (itemRunTimeInfo.widgetInstance) {
                                _this2._map[key].widgetInstance = itemRunTimeInfo.widgetInstance
                            }
                            _this2._map[key].$itemContainer = itemRunTimeInfo.$itemContainer
                        } else {
                            _this2.add({
                                item: itemRunTimeInfo.item,
                                widgetInstance: itemRunTimeInfo.widgetInstance,
                                guid: key,
                                $itemContainer: itemRunTimeInfo.$itemContainer
                            })
                        }
                    })
                }
            }, {
                key: "extendRunTimeItemInfoByKey",
                value: function(key, options) {
                    if (this._map[key]) {
                        this._map[key] = (0, _extend.extend)(this._map[key], options)
                    }
                }
            }, {
                key: "findWidgetInstanceByItem",
                value: function(item) {
                    return this._findWidgetInstance(function(storedItem) {
                        return storedItem === item
                    })
                }
            }, {
                key: "getGroupOrTabLayoutManagerByPath",
                value: function(targetPath) {
                    return this._findFieldByCondition(function(_ref2) {
                        var path = _ref2.path;
                        return path === targetPath
                    }, "layoutManager")
                }
            }, {
                key: "getKeyByPath",
                value: function(targetPath) {
                    return this._findFieldByCondition(function(_ref3) {
                        var path = _ref3.path;
                        return path === targetPath
                    }, "guid")
                }
            }, {
                key: "getPathFromItem",
                value: function(targetItem) {
                    return this._findFieldByCondition(function(_ref4) {
                        var item = _ref4.item;
                        return item === targetItem
                    }, "path")
                }
            }, {
                key: "findWidgetInstanceByName",
                value: function(name) {
                    return this._findWidgetInstance(function(item) {
                        return name === item.name
                    })
                }
            }, {
                key: "findWidgetInstanceByDataField",
                value: function(dataField) {
                    return this._findWidgetInstance(function(item) {
                        return dataField === ((0, _type.isString)(item) ? item : item.dataField)
                    })
                }
            }, {
                key: "findItemContainerByItem",
                value: function(item) {
                    for (var key in this._map) {
                        if (this._map[key].item === item) {
                            return this._map[key].$itemContainer
                        }
                    }
                    return null
                }
            }, {
                key: "findItemIndexByItem",
                value: function(targetItem) {
                    return this._findFieldByCondition(function(_ref5) {
                        var item = _ref5.item;
                        return item === targetItem
                    }, "itemIndex")
                }
            }, {
                key: "getItems",
                value: function() {
                    return this._map
                }
            }, {
                key: "each",
                value: function(handler) {
                    (0, _iterator.each)(this._map, function(key, itemRunTimeInfo) {
                        handler(key, itemRunTimeInfo)
                    })
                }
            }, {
                key: "removeItemsByPathStartWith",
                value: function(path) {
                    var _this3 = this;
                    var keys = Object.keys(this._map);
                    var filteredKeys = keys.filter(function(key) {
                        return _this3._map[key].path.indexOf(path, 0) > -1
                    });
                    filteredKeys.forEach(function(key) {
                        return _this3.removeItemByKey(key)
                    })
                }
            }]);
            return FormItemsRunTimeInfo
        }();
        exports.default = FormItemsRunTimeInfo
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/responsive_box.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var errors = __webpack_require__( /*! ./widget/ui.errors */ 18);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var Box = __webpack_require__( /*! ./box */ 197);
        var CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var RESPONSIVE_BOX_CLASS = "dx-responsivebox";
        var SCREEN_SIZE_CLASS_PREFIX = RESPONSIVE_BOX_CLASS + "-screen-";
        var BOX_ITEM_CLASS = "dx-box-item";
        var BOX_ITEM_DATA_KEY = "dxBoxItemData";
        var HD_SCREEN_WIDTH = 1920;
        var ResponsiveBox = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    rows: [],
                    cols: [],
                    screenByWidth: null,
                    singleColumnScreen: "",
                    height: "100%",
                    width: "100%",
                    activeStateEnabled: false,
                    focusStateEnabled: false,
                    onItemStateChanged: void 0,
                    onLayoutChanged: null,
                    currentScreenFactor: void 0,
                    _layoutStrategy: void 0
                })
            },
            _init: function() {
                if (!this.option("screenByWidth")) {
                    this._options.silent("screenByWidth", windowUtils.defaultScreenFactorFunc)
                }
                this.callBase();
                this._initLayoutChangedAction()
            },
            _initLayoutChangedAction: function() {
                this._layoutChangedAction = this._createActionByOption("onLayoutChanged", {
                    excludeValidators: ["disabled", "readonly"]
                })
            },
            _itemClass: function() {
                return BOX_ITEM_CLASS
            },
            _itemDataKey: function() {
                return BOX_ITEM_DATA_KEY
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(RESPONSIVE_BOX_CLASS);
                this._updateRootBox()
            },
            _updateRootBox: function() {
                clearTimeout(this._updateTimer);
                this._updateTimer = setTimeout(function() {
                    if (this._$root) {
                        eventsEngine.triggerHandler(this._$root, "dxupdate")
                    }
                }.bind(this))
            },
            _renderItems: function() {
                this._setScreenSize();
                this._screenItems = this._itemsByScreen();
                this._prepareGrid();
                this._spreadItems();
                this._layoutItems();
                this._linkNodeToItem()
            },
            _itemOptionChanged: function(item) {
                var $item = this._findItemElementByItem(item);
                if (!$item.length) {
                    return
                }
                this._refreshItem($item, item);
                this._clearItemNodeTemplates();
                this._update()
            },
            _setScreenSize: function() {
                var currentScreen = this._getCurrentScreen();
                this._removeScreenSizeClass();
                this.$element().addClass(SCREEN_SIZE_CLASS_PREFIX + currentScreen);
                this.option("currentScreenFactor", currentScreen)
            },
            _removeScreenSizeClass: function() {
                var currentScreenFactor = this.option("currentScreenFactor");
                currentScreenFactor && this.$element().removeClass(SCREEN_SIZE_CLASS_PREFIX + currentScreenFactor)
            },
            _prepareGrid: function() {
                var grid = this._grid = [];
                this._prepareRowsAndCols();
                iteratorUtils.each(this._rows, function() {
                    var row = [];
                    grid.push(row);
                    iteratorUtils.each(this._cols, function() {
                        row.push(this._createEmptyCell())
                    }.bind(this))
                }.bind(this))
            },
            getSingleColumnRows: function() {
                var rows = this.option("rows");
                var screenItemsLength = this._screenItems.length;
                if (rows.length) {
                    var filteredRows = this._filterByScreen(rows);
                    var result = [];
                    for (var i = 0; i < screenItemsLength; i++) {
                        var sizeConfig = this._defaultSizeConfig();
                        if (i < filteredRows.length && typeUtils.isDefined(filteredRows[i].shrink)) {
                            sizeConfig.shrink = filteredRows[i].shrink
                        }
                        result.push(sizeConfig)
                    }
                    return result
                } else {
                    return this._defaultSizeConfig(screenItemsLength)
                }
            },
            _prepareRowsAndCols: function() {
                if (this._isSingleColumnScreen()) {
                    this._prepareSingleColumnScreenItems();
                    this._rows = this.getSingleColumnRows();
                    this._cols = this._defaultSizeConfig(1)
                } else {
                    this._rows = this._sizesByScreen(this.option("rows"));
                    this._cols = this._sizesByScreen(this.option("cols"))
                }
            },
            _isSingleColumnScreen: function() {
                return this._screenRegExp().test(this.option("singleColumnScreen")) || !this.option("rows").length || !this.option("cols").length
            },
            _prepareSingleColumnScreenItems: function() {
                this._screenItems.sort(function(item1, item2) {
                    return item1.location.row - item2.location.row || item1.location.col - item2.location.col
                });
                iteratorUtils.each(this._screenItems, function(index, item) {
                    extend(item.location, {
                        row: index,
                        col: 0,
                        rowspan: 1,
                        colspan: 1
                    })
                })
            },
            _sizesByScreen: function(sizeConfigs) {
                return iteratorUtils.map(this._filterByScreen(sizeConfigs), function(sizeConfig) {
                    return extend(this._defaultSizeConfig(), sizeConfig)
                }.bind(this))
            },
            _createDefaultSizeConfig: function() {
                return {
                    ratio: 1,
                    baseSize: 0,
                    minSize: 0,
                    maxSize: 0
                }
            },
            _defaultSizeConfig: function(size) {
                var defaultSizeConfig = this._createDefaultSizeConfig();
                if (!arguments.length) {
                    return defaultSizeConfig
                }
                var result = [];
                for (var i = 0; i < size; i++) {
                    result.push(defaultSizeConfig)
                }
                return result
            },
            _filterByScreen: function(items) {
                var screenRegExp = this._screenRegExp();
                return commonUtils.grep(items, function(item) {
                    return !item.screen || screenRegExp.test(item.screen)
                })
            },
            _screenRegExp: function() {
                var screen = this._getCurrentScreen();
                return new RegExp("(^|\\s)" + screen + "($|\\s)", "i")
            },
            _getCurrentScreen: function() {
                var width = this._screenWidth();
                return this.option("screenByWidth")(width)
            },
            _screenWidth: function() {
                return windowUtils.hasWindow() ? $(window).width() : HD_SCREEN_WIDTH
            },
            _createEmptyCell: function() {
                return {
                    item: {},
                    location: {
                        colspan: 1,
                        rowspan: 1
                    }
                }
            },
            _spreadItems: function() {
                iteratorUtils.each(this._screenItems, function(_, itemInfo) {
                    var location = itemInfo.location || {};
                    var itemCol = location.col;
                    var itemRow = location.row;
                    var row = this._grid[itemRow];
                    var itemCell = row && row[itemCol];
                    this._occupyCells(itemCell, itemInfo)
                }.bind(this))
            },
            _itemsByScreen: function() {
                var _this = this;
                return this.option("items").reduce(function(result, item) {
                    var locations = item.location || {};
                    locations = typeUtils.isPlainObject(locations) ? [locations] : locations;
                    _this._filterByScreen(locations).forEach(function(location) {
                        result.push({
                            item: item,
                            location: extend({
                                rowspan: 1,
                                colspan: 1
                            }, location)
                        })
                    });
                    return result
                }, [])
            },
            _occupyCells: function(itemCell, itemInfo) {
                if (!itemCell || this._isItemCellOccupied(itemCell, itemInfo)) {
                    return
                }
                extend(itemCell, itemInfo);
                this._markSpanningCell(itemCell)
            },
            _isItemCellOccupied: function(itemCell, itemInfo) {
                if (!typeUtils.isEmptyObject(itemCell.item)) {
                    return true
                }
                var result = false;
                this._loopOverSpanning(itemInfo.location, function(cell) {
                    result = result || !typeUtils.isEmptyObject(cell.item)
                });
                return result
            },
            _loopOverSpanning: function(location, callback) {
                var rowEnd = location.row + location.rowspan - 1;
                var colEnd = location.col + location.colspan - 1;
                var boundRowEnd = Math.min(rowEnd, this._rows.length - 1);
                var boundColEnd = Math.min(colEnd, this._cols.length - 1);
                location.rowspan -= rowEnd - boundRowEnd;
                location.colspan -= colEnd - boundColEnd;
                for (var rowIndex = location.row; rowIndex <= boundRowEnd; rowIndex++) {
                    for (var colIndex = location.col; colIndex <= boundColEnd; colIndex++) {
                        if (rowIndex !== location.row || colIndex !== location.col) {
                            callback(this._grid[rowIndex][colIndex])
                        }
                    }
                }
            },
            _markSpanningCell: function(itemCell) {
                this._loopOverSpanning(itemCell.location, function(cell) {
                    extend(cell, {
                        item: itemCell.item,
                        spanningCell: itemCell
                    })
                })
            },
            _linkNodeToItem: function() {
                iteratorUtils.each(this._itemElements(), function(_, itemNode) {
                    var $item = $(itemNode);
                    var item = $item.data(BOX_ITEM_DATA_KEY);
                    if (!item.box) {
                        item.node = $item.children()
                    }
                })
            },
            _layoutItems: function() {
                var rowsCount = this._grid.length;
                var colsCount = rowsCount && this._grid[0].length;
                if (!rowsCount && !colsCount) {
                    return
                }
                var result = this._layoutBlock({
                    direction: "col",
                    row: {
                        start: 0,
                        end: rowsCount - 1
                    },
                    col: {
                        start: 0,
                        end: colsCount - 1
                    }
                });
                var rootBox = this._prepareBoxConfig(result.box || {
                    direction: "row",
                    items: [extend(result, {
                        ratio: 1
                    })]
                });
                extend(rootBox, this._rootBoxConfig(rootBox.items));
                this._$root = $("<div>").appendTo(this._itemContainer());
                this._createComponent(this._$root, Box, rootBox)
            },
            _rootBoxConfig: function(items) {
                var rootItems = iteratorUtils.each(items, function(index, item) {
                    this._needApplyAutoBaseSize(item) && extend(item, {
                        baseSize: "auto"
                    })
                }.bind(this));
                return extend({
                    width: "100%",
                    height: "100%",
                    items: rootItems,
                    itemTemplate: this._getTemplateByOption("itemTemplate"),
                    itemHoldTimeout: this.option("itemHoldTimeout"),
                    onItemHold: this._createActionByOption("onItemHold"),
                    onItemClick: this._createActionByOption("onItemClick"),
                    onItemContextMenu: this._createActionByOption("onItemContextMenu"),
                    onItemRendered: this._createActionByOption("onItemRendered")
                }, {
                    _layoutStrategy: this.option("_layoutStrategy")
                })
            },
            _needApplyAutoBaseSize: function(item) {
                return !item.baseSize && (!item.minSize || "auto" === item.minSize) && (!item.maxSize || "auto" === item.maxSize)
            },
            _prepareBoxConfig: function(config) {
                return extend(config || {}, {
                    crossAlign: "stretch",
                    onItemStateChanged: this.option("onItemStateChanged")
                })
            },
            _layoutBlock: function(options) {
                if (this._isSingleItem(options)) {
                    return this._itemByCell(options.row.start, options.col.start)
                }
                return this._layoutDirection(options)
            },
            _isSingleItem: function(options) {
                var firstCellLocation = this._grid[options.row.start][options.col.start].location;
                var isItemRowSpanned = options.row.end - options.row.start === firstCellLocation.rowspan - 1;
                var isItemColSpanned = options.col.end - options.col.start === firstCellLocation.colspan - 1;
                return isItemRowSpanned && isItemColSpanned
            },
            _itemByCell: function(rowIndex, colIndex) {
                var itemCell = this._grid[rowIndex][colIndex];
                return itemCell.spanningCell ? null : itemCell.item
            },
            _layoutDirection: function(options) {
                var items = [];
                var direction = options.direction;
                var crossDirection = this._crossDirection(direction);
                var block;
                while (block = this._nextBlock(options)) {
                    if (this._isBlockIndivisible(options.prevBlockOptions, block)) {
                        throw errors.Error("E1025")
                    }
                    var item = this._layoutBlock({
                        direction: crossDirection,
                        row: block.row,
                        col: block.col,
                        prevBlockOptions: options
                    });
                    if (item) {
                        extend(item, this._blockSize(block, crossDirection));
                        items.push(item)
                    }
                    options[crossDirection].start = block[crossDirection].end + 1
                }
                return {
                    box: this._prepareBoxConfig({
                        direction: direction,
                        items: items
                    })
                }
            },
            _isBlockIndivisible: function(options, block) {
                return options && options.col.start === block.col.start && options.col.end === block.col.end && options.row.start === block.row.start && options.row.end === block.row.end
            },
            _crossDirection: function(direction) {
                return "col" === direction ? "row" : "col"
            },
            _nextBlock: function(options) {
                var direction = options.direction;
                var crossDirection = this._crossDirection(direction);
                var startIndex = options[direction].start;
                var endIndex = options[direction].end;
                var crossStartIndex = options[crossDirection].start;
                if (crossStartIndex > options[crossDirection].end) {
                    return null
                }
                var crossSpan = 1;
                for (var crossIndex = crossStartIndex; crossIndex < crossStartIndex + crossSpan; crossIndex++) {
                    var lineCrossSpan = 1;
                    for (var index = startIndex; index <= endIndex; index++) {
                        var cell = this._cellByDirection(direction, index, crossIndex);
                        lineCrossSpan = Math.max(lineCrossSpan, cell.location[crossDirection + "span"])
                    }
                    var lineCrossEndIndex = crossIndex + lineCrossSpan;
                    var crossEndIndex = crossStartIndex + crossSpan;
                    if (lineCrossEndIndex > crossEndIndex) {
                        crossSpan += lineCrossEndIndex - crossEndIndex
                    }
                }
                var result = {};
                result[direction] = {
                    start: startIndex,
                    end: endIndex
                };
                result[crossDirection] = {
                    start: crossStartIndex,
                    end: crossStartIndex + crossSpan - 1
                };
                return result
            },
            _cellByDirection: function(direction, index, crossIndex) {
                return "col" === direction ? this._grid[crossIndex][index] : this._grid[index][crossIndex]
            },
            _blockSize: function(block, direction) {
                var defaultMinSize = "row" === direction ? "auto" : 0;
                var sizeConfigs = "row" === direction ? this._rows : this._cols;
                var result = extend(this._createDefaultSizeConfig(), {
                    ratio: 0
                });
                for (var index = block[direction].start; index <= block[direction].end; index++) {
                    var sizeConfig = sizeConfigs[index];
                    result.ratio += sizeConfig.ratio;
                    result.baseSize += sizeConfig.baseSize;
                    result.minSize += sizeConfig.minSize;
                    result.maxSize += sizeConfig.maxSize;
                    if (typeUtils.isDefined(sizeConfig.shrink)) {
                        result.shrink = sizeConfig.shrink
                    }
                }
                result.minSize = result.minSize ? result.minSize : defaultMinSize;
                result.maxSize = result.maxSize ? result.maxSize : "auto";
                this._isSingleColumnScreen() && (result.baseSize = "auto");
                return result
            },
            _update: function() {
                var $existingRoot = this._$root;
                this._renderItems();
                $existingRoot && $existingRoot.detach();
                this._saveAssistantRoot($existingRoot);
                this._layoutChangedAction();
                this._updateRootBox()
            },
            _saveAssistantRoot: function($root) {
                this._assistantRoots = this._assistantRoots || [];
                this._assistantRoots.push($root)
            },
            _dispose: function() {
                clearTimeout(this._updateTimer);
                this._clearItemNodeTemplates();
                this._cleanUnusedRoots();
                this.callBase.apply(this, arguments)
            },
            _cleanUnusedRoots: function() {
                if (!this._assistantRoots) {
                    return
                }
                iteratorUtils.each(this._assistantRoots, function(_, item) {
                    $(item).remove()
                })
            },
            _clearItemNodeTemplates: function() {
                iteratorUtils.each(this.option("items"), function() {
                    delete this.node
                })
            },
            _toggleVisibility: function(visible) {
                this.callBase(visible);
                if (visible) {
                    this._updateRootBox()
                }
            },
            _attachClickEvent: commonUtils.noop,
            _optionChanged: function(args) {
                switch (args.name) {
                    case "rows":
                    case "cols":
                    case "screenByWidth":
                    case "_layoutStrategy":
                    case "singleColumnScreen":
                        this._clearItemNodeTemplates();
                        this._invalidate();
                        break;
                    case "width":
                    case "height":
                        this.callBase(args);
                        this._update();
                        break;
                    case "onLayoutChanged":
                        this._initLayoutChangedAction();
                        break;
                    case "itemTemplate":
                        this._clearItemNodeTemplates();
                        this.callBase(args);
                        break;
                    case "currentScreenFactor":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _dimensionChanged: function() {
                if (this._getCurrentScreen() !== this.option("currentScreenFactor")) {
                    this._update()
                }
            },
            repaint: function() {
                this._update()
            }
        });
        registerComponent("dxResponsiveBox", ResponsiveBox);
        module.exports = ResponsiveBox
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/multi_view.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _fx = __webpack_require__( /*! ../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _translator2 = __webpack_require__( /*! ../animation/translator */ 28);
        var _translator3 = _interopRequireDefault(_translator2);
        var _math = __webpack_require__( /*! ../core/utils/math */ 31);
        var _math2 = _interopRequireDefault(_math);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.live_update */ 195);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 158);
        var _swipeable2 = _interopRequireDefault(_swipeable);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MULTIVIEW_CLASS = "dx-multiview";
        var MULTIVIEW_WRAPPER_CLASS = "dx-multiview-wrapper";
        var MULTIVIEW_ITEM_CONTAINER_CLASS = "dx-multiview-item-container";
        var MULTIVIEW_ITEM_CLASS = "dx-multiview-item";
        var MULTIVIEW_ITEM_HIDDEN_CLASS = "dx-multiview-item-hidden";
        var MULTIVIEW_ITEM_DATA_KEY = "dxMultiViewItemData";
        var MULTIVIEW_ANIMATION_DURATION = 200;
        var toNumber = function(value) {
            return +value
        };
        var position = function($element) {
            return _translator3.default.locate($element).left
        };
        var _translator = {
            move: function($element, position) {
                _translator3.default.move($element, {
                    left: position
                })
            }
        };
        var animation = {
            moveTo: function($element, position, duration, completeAction) {
                _fx2.default.animate($element, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: duration,
                    complete: completeAction
                })
            },
            complete: function($element) {
                _fx2.default.stop($element, true)
            }
        };
        var MultiView = _uiCollection_widget2.default.inherit({
            _activeStateUnit: "." + MULTIVIEW_ITEM_CLASS,
            _supportedKeys: function() {
                return (0, _extend.extend)(this.callBase(), {
                    pageUp: _common.noop,
                    pageDown: _common.noop
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    selectedIndex: 0,
                    swipeEnabled: true,
                    animationEnabled: true,
                    loop: false,
                    deferRendering: true,
                    _itemAttributes: {
                        role: "tabpanel"
                    },
                    loopItemFocus: false,
                    selectOnFocus: true,
                    selectionMode: "single",
                    selectionRequired: true,
                    selectionByClick: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _itemClass: function() {
                return MULTIVIEW_ITEM_CLASS
            },
            _itemDataKey: function() {
                return MULTIVIEW_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return this._$itemContainer
            },
            _itemElements: function() {
                return this._itemContainer().children(this._itemSelector())
            },
            _itemWidth: function() {
                if (!this._itemWidthValue) {
                    this._itemWidthValue = this._$wrapper.width()
                }
                return this._itemWidthValue
            },
            _clearItemWidthCache: function() {
                delete this._itemWidthValue
            },
            _itemsCount: function() {
                return this.option("items").length
            },
            _normalizeIndex: function(index) {
                var count = this._itemsCount();
                if (index < 0) {
                    index += count
                }
                if (index >= count) {
                    index -= count
                }
                return index
            },
            _getRTLSignCorrection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _init: function() {
                this.callBase.apply(this, arguments);
                var $element = this.$element();
                $element.addClass(MULTIVIEW_CLASS);
                this._$wrapper = (0, _renderer2.default)("<div>").addClass(MULTIVIEW_WRAPPER_CLASS);
                this._$wrapper.appendTo($element);
                this._$itemContainer = (0, _renderer2.default)("<div>").addClass(MULTIVIEW_ITEM_CONTAINER_CLASS);
                this._$itemContainer.appendTo(this._$wrapper);
                this.option("loopItemFocus", this.option("loop"));
                this._initSwipeable()
            },
            _initMarkup: function() {
                this._deferredItems = [];
                this.callBase();
                var selectedItemIndices = this._getSelectedItemIndices();
                this._updateItemsVisibility(selectedItemIndices[0])
            },
            _afterItemElementDeleted: function($item, deletedActionArgs) {
                this.callBase($item, deletedActionArgs);
                if (this._deferredItems) {
                    this._deferredItems.splice(deletedActionArgs.itemIndex, 1)
                }
            },
            _beforeItemElementInserted: function(change) {
                this.callBase.apply(this, arguments);
                if (this._deferredItems) {
                    this._deferredItems.splice(change.index, 0, null)
                }
            },
            _executeItemRenderAction: function(index, itemData, itemElement) {
                index = (this.option("items") || []).indexOf(itemData);
                this.callBase(index, itemData, itemElement)
            },
            _renderItemContent: function(args) {
                var renderContentDeferred = new _deferred.Deferred;
                var that = this;
                var callBase = this.callBase;
                var deferred = new _deferred.Deferred;
                deferred.done(function() {
                    var $itemContent = callBase.call(that, args);
                    renderContentDeferred.resolve($itemContent)
                });
                this._deferredItems[args.index] = deferred;
                this.option("deferRendering") || deferred.resolve();
                return renderContentDeferred.promise()
            },
            _render: function() {
                var _this = this;
                this.callBase();
                (0, _common.deferRender)(function() {
                    var selectedItemIndices = _this._getSelectedItemIndices();
                    _this._updateItems(selectedItemIndices[0])
                })
            },
            _updateItems: function(selectedIndex, newIndex) {
                this._updateItemsPosition(selectedIndex, newIndex);
                this._updateItemsVisibility(selectedIndex, newIndex)
            },
            _modifyByChanges: function() {
                this.callBase.apply(this, arguments);
                var selectedItemIndices = this._getSelectedItemIndices();
                this._updateItemsVisibility(selectedItemIndices[0])
            },
            _updateItemsPosition: function(selectedIndex, newIndex) {
                var $itemElements = this._itemElements();
                var positionSign = (0, _type.isDefined)(newIndex) ? -this._animationDirection(newIndex, selectedIndex) : void 0;
                var $selectedItem = $itemElements.eq(selectedIndex);
                _translator.move($selectedItem, 0);
                if ((0, _type.isDefined)(newIndex)) {
                    _translator.move($itemElements.eq(newIndex), 100 * positionSign + "%")
                }
            },
            _updateItemsVisibility: function(selectedIndex, newIndex) {
                var $itemElements = this._itemElements();
                $itemElements.each(function(itemIndex, item) {
                    var $item = (0, _renderer2.default)(item);
                    var isHidden = itemIndex !== selectedIndex && itemIndex !== newIndex;
                    if (!isHidden) {
                        this._renderSpecificItem(itemIndex)
                    }
                    $item.toggleClass(MULTIVIEW_ITEM_HIDDEN_CLASS, isHidden);
                    this.setAria("hidden", isHidden || void 0, $item)
                }.bind(this))
            },
            _renderSpecificItem: function(index) {
                var $item = this._itemElements().eq(index);
                var hasItemContent = $item.find(this._itemContentClass()).length > 0;
                if ((0, _type.isDefined)(index) && !hasItemContent) {
                    this._deferredItems[index].resolve();
                    (0, _dom.triggerResizeEvent)($item)
                }
            },
            _refreshItem: function($item, item) {
                this.callBase($item, item);
                this._updateItemsVisibility(this.option("selectedIndex"))
            },
            _setAriaSelected: _common.noop,
            _updateSelection: function(addedSelection, removedSelection) {
                var newIndex = addedSelection[0];
                var prevIndex = removedSelection[0];
                animation.complete(this._$itemContainer);
                this._updateItems(prevIndex, newIndex);
                var animationDirection = this._animationDirection(newIndex, prevIndex);
                this._animateItemContainer(animationDirection * this._itemWidth(), function() {
                    _translator.move(this._$itemContainer, 0);
                    this._updateItems(newIndex);
                    this._$itemContainer.width()
                }.bind(this))
            },
            _animateItemContainer: function(position, completeCallback) {
                var duration = this.option("animationEnabled") ? MULTIVIEW_ANIMATION_DURATION : 0;
                animation.moveTo(this._$itemContainer, position, duration, completeCallback)
            },
            _animationDirection: function(newIndex, prevIndex) {
                var containerPosition = position(this._$itemContainer);
                var indexDifference = (prevIndex - newIndex) * this._getRTLSignCorrection() * this._getItemFocusLoopSignCorrection();
                var isSwipePresent = 0 !== containerPosition;
                var directionSignVariable = isSwipePresent ? containerPosition : indexDifference;
                return _math2.default.sign(directionSignVariable)
            },
            _getSwipeDisabledState: function() {
                return !this.option("swipeEnabled") || this._itemsCount() <= 1
            },
            _initSwipeable: function() {
                var _this2 = this;
                this._createComponent(this.$element(), _swipeable2.default, {
                    disabled: this._getSwipeDisabledState(),
                    elastic: false,
                    itemSizeFunc: this._itemWidth.bind(this),
                    onStart: function(args) {
                        return _this2._swipeStartHandler(args.event)
                    },
                    onUpdated: function(args) {
                        return _this2._swipeUpdateHandler(args.event)
                    },
                    onEnd: function(args) {
                        return _this2._swipeEndHandler(args.event)
                    }
                })
            },
            _swipeStartHandler: function(e) {
                animation.complete(this._$itemContainer);
                var selectedIndex = this.option("selectedIndex");
                var loop = this.option("loop");
                var lastIndex = this._itemsCount() - 1;
                var rtl = this.option("rtlEnabled");
                e.maxLeftOffset = toNumber(loop || (rtl ? selectedIndex > 0 : selectedIndex < lastIndex));
                e.maxRightOffset = toNumber(loop || (rtl ? selectedIndex < lastIndex : selectedIndex > 0));
                this._swipeDirection = null
            },
            _swipeUpdateHandler: function(e) {
                var offset = e.offset;
                var swipeDirection = _math2.default.sign(offset) * this._getRTLSignCorrection();
                _translator.move(this._$itemContainer, offset * this._itemWidth());
                if (swipeDirection !== this._swipeDirection) {
                    this._swipeDirection = swipeDirection;
                    var selectedIndex = this.option("selectedIndex");
                    var newIndex = this._normalizeIndex(selectedIndex - swipeDirection);
                    this._updateItems(selectedIndex, newIndex)
                }
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.targetOffset * this._getRTLSignCorrection();
                if (targetOffset) {
                    this.option("selectedIndex", this._normalizeIndex(this.option("selectedIndex") - targetOffset));
                    var $selectedElement = this.itemElements().filter(".dx-item-selected");
                    this.option("focusStateEnabled") && this.option("focusedElement", (0, _dom.getPublicElement)($selectedElement))
                } else {
                    this._animateItemContainer(0, _common.noop)
                }
            },
            _getItemFocusLoopSignCorrection: function() {
                return this._itemFocusLooped ? -1 : 1
            },
            _moveFocus: function() {
                this.callBase.apply(this, arguments);
                this._itemFocusLooped = false
            },
            _prevItem: function($items) {
                var $result = this.callBase.apply(this, arguments);
                this._itemFocusLooped = $result.is($items.last());
                return $result
            },
            _nextItem: function($items) {
                var $result = this.callBase.apply(this, arguments);
                this._itemFocusLooped = $result.is($items.first());
                return $result
            },
            _dimensionChanged: function() {
                this._clearItemWidthCache()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _updateSwipeDisabledState: function() {
                var disabled = this._getSwipeDisabledState();
                _swipeable2.default.getInstance(this.$element()).option("disabled", disabled)
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "loop":
                        this.option("loopItemFocus", value);
                        break;
                    case "animationEnabled":
                        break;
                    case "swipeEnabled":
                        this._updateSwipeDisabledState();
                        break;
                    case "deferRendering":
                        this._invalidate();
                        break;
                    case "items":
                        this._updateSwipeDisabledState();
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        (0, _component_registrator2.default)("dxMultiView", MultiView);
        module.exports = MultiView;
        module.exports.animation = animation;
        module.exports._translator = _translator
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tabs/item.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var CollectionWidgetItem = __webpack_require__( /*! ../collection/item */ 135);
        var TABS_ITEM_BADGE_CLASS = "dx-tabs-item-badge";
        var BADGE_CLASS = "dx-badge";
        var TabsItem = CollectionWidgetItem.inherit({
            _renderWatchers: function() {
                this.callBase();
                this._startWatcher("badge", this._renderBadge.bind(this))
            },
            _renderBadge: function(badge) {
                this._$element.children("." + BADGE_CLASS).remove();
                if (!badge) {
                    return
                }
                var $badge = $("<div>").addClass(TABS_ITEM_BADGE_CLASS).addClass(BADGE_CLASS).text(badge);
                this._$element.append($badge)
            }
        });
        module.exports = TabsItem
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.utils.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var createItemPathByIndex = function(index, isTabs) {
            return "".concat(isTabs ? "tabs" : "items", "[").concat(index, "]")
        };
        var concatPaths = function(path1, path2) {
            if ((0, _type.isDefined)(path1) && (0, _type.isDefined)(path2)) {
                return "".concat(path1, ".").concat(path2)
            }
            return path1 || path2
        };
        var getTextWithoutSpaces = function(text) {
            return text ? text.replace(/\s/g, "") : void 0
        };
        var isExpectedItem = function(item, fieldName) {
            return item && (item.dataField === fieldName || item.name === fieldName || getTextWithoutSpaces(item.title) === fieldName || "group" === item.itemType && getTextWithoutSpaces(item.caption) === fieldName)
        };
        var getFullOptionName = function(path, optionName) {
            return "".concat(path, ".").concat(optionName)
        };
        var getOptionNameFromFullName = function(fullName) {
            var parts = fullName.split(".");
            return parts[parts.length - 1].replace(/\[\d+]/, "")
        };
        var tryGetTabPath = function(fullPath) {
            var pathParts = fullPath.split(".");
            var resultPathParts = _toConsumableArray(pathParts);
            for (var i = pathParts.length - 1; i >= 0; i--) {
                if (isFullPathContainsTabs(pathParts[i])) {
                    return resultPathParts.join(".")
                }
                resultPathParts.splice(i, 1)
            }
            return ""
        };
        var isFullPathContainsTabs = function(fullPath) {
            return fullPath.indexOf("tabs") > -1
        };
        exports.getOptionNameFromFullName = getOptionNameFromFullName;
        exports.getFullOptionName = getFullOptionName;
        exports.getTextWithoutSpaces = getTextWithoutSpaces;
        exports.isExpectedItem = isExpectedItem;
        exports.createItemPathByIndex = createItemPathByIndex;
        exports.concatPaths = concatPaths;
        exports.tryGetTabPath = tryGetTabPath;
        exports.isFullPathContainsTabs = isFullPathContainsTabs
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/validation_group.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom_component = __webpack_require__( /*! ../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _validation_summary = __webpack_require__( /*! ./validation_summary */ 241);
        var _validation_summary2 = _interopRequireDefault(_validation_summary);
        var _validation_engine = __webpack_require__( /*! ./validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _validator = __webpack_require__( /*! ./validator */ 202);
        var _validator2 = _interopRequireDefault(_validator);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var VALIDATION_ENGINE_CLASS = "dx-validationgroup";
        var VALIDATOR_CLASS = "dx-validator";
        var VALIDATION_SUMMARY_CLASS = "dx-validationsummary";
        var ValidationGroup = function(_DOMComponent) {
            _inherits(ValidationGroup, _DOMComponent);
            var _super = _createSuper(ValidationGroup);

            function ValidationGroup() {
                _classCallCheck(this, ValidationGroup);
                return _super.apply(this, arguments)
            }
            _createClass(ValidationGroup, [{
                key: "_getDefaultOptions",
                value: function() {
                    return _get(_getPrototypeOf(ValidationGroup.prototype), "_getDefaultOptions", this).call(this)
                }
            }, {
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(ValidationGroup.prototype), "_init", this).call(this);
                    _validation_engine2.default.addGroup(this)
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var $element = this.$element();
                    $element.addClass(VALIDATION_ENGINE_CLASS);
                    $element.find(".".concat(VALIDATOR_CLASS)).each(function(_, validatorContainer) {
                        _validator2.default.getInstance((0, _renderer2.default)(validatorContainer))._initGroupRegistration()
                    });
                    $element.find(".".concat(VALIDATION_SUMMARY_CLASS)).each(function(_, summaryContainer) {
                        _validation_summary2.default.getInstance((0, _renderer2.default)(summaryContainer))._initGroupRegistration()
                    });
                    _get(_getPrototypeOf(ValidationGroup.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "validate",
                value: function() {
                    return _validation_engine2.default.validateGroup(this)
                }
            }, {
                key: "reset",
                value: function() {
                    return _validation_engine2.default.resetGroup(this)
                }
            }, {
                key: "_dispose",
                value: function() {
                    _validation_engine2.default.removeGroup(this);
                    this.$element().removeClass(VALIDATION_ENGINE_CLASS);
                    _get(_getPrototypeOf(ValidationGroup.prototype), "_dispose", this).call(this)
                }
            }, {
                key: "_useTemplates",
                value: function() {
                    return false
                }
            }]);
            return ValidationGroup
        }(_dom_component2.default);
        (0, _component_registrator2.default)("dxValidationGroup", ValidationGroup);
        module.exports = ValidationGroup
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/utils.scroll.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.allowScroll = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var allowScroll = function(container, delta, shiftKey) {
            var $container = (0, _renderer2.default)(container);
            var scrollTopPos = shiftKey ? $container.scrollLeft() : $container.scrollTop();
            var prop = shiftKey ? "Width" : "Height";
            var scrollBottomPos = $container.prop("scroll".concat(prop)) - $container.prop("client".concat(prop)) - scrollTopPos;
            if (0 === scrollTopPos && 0 === scrollBottomPos) {
                return false
            }
            var isScrollFromTop = 0 === scrollTopPos && delta >= 0;
            var isScrollFromBottom = 0 === scrollBottomPos && delta <= 0;
            var isScrollFromMiddle = scrollTopPos > 0 && scrollBottomPos > 0;
            if (isScrollFromTop || isScrollFromBottom || isScrollFromMiddle) {
                return true
            }
        };
        exports.allowScroll = allowScroll
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/quill_importer.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.getQuill = void 0;
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function getQuill() {
            if (!_quill2.default) {
                throw _ui2.default.Error("E1041", "Quill")
            }
            return _quill2.default
        }
        exports.getQuill = getQuill
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.strategy.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var errors = __webpack_require__( /*! ../../core/errors */ 22);
        var compileGetter = __webpack_require__( /*! ../../core/utils/data */ 20).compileGetter;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var Button = __webpack_require__( /*! ../button */ 37);
        var abstract = Class.abstract;
        var TOOLBAR_MENU_CONTAINER_CLASS = "dx-toolbar-menu-container";
        var TOOLBAR_MENU_BUTTON_CLASS = "dx-toolbar-menu-button";
        var ToolbarStrategy = Class.inherit({
            ctor: function(toolbar) {
                this._toolbar = toolbar
            },
            render: function() {
                this._renderMenuButton();
                this._renderWidget()
            },
            _widgetOptions: function() {
                var itemClickAction = this._toolbar._createActionByOption("onItemClick");
                return {
                    itemTemplate: this._getMenuItemTemplate.bind(this),
                    onItemClick: function(e) {
                        this._toggleMenu(false, true);
                        itemClickAction(e)
                    }.bind(this)
                }
            },
            _getMenuItemTemplate: function() {
                return this._toolbar._getTemplateByOption("menuItemTemplate")
            },
            _renderWidget: function() {
                var $menu = $("<div>").appendTo(this._menuContainer());
                this._menu = this._toolbar._createComponent($menu, this._menuWidgetClass(), this._widgetOptions());
                this.renderMenuItems()
            },
            _menuContainer: abstract,
            _menuWidgetClass: abstract,
            _hasVisibleMenuItems: function(items) {
                var menuItems = items || this._toolbar.option("items");
                var result = false;
                var optionGetter = compileGetter("visible");
                var overflowGetter = compileGetter("locateInMenu");
                var menuLocation = false;
                each(menuItems, function(index, item) {
                    var itemVisible = optionGetter(item, {
                        functionsAsIs: true
                    });
                    var itemOverflow = overflowGetter(item, {
                        functionsAsIs: true
                    });
                    if ("menu" === item.location) {
                        menuLocation = true
                    }
                    if (false !== itemVisible && ("auto" === itemOverflow || "always" === itemOverflow || "menu" === item.location)) {
                        result = true
                    }
                });
                if (menuLocation) {
                    errors.log("W0001", "dxToolbar - 'location' item field", "menu", "16.1", "Use 'locateInMenu' item field instead.")
                }
                return result
            },
            _getMenuItems: function() {
                return this._toolbar._getMenuItems()
            },
            _updateMenuVisibility: noop,
            _renderMenuButton: function() {
                var buttonOptions = this._menuButtonOptions();
                this._renderMenuButtonContainer();
                this._$button = $("<div>").appendTo(this._$menuButtonContainer).addClass(TOOLBAR_MENU_BUTTON_CLASS);
                this._toolbar._createComponent(this._$button, Button, buttonOptions)
            },
            _menuButtonOptions: function() {
                return {
                    onClick: this._menuButtonClickHandler.bind(this)
                }
            },
            _menuButtonClickHandler: function() {
                this._toggleMenu(!this._menuShown, true)
            },
            _renderMenuButtonContainer: function() {
                var $afterSection = this._toolbar._$afterSection;
                this._$menuButtonContainer = $("<div>").appendTo($afterSection).addClass(this._toolbar._buttonClass()).addClass(TOOLBAR_MENU_CONTAINER_CLASS)
            },
            renderMenuItems: function() {
                this._menu && this._menu.option("items", this._getMenuItems())
            },
            toggleMenuVisibility: function(visible, animate) {
                this._menu && this._toggleMenu(visible, animate)
            },
            _toggleMenu: function(visible) {
                this._menuShown = visible
            },
            getMenuWidget: function() {
                return this._menu
            },
            widgetOption: function(name, value) {
                this._menu && this._menu.option(name, value)
            },
            handleToolbarVisibilityChange: noop
        });
        module.exports = ToolbarStrategy
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/popup.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);
        var _popup = __webpack_require__( /*! ../../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _list = __webpack_require__( /*! ../../list */ 104);
        var _list2 = _interopRequireDefault(_list);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ListPopupModule = {};
        if (_quill2.default) {
            var SUGGESTION_LIST_CLASS = "dx-suggestion-list";
            var SUGGESTION_LIST_WRAPPER_CLASS = "dx-suggestion-list-wrapper";
            var BaseModule = _quill2.default.import("core/module");
            var MIN_HEIGHT = 100;
            ListPopupModule = function(_BaseModule) {
                _inherits(ListPopupModule, _BaseModule);
                var _super = _createSuper(ListPopupModule);
                _createClass(ListPopupModule, [{
                    key: "_getDefaultOptions",
                    value: function() {
                        return {
                            dataSource: null
                        }
                    }
                }]);

                function ListPopupModule(quill, options) {
                    var _this;
                    _classCallCheck(this, ListPopupModule);
                    _this = _super.call(this, quill, options);
                    _this.options = (0, _extend.extend)({}, _this._getDefaultOptions(), options);
                    _this._popup = _this.renderPopup();
                    _this._popup._wrapper().addClass(SUGGESTION_LIST_WRAPPER_CLASS);
                    return _this
                }
                _createClass(ListPopupModule, [{
                    key: "renderList",
                    value: function($container, options) {
                        var $list = (0, _renderer2.default)("<div>").addClass(SUGGESTION_LIST_CLASS).appendTo($container);
                        this._list = this.options.editorInstance._createComponent($list, _list2.default, options)
                    }
                }, {
                    key: "renderPopup",
                    value: function() {
                        var editorInstance = this.options.editorInstance;
                        var $container = (0, _renderer2.default)("<div>").appendTo(editorInstance.$element());
                        var popupConfig = this._getPopupConfig();
                        return editorInstance._createComponent($container, _popup2.default, popupConfig)
                    }
                }, {
                    key: "_getPopupConfig",
                    value: function() {
                        var _this2 = this;
                        return {
                            contentTemplate: function(contentElem) {
                                var listConfig = _this2._getListConfig(_this2.options);
                                _this2.renderList((0, _renderer2.default)(contentElem), listConfig)
                            },
                            deferRendering: false,
                            onShown: function() {
                                _this2._list.focus()
                            },
                            onHidden: function() {
                                _this2._list.unselectAll();
                                _this2._list.option("focusedElement", null)
                            },
                            showTitle: false,
                            width: "auto",
                            height: "auto",
                            shading: false,
                            closeOnTargetScroll: true,
                            closeOnOutsideClick: true,
                            animation: {
                                show: {
                                    type: "fade",
                                    duration: 0,
                                    from: 0,
                                    to: 1
                                },
                                hide: {
                                    type: "fade",
                                    duration: 400,
                                    from: 1,
                                    to: 0
                                }
                            },
                            fullScreen: false,
                            maxHeight: this.maxHeight
                        }
                    }
                }, {
                    key: "_getListConfig",
                    value: function(options) {
                        return {
                            dataSource: options.dataSource,
                            onSelectionChanged: this.selectionChangedHandler.bind(this),
                            selectionMode: "single",
                            pageLoadMode: "scrollBottom"
                        }
                    }
                }, {
                    key: "selectionChangedHandler",
                    value: function(e) {
                        if (this._popup.option("visible")) {
                            this._popup.hide();
                            this.insertEmbedContent(e)
                        }
                    }
                }, {
                    key: "insertEmbedContent",
                    value: function(selectionChangedEvent) {}
                }, {
                    key: "showPopup",
                    value: function() {
                        this._popup && this._popup.show()
                    }
                }, {
                    key: "savePosition",
                    value: function(position) {
                        this.caretPosition = position
                    }
                }, {
                    key: "getPosition",
                    value: function() {
                        return this.caretPosition
                    }
                }, {
                    key: "maxHeight",
                    get: function() {
                        var window = (0, _window.getWindow)();
                        var windowHeight = window && (0, _renderer2.default)(window).height() || 0;
                        return Math.max(MIN_HEIGHT, .5 * windowHeight)
                    }
                }]);
                return ListPopupModule
            }(BaseModule)
        }
        exports.default = ListPopupModule
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var map = __webpack_require__( /*! ../../core/utils/iterator */ 4).map;
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var isPlainObject = typeUtils.isPlainObject;
        var isNumeric = typeUtils.isNumeric;
        var abstract = Class.abstract;
        var Provider = Class.inherit({
            _defaultRouteWeight: function() {
                return 5
            },
            _defaultRouteOpacity: function() {
                return .5
            },
            _defaultRouteColor: function() {
                return "#0000FF"
            },
            ctor: function(map, $container) {
                this._mapWidget = map;
                this._$container = $container
            },
            render: function(markerOptions, routeOptions) {
                return this._renderImpl().then(function() {
                    return Promise.all([this._applyFunctionIfNeeded("addMarkers", markerOptions), this._applyFunctionIfNeeded("addRoutes", routeOptions)]).then(function() {
                        return true
                    })
                }.bind(this))
            },
            _renderImpl: abstract,
            updateDimensions: abstract,
            updateMapType: abstract,
            updateBounds: abstract,
            updateCenter: abstract,
            updateZoom: abstract,
            updateControls: abstract,
            updateMarkers: function(markerOptionsToRemove, markerOptionsToAdd) {
                return new Promise(function(resolve) {
                    return this._applyFunctionIfNeeded("removeMarkers", markerOptionsToRemove).then(function(removeValue) {
                        this._applyFunctionIfNeeded("addMarkers", markerOptionsToAdd).then(function(addValue) {
                            resolve(addValue ? addValue : removeValue)
                        })
                    }.bind(this))
                }.bind(this))
            },
            addMarkers: abstract,
            removeMarkers: abstract,
            adjustViewport: abstract,
            updateRoutes: function(routeOptionsToRemove, routeOptionsToAdd) {
                return new Promise(function(resolve) {
                    return this._applyFunctionIfNeeded("removeRoutes", routeOptionsToRemove).then(function(removeValue) {
                        this._applyFunctionIfNeeded("addRoutes", routeOptionsToAdd).then(function(addValue) {
                            resolve(addValue ? addValue : removeValue)
                        })
                    }.bind(this))
                }.bind(this))
            },
            addRoutes: abstract,
            removeRoutes: abstract,
            clean: abstract,
            map: function() {
                return this._map
            },
            isEventsCanceled: function() {
                return false
            },
            _option: function(name, value) {
                if (void 0 === value) {
                    return this._mapWidget.option(name)
                }
                this._mapWidget.setOptionSilent(name, value)
            },
            _keyOption: function(providerName) {
                var key = this._option("key");
                return void 0 === key[providerName] ? key : key[providerName]
            },
            _parseTooltipOptions: function(option) {
                return {
                    text: option.text || option,
                    visible: option.isShown || false
                }
            },
            _getLatLng: function(location) {
                if ("string" === typeof location) {
                    var coords = map(location.split(","), function(item) {
                        return item.trim()
                    });
                    var numericRegex = /^[-+]?[0-9]*\.?[0-9]*$/;
                    if (2 === coords.length && coords[0].match(numericRegex) && coords[1].match(numericRegex)) {
                        return {
                            lat: parseFloat(coords[0]),
                            lng: parseFloat(coords[1])
                        }
                    }
                } else {
                    if (Array.isArray(location) && 2 === location.length) {
                        return {
                            lat: location[0],
                            lng: location[1]
                        }
                    } else {
                        if (isPlainObject(location) && isNumeric(location.lat) && isNumeric(location.lng)) {
                            return location
                        }
                    }
                }
                return null
            },
            _areBoundsSet: function() {
                return this._option("bounds.northEast") && this._option("bounds.southWest")
            },
            _addEventNamespace: function(name) {
                return eventUtils.addNamespace(name, this._mapWidget.NAME)
            },
            _applyFunctionIfNeeded: function(fnName, array) {
                if (!array.length) {
                    return Promise.resolve()
                }
                return this[fnName](array)
            },
            _fireAction: function(name, actionArguments) {
                this._mapWidget._createActionByOption(name)(actionArguments)
            },
            _fireClickAction: function(actionArguments) {
                this._fireAction("onClick", actionArguments)
            },
            _fireMarkerAddedAction: function(actionArguments) {
                this._fireAction("onMarkerAdded", actionArguments)
            },
            _fireMarkerRemovedAction: function(actionArguments) {
                this._fireAction("onMarkerRemoved", actionArguments)
            },
            _fireRouteAddedAction: function(actionArguments) {
                this._fireAction("onRouteAdded", actionArguments)
            },
            _fireRouteRemovedAction: function(actionArguments) {
                this._fireAction("onRouteRemoved", actionArguments)
            }
        });
        module.exports = Provider
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.dynamic.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var Provider = __webpack_require__( /*! ./provider */ 334);
        var abstract = Provider.abstract;
        var DynamicProvider = Provider.inherit({
            _geocodeLocation: function(location) {
                return new Promise(function(resolve) {
                    var cache = this._geocodedLocations;
                    var cachedLocation = cache[location];
                    if (cachedLocation) {
                        resolve(cachedLocation)
                    } else {
                        this._geocodeLocationImpl(location).then(function(geocodedLocation) {
                            cache[location] = geocodedLocation;
                            resolve(geocodedLocation)
                        })
                    }
                }.bind(this))
            },
            _renderImpl: function() {
                return this._load().then(function() {
                    return this._init()
                }.bind(this)).then(function() {
                    return Promise.all([this.updateMapType(), this._areBoundsSet() ? this.updateBounds() : this.updateCenter()])
                }.bind(this)).then(function() {
                    this._attachHandlers();
                    return new Promise(function(resolve) {
                        var timeout = setTimeout(function() {
                            clearTimeout(timeout);
                            resolve()
                        })
                    })
                }.bind(this))
            },
            _load: function() {
                if (!this._mapsLoader) {
                    this._mapsLoader = this._loadImpl()
                }
                this._markers = [];
                this._routes = [];
                return this._mapsLoader
            },
            _loadImpl: abstract,
            _init: abstract,
            _attachHandlers: abstract,
            addMarkers: function(options) {
                return Promise.all(iteratorUtils.map(options, function(options) {
                    return this._addMarker(options)
                }.bind(this))).then(function(markerObjects) {
                    this._fitBounds();
                    return [false, iteratorUtils.map(markerObjects, function(markerObject) {
                        return markerObject.marker
                    })]
                }.bind(this))
            },
            _addMarker: function(options) {
                return this._renderMarker(options).then(function(markerObject) {
                    this._markers.push(extend({
                        options: options
                    }, markerObject));
                    this._fireMarkerAddedAction({
                        options: options,
                        originalMarker: markerObject.marker
                    });
                    return markerObject
                }.bind(this))
            },
            _renderMarker: abstract,
            removeMarkers: function(markersOptionsToRemove) {
                var that = this;
                iteratorUtils.each(markersOptionsToRemove, function(_, markerOptionToRemove) {
                    that._removeMarker(markerOptionToRemove)
                });
                return Promise.resolve()
            },
            _removeMarker: function(markersOptionToRemove) {
                var that = this;
                iteratorUtils.each(this._markers, function(markerIndex, markerObject) {
                    if (markerObject.options !== markersOptionToRemove) {
                        return true
                    }
                    that._destroyMarker(markerObject);
                    that._markers.splice(markerIndex, 1);
                    that._fireMarkerRemovedAction({
                        options: markerObject.options
                    });
                    return false
                })
            },
            _destroyMarker: abstract,
            _clearMarkers: function() {
                while (this._markers.length > 0) {
                    this._removeMarker(this._markers[0].options)
                }
            },
            addRoutes: function(options) {
                return Promise.all(iteratorUtils.map(options, function(options) {
                    return this._addRoute(options)
                }.bind(this))).then(function(routeObjects) {
                    this._fitBounds();
                    return [false, iteratorUtils.map(routeObjects, function(routeObject) {
                        return routeObject.instance
                    })]
                }.bind(this))
            },
            _addRoute: function(options) {
                return this._renderRoute(options).then(function(routeObject) {
                    this._routes.push(extend({
                        options: options
                    }, routeObject));
                    this._fireRouteAddedAction({
                        options: options,
                        originalRoute: routeObject.instance
                    });
                    return routeObject
                }.bind(this))
            },
            _renderRoute: abstract,
            removeRoutes: function(options) {
                var that = this;
                iteratorUtils.each(options, function(routeIndex, options) {
                    that._removeRoute(options)
                });
                return Promise.resolve()
            },
            _removeRoute: function(options) {
                var that = this;
                iteratorUtils.each(this._routes, function(routeIndex, routeObject) {
                    if (routeObject.options !== options) {
                        return true
                    }
                    that._destroyRoute(routeObject);
                    that._routes.splice(routeIndex, 1);
                    that._fireRouteRemovedAction({
                        options: options
                    });
                    return false
                })
            },
            _destroyRoute: abstract,
            _clearRoutes: function() {
                while (this._routes.length > 0) {
                    this._removeRoute(this._routes[0].options)
                }
            },
            adjustViewport: function() {
                return this._fitBounds()
            },
            isEventsCanceled: function() {
                return true
            },
            _fitBounds: abstract,
            _updateBounds: function() {
                var that = this;
                this._clearBounds();
                if (!this._option("autoAdjust")) {
                    return
                }
                iteratorUtils.each(this._markers, function(_, markerObject) {
                    that._extendBounds(markerObject.location)
                });
                iteratorUtils.each(this._routes, function(_, routeObject) {
                    routeObject.northEast && that._extendBounds(routeObject.northEast);
                    routeObject.southWest && that._extendBounds(routeObject.southWest)
                })
            },
            _clearBounds: function() {
                this._bounds = null
            },
            _extendBounds: abstract
        });
        module.exports = DynamicProvider
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/ui/radio_group.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./radio_group/radio_group */ 617)
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/slider.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./slider/ui.slider */ 619)
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/slider/ui.slider_handle.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Widget = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var Tooltip = __webpack_require__( /*! ../tooltip */ 168);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var positionUtils = __webpack_require__( /*! ../../animation/position */ 74);
        var mathUtils = __webpack_require__( /*! ../../core/utils/math */ 31);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var getBoundingRect = __webpack_require__( /*! ../../core/utils/position */ 21).getBoundingRect;
        var numberLocalization = __webpack_require__( /*! ../../localization/number */ 49);
        var SLIDER_CLASS = "dx-slider";
        var SLIDER_HANDLE_CLASS = "dx-slider-handle";
        var POSITION_ALIASES = {
            top: {
                my: "bottom center",
                at: "top center",
                collision: "none"
            },
            bottom: {
                my: "top center",
                at: "bottom center",
                collision: "none"
            },
            right: {
                my: "left center",
                at: "right center",
                collision: "none"
            },
            left: {
                my: "right center",
                at: "left center",
                collision: "none"
            }
        };
        var SliderHandle = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: false,
                    value: 0,
                    tooltipEnabled: false,
                    tooltipFormat: function(v) {
                        return v
                    },
                    tooltipPosition: "top",
                    tooltipShowMode: "onHover",
                    tooltipFitIn: null
                })
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(SLIDER_HANDLE_CLASS);
                this.setAria({
                    role: "slider",
                    valuenow: this.option("value")
                })
            },
            _render: function() {
                this._renderTooltip();
                this.callBase()
            },
            _renderTooltip: function() {
                if (this.option("tooltipEnabled")) {
                    if (!this._$tooltip) {
                        this._$tooltip = $("<div>").appendTo(this.$element())
                    }
                    this._$slider = this.$element().closest("." + SLIDER_CLASS);
                    this._updateTooltip()
                } else {
                    this._removeTooltip()
                }
            },
            _createTooltip: function() {
                if (this._tooltip) {
                    return false
                }
                this._tooltip = this._createComponent(this._$tooltip, Tooltip, {
                    visible: true,
                    target: this.$element(),
                    closeOnOutsideClick: false,
                    container: this.$element(),
                    hideTopOverlayHandler: null,
                    closeOnTargetScroll: false,
                    onPositioned: function(args) {
                        this._saveTooltipElements(args.component);
                        this._saveTooltipLocation();
                        this._centeredTooltipPosition()
                    }.bind(this),
                    animation: null,
                    arrowPosition: null,
                    templatesRenderAsynchronously: false
                });
                return true
            },
            _removeTooltip: function() {
                if (!this._$tooltip) {
                    return
                }
                this._$tooltip.remove();
                delete this._$tooltip;
                delete this._tooltip
            },
            _renderTooltipPosition: function() {
                if (!this._tooltip) {
                    return
                }
                var position = this.option("tooltipPosition");
                this._saveTooltipElements();
                this._resetTooltipPosition();
                if ("string" === typeUtils.type(position)) {
                    position = extend({
                        boundary: this._$slider,
                        boundaryOffset: {
                            h: 1,
                            v: 1
                        }
                    }, POSITION_ALIASES[position])
                }
                this._tooltip.option("position", position);
                this._saveTooltipLocation()
            },
            _saveTooltipElements: function(tooltip) {
                tooltip = this._tooltip || tooltip;
                this._$tooltipContent = tooltip.$content().parent();
                this._$tooltipArrow = this._$tooltipContent.find(".dx-popover-arrow")
            },
            _resetTooltipPosition: function() {
                translator.resetPosition(this._$tooltipContent);
                translator.resetPosition(this._$tooltipArrow)
            },
            _saveTooltipLocation: function() {
                this._contentLocate = translator.locate(this._$tooltipContent)
            },
            _centeredTooltipPosition: function() {
                if (!this._tooltip) {
                    return
                }
                this._$tooltipContent.outerWidth("auto");
                var outerWidthWithoutRounding = getBoundingRect(this._$tooltipContent.get(0)).width;
                var tooltipOuterWidth = Math.ceil(outerWidthWithoutRounding);
                var roundedTooltipOuterWidth = tooltipOuterWidth % 2 + tooltipOuterWidth;
                this._$tooltipContent.outerWidth(roundedTooltipOuterWidth);
                var tooltipCenter = (roundedTooltipOuterWidth - this.$element().width()) / 2;
                this._contentLocate.left = -tooltipCenter;
                this._$tooltipArrow.css({
                    marginLeft: -this._$tooltipArrow.outerWidth() / 2,
                    left: "50%"
                });
                this._fitTooltip()
            },
            _fitTooltip: function() {
                if (!this._tooltip) {
                    return
                }
                var position = this.option("tooltipPosition");
                if ("string" === typeUtils.type(position)) {
                    position = extend({
                        of: this.$element(),
                        boundary: this._$slider,
                        boundaryOffset: {
                            h: 2,
                            v: 1
                        }
                    }, POSITION_ALIASES[position], {
                        collision: "fit none"
                    })
                }
                var calculatePosition = positionUtils.calculate(this._$tooltipContent, position);
                var isLeftSide = "left" === calculatePosition.h.collisionSide;
                var arrowLeft = (isLeftSide ? -1 : 1) * calculatePosition.h.oversize;
                var arrowMinLeft = this._contentLocate.left;
                var arrowMaxRight = this._contentLocate.left + this._$tooltipContent.outerWidth() - this._$tooltipArrow.outerWidth();
                translator.move(this._$tooltipContent, {
                    left: this._contentLocate.left + (isLeftSide ? 1 : -1) * calculatePosition.h.oversize
                });
                translator.move(this._$tooltipArrow, {
                    left: mathUtils.fitIntoRange(arrowLeft, arrowMinLeft, arrowMaxRight)
                })
            },
            _getFormattedValue: function(value) {
                return numberLocalization.format(value, this.option("tooltipFormat"))
            },
            _renderValue: function() {
                if (!this._tooltip) {
                    return
                }
                var value = this.option("value");
                this._tooltip.$content().html(this._getFormattedValue(value));
                this._fitTooltip()
            },
            _updateTooltip: function() {
                var hoverMode = /^onhover$/i.test(this.option("tooltipShowMode"));
                if (!hoverMode) {
                    this._createTooltip()
                }
                this.$element().toggleClass("dx-slider-tooltip-on-hover", hoverMode);
                this._renderTooltipPosition();
                this._renderValue();
                this._centeredTooltipPosition()
            },
            _clean: function() {
                this.callBase();
                delete this._$tooltip;
                delete this._tooltip
            },
            _ensureTooltipIsCentered: function(value, previousValue) {
                if (typeUtils.isDefined(value) && typeUtils.isDefined(previousValue) && value.toString().length !== previousValue.toString().length) {
                    this._centeredTooltipPosition()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "tooltipFormat":
                        this._renderValue();
                        break;
                    case "value":
                        this._renderValue();
                        var value = this._getFormattedValue(args.value);
                        var previousValue = this._getFormattedValue(args.previousValue);
                        this._ensureTooltipIsCentered(value, previousValue);
                        this.setAria("valuenow", args.value);
                        break;
                    case "tooltipEnabled":
                        this._renderTooltip();
                        break;
                    case "tooltipPosition":
                        this._renderTooltipPosition();
                        this._centeredTooltipPosition();
                        break;
                    case "tooltipShowMode":
                        this._updateTooltip();
                        break;
                    case "tooltipFitIn":
                        this._fitTooltip();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            fitTooltipPosition: function() {
                this._fitTooltip()
            },
            updateTooltip: function() {
                if (!this._createTooltip()) {
                    return
                }
                this._renderTooltipPosition();
                this._renderValue();
                this._centeredTooltipPosition()
            },
            repaint: function() {
                this._renderTooltipPosition();
                this._centeredTooltipPosition();
                if (this._tooltip) {
                    this._tooltip._visibilityChanged(true)
                }
            }
        });
        module.exports = SliderHandle
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/tooltip/tooltip.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Guid = __webpack_require__( /*! ../../core/guid */ 36);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var Popover = __webpack_require__( /*! ../popover */ 119);
        var TOOLTIP_CLASS = "dx-tooltip";
        var TOOLTIP_WRAPPER_CLASS = "dx-tooltip-wrapper";
        var isWindow = __webpack_require__( /*! ../../core/utils/type */ 1).isWindow;
        var Tooltip = Popover.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    toolbarItems: [],
                    showCloseButton: false,
                    showTitle: false,
                    title: null,
                    titleTemplate: null,
                    onTitleRendered: null,
                    bottomTemplate: null,
                    propagateOutsideClick: true
                })
            },
            _render: function() {
                this.$element().addClass(TOOLTIP_CLASS);
                this._wrapper().addClass(TOOLTIP_WRAPPER_CLASS);
                this.callBase()
            },
            _renderContent: function() {
                this.callBase();
                this._contentId = "dx-" + new Guid;
                this._$content.attr({
                    id: this._contentId,
                    role: "tooltip"
                });
                this._toggleAriaDescription(true)
            },
            _toggleAriaDescription: function(showing) {
                var $target = $(this.option("target"));
                var label = showing ? this._contentId : void 0;
                if (!isWindow($target.get(0))) {
                    this.setAria("describedby", label, $target)
                }
            }
        });
        registerComponent("dxTooltip", Tooltip);
        module.exports = Tooltip
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/switch.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var Editor = __webpack_require__( /*! ./editor/editor */ 48);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var feedbackEvents = __webpack_require__( /*! ../events/core/emitter.feedback */ 134);
        var getBoundingRect = __webpack_require__( /*! ../core/utils/position */ 21).getBoundingRect;
        var themes = __webpack_require__( /*! ./themes */ 32);
        var fx = __webpack_require__( /*! ../animation/fx */ 40);
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var clickEvent = __webpack_require__( /*! ../events/click */ 19);
        var Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 158);
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var SWITCH_CLASS = "dx-switch";
        var SWITCH_WRAPPER_CLASS = SWITCH_CLASS + "-wrapper";
        var SWITCH_CONTAINER_CLASS = SWITCH_CLASS + "-container";
        var SWITCH_INNER_CLASS = SWITCH_CLASS + "-inner";
        var SWITCH_HANDLE_CLASS = SWITCH_CLASS + "-handle";
        var SWITCH_ON_VALUE_CLASS = SWITCH_CLASS + "-on-value";
        var SWITCH_ON_CLASS = SWITCH_CLASS + "-on";
        var SWITCH_OFF_CLASS = SWITCH_CLASS + "-off";
        var SWITCH_ANIMATION_DURATION = 100;
        var Switch = Editor.inherit({
            _supportedKeys: function() {
                var isRTL = this.option("rtlEnabled");
                var click = function(e) {
                    e.preventDefault();
                    this._clickAction({
                        event: e
                    })
                };
                var move = function(value, e) {
                    e.preventDefault();
                    e.stopPropagation();
                    this._animateValue(value)
                };
                return extend(this.callBase(), {
                    space: click,
                    enter: click,
                    leftArrow: move.bind(this, isRTL ? true : false),
                    rightArrow: move.bind(this, isRTL ? false : true)
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    switchedOnText: this._getLocalizationMessage("On"),
                    switchedOffText: this._getLocalizationMessage("Off"),
                    value: false,
                    useInkRipple: false,
                    _animateHandle: true
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function(_device) {
                        return themes.isIos7(themeName)
                    },
                    options: {
                        _animateHandle: false
                    }
                }])
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                extend(this._deprecatedOptions, {
                    onText: {
                        since: "18.2",
                        alias: "switchedOnText"
                    },
                    offText: {
                        since: "18.2",
                        alias: "switchedOffText"
                    }
                })
            },
            _getLocalizationMessage: function(state) {
                var newMessage = messageLocalization.format("dxSwitch-switched" + state + "Text");
                var oldMessage = messageLocalization.format("dxSwitch-" + state.toLowerCase() + "Text");
                return newMessage || oldMessage
            },
            _feedbackHideTimeout: 0,
            _animating: false,
            _initMarkup: function() {
                this._renderContainers();
                this.option("useInkRipple") && this._renderInkRipple();
                this.$element().addClass(SWITCH_CLASS).append(this._$switchWrapper);
                this._renderSubmitElement();
                this._renderClick();
                this.setAria("role", "button");
                this._renderSwipeable();
                this.callBase();
                this._renderSwitchInner();
                this._renderLabels();
                this._renderValue()
            },
            _getInnerOffset: function(value, offset) {
                var ratio = (offset - this._offsetDirection() * Number(!value)) / 2;
                return 100 * ratio + "%"
            },
            _getHandleOffset: function(value, offset) {
                if (this.option("rtlEnabled")) {
                    value = !value
                }
                if (value) {
                    var calcValue = -100 + 100 * -offset;
                    return calcValue + "%"
                } else {
                    return 100 * -offset + "%"
                }
            },
            _renderSwitchInner: function() {
                this._$switchInner = $("<div>").addClass(SWITCH_INNER_CLASS).appendTo(this._$switchContainer);
                this._$handle = $("<div>").addClass(SWITCH_HANDLE_CLASS).appendTo(this._$switchInner)
            },
            _renderLabels: function() {
                this._$labelOn = $("<div>").addClass(SWITCH_ON_CLASS).prependTo(this._$switchInner);
                this._$labelOff = $("<div>").addClass(SWITCH_OFF_CLASS).appendTo(this._$switchInner);
                this._setLabelsText()
            },
            _renderContainers: function() {
                this._$switchContainer = $("<div>").addClass(SWITCH_CONTAINER_CLASS);
                this._$switchWrapper = $("<div>").addClass(SWITCH_WRAPPER_CLASS).append(this._$switchContainer)
            },
            _renderSwipeable: function() {
                this._createComponent(this.$element(), Swipeable, {
                    elastic: false,
                    immediate: true,
                    onStart: this._swipeStartHandler.bind(this),
                    onUpdated: this._swipeUpdateHandler.bind(this),
                    onEnd: this._swipeEndHandler.bind(this),
                    itemSizeFunc: this._getItemSizeFunc.bind(this)
                })
            },
            _getItemSizeFunc: function() {
                return this._$switchContainer.outerWidth(true) - getBoundingRect(this._$handle.get(0)).width
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render({
                    waveSizeCoefficient: 1.7,
                    isCentered: true,
                    useHoldAnimation: false,
                    wavesNumber: 2
                })
            },
            _renderInkWave: function(element, dxEvent, doRender, waveIndex) {
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: element,
                    event: dxEvent,
                    wave: waveIndex
                };
                if (doRender) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _updateFocusState: function(e, value) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$handle, e, value, 0)
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$handle, e, value, 1)
            },
            _offsetDirection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _renderPosition: function(state, swipeOffset) {
                var innerOffset = this._getInnerOffset(state, swipeOffset);
                var handleOffset = this._getHandleOffset(state, swipeOffset);
                if (this.option("_animateHandle")) {
                    this._$switchInner.css("transform", " translateX(" + innerOffset + ")");
                    this._$handle.css("transform", " translateX(" + handleOffset + ")")
                }
            },
            _validateValue: function() {
                var check = this.option("value");
                if ("boolean" !== typeof check) {
                    this._options.silent("value", !!check)
                }
            },
            _renderClick: function() {
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                var $element = this.$element();
                this._clickAction = this._createAction(this._clickHandler.bind(this));
                eventsEngine.off($element, eventName);
                eventsEngine.on($element, eventName, function(e) {
                    this._clickAction({
                        event: e
                    })
                }.bind(this))
            },
            _clickHandler: function(args) {
                var e = args.event;
                this._saveValueChangeEvent(e);
                if (this._animating || this._swiping) {
                    return
                }
                this._animateValue(!this.option("value"))
            },
            _animateValue: function(value) {
                var startValue = this.option("value");
                var endValue = value;
                if (startValue === endValue) {
                    return
                }
                this._animating = true;
                var fromInnerOffset = this._getInnerOffset(startValue, 0);
                var toInnerOffset = this._getInnerOffset(endValue, 0);
                var fromHandleOffset = this._getHandleOffset(startValue, 0);
                var toHandleOffset = this._getHandleOffset(endValue, 0);
                var that = this;
                var fromInnerConfig = {};
                var toInnerConfig = {};
                var fromHandleConfig = {};
                var toHandlerConfig = {};
                fromInnerConfig.transform = " translateX(" + fromInnerOffset + ")";
                toInnerConfig.transform = " translateX(" + toInnerOffset + ")";
                fromHandleConfig.transform = " translateX(" + fromHandleOffset + ")";
                toHandlerConfig.transform = " translateX(" + toHandleOffset + ")";
                this.$element().toggleClass(SWITCH_ON_VALUE_CLASS, endValue);
                fx.animate(this._$handle, {
                    from: fromHandleConfig,
                    to: toHandlerConfig,
                    duration: SWITCH_ANIMATION_DURATION
                });
                fx.animate(this._$switchInner, {
                    from: fromInnerConfig,
                    to: toInnerConfig,
                    duration: SWITCH_ANIMATION_DURATION,
                    complete: function() {
                        that._animating = false;
                        that.option("value", endValue)
                    }
                })
            },
            _swipeStartHandler: function(e) {
                var state = this.option("value");
                var rtlEnabled = this.option("rtlEnabled");
                var maxOffOffset = rtlEnabled ? 0 : 1;
                var maxOnOffset = rtlEnabled ? 1 : 0;
                e.event.maxLeftOffset = state ? maxOffOffset : maxOnOffset;
                e.event.maxRightOffset = state ? maxOnOffset : maxOffOffset;
                this._swiping = true;
                this._feedbackDeferred = new Deferred;
                feedbackEvents.lock(this._feedbackDeferred);
                this._toggleActiveState(this.$element(), this.option("activeStateEnabled"))
            },
            _swipeUpdateHandler: function(e) {
                this._renderPosition(this.option("value"), e.event.offset)
            },
            _swipeEndHandler: function(e) {
                var that = this;
                var offsetDirection = this._offsetDirection();
                var toInnerConfig = {};
                var toHandleConfig = {};
                var innerOffset = this._getInnerOffset(that.option("value"), e.event.targetOffset);
                var handleOffset = this._getHandleOffset(that.option("value"), e.event.targetOffset);
                toInnerConfig.transform = " translateX(" + innerOffset + ")";
                toHandleConfig.transform = " translateX(" + handleOffset + ")";
                fx.animate(this._$handle, {
                    to: toHandleConfig,
                    duration: SWITCH_ANIMATION_DURATION
                });
                fx.animate(this._$switchInner, {
                    to: toInnerConfig,
                    duration: SWITCH_ANIMATION_DURATION,
                    complete: function() {
                        that._swiping = false;
                        var pos = that.option("value") + offsetDirection * e.event.targetOffset;
                        that._saveValueChangeEvent(e.event);
                        that.option("value", Boolean(pos));
                        that._feedbackDeferred.resolve();
                        that._toggleActiveState(that.$element(), false)
                    }
                })
            },
            _renderValue: function() {
                this._validateValue();
                var val = this.option("value");
                this._renderPosition(val, 0);
                this.$element().toggleClass(SWITCH_ON_VALUE_CLASS, val);
                this._getSubmitElement().val(val);
                this.setAria({
                    pressed: val,
                    label: val ? this.option("switchedOnText") : this.option("switchedOffText")
                })
            },
            _setLabelsText: function() {
                this._$labelOn && this._$labelOn.text(this.option("switchedOnText"));
                this._$labelOff && this._$labelOff.text(this.option("switchedOffText"))
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this.repaint()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "width":
                        delete this._marginBound;
                        this._refresh();
                        break;
                    case "switchedOnText":
                    case "switchedOffText":
                        this._setLabelsText();
                        break;
                    case "value":
                        this._renderValue();
                        this.callBase(args);
                        break;
                    case "_animateHandle":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxSwitch", Switch);
        module.exports = Switch
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/text_area.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _pointer = __webpack_require__( /*! ../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _uiEventsEmitterGesture = __webpack_require__( /*! ../ui/scroll_view/ui.events.emitter.gesture.scroll */ 229);
        var _uiEventsEmitterGesture2 = _interopRequireDefault(_uiEventsEmitterGesture);
        var _size = __webpack_require__( /*! ../core/utils/size */ 180);
        var _size2 = _interopRequireDefault(_size);
        var _utils2 = __webpack_require__( /*! ./text_box/utils.scroll */ 330);
        var _text_box = __webpack_require__( /*! ./text_box */ 88);
        var _text_box2 = _interopRequireDefault(_text_box);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TEXTAREA_CLASS = "dx-textarea";
        var TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input";
        var TEXTEDITOR_INPUT_CLASS_AUTO_RESIZE = "dx-texteditor-input-auto-resize";
        var TextArea = _text_box2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    spellcheck: true,
                    minHeight: void 0,
                    maxHeight: void 0,
                    autoResizeEnabled: false
                })
            },
            _initMarkup: function() {
                this.$element().addClass(TEXTAREA_CLASS);
                this.callBase();
                this.setAria("multiline", "true")
            },
            _renderContentImpl: function() {
                this._updateInputHeight();
                this.callBase()
            },
            _renderInput: function() {
                this.callBase();
                this._renderScrollHandler()
            },
            _createInput: function() {
                var $input = (0, _renderer2.default)("<textarea>");
                this._applyInputAttributes($input, this.option("inputAttr"));
                this._updateInputAutoResizeAppearance($input);
                return $input
            },
            _applyInputAttributes: function($input, customAttributes) {
                $input.attr(customAttributes).addClass(TEXTEDITOR_INPUT_CLASS)
            },
            _renderScrollHandler: function() {
                var _this = this;
                this._eventY = 0;
                var $input = this._input();
                var initScrollData = {
                    validate: function(e) {
                        if (eventUtils.isDxMouseWheelEvent(e) && (0, _renderer2.default)(e.target).is(_this._input())) {
                            if ((0, _utils2.allowScroll)($input, -e.delta, e.shiftKey)) {
                                e._needSkipEvent = true;
                                return true
                            }
                            return false
                        }
                    }
                };
                _events_engine2.default.on($input, eventUtils.addNamespace(_uiEventsEmitterGesture2.default.init, this.NAME), initScrollData, _common.noop);
                _events_engine2.default.on($input, eventUtils.addNamespace(_pointer2.default.down, this.NAME), this._pointerDownHandler.bind(this));
                _events_engine2.default.on($input, eventUtils.addNamespace(_pointer2.default.move, this.NAME), this._pointerMoveHandler.bind(this))
            },
            _pointerDownHandler: function(e) {
                this._eventY = eventUtils.eventData(e).y
            },
            _pointerMoveHandler: function(e) {
                var currentEventY = eventUtils.eventData(e).y;
                var delta = this._eventY - currentEventY;
                if ((0, _utils2.allowScroll)(this._input(), delta)) {
                    e.isScrollingEvent = true;
                    e.stopPropagation()
                }
                this._eventY = currentEventY
            },
            _renderDimensions: function() {
                var $element = this.$element();
                var element = $element.get(0);
                var width = this._getOptionValue("width", element);
                var height = this._getOptionValue("height", element);
                var minHeight = this.option("minHeight");
                var maxHeight = this.option("maxHeight");
                $element.css({
                    minHeight: void 0 !== minHeight ? minHeight : "",
                    maxHeight: void 0 !== maxHeight ? maxHeight : "",
                    width: width,
                    height: height
                })
            },
            _resetDimensions: function() {
                this.$element().css({
                    height: "",
                    minHeight: "",
                    maxHeight: ""
                })
            },
            _renderEvents: function() {
                if (this.option("autoResizeEnabled")) {
                    _events_engine2.default.on(this._input(), eventUtils.addNamespace("input paste", this.NAME), this._updateInputHeight.bind(this))
                }
                this.callBase()
            },
            _refreshEvents: function() {
                _events_engine2.default.off(this._input(), eventUtils.addNamespace("input paste", this.NAME));
                this.callBase()
            },
            _getHeightDifference: function($input) {
                return _size2.default.getVerticalOffsets(this._$element.get(0), false) + _size2.default.getVerticalOffsets(this._$textEditorContainer.get(0), false) + _size2.default.getVerticalOffsets(this._$textEditorInputContainer.get(0), false) + _size2.default.getElementBoxParams("height", _window2.default.getWindow().getComputedStyle($input.get(0))).margin
            },
            _updateInputHeight: function() {
                var $input = this._input();
                var autoHeightResizing = void 0 === this.option("height") && this.option("autoResizeEnabled");
                if (!autoHeightResizing) {
                    $input.css("height", "");
                    return
                } else {
                    this._resetDimensions();
                    this._$element.css("height", this._$element.outerHeight())
                }
                $input.css("height", 0);
                var heightDifference = this._getHeightDifference($input);
                this._renderDimensions();
                var minHeight = this._getBoundaryHeight("minHeight");
                var maxHeight = this._getBoundaryHeight("maxHeight");
                var inputHeight = $input[0].scrollHeight;
                if (void 0 !== minHeight) {
                    inputHeight = Math.max(inputHeight, minHeight - heightDifference)
                }
                if (void 0 !== maxHeight) {
                    var adjustedMaxHeight = maxHeight - heightDifference;
                    var needScroll = inputHeight > adjustedMaxHeight;
                    inputHeight = Math.min(inputHeight, adjustedMaxHeight);
                    this._updateInputAutoResizeAppearance($input, !needScroll)
                }
                $input.css("height", inputHeight);
                if (autoHeightResizing) {
                    this._$element.css("height", "auto")
                }
            },
            _getBoundaryHeight: function(optionName) {
                var boundaryValue = this.option(optionName);
                if ((0, _type.isDefined)(boundaryValue)) {
                    return "number" === typeof boundaryValue ? boundaryValue : _size2.default.parseHeight(boundaryValue, this._$textEditorContainer.get(0))
                }
            },
            _renderInputType: _common.noop,
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._updateInputHeight()
                }
            },
            _updateInputAutoResizeAppearance: function($input, isAutoResizeEnabled) {
                if ($input) {
                    var autoResizeEnabled = (0, _common.ensureDefined)(isAutoResizeEnabled, this.option("autoResizeEnabled"));
                    $input.toggleClass(TEXTEDITOR_INPUT_CLASS_AUTO_RESIZE, autoResizeEnabled)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "autoResizeEnabled":
                        this._updateInputAutoResizeAppearance(this._input(), args.value);
                        this._refreshEvents();
                        this._updateInputHeight();
                        break;
                    case "value":
                    case "height":
                        this.callBase(args);
                        this._updateInputHeight();
                        break;
                    case "minHeight":
                    case "maxHeight":
                        this._renderDimensions();
                        this._updateInputHeight();
                        break;
                    case "visible":
                        this.callBase(args);
                        args.value && this._updateInputHeight();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        (0, _component_registrator2.default)("dxTextArea", TextArea);
        module.exports = TextArea
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/accordion.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _fx = __webpack_require__( /*! ../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _click = __webpack_require__( /*! ../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.live_update */ 195);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _bindable_template = __webpack_require__( /*! ../core/templates/bindable_template */ 59);
        var _icon = __webpack_require__( /*! ../core/utils/icon */ 53);
        var _themes = __webpack_require__( /*! ./themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ACCORDION_CLASS = "dx-accordion";
        var ACCORDION_WRAPPER_CLASS = "dx-accordion-wrapper";
        var ACCORDION_ITEM_CLASS = "dx-accordion-item";
        var ACCORDION_ITEM_OPENED_CLASS = "dx-accordion-item-opened";
        var ACCORDION_ITEM_CLOSED_CLASS = "dx-accordion-item-closed";
        var ACCORDION_ITEM_TITLE_CLASS = "dx-accordion-item-title";
        var ACCORDION_ITEM_BODY_CLASS = "dx-accordion-item-body";
        var ACCORDION_ITEM_TITLE_CAPTION_CLASS = "dx-accordion-item-title-caption";
        var ACCORDION_ITEM_DATA_KEY = "dxAccordionItemData";
        var Accordion = _uiCollection_widget2.default.inherit({
            _activeStateUnit: "." + ACCORDION_ITEM_CLASS,
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    hoverStateEnabled: true,
                    height: void 0,
                    itemTitleTemplate: "title",
                    onItemTitleClick: null,
                    selectedIndex: 0,
                    collapsible: false,
                    multiple: false,
                    animationDuration: 300,
                    deferRendering: true,
                    selectionByClick: true,
                    activeStateEnabled: true,
                    _itemAttributes: {
                        role: "tab"
                    },
                    _animationEasing: "ease"
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        animationDuration: 200,
                        _animationEasing: "cubic-bezier(0.4, 0, 0.2, 1)"
                    }
                }])
            },
            _itemElements: function() {
                return this._itemContainer().children(this._itemSelector())
            },
            _init: function() {
                this.callBase();
                this.option("selectionRequired", !this.option("collapsible"));
                this.option("selectionMode", this.option("multiple") ? "multiple" : "single");
                var $element = this.$element();
                $element.addClass(ACCORDION_CLASS);
                this._$container = (0, _renderer2.default)("<div>").addClass(ACCORDION_WRAPPER_CLASS);
                $element.append(this._$container)
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    title: new _bindable_template.BindableTemplate(function($container, data) {
                        if ((0, _type.isPlainObject)(data)) {
                            var $iconElement = (0, _icon.getImageContainer)(data.icon);
                            if ($iconElement) {
                                $container.append($iconElement)
                            }
                            if ((0, _type.isDefined)(data.title) && !(0, _type.isPlainObject)(data.title)) {
                                $container.append(_dom_adapter2.default.createTextNode(data.title))
                            }
                        } else {
                            if ((0, _type.isDefined)(data)) {
                                $container.text(String(data))
                            }
                        }
                        $container.wrapInner((0, _renderer2.default)("<div>").addClass(ACCORDION_ITEM_TITLE_CAPTION_CLASS))
                    }, ["title", "icon"], this.option("integrationOptions.watchMethod"))
                })
            },
            _initMarkup: function() {
                var _this = this;
                this._deferredItems = [];
                this.callBase();
                this.setAria({
                    role: "tablist",
                    multiselectable: this.option("multiple")
                });
                (0, _common.deferRender)(function() {
                    var selectedItemIndices = _this._getSelectedItemIndices();
                    _this._renderSelection(selectedItemIndices, [])
                })
            },
            _render: function() {
                this.callBase();
                this._updateItemHeightsWrapper(true)
            },
            _itemDataKey: function() {
                return ACCORDION_ITEM_DATA_KEY
            },
            _itemClass: function() {
                return ACCORDION_ITEM_CLASS
            },
            _itemContainer: function() {
                return this._$container
            },
            _itemTitles: function() {
                return this._itemElements().find("." + ACCORDION_ITEM_TITLE_CLASS)
            },
            _itemContents: function() {
                return this._itemElements().find("." + ACCORDION_ITEM_BODY_CLASS)
            },
            _getItemData: function(target) {
                return (0, _renderer2.default)(target).parent().data(this._itemDataKey()) || this.callBase.apply(this, arguments)
            },
            _executeItemRenderAction: function(itemData) {
                if (itemData.type) {
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _itemSelectHandler: function(e) {
                if ((0, _renderer2.default)(e.target).closest(this._itemContents()).length) {
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _afterItemElementDeleted: function($item, deletedActionArgs) {
                this._deferredItems.splice(deletedActionArgs.itemIndex, 1);
                this.callBase.apply(this, arguments)
            },
            _renderItemContent: function(args) {
                var itemTitle = this.callBase((0, _extend.extend)({}, args, {
                    contentClass: ACCORDION_ITEM_TITLE_CLASS,
                    templateProperty: "titleTemplate",
                    defaultTemplateName: this.option("itemTitleTemplate")
                }));
                this._attachItemTitleClickAction(itemTitle);
                var deferred = new _deferred.Deferred;
                if ((0, _type.isDefined)(this._deferredItems[args.index])) {
                    this._deferredItems[args.index] = deferred
                } else {
                    this._deferredItems.push(deferred)
                }
                if (!this.option("deferRendering") || this._getSelectedItemIndices().indexOf(args.index) >= 0) {
                    deferred.resolve()
                }
                deferred.done(this.callBase.bind(this, (0, _extend.extend)({}, args, {
                    contentClass: ACCORDION_ITEM_BODY_CLASS,
                    container: (0, _dom.getPublicElement)((0, _renderer2.default)("<div>").appendTo((0, _renderer2.default)(itemTitle).parent()))
                })))
            },
            _attachItemTitleClickAction: function(itemTitle) {
                var eventName = eventUtils.addNamespace(_click2.default.name, this.NAME);
                _events_engine2.default.off(itemTitle, eventName);
                _events_engine2.default.on(itemTitle, eventName, this._itemTitleClickHandler.bind(this))
            },
            _itemTitleClickHandler: function(e) {
                this._itemDXEventHandler(e, "onItemTitleClick")
            },
            _renderSelection: function(addedSelection, removedSelection) {
                this._itemElements().addClass(ACCORDION_ITEM_CLOSED_CLASS);
                this.setAria("hidden", true, this._itemContents());
                this._updateItems(addedSelection, removedSelection)
            },
            _updateSelection: function(addedSelection, removedSelection) {
                this._updateItems(addedSelection, removedSelection);
                this._updateItemHeightsWrapper(false)
            },
            _updateItems: function(addedSelection, removedSelection) {
                var _this2 = this;
                var $items = this._itemElements();
                _iterator2.default.each(addedSelection, function(_, index) {
                    _this2._deferredItems[index].resolve();
                    var $item = $items.eq(index).addClass(ACCORDION_ITEM_OPENED_CLASS).removeClass(ACCORDION_ITEM_CLOSED_CLASS);
                    _this2.setAria("hidden", false, $item.find("." + ACCORDION_ITEM_BODY_CLASS))
                });
                _iterator2.default.each(removedSelection, function(_, index) {
                    var $item = $items.eq(index).removeClass(ACCORDION_ITEM_OPENED_CLASS);
                    _this2.setAria("hidden", true, $item.find("." + ACCORDION_ITEM_BODY_CLASS))
                })
            },
            _updateItemHeightsWrapper: function(skipAnimation) {
                if (this.option("templatesRenderAsynchronously")) {
                    this._animationTimer = setTimeout(function() {
                        this._updateItemHeights(skipAnimation)
                    }.bind(this))
                } else {
                    this._updateItemHeights(skipAnimation)
                }
            },
            _updateItemHeights: function(skipAnimation) {
                var that = this;
                var deferredAnimate = that._deferredAnimate;
                var itemHeight = this._splitFreeSpace(this._calculateFreeSpace());
                clearTimeout(this._animationTimer);
                return _deferred.when.apply(_renderer2.default, [].slice.call(this._itemElements()).map(function(item) {
                    return that._updateItemHeight((0, _renderer2.default)(item), itemHeight, skipAnimation)
                })).done(function() {
                    if (deferredAnimate) {
                        deferredAnimate.resolveWith(that)
                    }
                })
            },
            _updateItemHeight: function($item, itemHeight, skipAnimation) {
                var $title = $item.children("." + ACCORDION_ITEM_TITLE_CLASS);
                if (_fx2.default.isAnimating($item)) {
                    _fx2.default.stop($item)
                }
                var startItemHeight = $item.outerHeight();
                var finalItemHeight = $item.hasClass(ACCORDION_ITEM_OPENED_CLASS) ? itemHeight + $title.outerHeight() || $item.height("auto").outerHeight() : $title.outerHeight();
                return this._animateItem($item, startItemHeight, finalItemHeight, skipAnimation, !!itemHeight)
            },
            _animateItem: function($element, startHeight, endHeight, skipAnimation, fixedHeight) {
                var d;
                if (skipAnimation || startHeight === endHeight) {
                    $element.css("height", endHeight);
                    d = (new _deferred.Deferred).resolve()
                } else {
                    d = _fx2.default.animate($element, {
                        type: "custom",
                        from: {
                            height: startHeight
                        },
                        to: {
                            height: endHeight
                        },
                        duration: this.option("animationDuration"),
                        easing: this.option("_animationEasing")
                    })
                }
                return d.done(function() {
                    if ($element.hasClass(ACCORDION_ITEM_OPENED_CLASS) && !fixedHeight) {
                        $element.css("height", "")
                    }
                    $element.not("." + ACCORDION_ITEM_OPENED_CLASS).addClass(ACCORDION_ITEM_CLOSED_CLASS)
                })
            },
            _splitFreeSpace: function(freeSpace) {
                if (!freeSpace) {
                    return freeSpace
                }
                return freeSpace / this.option("selectedItems").length
            },
            _calculateFreeSpace: function() {
                var height = this.option("height");
                if (void 0 === height || "auto" === height) {
                    return
                }
                var $titles = this._itemTitles();
                var itemsHeight = 0;
                _iterator2.default.each($titles, function(_, title) {
                    itemsHeight += (0, _renderer2.default)(title).outerHeight()
                });
                return this.$element().height() - itemsHeight
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                this._updateItemHeights(true)
            },
            _clean: function() {
                clearTimeout(this._animationTimer);
                this.callBase()
            },
            _itemOptionChanged: function(item, property, value, oldValue) {
                this.callBase(item, property, value, oldValue);
                if ("visible" === property) {
                    this._updateItemHeightsWrapper(true)
                }
            },
            _tryParseItemPropertyName: function(fullName) {
                var matches = fullName.match(/.*\.(.*)/);
                if ((0, _type.isDefined)(matches) && matches.length >= 1) {
                    return matches[1]
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "items":
                        this.callBase(args);
                        if ("title" === this._tryParseItemPropertyName(args.fullName)) {
                            this._renderSelection(this._getSelectedItemIndices(), [])
                        }
                        break;
                    case "animationDuration":
                    case "onItemTitleClick":
                    case "_animationEasing":
                        break;
                    case "collapsible":
                        this.option("selectionRequired", !this.option("collapsible"));
                        break;
                    case "itemTitleTemplate":
                    case "height":
                    case "deferRendering":
                        this._invalidate();
                        break;
                    case "multiple":
                        this.option("selectionMode", args.value ? "multiple" : "single");
                        break;
                    default:
                        this.callBase(args)
                }
            },
            expandItem: function(index) {
                this._deferredAnimate = new _deferred.Deferred;
                this.selectItem(index);
                return this._deferredAnimate.promise()
            },
            collapseItem: function(index) {
                this._deferredAnimate = new _deferred.Deferred;
                this.unselectItem(index);
                return this._deferredAnimate.promise()
            },
            updateDimensions: function() {
                return this._updateItemHeights(false)
            }
        });
        (0, _component_registrator2.default)("dxAccordion", Accordion);
        module.exports = Accordion
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/context_menu/ui.context_menu.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _ui = __webpack_require__( /*! ./ui.menu_base */ 344);
        var _ui2 = _interopRequireDefault(_ui);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DX_MENU_CLASS = "dx-menu";
        var DX_MENU_ITEM_CLASS = DX_MENU_CLASS + "-item";
        var DX_MENU_ITEM_EXPANDED_CLASS = DX_MENU_ITEM_CLASS + "-expanded";
        var DX_MENU_PHONE_CLASS = "dx-menu-phone-overlay";
        var DX_MENU_ITEMS_CONTAINER_CLASS = DX_MENU_CLASS + "-items-container";
        var DX_MENU_ITEM_WRAPPER_CLASS = DX_MENU_ITEM_CLASS + "-wrapper";
        var DX_SUBMENU_CLASS = "dx-submenu";
        var DX_CONTEXT_MENU_CLASS = "dx-context-menu";
        var DX_HAS_CONTEXT_MENU_CLASS = "dx-has-context-menu";
        var DX_STATE_DISABLED_CLASS = "dx-state-disabled";
        var DX_STATE_FOCUSED_CLASS = "dx-state-focused";
        var DX_STATE_HOVER_CLASS = "dx-state-hover";
        var FOCUS_UP = "up";
        var FOCUS_DOWN = "down";
        var FOCUS_LEFT = "left";
        var FOCUS_RIGHT = "right";
        var FOCUS_FIRST = "first";
        var FOCUS_LAST = "last";
        var ACTIONS = ["onShowing", "onShown", "onSubmenuCreated", "onHiding", "onHidden", "onPositioning", "onLeftFirstItem", "onLeftLastItem", "onCloseRootSubmenu", "onExpandLastSubmenu"];
        var LOCAL_SUBMENU_DIRECTIONS = [FOCUS_UP, FOCUS_DOWN, FOCUS_FIRST, FOCUS_LAST];
        var DEFAULT_SHOW_EVENT = "dxcontextmenu";
        var ContextMenu = function(_MenuBase) {
            _inherits(ContextMenu, _MenuBase);
            var _super = _createSuper(ContextMenu);

            function ContextMenu() {
                _classCallCheck(this, ContextMenu);
                return _super.apply(this, arguments)
            }
            _createClass(ContextMenu, [{
                key: "getShowEvent",
                value: function(showEventOption) {
                    var result = null;
                    if ((0, _type.isObject)(showEventOption)) {
                        if (null !== showEventOption.name) {
                            result = showEventOption.name || DEFAULT_SHOW_EVENT
                        }
                    } else {
                        result = showEventOption
                    }
                    return result
                }
            }, {
                key: "getShowDelay",
                value: function(showEventOption) {
                    return (0, _type.isObject)(showEventOption) && showEventOption.delay
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(ContextMenu.prototype), "_getDefaultOptions", this).call(this), {
                        showEvent: DEFAULT_SHOW_EVENT,
                        closeOnOutsideClick: true,
                        position: {
                            at: "top left",
                            my: "top left"
                        },
                        onShowing: null,
                        onShown: null,
                        onSubmenuCreated: null,
                        onHiding: null,
                        onHidden: null,
                        onPositioning: null,
                        submenuDirection: "auto",
                        visible: false,
                        target: void 0,
                        onLeftFirstItem: null,
                        onLeftLastItem: null,
                        onCloseRootSubmenu: null,
                        onExpandLastSubmenu: null
                    })
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(ContextMenu.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return !(0, _window.hasWindow)()
                        },
                        options: {
                            animation: null
                        }
                    }])
                }
            }, {
                key: "_initActions",
                value: function() {
                    var _this = this;
                    this._actions = {};
                    (0, _iterator.each)(ACTIONS, function(index, action) {
                        _this._actions[action] = _this._createActionByOption(action) || _common.noop
                    })
                }
            }, {
                key: "_setOptionsByReference",
                value: function() {
                    _get(_getPrototypeOf(ContextMenu.prototype), "_setOptionsByReference", this).call(this);
                    (0, _extend.extend)(this._optionsByReference, {
                        animation: true,
                        selectedItem: true
                    })
                }
            }, {
                key: "_focusInHandler",
                value: function() {}
            }, {
                key: "_itemContainer",
                value: function() {
                    return this._overlay ? this._overlay.$content() : (0, _renderer2.default)()
                }
            }, {
                key: "_eventBindingTarget",
                value: function() {
                    return this._itemContainer()
                }
            }, {
                key: "itemsContainer",
                value: function() {
                    return this._overlay ? this._overlay.$content() : void 0
                }
            }, {
                key: "_supportedKeys",
                value: function() {
                    var _this2 = this;
                    var selectItem = function() {
                        var $item = (0, _renderer2.default)(_this2.option("focusedElement"));
                        _this2.hide();
                        if (!$item.length || !_this2._isSelectionEnabled()) {
                            return
                        }
                        _this2.selectItem($item[0])
                    };
                    return (0, _extend.extend)(_get(_getPrototypeOf(ContextMenu.prototype), "_supportedKeys", this).call(this), {
                        space: selectItem,
                        esc: this.hide
                    })
                }
            }, {
                key: "_getActiveItem",
                value: function() {
                    var $availableItems = this._getAvailableItems();
                    var $focusedItem = $availableItems.filter(".".concat(DX_STATE_FOCUSED_CLASS));
                    var $hoveredItem = $availableItems.filter(".".concat(DX_STATE_HOVER_CLASS));
                    var $hoveredItemContainer = $hoveredItem.closest(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS));
                    if ($hoveredItemContainer.find(".".concat(DX_MENU_ITEM_CLASS)).index($focusedItem) >= 0) {
                        return $focusedItem
                    }
                    if ($hoveredItem.length) {
                        return $hoveredItem
                    }
                    return _get(_getPrototypeOf(ContextMenu.prototype), "_getActiveItem", this).call(this)
                }
            }, {
                key: "_moveFocus",
                value: function(location) {
                    var $items = this._getItemsByLocation(location);
                    var $oldTarget = this._getActiveItem(true);
                    var $hoveredItem = this.itemsContainer().find(".".concat(DX_STATE_HOVER_CLASS));
                    var $focusedItem = (0, _renderer2.default)(this.option("focusedElement"));
                    var $activeItemHighlighted = !!($focusedItem.length || $hoveredItem.length);
                    var $newTarget;
                    switch (location) {
                        case FOCUS_UP:
                            $newTarget = $activeItemHighlighted ? this._prevItem($items) : $oldTarget;
                            if ($oldTarget.is($items.first())) {
                                this._actions.onLeftFirstItem($oldTarget)
                            }
                            break;
                        case FOCUS_DOWN:
                            $newTarget = $activeItemHighlighted ? this._nextItem($items) : $oldTarget;
                            if ($oldTarget.is($items.last())) {
                                this._actions.onLeftLastItem($oldTarget)
                            }
                            break;
                        case FOCUS_RIGHT:
                            $newTarget = this.option("rtlEnabled") ? this._hideSubmenuHandler() : this._expandSubmenuHandler($items, location);
                            break;
                        case FOCUS_LEFT:
                            $newTarget = this.option("rtlEnabled") ? this._expandSubmenuHandler($items, location) : this._hideSubmenuHandler();
                            break;
                        case FOCUS_FIRST:
                            $newTarget = $items.first();
                            break;
                        case FOCUS_LAST:
                            $newTarget = $items.last();
                            break;
                        default:
                            return _get(_getPrototypeOf(ContextMenu.prototype), "_moveFocus", this).call(this, location)
                    }
                    if (0 !== $newTarget.length) {
                        this.option("focusedElement", (0, _dom.getPublicElement)($newTarget))
                    }
                }
            }, {
                key: "_getItemsByLocation",
                value: function(location) {
                    var $activeItem = this._getActiveItem(true);
                    var $items;
                    if ((0, _array.inArray)(location, LOCAL_SUBMENU_DIRECTIONS) >= 0) {
                        $items = $activeItem.closest(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS)).children().children()
                    }
                    $items = this._getAvailableItems($items);
                    return $items
                }
            }, {
                key: "_getAriaTarget",
                value: function() {
                    return this.$element()
                }
            }, {
                key: "_refreshActiveDescendant",
                value: function() {
                    if ((0, _type.isDefined)(this._overlay)) {
                        var $target = this._overlay.$content();
                        _get(_getPrototypeOf(ContextMenu.prototype), "_refreshActiveDescendant", this).call(this, $target)
                    }
                }
            }, {
                key: "_hideSubmenuHandler",
                value: function() {
                    var $curItem = this._getActiveItem(true);
                    var $parentItem = $curItem.parents(".".concat(DX_MENU_ITEM_EXPANDED_CLASS)).first();
                    if ($parentItem.length) {
                        this._hideSubmenusOnSameLevel($parentItem);
                        this._hideSubmenu($curItem.closest(".".concat(DX_SUBMENU_CLASS)));
                        return $parentItem
                    }
                    this._actions.onCloseRootSubmenu($curItem);
                    return $curItem
                }
            }, {
                key: "_expandSubmenuHandler",
                value: function($items, location) {
                    var $curItem = this._getActiveItem(true);
                    var itemData = this._getItemData($curItem);
                    var node = this._dataAdapter.getNodeByItem(itemData);
                    var isItemHasSubmenu = this._hasSubmenu(node);
                    var $submenu = $curItem.children(".".concat(DX_SUBMENU_CLASS));
                    if (isItemHasSubmenu && !$curItem.hasClass(DX_STATE_DISABLED_CLASS)) {
                        if (!$submenu.length || "hidden" === $submenu.css("visibility")) {
                            this._showSubmenu($curItem)
                        }
                        return this._nextItem(this._getItemsByLocation(location))
                    }
                    this._actions.onExpandLastSubmenu($curItem);
                    return $curItem
                }
            }, {
                key: "_clean",
                value: function() {
                    if (this._overlay) {
                        this._overlay.$element().remove();
                        this._overlay = null
                    }
                    this._detachShowContextMenuEvents(this._getTarget());
                    _get(_getPrototypeOf(ContextMenu.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this.$element().addClass(DX_HAS_CONTEXT_MENU_CLASS);
                    _get(_getPrototypeOf(ContextMenu.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(ContextMenu.prototype), "_render", this).call(this);
                    this._renderVisibility(this.option("visible"));
                    this._addWidgetClass()
                }
            }, {
                key: "_renderContentImpl",
                value: function() {
                    this._detachShowContextMenuEvents(this._getTarget());
                    this._attachShowContextMenuEvents()
                }
            }, {
                key: "_attachKeyboardEvents",
                value: function() {
                    !this._keyboardListenerId && this._focusTarget().length && _get(_getPrototypeOf(ContextMenu.prototype), "_attachKeyboardEvents", this).call(this)
                }
            }, {
                key: "_renderContextMenuOverlay",
                value: function() {
                    if (this._overlay) {
                        return
                    }
                    var overlayOptions = this._getOverlayOptions();
                    this._overlay = this._createComponent((0, _renderer2.default)("<div>").appendTo(this._$element), _overlay2.default, overlayOptions);
                    var $overlayContent = this._overlay.$content();
                    $overlayContent.addClass(DX_CONTEXT_MENU_CLASS);
                    this._addCustomCssClass($overlayContent);
                    this._addPlatformDependentClass($overlayContent);
                    this._attachContextMenuEvent()
                }
            }, {
                key: "_itemContextMenuHandler",
                value: function(e) {
                    _get(_getPrototypeOf(ContextMenu.prototype), "_itemContextMenuHandler", this).call(this, e);
                    e.stopPropagation()
                }
            }, {
                key: "_addPlatformDependentClass",
                value: function($element) {
                    if (_devices2.default.current().phone) {
                        $element.addClass(DX_MENU_PHONE_CLASS)
                    }
                }
            }, {
                key: "_detachShowContextMenuEvents",
                value: function(target) {
                    var showEvent = this.getShowEvent(this.option("showEvent"));
                    if (!showEvent) {
                        return
                    }
                    var eventName = (0, _utils.addNamespace)(showEvent, this.NAME);
                    if (this._showContextMenuEventHandler) {
                        _events_engine2.default.off(_dom_adapter2.default.getDocument(), eventName, target, this._showContextMenuEventHandler)
                    } else {
                        _events_engine2.default.off((0, _renderer2.default)(target), eventName)
                    }
                }
            }, {
                key: "_attachShowContextMenuEvents",
                value: function() {
                    var _this3 = this;
                    var target = this._getTarget();
                    var showEvent = this.getShowEvent(this.option("showEvent"));
                    if (!showEvent) {
                        return
                    }
                    var eventName = (0, _utils.addNamespace)(showEvent, this.NAME);
                    var contextMenuAction = this._createAction(function(e) {
                        var delay = _this3.getShowDelay(_this3.option("showEvent"));
                        if (delay) {
                            setTimeout(function() {
                                return _this3._show(e.event)
                            }, delay)
                        } else {
                            _this3._show(e.event)
                        }
                    }, {
                        validatingTargetName: "target"
                    });
                    var handler = function(e) {
                        return contextMenuAction({
                            event: e,
                            target: (0, _renderer2.default)(e.currentTarget)
                        })
                    };
                    contextMenuAction = this._createAction(contextMenuAction);
                    if ((0, _type.isRenderer)(target) || target.nodeType || (0, _type.isWindow)(target)) {
                        this._showContextMenuEventHandler = void 0;
                        _events_engine2.default.on(target, eventName, handler)
                    } else {
                        this._showContextMenuEventHandler = handler;
                        _events_engine2.default.on(_dom_adapter2.default.getDocument(), eventName, target, this._showContextMenuEventHandler)
                    }
                }
            }, {
                key: "_hoverEndHandler",
                value: function(e) {
                    _get(_getPrototypeOf(ContextMenu.prototype), "_hoverEndHandler", this).call(this, e);
                    e.stopPropagation()
                }
            }, {
                key: "_renderDimensions",
                value: function() {}
            }, {
                key: "_renderContainer",
                value: function($wrapper, submenuContainer) {
                    var $holder = submenuContainer || this._itemContainer();
                    $wrapper = (0, _renderer2.default)("<div>");
                    $wrapper.appendTo($holder).addClass(DX_SUBMENU_CLASS).css("visibility", submenuContainer ? "hidden" : "visible");
                    var $itemsContainer = _get(_getPrototypeOf(ContextMenu.prototype), "_renderContainer", this).call(this, $wrapper);
                    if (submenuContainer) {
                        return $itemsContainer
                    }
                    if (this.option("width")) {
                        return $itemsContainer.css("minWidth", this.option("width"))
                    }
                    if (this.option("height")) {
                        return $itemsContainer.css("minHeight", this.option("height"))
                    }
                    return $itemsContainer
                }
            }, {
                key: "_renderSubmenuItems",
                value: function(node, $itemFrame) {
                    this._renderItems(this._getChildNodes(node), $itemFrame);
                    this._actions.onSubmenuCreated({
                        itemElement: (0, _dom.getPublicElement)($itemFrame),
                        itemData: node.internalFields.item,
                        submenuElement: (0, _dom.getPublicElement)($itemFrame.children(".".concat(DX_SUBMENU_CLASS)))
                    })
                }
            }, {
                key: "_getOverlayOptions",
                value: function() {
                    var position = this.option("position");
                    var overlayOptions = {
                        focusStateEnabled: this.option("focusStateEnabled"),
                        animation: this.option("animation"),
                        innerOverlay: true,
                        closeOnOutsideClick: this._closeOnOutsideClickHandler.bind(this),
                        propagateOutsideClick: true,
                        closeOnTargetScroll: true,
                        deferRendering: false,
                        position: {
                            at: position.at,
                            my: position.my,
                            of: this._getTarget(),
                            collision: "flipfit"
                        },
                        shading: false,
                        showTitle: false,
                        height: "auto",
                        width: "auto",
                        onShown: this._overlayShownActionHandler.bind(this),
                        onHiding: this._overlayHidingActionHandler.bind(this),
                        onHidden: this._overlayHiddenActionHandler.bind(this)
                    };
                    return overlayOptions
                }
            }, {
                key: "_overlayShownActionHandler",
                value: function(arg) {
                    this._actions.onShown(arg)
                }
            }, {
                key: "_overlayHidingActionHandler",
                value: function(arg) {
                    this._actions.onHiding(arg);
                    if (!arg.cancel) {
                        this._hideAllShownSubmenus();
                        this._setOptionWithoutOptionChange("visible", false)
                    }
                }
            }, {
                key: "_overlayHiddenActionHandler",
                value: function(arg) {
                    this._actions.onHidden(arg)
                }
            }, {
                key: "_closeOnOutsideClickHandler",
                value: function(e) {
                    var closeOnOutsideClick = this.option("closeOnOutsideClick");
                    if ((0, _type.isFunction)(closeOnOutsideClick)) {
                        return closeOnOutsideClick(e)
                    }
                    if (!closeOnOutsideClick) {
                        return false
                    }
                    if (_dom_adapter2.default.isDocument(e.target)) {
                        return true
                    }
                    var $activeItemContainer = this._getActiveItemsContainer(e.target);
                    var $itemContainers = this._getItemsContainers();
                    var $clickedItem = this._searchActiveItem(e.target);
                    var $rootItem = this.$element().parents(".".concat(DX_MENU_ITEM_CLASS));
                    var isRootItemClicked = $clickedItem[0] === $rootItem[0] && $clickedItem.length && $rootItem.length;
                    var isInnerOverlayClicked = this._isIncludeOverlay($activeItemContainer, $itemContainers) && $clickedItem.length;
                    if (isInnerOverlayClicked || isRootItemClicked) {
                        if ("onClick" === this._getShowSubmenuMode()) {
                            this._hideAllShownChildSubmenus($clickedItem)
                        }
                        return false
                    }
                    return true
                }
            }, {
                key: "_getActiveItemsContainer",
                value: function(target) {
                    return (0, _renderer2.default)(target).closest(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS))
                }
            }, {
                key: "_getItemsContainers",
                value: function() {
                    return this._overlay._$content.find(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS))
                }
            }, {
                key: "_searchActiveItem",
                value: function(target) {
                    return (0, _renderer2.default)(target).closest(".".concat(DX_MENU_ITEM_CLASS)).eq(0)
                }
            }, {
                key: "_isIncludeOverlay",
                value: function($activeOverlay, $allOverlays) {
                    var isSame = false;
                    (0, _iterator.each)($allOverlays, function(index, $overlay) {
                        if ($activeOverlay.is($overlay) && !isSame) {
                            isSame = true
                        }
                    });
                    return isSame
                }
            }, {
                key: "_hideAllShownChildSubmenus",
                value: function($clickedItem) {
                    var _this4 = this;
                    var $submenuElements = $clickedItem.find(".".concat(DX_SUBMENU_CLASS));
                    var shownSubmenus = (0, _extend.extend)([], this._shownSubmenus);
                    if ($submenuElements.length > 0) {
                        (0, _iterator.each)(shownSubmenus, function(index, $submenu) {
                            var $context = _this4._searchActiveItem($submenu.context).parent();
                            if ($context.parent().is($clickedItem.parent().parent()) && !$context.is($clickedItem.parent())) {
                                _this4._hideSubmenu($submenu)
                            }
                        })
                    }
                }
            }, {
                key: "_showSubmenu",
                value: function($item) {
                    var node = this._dataAdapter.getNodeByItem(this._getItemData($item));
                    this._hideSubmenusOnSameLevel($item);
                    if (!this._hasSubmenu(node)) {
                        return
                    }
                    var $submenu = $item.children(".".concat(DX_SUBMENU_CLASS));
                    var isSubmenuRendered = $submenu.length;
                    _get(_getPrototypeOf(ContextMenu.prototype), "_showSubmenu", this).call(this, $item);
                    if (!isSubmenuRendered) {
                        this._renderSubmenuItems(node, $item)
                    }
                    if (!this._isSubmenuVisible($submenu)) {
                        this._drawSubmenu($item)
                    }
                }
            }, {
                key: "_hideSubmenusOnSameLevel",
                value: function($item) {
                    var $expandedItems = $item.parent(".".concat(DX_MENU_ITEM_WRAPPER_CLASS)).siblings().find(".".concat(DX_MENU_ITEM_EXPANDED_CLASS));
                    if ($expandedItems.length) {
                        $expandedItems.removeClass(DX_MENU_ITEM_EXPANDED_CLASS);
                        this._hideSubmenu($expandedItems.find(".".concat(DX_SUBMENU_CLASS)))
                    }
                }
            }, {
                key: "_hideSubmenuGroup",
                value: function($submenu) {
                    if (this._isSubmenuVisible($submenu)) {
                        this._hideSubmenuCore($submenu)
                    }
                }
            }, {
                key: "_isSubmenuVisible",
                value: function($submenu) {
                    return "visible" === $submenu.css("visibility")
                }
            }, {
                key: "_drawSubmenu",
                value: function($itemElement) {
                    var animation = this.option("animation") ? this.option("animation").show : {};
                    var $submenu = $itemElement.children(".".concat(DX_SUBMENU_CLASS));
                    var submenuPosition = this._getSubmenuPosition($itemElement);
                    if (this._overlay && this._overlay.option("visible")) {
                        if (!(0, _type.isDefined)(this._shownSubmenus)) {
                            this._shownSubmenus = []
                        }
                        if ((0, _array.inArray)($submenu, this._shownSubmenus)) {
                            this._shownSubmenus.push($submenu)
                        }
                        if (animation) {
                            _fx2.default.stop($submenu)
                        }(0, _position.setup)($submenu, submenuPosition);
                        if (animation) {
                            if ((0, _type.isPlainObject)(animation.to)) {
                                animation.to.position = submenuPosition
                            }
                            this._animate($submenu, animation)
                        }
                        $submenu.css("visibility", "visible")
                    }
                }
            }, {
                key: "_animate",
                value: function($container, options) {
                    _fx2.default.animate($container, options)
                }
            }, {
                key: "_getSubmenuPosition",
                value: function($rootItem) {
                    var submenuDirection = this.option("submenuDirection").toLowerCase();
                    var $rootItemWrapper = $rootItem.parent(".".concat(DX_MENU_ITEM_WRAPPER_CLASS));
                    var position = {
                        collision: "flip",
                        of: $rootItemWrapper,
                        offset: {
                            h: 0,
                            v: -1
                        }
                    };
                    switch (submenuDirection) {
                        case "left":
                            position.at = "left top";
                            position.my = "right top";
                            break;
                        case "right":
                            position.at = "right top";
                            position.my = "left top";
                            break;
                        default:
                            if (this.option("rtlEnabled")) {
                                position.at = "left top";
                                position.my = "right top"
                            } else {
                                position.at = "right top";
                                position.my = "left top"
                            }
                    }
                    return position
                }
            }, {
                key: "_updateSubmenuVisibilityOnClick",
                value: function(actionArgs) {
                    if (!actionArgs.args.length) {
                        return
                    }
                    var itemData = actionArgs.args[0].itemData;
                    var node = this._dataAdapter.getNodeByItem(itemData);
                    if (!node) {
                        return
                    }
                    var $itemElement = (0, _renderer2.default)(actionArgs.args[0].itemElement);
                    var $submenu = $itemElement.find(".".concat(DX_SUBMENU_CLASS));
                    var shouldRenderSubmenu = this._hasSubmenu(node) && !$submenu.length;
                    if (shouldRenderSubmenu) {
                        this._renderSubmenuItems(node, $itemElement);
                        $submenu = $itemElement.find(".".concat(DX_SUBMENU_CLASS))
                    }
                    if ($itemElement.context === $submenu.context && "visible" === $submenu.css("visibility")) {
                        return
                    }
                    var notCloseMenuOnItemClick = itemData && false === itemData.closeMenuOnClick;
                    if (!itemData || itemData.disabled || notCloseMenuOnItemClick) {
                        return
                    }
                    this._updateSelectedItemOnClick(actionArgs);
                    if (0 === $submenu.length) {
                        var $prevSubmenu = (0, _renderer2.default)($itemElement.parents(".".concat(DX_SUBMENU_CLASS))[0]);
                        this._hideSubmenu($prevSubmenu);
                        if (!actionArgs.canceled && this._overlay && this._overlay.option("visible")) {
                            this.option("visible", false)
                        }
                    } else {
                        if (this._shownSubmenus && this._shownSubmenus.length > 0) {
                            if (this._shownSubmenus[0].is($submenu)) {
                                this._hideSubmenu($submenu)
                            }
                        }
                        this._showSubmenu($itemElement)
                    }
                }
            }, {
                key: "_hideSubmenu",
                value: function($curSubmenu) {
                    var _this5 = this;
                    var shownSubmenus = (0, _extend.extend)([], this._shownSubmenus);
                    (0, _iterator.each)(shownSubmenus, function(index, $submenu) {
                        if ($curSubmenu.is($submenu) || (0, _dom.contains)($curSubmenu[0], $submenu[0])) {
                            $submenu.parent().removeClass(DX_MENU_ITEM_EXPANDED_CLASS);
                            _this5._hideSubmenuCore($submenu)
                        }
                    })
                }
            }, {
                key: "_hideSubmenuCore",
                value: function($submenu) {
                    var index = (0, _array.inArray)($submenu, this._shownSubmenus);
                    var animation = this.option("animation") ? this.option("animation").hide : null;
                    if (index >= 0) {
                        this._shownSubmenus.splice(index, 1)
                    }
                    this._stopAnimate($submenu);
                    animation && this._animate($submenu, animation);
                    $submenu.css("visibility", "hidden")
                }
            }, {
                key: "_stopAnimate",
                value: function($container) {
                    _fx2.default.stop($container, true)
                }
            }, {
                key: "_hideAllShownSubmenus",
                value: function() {
                    var _this6 = this;
                    var shownSubmenus = (0, _extend.extend)([], this._shownSubmenus);
                    var $expandedItems = this._overlay.$content().find(".".concat(DX_MENU_ITEM_EXPANDED_CLASS));
                    $expandedItems.removeClass(DX_MENU_ITEM_EXPANDED_CLASS);
                    (0, _iterator.each)(shownSubmenus, function(_, $submenu) {
                        _this6._hideSubmenu($submenu)
                    })
                }
            }, {
                key: "_visibilityChanged",
                value: function(visible) {
                    if (visible) {
                        this._renderContentImpl()
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    if ((0, _array.inArray)(args.name, ACTIONS) > -1) {
                        this._initActions();
                        return
                    }
                    switch (args.name) {
                        case "visible":
                            this._renderVisibility(args.value);
                            break;
                        case "showEvent":
                        case "position":
                        case "submenuDirection":
                            this._invalidate();
                            break;
                        case "target":
                            args.previousValue && this._detachShowContextMenuEvents(args.previousValue);
                            this._invalidate();
                            break;
                        case "closeOnOutsideClick":
                            break;
                        default:
                            _get(_getPrototypeOf(ContextMenu.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_renderVisibility",
                value: function(showing) {
                    return showing ? this._show() : this._hide()
                }
            }, {
                key: "_toggleVisibility",
                value: function() {}
            }, {
                key: "_show",
                value: function(event) {
                    var args = {
                        jQEvent: event
                    };
                    var promise = (new _deferred.Deferred).reject().promise();
                    this._actions.onShowing(args);
                    if (args.cancel) {
                        return promise
                    }
                    var position = this._positionContextMenu(event);
                    if (position) {
                        if (!this._overlay) {
                            this._renderContextMenuOverlay();
                            this._overlay.$content().addClass(this._widgetClass());
                            this._renderFocusState();
                            this._attachHoverEvents();
                            this._attachClickEvent();
                            this._renderItems(this._dataAdapter.getRootNodes())
                        }
                        this._setOptionWithoutOptionChange("visible", true);
                        this._overlay.option("position", position);
                        promise = this._overlay.show();
                        event && event.stopPropagation();
                        this._setAriaAttributes()
                    }
                    return promise
                }
            }, {
                key: "_setAriaAttributes",
                value: function() {
                    this._overlayContentId = "dx-".concat(new _guid2.default);
                    this.setAria("owns", this._overlayContentId);
                    this.setAria({
                        id: this._overlayContentId,
                        role: "menu"
                    }, this._overlay.$content())
                }
            }, {
                key: "_cleanAriaAttributes",
                value: function() {
                    this._overlay && this.setAria("id", null, this._overlay.$content());
                    this.setAria("owns", void 0)
                }
            }, {
                key: "_getTarget",
                value: function() {
                    return this.option("target") || this.option("position").of || (0, _renderer2.default)(_dom_adapter2.default.getDocument())
                }
            }, {
                key: "_getContextMenuPosition",
                value: function() {
                    return (0, _extend.extend)({}, this.option("position"), {
                        of: this._getTarget()
                    })
                }
            }, {
                key: "_positionContextMenu",
                value: function(jQEvent) {
                    var position = this._getContextMenuPosition();
                    var isInitialPosition = this._isInitialOptionValue("position");
                    var positioningAction = this._createActionByOption("onPositioning", actionArgs);
                    if (jQEvent && jQEvent.preventDefault && isInitialPosition) {
                        position.of = jQEvent
                    }
                    var actionArgs = {
                        position: position,
                        event: jQEvent
                    };
                    positioningAction(actionArgs);
                    if (actionArgs.cancel) {
                        position = null
                    } else {
                        if (actionArgs.event) {
                            actionArgs.event.cancel = true;
                            jQEvent.preventDefault()
                        }
                    }
                    return position
                }
            }, {
                key: "_refresh",
                value: function() {
                    if (!(0, _window.hasWindow)()) {
                        _get(_getPrototypeOf(ContextMenu.prototype), "_refresh", this).call(this)
                    } else {
                        if (this._overlay) {
                            var lastPosition = this._overlay.option("position");
                            _get(_getPrototypeOf(ContextMenu.prototype), "_refresh", this).call(this);
                            this._overlay && this._overlay.option("position", lastPosition)
                        } else {
                            _get(_getPrototypeOf(ContextMenu.prototype), "_refresh", this).call(this)
                        }
                    }
                }
            }, {
                key: "_hide",
                value: function() {
                    var promise;
                    if (this._overlay) {
                        promise = this._overlay.hide();
                        this._setOptionWithoutOptionChange("visible", false)
                    }
                    this._cleanAriaAttributes();
                    this.option("focusedElement", null);
                    return promise || (new _deferred.Deferred).reject().promise()
                }
            }, {
                key: "toggle",
                value: function(showing) {
                    var visible = this.option("visible");
                    showing = void 0 === showing ? !visible : showing;
                    return this._renderVisibility(showing)
                }
            }, {
                key: "show",
                value: function() {
                    return this.toggle(true)
                }
            }, {
                key: "hide",
                value: function() {
                    return this.toggle(false)
                }
            }]);
            return ContextMenu
        }(_ui2.default);
        (0, _component_registrator2.default)("dxContextMenu", ContextMenu);
        module.exports = ContextMenu
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/context_menu/ui.menu_base.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var _ui = __webpack_require__( /*! ../hierarchical_collection/ui.hierarchical_collection_widget */ 345);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiMenu_baseEdit = __webpack_require__( /*! ./ui.menu_base.edit.strategy */ 628);
        var _uiMenu_baseEdit2 = _interopRequireDefault(_uiMenu_baseEdit);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _item = __webpack_require__( /*! ../collection/item */ 135);
        var _item2 = _interopRequireDefault(_item);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DX_MENU_CLASS = "dx-menu";
        var DX_MENU_NO_ICONS_CLASS = DX_MENU_CLASS + "-no-icons";
        var DX_MENU_BASE_CLASS = "dx-menu-base";
        var ITEM_CLASS = DX_MENU_CLASS + "-item";
        var DX_ITEM_CONTENT_CLASS = ITEM_CLASS + "-content";
        var DX_MENU_SELECTED_ITEM_CLASS = ITEM_CLASS + "-selected";
        var DX_MENU_ITEM_WRAPPER_CLASS = ITEM_CLASS + "-wrapper";
        var DX_MENU_ITEMS_CONTAINER_CLASS = DX_MENU_CLASS + "-items-container";
        var DX_MENU_ITEM_EXPANDED_CLASS = ITEM_CLASS + "-expanded";
        var DX_MENU_SEPARATOR_CLASS = DX_MENU_CLASS + "-separator";
        var DX_MENU_ITEM_LAST_GROUP_ITEM = DX_MENU_CLASS + "-last-group-item";
        var DX_ITEM_HAS_TEXT = ITEM_CLASS + "-has-text";
        var DX_ITEM_HAS_ICON = ITEM_CLASS + "-has-icon";
        var DX_ITEM_HAS_SUBMENU = ITEM_CLASS + "-has-submenu";
        var DX_MENU_ITEM_POPOUT_CLASS = ITEM_CLASS + "-popout";
        var DX_MENU_ITEM_POPOUT_CONTAINER_CLASS = DX_MENU_ITEM_POPOUT_CLASS + "-container";
        var DX_MENU_ITEM_CAPTION_CLASS = ITEM_CLASS + "-text";
        var SINGLE_SELECTION_MODE = "single";
        var DEFAULT_DELAY = {
            show: 50,
            hide: 300
        };
        var MenuBase = function(_HierarchicalCollecti) {
            _inherits(MenuBase, _HierarchicalCollecti);
            var _super = _createSuper(MenuBase);

            function MenuBase() {
                _classCallCheck(this, MenuBase);
                return _super.apply(this, arguments)
            }
            _createClass(MenuBase, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(MenuBase.prototype), "_getDefaultOptions", this).call(this), {
                        items: [],
                        cssClass: "",
                        activeStateEnabled: true,
                        showSubmenuMode: {
                            name: "onHover",
                            delay: {
                                show: 50,
                                hide: 300
                            }
                        },
                        animation: {
                            show: {
                                type: "fade",
                                from: 0,
                                to: 1,
                                duration: 100
                            },
                            hide: {
                                type: "fade",
                                from: 1,
                                to: 0,
                                duration: 100
                            }
                        },
                        selectByClick: false,
                        focusOnSelectedItem: false,
                        keyExpr: null,
                        _itemAttributes: {
                            role: "menuitem"
                        },
                        useInkRipple: false
                    })
                }
            }, {
                key: "_itemDataKey",
                value: function() {
                    return "dxMenuItemDataKey"
                }
            }, {
                key: "_itemClass",
                value: function() {
                    return ITEM_CLASS
                }
            }, {
                key: "_setAriaSelected",
                value: function() {}
            }, {
                key: "_selectedItemClass",
                value: function() {
                    return DX_MENU_SELECTED_ITEM_CLASS
                }
            }, {
                key: "_widgetClass",
                value: function() {
                    return DX_MENU_BASE_CLASS
                }
            }, {
                key: "_focusTarget",
                value: function() {
                    return this._itemContainer()
                }
            }, {
                key: "_clean",
                value: function() {
                    this.option("focusedElement", null);
                    _get(_getPrototypeOf(MenuBase.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_supportedKeys",
                value: function() {
                    var _this = this;
                    var selectItem = function() {
                        var $item = (0, _renderer2.default)(_this.option("focusedElement"));
                        if (!$item.length || !_this._isSelectionEnabled()) {
                            return
                        }
                        _this.selectItem($item[0])
                    };
                    return (0, _extend.extend)(_get(_getPrototypeOf(MenuBase.prototype), "_supportedKeys", this).call(this), {
                        space: selectItem,
                        pageUp: _common.noop,
                        pageDown: _common.noop
                    })
                }
            }, {
                key: "_isSelectionEnabled",
                value: function() {
                    return this.option("selectionMode") === SINGLE_SELECTION_MODE
                }
            }, {
                key: "_init",
                value: function() {
                    this._activeStateUnit = ".".concat(ITEM_CLASS);
                    _get(_getPrototypeOf(MenuBase.prototype), "_init", this).call(this);
                    this._renderSelectedItem();
                    this._initActions()
                }
            }, {
                key: "_getTextContainer",
                value: function(itemData) {
                    var itemText = itemData.text;
                    var $itemContainer = (0, _renderer2.default)("<span>").addClass(DX_MENU_ITEM_CAPTION_CLASS);
                    var itemContent = (0, _type.isPlainObject)(itemData) ? itemText : String(itemData);
                    return itemText && $itemContainer.text(itemContent)
                }
            }, {
                key: "_getPopoutContainer",
                value: function(itemData) {
                    var items = itemData.items;
                    var $popOutContainer;
                    if (items && items.length) {
                        var $popOutImage = (0, _renderer2.default)("<div>").addClass(DX_MENU_ITEM_POPOUT_CLASS);
                        $popOutContainer = (0, _renderer2.default)("<span>").addClass(DX_MENU_ITEM_POPOUT_CONTAINER_CLASS).append($popOutImage)
                    }
                    return $popOutContainer
                }
            }, {
                key: "_getDataAdapterOptions",
                value: function() {
                    return {
                        rootValue: 0,
                        multipleSelection: false,
                        recursiveSelection: false,
                        recursiveExpansion: false,
                        searchValue: ""
                    }
                }
            }, {
                key: "_selectByItem",
                value: function(selectedItem) {
                    if (!selectedItem) {
                        return
                    }
                    var nodeToSelect = this._dataAdapter.getNodeByItem(selectedItem);
                    this._dataAdapter.toggleSelection(nodeToSelect.internalFields.key, true)
                }
            }, {
                key: "_renderSelectedItem",
                value: function() {
                    var selectedKeys = this._dataAdapter.getSelectedNodesKeys();
                    var selectedKey = selectedKeys.length && selectedKeys[0];
                    var selectedItem = this.option("selectedItem");
                    if (!selectedKey) {
                        this._selectByItem(selectedItem);
                        return
                    }
                    var node = this._dataAdapter.getNodeByKey(selectedKey);
                    if (false === node.selectable) {
                        return
                    }
                    if (!selectedItem) {
                        this.option("selectedItem", node.internalFields.item);
                        return
                    }
                    if (selectedItem !== node.internalFields.item) {
                        this._dataAdapter.toggleSelection(selectedKey, false);
                        this._selectByItem(selectedItem)
                    }
                }
            }, {
                key: "_initActions",
                value: function() {}
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(MenuBase.prototype), "_initMarkup", this).call(this);
                    this._addCustomCssClass(this.$element());
                    this.option("useInkRipple") && this._renderInkRipple()
                }
            }, {
                key: "_renderInkRipple",
                value: function() {
                    this._inkRipple = (0, _utils.render)()
                }
            }, {
                key: "_toggleActiveState",
                value: function($element, value, e) {
                    _get(_getPrototypeOf(MenuBase.prototype), "_toggleActiveState", this).apply(this, arguments);
                    if (!this._inkRipple) {
                        return
                    }
                    var config = {
                        element: $element,
                        event: e
                    };
                    if (value) {
                        this._inkRipple.showWave(config)
                    } else {
                        this._inkRipple.hideWave(config)
                    }
                }
            }, {
                key: "_getShowSubmenuMode",
                value: function() {
                    var defaultValue = "onClick";
                    var optionValue = this.option("showSubmenuMode");
                    optionValue = (0, _type.isObject)(optionValue) ? optionValue.name : optionValue;
                    return this._isDesktopDevice() ? optionValue : defaultValue
                }
            }, {
                key: "_initSelectedItems",
                value: function() {}
            }, {
                key: "_isDesktopDevice",
                value: function() {
                    return "desktop" === _devices2.default.real().deviceType
                }
            }, {
                key: "_initEditStrategy",
                value: function() {
                    var Strategy = _uiMenu_baseEdit2.default;
                    this._editStrategy = new Strategy(this)
                }
            }, {
                key: "_addCustomCssClass",
                value: function($element) {
                    $element.addClass(this.option("cssClass"))
                }
            }, {
                key: "_itemWrapperSelector",
                value: function() {
                    return ".".concat(DX_MENU_ITEM_WRAPPER_CLASS)
                }
            }, {
                key: "_hoverStartHandler",
                value: function(e) {
                    var $itemElement = this._getItemElementByEventArgs(e);
                    if (!$itemElement || this._isItemDisabled($itemElement)) {
                        return
                    }
                    e.stopPropagation();
                    if ("onHover" === this._getShowSubmenuMode()) {
                        clearTimeout(this._showSubmenusTimeout);
                        this._showSubmenusTimeout = setTimeout(this._showSubmenu.bind(this, $itemElement), this._getSubmenuDelay("show"))
                    }
                }
            }, {
                key: "_getAvailableItems",
                value: function($itemElements) {
                    return _get(_getPrototypeOf(MenuBase.prototype), "_getAvailableItems", this).call(this, $itemElements).filter(function() {
                        return "hidden" !== (0, _renderer2.default)(this).css("visibility")
                    })
                }
            }, {
                key: "_isItemDisabled",
                value: function($item) {
                    return this._disabledGetter($item.data(this._itemDataKey()))
                }
            }, {
                key: "_showSubmenu",
                value: function($itemElement) {
                    this._addExpandedClass($itemElement)
                }
            }, {
                key: "_addExpandedClass",
                value: function(itemElement) {
                    (0, _renderer2.default)(itemElement).addClass(DX_MENU_ITEM_EXPANDED_CLASS)
                }
            }, {
                key: "_getSubmenuDelay",
                value: function(action) {
                    var _this$option = this.option("showSubmenuMode"),
                        delay = _this$option.delay;
                    if (!(0, _type.isDefined)(delay)) {
                        return DEFAULT_DELAY[action]
                    }
                    return (0, _type.isObject)(delay) ? delay[action] : delay
                }
            }, {
                key: "_getItemElementByEventArgs",
                value: function(eventArgs) {
                    var $target = (0, _renderer2.default)(eventArgs.target);
                    if ($target.hasClass(this._itemClass()) || $target.get(0) === eventArgs.currentTarget) {
                        return $target
                    }
                    while (!$target.hasClass(this._itemClass())) {
                        $target = $target.parent();
                        if ($target.hasClass("dx-submenu")) {
                            return null
                        }
                    }
                    return $target
                }
            }, {
                key: "_hoverEndHandler",
                value: function() {
                    clearTimeout(this._showSubmenusTimeout)
                }
            }, {
                key: "_hasSubmenu",
                value: function(node) {
                    return node && node.internalFields.childrenKeys.length
                }
            }, {
                key: "_renderContentImpl",
                value: function() {
                    this._renderItems(this._dataAdapter.getRootNodes())
                }
            }, {
                key: "_renderItems",
                value: function(nodes, submenuContainer) {
                    var _this2 = this;
                    if (nodes.length) {
                        this.hasIcons = false;
                        var $nodeContainer = this._renderContainer(this.$element(), submenuContainer);
                        var firstVisibleIndex = -1;
                        var nextGroupFirstIndex = -1;
                        (0, _iterator.each)(nodes, function(index, node) {
                            var isVisibleNode = false !== node.visible;
                            if (isVisibleNode && firstVisibleIndex < 0) {
                                firstVisibleIndex = index
                            }
                            var isBeginGroup = firstVisibleIndex < index && (node.beginGroup || index === nextGroupFirstIndex);
                            if (isBeginGroup) {
                                nextGroupFirstIndex = isVisibleNode ? index : index + 1
                            }
                            if (index === nextGroupFirstIndex && firstVisibleIndex < index) {
                                _this2._renderSeparator($nodeContainer)
                            }
                            _this2._renderItem(index, node, $nodeContainer)
                        });
                        if (!this.hasIcons) {
                            $nodeContainer.addClass(DX_MENU_NO_ICONS_CLASS)
                        }
                    }
                }
            }, {
                key: "_renderContainer",
                value: function($wrapper) {
                    return (0, _renderer2.default)("<ul>").appendTo($wrapper).addClass(DX_MENU_ITEMS_CONTAINER_CLASS)
                }
            }, {
                key: "_createDOMElement",
                value: function($nodeContainer) {
                    var $node = (0, _renderer2.default)("<li>").appendTo($nodeContainer).addClass(DX_MENU_ITEM_WRAPPER_CLASS);
                    return $node
                }
            }, {
                key: "_renderItem",
                value: function(index, node, $nodeContainer, $nodeElement) {
                    var items = this.option("items");
                    var $node = $nodeElement || this._createDOMElement($nodeContainer);
                    if (items[index + 1] && items[index + 1].beginGroup) {
                        $node.addClass(DX_MENU_ITEM_LAST_GROUP_ITEM)
                    }
                    var $itemFrame = _get(_getPrototypeOf(MenuBase.prototype), "_renderItem", this).call(this, index, node.internalFields.item, $node);
                    if (node.internalFields.item === this.option("selectedItem")) {
                        $itemFrame.addClass(DX_MENU_SELECTED_ITEM_CLASS)
                    }
                    $itemFrame.attr("tabIndex", -1);
                    if (this._hasSubmenu(node)) {
                        this.setAria("haspopup", "true", $itemFrame)
                    }
                }
            }, {
                key: "_renderItemFrame",
                value: function(index, itemData, $itemContainer) {
                    var $itemFrame = $itemContainer.children(".".concat(ITEM_CLASS));
                    return $itemFrame.length ? $itemFrame : _get(_getPrototypeOf(MenuBase.prototype), "_renderItemFrame", this).apply(this, arguments)
                }
            }, {
                key: "_refreshItem",
                value: function($item, item) {
                    var node = this._dataAdapter.getNodeByItem(item);
                    var index = $item.data(this._itemIndexKey());
                    var $nodeContainer = $item.closest("ul");
                    var $nodeElement = $item.closest("li");
                    this._renderItem(index, node, $nodeContainer, $nodeElement)
                }
            }, {
                key: "_addContentClasses",
                value: function(itemData, $itemFrame) {
                    var hasText = itemData.text ? !!itemData.text.length : false;
                    var hasIcon = !!itemData.icon;
                    var hasSubmenu = itemData.items ? !!itemData.items.length : false;
                    $itemFrame.toggleClass(DX_ITEM_HAS_TEXT, hasText);
                    $itemFrame.toggleClass(DX_ITEM_HAS_ICON, hasIcon);
                    if (!this.hasIcons) {
                        this.hasIcons = hasIcon
                    }
                    $itemFrame.toggleClass(DX_ITEM_HAS_SUBMENU, hasSubmenu)
                }
            }, {
                key: "_getItemContent",
                value: function($itemFrame) {
                    var $itemContent = _get(_getPrototypeOf(MenuBase.prototype), "_getItemContent", this).call(this, $itemFrame);
                    if (!$itemContent.length) {
                        $itemContent = $itemFrame.children(".".concat(DX_ITEM_CONTENT_CLASS))
                    }
                    return $itemContent
                }
            }, {
                key: "_postprocessRenderItem",
                value: function(args) {
                    var $itemElement = (0, _renderer2.default)(args.itemElement);
                    var selectedIndex = this._dataAdapter.getSelectedNodesKeys();
                    if (!selectedIndex.length || !this._selectedGetter(args.itemData) || !this._isItemSelectable(args.itemData)) {
                        this._setAriaSelected($itemElement, "false");
                        return
                    }
                    var node = this._dataAdapter.getNodeByItem(args.itemData);
                    if (node.internalFields.key === selectedIndex[0]) {
                        $itemElement.addClass(this._selectedItemClass());
                        this._setAriaSelected($itemElement, "true")
                    } else {
                        this._setAriaSelected($itemElement, "false")
                    }
                }
            }, {
                key: "_isItemSelectable",
                value: function(item) {
                    return false !== item.selectable
                }
            }, {
                key: "_renderSeparator",
                value: function($itemsContainer) {
                    (0, _renderer2.default)("<li>").appendTo($itemsContainer).addClass(DX_MENU_SEPARATOR_CLASS)
                }
            }, {
                key: "_itemClickHandler",
                value: function(e) {
                    if (e._skipHandling) {
                        return
                    }
                    var itemClickActionHandler = this._createAction(this._updateSubmenuVisibilityOnClick.bind(this));
                    this._itemDXEventHandler(e, "onItemClick", {}, {
                        afterExecute: itemClickActionHandler.bind(this)
                    });
                    e._skipHandling = true
                }
            }, {
                key: "_updateSubmenuVisibilityOnClick",
                value: function(actionArgs) {
                    this._updateSelectedItemOnClick(actionArgs);
                    if ("onClick" === this._getShowSubmenuMode()) {
                        this._addExpandedClass(actionArgs.args[0].itemElement)
                    }
                }
            }, {
                key: "_updateSelectedItemOnClick",
                value: function(actionArgs) {
                    var args = actionArgs.args ? actionArgs.args[0] : actionArgs;
                    if (!this._isItemSelectionAllowed(args.itemData)) {
                        return
                    }
                    var selectedItemKey = this._dataAdapter.getSelectedNodesKeys();
                    var selectedNode = selectedItemKey.length && this._dataAdapter.getNodeByKey(selectedItemKey[0]);
                    if (selectedNode) {
                        this._toggleItemSelection(selectedNode, false)
                    }
                    if (!selectedNode || selectedNode.internalFields.item !== args.itemData) {
                        this.selectItem(args.itemData)
                    } else {
                        this._fireSelectionChangeEvent(null, this.option("selectedItem"));
                        this._setOptionWithoutOptionChange("selectedItem", null)
                    }
                }
            }, {
                key: "_isItemSelectionAllowed",
                value: function(item) {
                    var isSelectionByClickEnabled = this._isSelectionEnabled() && this.option("selectByClick");
                    return !this._isContainerEmpty() && isSelectionByClickEnabled && this._isItemSelectable(item) && !this._itemsGetter(item)
                }
            }, {
                key: "_isContainerEmpty",
                value: function() {
                    return this._itemContainer().is(":empty")
                }
            }, {
                key: "_syncSelectionOptions",
                value: function() {
                    return (0, _common.asyncNoop)()
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "showSubmenuMode":
                            break;
                        case "selectedItem":
                            var node = this._dataAdapter.getNodeByItem(args.value);
                            var selectedKey = this._dataAdapter.getSelectedNodesKeys()[0];
                            if (node && node.internalFields.key !== selectedKey) {
                                if (false === node.selectable) {
                                    break
                                }
                                if (selectedKey) {
                                    this._toggleItemSelection(this._dataAdapter.getNodeByKey(selectedKey), false)
                                }
                                this._toggleItemSelection(node, true);
                                this._updateSelectedItems()
                            }
                            break;
                        case "cssClass":
                        case "position":
                        case "selectByClick":
                        case "animation":
                        case "useInkRipple":
                            this._invalidate();
                            break;
                        default:
                            _get(_getPrototypeOf(MenuBase.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_toggleItemSelection",
                value: function(node, value) {
                    var itemElement = this._getElementByItem(node.internalFields.item);
                    itemElement && (0, _renderer2.default)(itemElement).toggleClass(DX_MENU_SELECTED_ITEM_CLASS);
                    this._dataAdapter.toggleSelection(node.internalFields.key, value)
                }
            }, {
                key: "_getElementByItem",
                value: function(itemData) {
                    var _this3 = this;
                    var result;
                    (0, _iterator.each)(this._itemElements(), function(_, itemElement) {
                        if ((0, _renderer2.default)(itemElement).data(_this3._itemDataKey()) !== itemData) {
                            return true
                        }
                        result = itemElement;
                        return false
                    });
                    return result
                }
            }, {
                key: "_updateSelectedItems",
                value: function(oldSelection, newSelection) {
                    if (oldSelection || newSelection) {
                        this._fireSelectionChangeEvent(newSelection, oldSelection)
                    }
                }
            }, {
                key: "_fireSelectionChangeEvent",
                value: function(addedSelection, removedSelection) {
                    this._createActionByOption("onSelectionChanged", {
                        excludeValidators: ["disabled", "readOnly"]
                    })({
                        addedItems: [addedSelection],
                        removedItems: [removedSelection]
                    })
                }
            }, {
                key: "selectItem",
                value: function(itemElement) {
                    var itemData = itemElement.nodeType ? this._getItemData(itemElement) : itemElement;
                    var selectedKey = this._dataAdapter.getSelectedNodesKeys()[0];
                    var selectedItem = this.option("selectedItem");
                    var node = this._dataAdapter.getNodeByItem(itemData);
                    if (node.internalFields.key !== selectedKey) {
                        if (selectedKey) {
                            this._toggleItemSelection(this._dataAdapter.getNodeByKey(selectedKey), false)
                        }
                        this._toggleItemSelection(node, true);
                        this._updateSelectedItems(selectedItem, itemData);
                        this._setOptionWithoutOptionChange("selectedItem", itemData)
                    }
                }
            }, {
                key: "unselectItem",
                value: function(itemElement) {
                    var itemData = itemElement.nodeType ? this._getItemData(itemElement) : itemElement;
                    var node = this._dataAdapter.getNodeByItem(itemData);
                    var selectedItem = this.option("selectedItem");
                    if (node.internalFields.selected) {
                        this._toggleItemSelection(node, false);
                        this._updateSelectedItems(selectedItem, null);
                        this._setOptionWithoutOptionChange("selectedItem", null)
                    }
                }
            }]);
            return MenuBase
        }(_ui2.default);
        MenuBase.ItemClass = _item2.default;
        module.exports = MenuBase
    },
    /*!**********************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/hierarchical_collection/ui.hierarchical_collection_widget.js ***!
      \**********************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _icon2 = _interopRequireDefault(_icon);
        var _ui = __webpack_require__( /*! ./ui.data_adapter */ 626);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiCollection_widget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _bindable_template = __webpack_require__( /*! ../../core/templates/bindable_template */ 59);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DISABLED_STATE_CLASS = "dx-state-disabled";
        var HierarchicalCollectionWidget = _uiCollection_widget2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    keyExpr: "id",
                    displayExpr: "text",
                    selectedExpr: "selected",
                    disabledExpr: "disabled",
                    itemsExpr: "items",
                    hoverStateEnabled: true,
                    parentIdExpr: "parentId",
                    expandedExpr: "expanded"
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._initAccessors();
                this._initDataAdapter();
                this._initDynamicTemplates()
            },
            _initDataSource: function() {
                this.callBase();
                this._dataSource && this._dataSource.paginate(false)
            },
            _initDataAdapter: function() {
                var accessors = this._createDataAdapterAccessors();
                this._dataAdapter = new _ui2.default((0, _extend.extend)({
                    dataAccessors: {
                        getters: accessors.getters,
                        setters: accessors.setters
                    },
                    items: this.option("items")
                }, this._getDataAdapterOptions()))
            },
            _getDataAdapterOptions: _common.noop,
            _initDynamicTemplates: function() {
                var that = this;
                this._templateManager.addDefaultTemplates({
                    item: new _bindable_template.BindableTemplate(function($container, itemData) {
                        $container.html(itemData.html).append(this._getIconContainer(itemData)).append(this._getTextContainer(itemData)).append(this._getPopoutContainer(itemData));
                        that._addContentClasses(itemData, $container.parent())
                    }.bind(this), ["text", "html", "items", "icon"], this.option("integrationOptions.watchMethod"), {
                        text: this._displayGetter,
                        items: this._itemsGetter
                    })
                })
            },
            _getIconContainer: function(itemData) {
                return itemData.icon ? _icon2.default.getImageContainer(itemData.icon) : void 0
            },
            _getTextContainer: function(itemData) {
                return (0, _renderer2.default)("<span>").text(itemData.text)
            },
            _getPopoutContainer: _common.noop,
            _addContentClasses: _common.noop,
            _initAccessors: function() {
                var that = this;
                (0, _iterator.each)(this._getAccessors(), function(_, accessor) {
                    that._compileAccessor(accessor)
                });
                this._compileDisplayGetter()
            },
            _getAccessors: function() {
                return ["key", "selected", "items", "disabled", "parentId", "expanded"]
            },
            _getChildNodes: function(node) {
                var that = this;
                var arr = [];
                (0, _iterator.each)(node.internalFields.childrenKeys, function(_, key) {
                    var childNode = that._dataAdapter.getNodeByKey(key);
                    arr.push(childNode)
                });
                return arr
            },
            _hasChildren: function(node) {
                return node && node.internalFields.childrenKeys.length
            },
            _compileAccessor: function(optionName) {
                var getter = "_" + optionName + "Getter";
                var setter = "_" + optionName + "Setter";
                var optionExpr = this.option(optionName + "Expr");
                if (!optionExpr) {
                    this[getter] = _common.noop;
                    this[setter] = _common.noop;
                    return
                } else {
                    if ((0, _type.isFunction)(optionExpr)) {
                        this[setter] = function(obj, value) {
                            obj[optionExpr()] = value
                        };
                        this[getter] = function(obj) {
                            return obj[optionExpr()]
                        };
                        return
                    }
                }
                this[getter] = (0, _data.compileGetter)(optionExpr);
                this[setter] = (0, _data.compileSetter)(optionExpr)
            },
            _createDataAdapterAccessors: function() {
                var that = this;
                var accessors = {
                    getters: {},
                    setters: {}
                };
                (0, _iterator.each)(this._getAccessors(), function(_, accessor) {
                    var getterName = "_" + accessor + "Getter";
                    var setterName = "_" + accessor + "Setter";
                    var newAccessor = "parentId" === accessor ? "parentKey" : accessor;
                    accessors.getters[newAccessor] = that[getterName];
                    accessors.setters[newAccessor] = that[setterName]
                });
                accessors.getters.display = !this._displayGetter ? function(itemData) {
                    return itemData.text
                } : this._displayGetter;
                return accessors
            },
            _initMarkup: function() {
                this.callBase();
                this._addWidgetClass()
            },
            _addWidgetClass: function() {
                this._focusTarget().addClass(this._widgetClass())
            },
            _widgetClass: _common.noop,
            _renderItemFrame: function(index, itemData) {
                var $itemFrame = this.callBase.apply(this, arguments);
                $itemFrame.toggleClass(DISABLED_STATE_CLASS, !!this._disabledGetter(itemData));
                return $itemFrame
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "displayExpr":
                    case "keyExpr":
                        this._initAccessors();
                        this._initDynamicTemplates();
                        this.repaint();
                        break;
                    case "itemsExpr":
                    case "selectedExpr":
                    case "disabledExpr":
                    case "expandedExpr":
                    case "parentIdExpr":
                        this._initAccessors();
                        this._initDataAdapter();
                        this.repaint();
                        break;
                    case "items":
                        this._initDataAdapter();
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = HierarchicalCollectionWidget
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.base */ 630);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        __webpack_require__( /*! ./ui.data_grid.state_storing */ 640);
        __webpack_require__( /*! ./ui.data_grid.selection */ 641);
        __webpack_require__( /*! ./ui.data_grid.column_chooser */ 642);
        __webpack_require__( /*! ./ui.data_grid.grouping */ 644);
        __webpack_require__( /*! ./ui.data_grid.master_detail */ 647);
        __webpack_require__( /*! ./ui.data_grid.editing */ 648);
        __webpack_require__( /*! ./ui.data_grid.validating */ 650);
        __webpack_require__( /*! ./ui.data_grid.virtual_scrolling */ 651);
        __webpack_require__( /*! ./ui.data_grid.filter_row */ 652);
        __webpack_require__( /*! ./ui.data_grid.header_filter */ 654);
        __webpack_require__( /*! ./ui.data_grid.filter_sync */ 655);
        __webpack_require__( /*! ./ui.data_grid.filter_builder */ 659);
        __webpack_require__( /*! ./ui.data_grid.filter_panel */ 660);
        __webpack_require__( /*! ./ui.data_grid.search */ 661);
        __webpack_require__( /*! ./ui.data_grid.pager */ 662);
        __webpack_require__( /*! ./ui.data_grid.columns_resizing_reordering */ 664);
        __webpack_require__( /*! ./ui.data_grid.keyboard_navigation */ 665);
        __webpack_require__( /*! ./ui.data_grid.summary */ 666);
        __webpack_require__( /*! ./ui.data_grid.column_fixing */ 668);
        __webpack_require__( /*! ./ui.data_grid.adaptivity */ 669);
        __webpack_require__( /*! ./ui.data_grid.virtual_columns */ 670);
        __webpack_require__( /*! ./ui.data_grid.export */ 671);
        __webpack_require__( /*! ./ui.data_grid.focus */ 672);
        __webpack_require__( /*! ./ui.data_grid.row_dragging */ 673);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _uiData_grid2.default
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.column_headers.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.columns_view */ 170);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.accessibility */ 245);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var CELL_CONTENT_CLASS = "text-content";
        var HEADERS_CLASS = "headers";
        var NOWRAP_CLASS = "nowrap";
        var ROW_CLASS_SELECTOR = ".dx-row";
        var HEADER_ROW_CLASS = "dx-header-row";
        var COLUMN_LINES_CLASS = "dx-column-lines";
        var CONTEXT_MENU_SORT_ASC_ICON = "context-menu-sort-asc";
        var CONTEXT_MENU_SORT_DESC_ICON = "context-menu-sort-desc";
        var CONTEXT_MENU_SORT_NONE_ICON = "context-menu-sort-none";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var VISIBILITY_HIDDEN_CLASS = "dx-visibility-hidden";
        var TEXT_CONTENT_ALIGNMENT_CLASS_PREFIX = "dx-text-content-alignment-";
        var SORT_INDICATOR_CLASS = "dx-sort-indicator";
        var SORT_INDEX_INDICATOR_CLASS = "dx-sort-index-indicator";
        var HEADER_FILTER_CLASS_SELECTOR = ".dx-header-filter";
        var HEADER_FILTER_INDICATOR_CLASS = "dx-header-filter-indicator";
        var MULTI_ROW_HEADER_CLASS = "dx-header-multi-row";
        module.exports = {
            defaultOptions: function() {
                return {
                    showColumnHeaders: true,
                    cellHintEnabled: true
                }
            },
            views: {
                columnHeadersView: _uiGrid_core2.default.ColumnsView.inherit(function() {
                    var createCellContent = function(that, $cell, options) {
                        var $cellContent = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(CELL_CONTENT_CLASS));
                        that.setAria("role", "presentation", $cellContent);
                        addCssClassesToCellContent(that, $cell, options.column, $cellContent);
                        var showColumnLines = that.option("showColumnLines");
                        var contentAlignment = that.getController("columns").getHeaderContentAlignment(options.column.alignment);
                        return $cellContent[showColumnLines || "right" === contentAlignment ? "appendTo" : "prependTo"]($cell)
                    };

                    function addCssClassesToCellContent(that, $cell, column, $cellContent) {
                        var $indicatorElements = that._getIndicatorElements($cell, true);
                        var $visibleIndicatorElements = that._getIndicatorElements($cell);
                        var indicatorCount = $indicatorElements && $indicatorElements.length;
                        var columnAlignment = that._getColumnAlignment(column.alignment);
                        var sortIndicatorClassName = ".".concat(that._getIndicatorClassName("sort"));
                        var sortIndexIndicatorClassName = ".".concat(that._getIndicatorClassName("sortIndex"));
                        var $sortIndicator = $visibleIndicatorElements.filter(sortIndicatorClassName);
                        var $sortIndexIndicator = $visibleIndicatorElements.children().filter(sortIndexIndicatorClassName);
                        $cellContent = $cellContent || $cell.children("." + that.addWidgetPrefix(CELL_CONTENT_CLASS));
                        $cellContent.toggleClass(TEXT_CONTENT_ALIGNMENT_CLASS_PREFIX + columnAlignment, indicatorCount > 0).toggleClass(TEXT_CONTENT_ALIGNMENT_CLASS_PREFIX + ("left" === columnAlignment ? "right" : "left"), indicatorCount > 0 && "center" === column.alignment).toggleClass(SORT_INDICATOR_CLASS, !!$sortIndicator.length).toggleClass(SORT_INDEX_INDICATOR_CLASS, !!$sortIndexIndicator.length).toggleClass(HEADER_FILTER_INDICATOR_CLASS, !!$visibleIndicatorElements.filter("." + that._getIndicatorClassName("headerFilter")).length)
                    }
                    return {
                        _createTable: function() {
                            var $table = this.callBase.apply(this, arguments);
                            _events_engine2.default.on($table, "mousedown selectstart", this.createAction(function(e) {
                                var event = e.event;
                                if (event.shiftKey) {
                                    event.preventDefault()
                                }
                            }));
                            return $table
                        },
                        _isLegacyKeyboardNavigation: function() {
                            return this.option("useLegacyKeyboardNavigation")
                        },
                        _getDefaultTemplate: function(column) {
                            var that = this;
                            return function($container, options) {
                                var $content = column.command ? $container : createCellContent(that, $container, options);
                                var caption = "expand" !== column.command && column.caption;
                                if (caption) {
                                    $content.text(caption)
                                } else {
                                    if (column.command) {
                                        $container.html("&nbsp;")
                                    }
                                }
                            }
                        },
                        _getHeaderTemplate: function(column) {
                            return column.headerCellTemplate || {
                                allowRenderToDetachedContainer: true,
                                render: this._getDefaultTemplate(column)
                            }
                        },
                        _processTemplate: function(template, options) {
                            var that = this;
                            var resultTemplate;
                            var column = options.column;
                            var renderingTemplate = that.callBase(template);
                            if ("header" === options.rowType && renderingTemplate && column.headerCellTemplate && !column.command) {
                                resultTemplate = {
                                    render: function(options) {
                                        var $content = createCellContent(that, options.container, options.model);
                                        renderingTemplate.render((0, _extend.extend)({}, options, {
                                            container: $content
                                        }))
                                    }
                                }
                            } else {
                                resultTemplate = renderingTemplate
                            }
                            return resultTemplate
                        },
                        _handleDataChanged: function(e) {
                            if ("refresh" !== e.changeType) {
                                return
                            }
                            if (this._isGroupingChanged || this._requireReady) {
                                this._isGroupingChanged = false;
                                this.render()
                            }
                        },
                        _renderCell: function($row, options) {
                            var $cell = this.callBase($row, options);
                            if ("header" === options.row.rowType) {
                                $cell.addClass(CELL_FOCUS_DISABLED_CLASS);
                                if (!this._isLegacyKeyboardNavigation()) {
                                    if (options.column && !options.column.type) {
                                        $cell.attr("tabindex", this.option("tabindex") || 0)
                                    }
                                }
                            }
                            return $cell
                        },
                        _setCellAriaAttributes: function($cell, cellOptions) {
                            this.callBase($cell, cellOptions);
                            if ("header" === cellOptions.rowType) {
                                this.setAria("role", "columnheader", $cell);
                                if (cellOptions.column && !cellOptions.column.command && !cellOptions.column.isBand) {
                                    $cell.attr("id", cellOptions.column.headerId);
                                    this.setAria("label", _message2.default.format("dxDataGrid-ariaColumn") + " " + cellOptions.column.caption, $cell)
                                }
                            }
                        },
                        _createRow: function(row) {
                            var $row = this.callBase(row).toggleClass(COLUMN_LINES_CLASS, this.option("showColumnLines"));
                            if ("header" === row.rowType) {
                                $row.addClass(HEADER_ROW_CLASS);
                                if (!this._isLegacyKeyboardNavigation()) {
                                    (0, _uiGrid_core3.registerKeyboardAction)("columnHeaders", this, $row, "td", this._handleActionKeyDown.bind(this))
                                }
                            }
                            return $row
                        },
                        _handleActionKeyDown: function(args) {
                            var event = args.event;
                            var $target = (0, _renderer2.default)(event.target);
                            this._lastActionElement = event.target;
                            if ($target.is(HEADER_FILTER_CLASS_SELECTOR)) {
                                var headerFilterController = this.getController("headerFilter");
                                var $column = $target.closest("td");
                                var columnIndex = this.getColumnIndexByElement($column);
                                if (columnIndex >= 0) {
                                    headerFilterController.showHeaderFilterMenu(columnIndex, false)
                                }
                            } else {
                                var $row = $target.closest(ROW_CLASS_SELECTOR);
                                this._processHeaderAction(event, $row)
                            }
                            event.preventDefault()
                        },
                        _renderCore: function() {
                            var that = this;
                            var $container = that.element();
                            if (that._tableElement && !that._dataController.isLoaded() && !that._hasRowElements) {
                                return
                            }
                            $container.addClass(that.addWidgetPrefix(HEADERS_CLASS)).toggleClass(that.addWidgetPrefix(NOWRAP_CLASS), !that.option("wordWrapEnabled")).empty();
                            that.setAria("role", "presentation", $container);
                            that._updateContent(that._renderTable());
                            if (that.getRowCount() > 1) {
                                $container.addClass(MULTI_ROW_HEADER_CLASS)
                            }
                            that.callBase.apply(that, arguments)
                        },
                        _renderRows: function() {
                            var that = this;
                            if (that._dataController.isLoaded() || that._hasRowElements) {
                                that.callBase.apply(that, arguments);
                                that._hasRowElements = true
                            }
                        },
                        _getRowVisibleColumns: function(rowIndex) {
                            return this._columnsController.getVisibleColumns(rowIndex)
                        },
                        _renderRow: function($table, options) {
                            options.columns = this._getRowVisibleColumns(options.row.rowIndex);
                            this.callBase($table, options)
                        },
                        _createCell: function(options) {
                            var column = options.column;
                            var $cellElement = this.callBase.apply(this, arguments);
                            column.rowspan > 1 && "header" === options.rowType && $cellElement.attr("rowSpan", column.rowspan);
                            return $cellElement
                        },
                        _getRows: function() {
                            var result = [];
                            var rowCount = this.getRowCount();
                            if (this.option("showColumnHeaders")) {
                                for (var i = 0; i < rowCount; i++) {
                                    result.push({
                                        rowType: "header",
                                        rowIndex: i
                                    })
                                }
                            }
                            return result
                        },
                        _getCellTemplate: function(options) {
                            if ("header" === options.rowType) {
                                return this._getHeaderTemplate(options.column)
                            }
                        },
                        _columnOptionChanged: function(e) {
                            var changeTypes = e.changeTypes;
                            var optionNames = e.optionNames;
                            if (changeTypes.grouping) {
                                this._isGroupingChanged = true;
                                return
                            }
                            this.callBase(e);
                            if (optionNames.width || optionNames.visible) {
                                this.resizeCompleted.fire()
                            }
                        },
                        _isElementVisible: function(elementOptions) {
                            return elementOptions && elementOptions.visible
                        },
                        _alignCaptionByCenter: function($cell) {
                            var $indicatorsContainer = this._getIndicatorContainer($cell, true);
                            if ($indicatorsContainer && $indicatorsContainer.length) {
                                $indicatorsContainer.filter("." + VISIBILITY_HIDDEN_CLASS).remove();
                                $indicatorsContainer = this._getIndicatorContainer($cell);
                                $indicatorsContainer.clone().addClass(VISIBILITY_HIDDEN_CLASS).css("float", "").insertBefore($cell.children("." + this.addWidgetPrefix(CELL_CONTENT_CLASS)))
                            }
                        },
                        _updateCell: function($cell, options) {
                            if ("header" === options.rowType && "center" === options.column.alignment) {
                                this._alignCaptionByCenter($cell)
                            }
                            this.callBase.apply(this, arguments)
                        },
                        _updateIndicator: function($cell, column, indicatorName) {
                            var $indicatorElement = this.callBase.apply(this, arguments);
                            if ("center" === column.alignment) {
                                this._alignCaptionByCenter($cell)
                            }
                            addCssClassesToCellContent(this, $cell, column);
                            return $indicatorElement
                        },
                        _getIndicatorContainer: function($cell, returnAll) {
                            var $indicatorsContainer = this.callBase($cell);
                            return returnAll ? $indicatorsContainer : $indicatorsContainer.filter(":not(." + VISIBILITY_HIDDEN_CLASS + ")")
                        },
                        _isSortableElement: function() {
                            return true
                        },
                        getHeadersRowHeight: function() {
                            var $tableElement = this._getTableElement();
                            var $headerRows = $tableElement && $tableElement.find("." + HEADER_ROW_CLASS);
                            return $headerRows && $headerRows.toArray().reduce(function(sum, headerRow) {
                                return sum + (0, _renderer2.default)(headerRow).height()
                            }, 0) || 0
                        },
                        getHeaderElement: function(index) {
                            var columnElements = this.getColumnElements();
                            return columnElements && columnElements.eq(index)
                        },
                        getColumnElements: function(index, bandColumnIndex) {
                            var that = this;
                            var $cellElement;
                            var columnsController = that._columnsController;
                            var rowCount = that.getRowCount();
                            if (that.option("showColumnHeaders")) {
                                if (rowCount > 1 && (!(0, _type.isDefined)(index) || (0, _type.isDefined)(bandColumnIndex))) {
                                    var result = [];
                                    var visibleColumns = (0, _type.isDefined)(bandColumnIndex) ? columnsController.getChildrenByBandColumn(bandColumnIndex, true) : columnsController.getVisibleColumns();
                                    (0, _iterator.each)(visibleColumns, function(_, column) {
                                        var rowIndex = (0, _type.isDefined)(index) ? index : columnsController.getRowIndex(column.index);
                                        $cellElement = that._getCellElement(rowIndex, columnsController.getVisibleIndex(column.index, rowIndex));
                                        $cellElement && result.push($cellElement.get(0))
                                    });
                                    return (0, _renderer2.default)(result)
                                } else {
                                    if (!index || index < rowCount) {
                                        return that.getCellElements(index || 0)
                                    }
                                }
                            }
                        },
                        getColumnIndexByElement: function($cell) {
                            var cellIndex = this.getCellIndex($cell);
                            var $row = $cell.closest(".dx-row");
                            var rowIndex = $row[0].rowIndex;
                            var column = this.getColumns(rowIndex)[cellIndex];
                            return column ? column.index : -1
                        },
                        getVisibleColumnIndex: function(columnIndex, rowIndex) {
                            var column = this.getColumns()[columnIndex];
                            return column ? this._columnsController.getVisibleIndex(column.index, rowIndex) : -1
                        },
                        getColumnWidths: function() {
                            var $columnElements = this.getColumnElements();
                            if ($columnElements && $columnElements.length) {
                                return this._getWidths($columnElements)
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        allowDragging: function(column, sourceLocation, draggingPanels) {
                            var i;
                            var draggableColumnCount = 0;
                            var rowIndex = column && this._columnsController.getRowIndex(column.index);
                            var columns = this.getColumns(0 === rowIndex ? 0 : null);
                            var canHideColumn = (null === column || void 0 === column ? void 0 : column.allowHiding) && columns.length > 1;
                            var allowDrag = function(column) {
                                return column.allowReordering || column.allowGrouping || column.allowHiding
                            };
                            for (i = 0; i < columns.length; i++) {
                                if (allowDrag(columns[i])) {
                                    draggableColumnCount++
                                }
                            }
                            if (draggableColumnCount <= 1 && !canHideColumn) {
                                return false
                            } else {
                                if (!draggingPanels) {
                                    return (this.option("allowColumnReordering") || this._columnsController.isColumnOptionUsed("allowReordering")) && column && column.allowReordering
                                }
                            }
                            for (i = 0; i < draggingPanels.length; i++) {
                                var draggingPanel = draggingPanels[i];
                                if (draggingPanel && draggingPanel.allowDragging(column, sourceLocation)) {
                                    return true
                                }
                            }
                            return false
                        },
                        getBoundingRect: function() {
                            var that = this;
                            var $columnElements = that.getColumnElements();
                            if ($columnElements && $columnElements.length) {
                                var offset = that._getTableElement().offset();
                                return {
                                    top: offset.top
                                }
                            }
                            return null
                        },
                        getName: function() {
                            return "headers"
                        },
                        getColumnCount: function() {
                            var $columnElements = this.getColumnElements();
                            return $columnElements ? $columnElements.length : 0
                        },
                        isVisible: function() {
                            return this.option("showColumnHeaders")
                        },
                        optionChanged: function(args) {
                            var that = this;
                            switch (args.name) {
                                case "showColumnHeaders":
                                case "wordWrapEnabled":
                                case "showColumnLines":
                                    that._invalidate(true, true);
                                    args.handled = true;
                                    break;
                                default:
                                    that.callBase(args)
                            }
                        },
                        getHeight: function() {
                            return this.getElementHeight()
                        },
                        getContextMenuItems: function(options) {
                            var that = this;
                            var column = options.column;
                            if (options.row && ("header" === options.row.rowType || "detailAdaptive" === options.row.rowType)) {
                                var sortingOptions = that.option("sorting");
                                if (sortingOptions && "none" !== sortingOptions.mode && column && column.allowSorting) {
                                    var onItemClick = function(params) {
                                        setTimeout(function() {
                                            that._columnsController.changeSortOrder(column.index, params.itemData.value)
                                        })
                                    };
                                    return [{
                                        text: sortingOptions.ascendingText,
                                        value: "asc",
                                        disabled: "asc" === column.sortOrder,
                                        icon: CONTEXT_MENU_SORT_ASC_ICON,
                                        onItemClick: onItemClick
                                    }, {
                                        text: sortingOptions.descendingText,
                                        value: "desc",
                                        disabled: "desc" === column.sortOrder,
                                        icon: CONTEXT_MENU_SORT_DESC_ICON,
                                        onItemClick: onItemClick
                                    }, {
                                        text: sortingOptions.clearText,
                                        value: "none",
                                        disabled: !column.sortOrder,
                                        icon: CONTEXT_MENU_SORT_NONE_ICON,
                                        onItemClick: onItemClick
                                    }]
                                }
                            }
                        },
                        getRowCount: function() {
                            return this._columnsController && this._columnsController.getRowCount()
                        },
                        setRowsOpacity: function(columnIndex, value, rowIndex) {
                            var that = this;
                            var i;
                            var columnElements;
                            var rowCount = that.getRowCount();
                            var columns = that._columnsController.getColumns();
                            var column = columns && columns[columnIndex];
                            var columnID = column && column.isBand && column.index;
                            var setColumnOpacity = function(index, column) {
                                if (column.ownerBand === columnID) {
                                    columnElements.eq(index).css({
                                        opacity: value
                                    });
                                    if (column.isBand) {
                                        that.setRowsOpacity(column.index, value, i + 1)
                                    }
                                }
                            };
                            if ((0, _type.isDefined)(columnID)) {
                                rowIndex = rowIndex || 0;
                                for (i = rowIndex; i < rowCount; i++) {
                                    columnElements = that.getCellElements(i);
                                    (0, _iterator.each)(that.getColumns(i), setColumnOpacity)
                                }
                            }
                        }
                    }
                }())
            }
        }
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.column_state_mixin.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLUMN_INDICATORS_CLASS = "dx-column-indicators";
        var GROUP_PANEL_ITEM_CLASS = "dx-group-panel-item";
        module.exports = {
            _applyColumnState: function(options) {
                var _that$component;
                var that = this;
                var rtlEnabled = this.option("rtlEnabled");
                var columnAlignment = that._getColumnAlignment(options.column.alignment, rtlEnabled);
                var parameters = (0, _extend.extend)(true, {
                    columnAlignment: columnAlignment
                }, options);
                var isGroupPanelItem = parameters.rootElement.hasClass(GROUP_PANEL_ITEM_CLASS);
                var $indicatorsContainer = that._createIndicatorContainer(parameters, isGroupPanelItem);
                var $span = (0, _renderer2.default)("<span>").addClass(that._getIndicatorClassName(options.name));
                var columnsController = null === (_that$component = that.component) || void 0 === _that$component ? void 0 : _that$component.getController("columns");
                var indicatorAlignment = (null === columnsController || void 0 === columnsController ? void 0 : columnsController.getHeaderContentAlignment(columnAlignment)) || columnAlignment;
                parameters.container = $indicatorsContainer;
                parameters.indicator = $span;
                that._renderIndicator(parameters);
                $indicatorsContainer[(isGroupPanelItem || !options.showColumnLines) && "left" === indicatorAlignment ? "appendTo" : "prependTo"](options.rootElement);
                return $span
            },
            _getIndicatorClassName: _common.noop,
            _getColumnAlignment: function(alignment, rtlEnabled) {
                rtlEnabled = rtlEnabled || this.option("rtlEnabled");
                return alignment && "center" !== alignment ? alignment : (0, _position.getDefaultAlignment)(rtlEnabled)
            },
            _createIndicatorContainer: function(options, ignoreIndicatorAlignment) {
                var $indicatorsContainer = this._getIndicatorContainer(options.rootElement);
                var indicatorAlignment = "left" === options.columnAlignment ? "right" : "left";
                if (!$indicatorsContainer.length) {
                    $indicatorsContainer = (0, _renderer2.default)("<div>").addClass(COLUMN_INDICATORS_CLASS)
                }
                this.setAria("role", "presentation", $indicatorsContainer);
                return $indicatorsContainer.css("float", options.showColumnLines && !ignoreIndicatorAlignment ? indicatorAlignment : null)
            },
            _getIndicatorContainer: function($cell) {
                return $cell && $cell.find("." + COLUMN_INDICATORS_CLASS)
            },
            _getIndicatorElements: function($cell) {
                var $indicatorContainer = this._getIndicatorContainer($cell);
                return $indicatorContainer && $indicatorContainer.children()
            },
            _renderIndicator: function(options) {
                var $container = options.container;
                var $indicator = options.indicator;
                $container && $indicator && $container.append($indicator)
            },
            _updateIndicators: function(indicatorName) {
                var that = this;
                var columns = that.getColumns();
                var $cells = that.getColumnElements();
                var $cell;
                if (!$cells || columns.length !== $cells.length) {
                    return
                }
                for (var i = 0; i < columns.length; i++) {
                    $cell = $cells.eq(i);
                    that._updateIndicator($cell, columns[i], indicatorName);
                    var rowOptions = $cell.parent().data("options");
                    if (rowOptions && rowOptions.cells) {
                        rowOptions.cells[$cell.index()].column = columns[i]
                    }
                }
            },
            _updateIndicator: function($cell, column, indicatorName) {
                if (!column.command) {
                    return this._applyColumnState({
                        name: indicatorName,
                        rootElement: $cell,
                        column: column,
                        showColumnLines: this.option("showColumnLines")
                    })
                }
            }
        }
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.columns_controller.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _variable_wrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _object = __webpack_require__( /*! ../../core/utils/object */ 47);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _date_serialization2 = _interopRequireDefault(_date_serialization);
        var _number = __webpack_require__( /*! ../../localization/number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _abstract_store = __webpack_require__( /*! ../../data/abstract_store */ 103);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _utils = __webpack_require__( /*! ../../data/data_source/utils */ 64);
        var _filtering = __webpack_require__( /*! ../shared/filtering */ 169);
        var _filtering2 = _interopRequireDefault(_filtering);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var USER_STATE_FIELD_NAMES_15_1 = ["filterValues", "filterType", "fixed", "fixedPosition"];
        var USER_STATE_FIELD_NAMES = ["visibleIndex", "dataField", "name", "dataType", "width", "visible", "sortOrder", "lastSortOrder", "sortIndex", "groupIndex", "filterValue", "selectedFilterOperation", "added"].concat(USER_STATE_FIELD_NAMES_15_1);
        var IGNORE_COLUMN_OPTION_NAMES = {
            visibleWidth: true,
            bestFitWidth: true,
            bufferedFilterValue: true
        };
        var COMMAND_EXPAND_CLASS = "dx-command-expand";
        var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
        var GROUP_COMMAND_COLUMN_NAME = "groupExpand";
        var regExp = /columns\[(\d+)\]\.?/gi;
        var globalColumnId = 1;
        module.exports = {
            defaultOptions: function() {
                return {
                    commonColumnSettings: {
                        allowFiltering: true,
                        allowHiding: true,
                        allowSorting: true,
                        allowEditing: true,
                        encodeHtml: true,
                        trueText: _message2.default.format("dxDataGrid-trueText"),
                        falseText: _message2.default.format("dxDataGrid-falseText")
                    },
                    allowColumnReordering: false,
                    allowColumnResizing: false,
                    columnResizingMode: "nextColumn",
                    columnMinWidth: void 0,
                    columnWidth: void 0,
                    adaptColumnWidthByRatio: true,
                    columns: void 0,
                    regenerateColumnsByVisibleItems: false,
                    customizeColumns: null,
                    dateSerializationFormat: void 0
                }
            },
            controllers: {
                columns: _uiGrid_core2.default.Controller.inherit(function() {
                    var DEFAULT_COLUMN_OPTIONS = {
                        visible: true,
                        showInColumnChooser: true
                    };
                    var DATATYPE_OPERATIONS = {
                        number: ["=", "<>", "<", ">", "<=", ">=", "between"],
                        string: ["contains", "notcontains", "startswith", "endswith", "=", "<>"],
                        date: ["=", "<>", "<", ">", "<=", ">=", "between"],
                        datetime: ["=", "<>", "<", ">", "<=", ">=", "between"]
                    };
                    var COLUMN_INDEX_OPTIONS = {
                        visibleIndex: true,
                        groupIndex: true,
                        grouped: true,
                        sortIndex: true,
                        sortOrder: true
                    };
                    var GROUP_LOCATION = "group";
                    var COLUMN_CHOOSER_LOCATION = "columnChooser";
                    var setFilterOperationsAsDefaultValues = function(column) {
                        column.filterOperations = column.defaultFilterOperations
                    };
                    var createColumn = function(that, columnOptions, userStateColumnOptions, bandColumn) {
                        var commonColumnOptions = {};
                        if (columnOptions) {
                            if ((0, _type.isString)(columnOptions)) {
                                columnOptions = {
                                    dataField: columnOptions
                                }
                            }
                            var result = {};
                            if (columnOptions.command) {
                                result = (0, _object.deepExtendArraySafe)(commonColumnOptions, columnOptions)
                            } else {
                                commonColumnOptions = that.getCommonSettings(columnOptions);
                                if (userStateColumnOptions && userStateColumnOptions.name && userStateColumnOptions.dataField) {
                                    columnOptions = (0, _extend.extend)({}, columnOptions, {
                                        dataField: userStateColumnOptions.dataField
                                    })
                                }
                                var calculatedColumnOptions = that._createCalculatedColumnOptions(columnOptions, bandColumn);
                                if (!columnOptions.type) {
                                    result = {
                                        headerId: "dx-col-".concat(globalColumnId++)
                                    }
                                }
                                result = (0, _object.deepExtendArraySafe)(result, DEFAULT_COLUMN_OPTIONS);
                                (0, _object.deepExtendArraySafe)(result, commonColumnOptions);
                                (0, _object.deepExtendArraySafe)(result, calculatedColumnOptions);
                                (0, _object.deepExtendArraySafe)(result, columnOptions);
                                (0, _object.deepExtendArraySafe)(result, {
                                    selector: null
                                })
                            }
                            if (columnOptions.filterOperations === columnOptions.defaultFilterOperations) {
                                setFilterOperationsAsDefaultValues(result)
                            }
                            return result
                        }
                    };
                    var createColumnsFromOptions = function createColumnsFromOptions(that, columnsOptions, bandColumn) {
                        var result = [];
                        if (columnsOptions) {
                            _iterator2.default.each(columnsOptions, function(index, columnOptions) {
                                var userStateColumnOptions = that._columnsUserState && checkUserStateColumn(columnOptions, that._columnsUserState[index]) && that._columnsUserState[index];
                                var column = createColumn(that, columnOptions, userStateColumnOptions, bandColumn);
                                if (column) {
                                    if (bandColumn) {
                                        column.ownerBand = bandColumn
                                    }
                                    result.push(column);
                                    if (column.columns) {
                                        result = result.concat(createColumnsFromOptions(that, column.columns, column));
                                        delete column.columns;
                                        column.hasColumns = true
                                    }
                                }
                            })
                        }
                        return result
                    };
                    var getParentBandColumns = function(columnIndex, columnParentByIndex) {
                        var result = [];
                        var parent = columnParentByIndex[columnIndex];
                        while (parent) {
                            result.unshift(parent);
                            columnIndex = parent.index;
                            parent = columnParentByIndex[columnIndex]
                        }
                        return result
                    };
                    var _getChildrenByBandColumn = function(columnIndex, columnChildrenByIndex, recursive) {
                        var result = [];
                        var children = columnChildrenByIndex[columnIndex];
                        if (children) {
                            for (var i = 0; i < children.length; i++) {
                                var column = children[i];
                                if (!(0, _type.isDefined)(column.groupIndex) || column.showWhenGrouped) {
                                    result.push(column);
                                    if (recursive && column.isBand) {
                                        result = result.concat(_getChildrenByBandColumn(column.index, columnChildrenByIndex, recursive))
                                    }
                                }
                            }
                        }
                        return result
                    };
                    var getColumnByIndexes = function(that, columnIndexes) {
                        var result;
                        var columns;
                        var bandColumnsCache = that.getBandColumnsCache();
                        var callbackFilter = function(column) {
                            var ownerBand = result ? result.index : void 0;
                            return column.ownerBand === ownerBand
                        };
                        if (bandColumnsCache.isPlain) {
                            result = that._columns[columnIndexes[0]]
                        } else {
                            columns = that._columns.filter(callbackFilter);
                            for (var i = 0; i < columnIndexes.length; i++) {
                                result = columns[columnIndexes[i]];
                                if (result) {
                                    columns = that._columns.filter(callbackFilter)
                                }
                            }
                        }
                        return result
                    };
                    var getColumnFullPath = function(that, column) {
                        var result = [];
                        var columns;
                        var bandColumnsCache = that.getBandColumnsCache();
                        var callbackFilter = function(item) {
                            return item.ownerBand === column.ownerBand
                        };
                        if (bandColumnsCache.isPlain) {
                            var columnIndex = that._columns.indexOf(column);
                            if (columnIndex >= 0) {
                                result = ["columns[".concat(columnIndex, "]")]
                            }
                        } else {
                            columns = that._columns.filter(callbackFilter);
                            while (columns.length && columns.indexOf(column) !== -1) {
                                result.unshift("columns[".concat(columns.indexOf(column), "]"));
                                column = bandColumnsCache.columnParentByIndex[column.index];
                                columns = column ? that._columns.filter(callbackFilter) : []
                            }
                        }
                        return result.join(".")
                    };
                    var calculateColspan = function calculateColspan(that, columnID) {
                        var colspan = 0;
                        var columns = that.getChildrenByBandColumn(columnID, true);
                        _iterator2.default.each(columns, function(_, column) {
                            if (column.isBand) {
                                column.colspan = column.colspan || calculateColspan(that, column.index);
                                colspan += column.colspan || 1
                            } else {
                                colspan += 1
                            }
                        });
                        return colspan
                    };
                    var processBandColumns = function(that, columns, bandColumnsCache) {
                        var rowspan;
                        for (var i = 0; i < columns.length; i++) {
                            var column = columns[i];
                            if (column.visible || column.command) {
                                if (column.isBand) {
                                    column.colspan = column.colspan || calculateColspan(that, column.index)
                                }
                                if (!column.isBand || !column.colspan) {
                                    rowspan = that.getRowCount();
                                    if (!column.command && (!(0, _type.isDefined)(column.groupIndex) || column.showWhenGrouped)) {
                                        rowspan -= getParentBandColumns(column.index, bandColumnsCache.columnParentByIndex).length
                                    }
                                    if (rowspan > 1) {
                                        column.rowspan = rowspan
                                    }
                                }
                            }
                        }
                    };
                    var getValueDataType = function(value) {
                        var dataType = (0, _type.type)(value);
                        if ("string" !== dataType && "boolean" !== dataType && "number" !== dataType && "date" !== dataType && "object" !== dataType) {
                            dataType = void 0
                        }
                        return dataType
                    };
                    var getSerializationFormat = function(dataType, value) {
                        switch (dataType) {
                            case "date":
                            case "datetime":
                                return _date_serialization2.default.getDateSerializationFormat(value);
                            case "number":
                                if ((0, _type.isString)(value)) {
                                    return "string"
                                }
                                if ((0, _type.isNumeric)(value)) {
                                    return null
                                }
                        }
                    };
                    var updateSerializers = function(options, dataType) {
                        if (!options.deserializeValue) {
                            if ((0, _uiGrid_core3.isDateType)(dataType)) {
                                options.deserializeValue = function(value) {
                                    return _date_serialization2.default.deserializeDate(value)
                                };
                                options.serializeValue = function(value) {
                                    return (0, _type.isString)(value) ? value : _date_serialization2.default.serializeDate(value, this.serializationFormat)
                                }
                            }
                            if ("number" === dataType) {
                                options.deserializeValue = function(value) {
                                    var parsedValue = parseFloat(value);
                                    return isNaN(parsedValue) ? value : parsedValue
                                };
                                options.serializeValue = function(value, target) {
                                    if ("filter" === target) {
                                        return value
                                    }
                                    return (0, _type.isDefined)(value) && "string" === this.serializationFormat ? value.toString() : value
                                }
                            }
                        }
                    };
                    var getAlignmentByDataType = function(dataType, isRTL) {
                        switch (dataType) {
                            case "number":
                                return "right";
                            case "boolean":
                                return "center";
                            default:
                                return (0, _position.getDefaultAlignment)(isRTL)
                        }
                    };
                    var customizeTextForBooleanDataType = function(e) {
                        if (true === e.value) {
                            return this.trueText || "true"
                        } else {
                            if (false === e.value) {
                                return this.falseText || "false"
                            } else {
                                return e.valueText || ""
                            }
                        }
                    };
                    var getCustomizeTextByDataType = function(dataType) {
                        if ("boolean" === dataType) {
                            return customizeTextForBooleanDataType
                        }
                    };
                    var createColumnsFromDataSource = function(that, dataSource) {
                        var firstItems = that._getFirstItems(dataSource);
                        var fieldName;
                        var processedFields = {};
                        var result = [];
                        for (var i = 0; i < firstItems.length; i++) {
                            if (firstItems[i]) {
                                for (fieldName in firstItems[i]) {
                                    if (!(0, _type.isFunction)(firstItems[i][fieldName]) || (0, _variable_wrapper.isWrapped)(firstItems[i][fieldName])) {
                                        processedFields[fieldName] = true
                                    }
                                }
                            }
                        }
                        for (fieldName in processedFields) {
                            if (0 !== fieldName.indexOf("__")) {
                                var column = createColumn(that, fieldName);
                                result.push(column)
                            }
                        }
                        return result
                    };
                    var updateColumnIndexes = function(that) {
                        _iterator2.default.each(that._columns, function(index, column) {
                            column.index = index
                        });
                        _iterator2.default.each(that._columns, function(index, column) {
                            if ((0, _type.isObject)(column.ownerBand)) {
                                column.ownerBand = column.ownerBand.index
                            }
                        });
                        _iterator2.default.each(that._commandColumns, function(index, column) {
                            column.index = -(index + 1)
                        })
                    };
                    var updateColumnGroupIndexes = function(that, currentColumn) {
                        (0, _array.normalizeIndexes)(that._columns, "groupIndex", currentColumn, function(column) {
                            var grouped = column.grouped;
                            delete column.grouped;
                            return grouped
                        })
                    };
                    var updateColumnSortIndexes = function(that, currentColumn) {
                        _iterator2.default.each(that._columns, function(index, column) {
                            if ((0, _type.isDefined)(column.sortIndex) && !isSortOrderValid(column.sortOrder)) {
                                delete column.sortIndex
                            }
                        });
                        (0, _array.normalizeIndexes)(that._columns, "sortIndex", currentColumn, function(column) {
                            return !(0, _type.isDefined)(column.groupIndex) && isSortOrderValid(column.sortOrder)
                        })
                    };
                    var updateColumnVisibleIndexes = function(that, currentColumn) {
                        var key;
                        var column;
                        var bandColumns = {};
                        var result = [];
                        var bandColumnsCache = that.getBandColumnsCache();
                        var columns = that._columns.filter(function(column) {
                            return !column.command
                        });
                        for (var i = 0; i < columns.length; i++) {
                            column = columns[i];
                            var parentBandColumns = getParentBandColumns(i, bandColumnsCache.columnParentByIndex);
                            if (parentBandColumns.length) {
                                var bandColumnIndex = parentBandColumns[parentBandColumns.length - 1].index;
                                bandColumns[bandColumnIndex] = bandColumns[bandColumnIndex] || [];
                                bandColumns[bandColumnIndex].push(column)
                            } else {
                                result.push(column)
                            }
                        }
                        for (key in bandColumns) {
                            (0, _array.normalizeIndexes)(bandColumns[key], "visibleIndex", currentColumn)
                        }(0, _array.normalizeIndexes)(result, "visibleIndex", currentColumn)
                    };
                    var getColumnIndexByVisibleIndex = function(that, visibleIndex, location) {
                        var rowIndex = (0, _type.isObject)(visibleIndex) ? visibleIndex.rowIndex : null;
                        var columns = location === GROUP_LOCATION ? that.getGroupColumns() : location === COLUMN_CHOOSER_LOCATION ? that.getChooserColumns() : that.getVisibleColumns(rowIndex);
                        var column;
                        visibleIndex = (0, _type.isObject)(visibleIndex) ? visibleIndex.columnIndex : visibleIndex;
                        column = columns[visibleIndex];
                        if (column && column.type === GROUP_COMMAND_COLUMN_NAME) {
                            column = that._columns.filter(function(col) {
                                return column.type === col.type
                            })[0] || column
                        }
                        return column && (0, _type.isDefined)(column.index) ? column.index : -1
                    };
                    var moveColumnToGroup = function(that, column, groupIndex) {
                        var groupColumns = that.getGroupColumns();
                        var i;
                        if (groupIndex >= 0) {
                            for (i = 0; i < groupColumns.length; i++) {
                                if (groupColumns[i].groupIndex >= groupIndex) {
                                    groupColumns[i].groupIndex++
                                }
                            }
                        } else {
                            groupIndex = 0;
                            for (i = 0; i < groupColumns.length; i++) {
                                groupIndex = Math.max(groupIndex, groupColumns[i].groupIndex + 1)
                            }
                        }
                        return groupIndex
                    };

                    function checkUserStateColumn(column, userStateColumn) {
                        return column && userStateColumn && userStateColumn.name === column.name && (userStateColumn.dataField === column.dataField || column.name)
                    }
                    var applyUserState = function(that) {
                        var columnsUserState = that._columnsUserState;
                        var ignoreColumnOptionNames = that._ignoreColumnOptionNames || [];
                        var columns = that._columns;
                        var columnCountById = {};
                        var resultColumns = [];
                        var allColumnsHaveState = true;
                        var userStateColumnIndexes = [];
                        var column;
                        var userStateColumnIndex;
                        var i;

                        function applyFieldsState(column, userStateColumn) {
                            if (!userStateColumn) {
                                return
                            }
                            for (var index = 0; index < USER_STATE_FIELD_NAMES.length; index++) {
                                var fieldName = USER_STATE_FIELD_NAMES[index];
                                if ((0, _array.inArray)(fieldName, ignoreColumnOptionNames) >= 0) {
                                    continue
                                }
                                if ("dataType" === fieldName) {
                                    column[fieldName] = column[fieldName] || userStateColumn[fieldName]
                                } else {
                                    if ((0, _array.inArray)(fieldName, USER_STATE_FIELD_NAMES_15_1) >= 0) {
                                        if (fieldName in userStateColumn) {
                                            column[fieldName] = userStateColumn[fieldName]
                                        }
                                    } else {
                                        if ("selectedFilterOperation" === fieldName && userStateColumn[fieldName]) {
                                            column.defaultSelectedFilterOperation = column[fieldName] || null
                                        }
                                        column[fieldName] = userStateColumn[fieldName]
                                    }
                                }
                            }
                        }

                        function findUserStateColumn(columnsUserState, column) {
                            var id = column.name || column.dataField;
                            var count = columnCountById[id] || 0;
                            for (var j = 0; j < columnsUserState.length; j++) {
                                if (checkUserStateColumn(column, columnsUserState[j])) {
                                    if (count) {
                                        count--
                                    } else {
                                        columnCountById[id] = columnCountById[id] || 0;
                                        columnCountById[id]++;
                                        return j
                                    }
                                }
                            }
                            return -1
                        }
                        if (columnsUserState) {
                            for (i = 0; i < columns.length; i++) {
                                userStateColumnIndex = findUserStateColumn(columnsUserState, columns[i]);
                                allColumnsHaveState = allColumnsHaveState && userStateColumnIndex >= 0;
                                userStateColumnIndexes.push(userStateColumnIndex)
                            }
                            for (i = 0; i < columns.length; i++) {
                                column = columns[i];
                                userStateColumnIndex = userStateColumnIndexes[i];
                                if (that._hasUserState || allColumnsHaveState) {
                                    applyFieldsState(column, columnsUserState[userStateColumnIndex])
                                }
                                if (userStateColumnIndex >= 0 && (0, _type.isDefined)(columnsUserState[userStateColumnIndex].initialIndex)) {
                                    resultColumns[userStateColumnIndex] = column
                                } else {
                                    resultColumns.push(column)
                                }
                            }
                            var hasAddedBands = false;
                            for (i = 0; i < columnsUserState.length; i++) {
                                var columnUserState = columnsUserState[i];
                                if (columnUserState.added && findUserStateColumn(columns, columnUserState) < 0) {
                                    column = createColumn(that, columnUserState.added);
                                    applyFieldsState(column, columnUserState);
                                    resultColumns.push(column);
                                    if (columnUserState.added.columns) {
                                        hasAddedBands = true
                                    }
                                }
                            }
                            if (hasAddedBands) {
                                updateColumnIndexes(that);
                                resultColumns = createColumnsFromOptions(that, resultColumns)
                            }
                            assignColumns(that, resultColumns)
                        }
                    };
                    var updateIndexes = function(that, column) {
                        updateColumnIndexes(that);
                        updateColumnGroupIndexes(that, column);
                        updateColumnSortIndexes(that, column);
                        resetBandColumnsCache(that);
                        updateColumnVisibleIndexes(that, column)
                    };
                    var resetColumnsCache = function(that) {
                        that.resetColumnsCache()
                    };

                    function assignColumns(that, columns) {
                        that._columns = columns;
                        resetColumnsCache(that);
                        that.updateColumnDataTypes()
                    }
                    var updateColumnChanges = function(that, changeType, optionName, columnIndex) {
                        var columnChanges = that._columnChanges || {
                            optionNames: {
                                length: 0
                            },
                            changeTypes: {
                                length: 0
                            },
                            columnIndex: columnIndex
                        };
                        optionName = optionName || "all";
                        optionName = optionName.split(".")[0];
                        var changeTypes = columnChanges.changeTypes;
                        if (changeType && !changeTypes[changeType]) {
                            changeTypes[changeType] = true;
                            changeTypes.length++
                        }
                        var optionNames = columnChanges.optionNames;
                        if (optionName && !optionNames[optionName]) {
                            optionNames[optionName] = true;
                            optionNames.length++
                        }
                        if (void 0 === columnIndex || columnIndex !== columnChanges.columnIndex) {
                            delete columnChanges.columnIndex
                        }
                        that._columnChanges = columnChanges;
                        resetColumnsCache(that)
                    };
                    var fireColumnsChanged = function(that) {
                        var onColumnsChanging = that.option("onColumnsChanging");
                        var columnChanges = that._columnChanges;
                        var reinitOptionNames = ["dataField", "lookup", "dataType", "columns"];
                        var needReinit = function(options) {
                            return options && reinitOptionNames.some(function(name) {
                                return options[name]
                            })
                        };
                        if (that.isInitialized() && !that._updateLockCount && columnChanges) {
                            if (onColumnsChanging) {
                                that._updateLockCount++;
                                onColumnsChanging((0, _extend.extend)({
                                    component: that.component
                                }, columnChanges));
                                that._updateLockCount--
                            }
                            that._columnChanges = void 0;
                            if (needReinit(columnChanges.optionNames)) {
                                that.reinit()
                            } else {
                                that.columnsChanged.fire(columnChanges)
                            }
                        }
                    };
                    var updateSortOrderWhenGrouping = function(column, groupIndex, prevGroupIndex) {
                        var columnWasGrouped = prevGroupIndex >= 0;
                        if (groupIndex >= 0) {
                            if (!columnWasGrouped) {
                                column.lastSortOrder = column.sortOrder
                            }
                        } else {
                            column.sortOrder = column.lastSortOrder
                        }
                    };
                    var fireOptionChanged = function(that, options) {
                        var value = options.value;
                        var optionName = options.optionName;
                        var prevValue = options.prevValue;
                        var fullOptionName = options.fullOptionName;
                        var fullOptionPath = "".concat(fullOptionName, ".").concat(optionName);
                        if (!IGNORE_COLUMN_OPTION_NAMES[optionName] && that._skipProcessingColumnsChange !== fullOptionPath) {
                            that._skipProcessingColumnsChange = fullOptionPath;
                            that.component._notifyOptionChanged(fullOptionPath, value, prevValue);
                            that._skipProcessingColumnsChange = false
                        }
                    };
                    var columnOptionCore = function(that, column, optionName, value, notFireEvent) {
                        var optionGetter = _data2.default.compileGetter(optionName);
                        var columnIndex = column.index;
                        var columns;
                        var changeType;
                        var initialColumn;
                        if (3 === arguments.length) {
                            return optionGetter(column, {
                                functionsAsIs: true
                            })
                        }
                        var prevValue = optionGetter(column, {
                            functionsAsIs: true
                        });
                        if (prevValue !== value) {
                            if ("groupIndex" === optionName || "calculateGroupValue" === optionName) {
                                changeType = "grouping";
                                updateSortOrderWhenGrouping(column, value, prevValue)
                            } else {
                                if ("sortIndex" === optionName || "sortOrder" === optionName || "calculateSortValue" === optionName) {
                                    changeType = "sorting"
                                } else {
                                    changeType = "columns"
                                }
                            }
                            var optionSetter = _data2.default.compileSetter(optionName);
                            optionSetter(column, value, {
                                functionsAsIs: true
                            });
                            var fullOptionName = getColumnFullPath(that, column);
                            if (COLUMN_INDEX_OPTIONS[optionName]) {
                                updateIndexes(that, column);
                                value = optionGetter(column)
                            }
                            fullOptionName && fireOptionChanged(that, {
                                fullOptionName: fullOptionName,
                                optionName: optionName,
                                value: value,
                                prevValue: prevValue
                            });
                            if (!(0, _type.isDefined)(prevValue) && !(0, _type.isDefined)(value) && 0 !== optionName.indexOf("buffer")) {
                                notFireEvent = true
                            }
                            if (!notFireEvent) {
                                if ((0, _array.inArray)(optionName, USER_STATE_FIELD_NAMES) < 0 && "visibleWidth" !== optionName) {
                                    columns = that.option("columns");
                                    initialColumn = that.getColumnByPath(fullOptionName, columns);
                                    if ((0, _type.isString)(initialColumn)) {
                                        initialColumn = columns[columnIndex] = {
                                            dataField: initialColumn
                                        }
                                    }
                                    if (initialColumn && checkUserStateColumn(initialColumn, column)) {
                                        optionSetter(initialColumn, value, {
                                            functionsAsIs: true
                                        })
                                    }
                                }
                                updateColumnChanges(that, changeType, optionName, columnIndex)
                            } else {
                                resetColumnsCache(that)
                            }
                        }
                    };

                    function isSortOrderValid(sortOrder) {
                        return "asc" === sortOrder || "desc" === sortOrder
                    }
                    var addExpandColumn = function(that) {
                        var options = that._getExpandColumnOptions();
                        that.addCommandColumn(options)
                    };
                    var defaultSetCellValue = function(data, value) {
                        var path = this.dataField.split(".");
                        var dotCount = path.length - 1;
                        if (this.serializeValue) {
                            value = this.serializeValue(value)
                        }
                        for (var i = 0; i < dotCount; i++) {
                            var name = path[i];
                            data = data[name] = data[name] || {}
                        }
                        data[path[dotCount]] = value
                    };
                    var getDataColumns = function getDataColumns(columns, rowIndex, bandColumnID) {
                        var result = [];
                        rowIndex = rowIndex || 0;
                        columns[rowIndex] && _iterator2.default.each(columns[rowIndex], function(_, column) {
                            if (column.ownerBand === bandColumnID || (0, _type.isDefined)(column.groupIndex)) {
                                if (!column.isBand || !column.colspan) {
                                    if (!column.command || rowIndex < 1) {
                                        result.push(column)
                                    }
                                } else {
                                    result.push.apply(result, getDataColumns(columns, rowIndex + 1, column.index))
                                }
                            }
                        });
                        return result
                    };
                    var _getRowCount = function(that) {
                        var rowCount = 1;
                        var bandColumnsCache = that.getBandColumnsCache();
                        var columnParentByIndex = bandColumnsCache.columnParentByIndex;
                        that._columns.forEach(function(column) {
                            var parents = getParentBandColumns(column.index, columnParentByIndex);
                            var invisibleParents = parents.filter(function(column) {
                                return !column.visible
                            });
                            if (column.visible && !invisibleParents.length) {
                                rowCount = Math.max(rowCount, parents.length + 1)
                            }
                        });
                        return rowCount
                    };
                    var isCustomCommandColumn = function(that, commandColumn) {
                        return !!that._columns.filter(function(column) {
                            return column.type === commandColumn.type
                        }).length
                    };
                    var getFixedPosition = function(that, column) {
                        var rtlEnabled = that.option("rtlEnabled");
                        if (column.command && !isCustomCommandColumn(that, column) || !column.fixedPosition) {
                            return rtlEnabled ? "right" : "left"
                        }
                        return column.fixedPosition
                    };
                    var processExpandColumns = function(columns, expandColumns, type, columnIndex) {
                        var customColumnIndex;
                        var rowCount = this.getRowCount();
                        var rowspan = columns[columnIndex] && columns[columnIndex].rowspan;
                        var expandColumnsByType = expandColumns.filter(function(column) {
                            return column.type === type
                        });
                        columns.forEach(function(column, index) {
                            if (column.type === type) {
                                customColumnIndex = index;
                                rowspan = columns[index + 1] ? columns[index + 1].rowspan : rowCount
                            }
                        });
                        if (rowspan > 1) {
                            expandColumnsByType = _iterator2.default.map(expandColumnsByType, function(expandColumn) {
                                return (0, _extend.extend)({}, expandColumn, {
                                    rowspan: rowspan
                                })
                            })
                        }
                        expandColumnsByType.unshift.apply(expandColumnsByType, (0, _type.isDefined)(customColumnIndex) ? [customColumnIndex, 1] : [columnIndex, 0]);
                        columns.splice.apply(columns, expandColumnsByType);
                        return rowspan || 1
                    };
                    var digitsCount = function(number) {
                        var i;
                        for (i = 0; number > 1; i++) {
                            number /= 10
                        }
                        return i
                    };
                    var numberToString = function(number, digitsCount) {
                        var str = number ? number.toString() : "0";
                        while (str.length < digitsCount) {
                            str = "0" + str
                        }
                        return str
                    };
                    var mergeColumns = function(that, columns, commandColumns, needToExtend) {
                        var column;
                        var commandColumnIndex;
                        var result = columns.slice().map(function(column) {
                            return (0, _extend.extend)({}, column)
                        });
                        var isColumnFixing = that._isColumnFixing();
                        var defaultCommandColumns = commandColumns.slice().map(function(column) {
                            return (0, _extend.extend)({
                                fixed: isColumnFixing
                            }, column)
                        });
                        var getCommandColumnIndex = function(column) {
                            return commandColumns.reduce(function(result, commandColumn, index) {
                                var columnType = needToExtend && column.type === GROUP_COMMAND_COLUMN_NAME ? "expand" : column.type;
                                return commandColumn.type === columnType || commandColumn.command === column.command ? index : result
                            }, -1)
                        };
                        var callbackFilter = function(commandColumn) {
                            return commandColumn.command !== commandColumns[commandColumnIndex].command
                        };
                        for (var i = 0; i < columns.length; i++) {
                            column = columns[i];
                            commandColumnIndex = column && (column.type || column.command) ? getCommandColumnIndex(column) : -1;
                            if (commandColumnIndex >= 0) {
                                if (needToExtend) {
                                    result[i] = (0, _extend.extend)({
                                        fixed: isColumnFixing
                                    }, commandColumns[commandColumnIndex], column);
                                    if (column.type !== GROUP_COMMAND_COLUMN_NAME) {
                                        defaultCommandColumns = defaultCommandColumns.filter(callbackFilter)
                                    }
                                } else {
                                    var columnOptions = {
                                        visibleIndex: column.visibleIndex,
                                        index: column.index,
                                        headerId: column.headerId,
                                        allowFixing: 0 === column.groupIndex,
                                        allowReordering: 0 === column.groupIndex,
                                        groupIndex: column.groupIndex
                                    };
                                    result[i] = (0, _extend.extend)({}, column, commandColumns[commandColumnIndex], column.type === GROUP_COMMAND_COLUMN_NAME && columnOptions)
                                }
                            }
                        }
                        if (columns.length && needToExtend && defaultCommandColumns.length) {
                            result = result.concat(defaultCommandColumns)
                        }
                        return result
                    };
                    var isColumnFixed = function(that, column) {
                        return (0, _type.isDefined)(column.fixed) || !column.type ? column.fixed : that._isColumnFixing()
                    };
                    var convertOwnerBandToColumnReference = function(columns) {
                        columns.forEach(function(column) {
                            if ((0, _type.isDefined)(column.ownerBand)) {
                                column.ownerBand = columns[column.ownerBand]
                            }
                        })
                    };

                    function resetBandColumnsCache(that) {
                        that._bandColumnsCache = void 0
                    }
                    return {
                        _getExpandColumnOptions: function() {
                            return {
                                type: "expand",
                                command: "expand",
                                width: "auto",
                                cssClass: COMMAND_EXPAND_CLASS,
                                allowEditing: false,
                                allowGrouping: false,
                                allowSorting: false,
                                allowResizing: false,
                                allowReordering: false,
                                allowHiding: false
                            }
                        },
                        _getFirstItems: function(dataSource) {
                            var groupsCount;
                            var items = [];
                            var getFirstItemsCore = function getFirstItemsCore(items, groupsCount) {
                                if (!items || !groupsCount) {
                                    return items
                                }
                                for (var i = 0; i < items.length; i++) {
                                    var childItems = getFirstItemsCore(items[i].items || items[i].collapsedItems, groupsCount - 1);
                                    if (childItems && childItems.length) {
                                        return childItems
                                    }
                                }
                            };
                            if (dataSource && dataSource.items().length > 0) {
                                groupsCount = (0, _uiGrid_core3.normalizeSortingInfo)(dataSource.group()).length;
                                items = getFirstItemsCore(dataSource.items(), groupsCount) || []
                            }
                            return items
                        },
                        _endUpdateCore: function() {
                            !this._skipProcessingColumnsChange && fireColumnsChanged(this)
                        },
                        init: function() {
                            var that = this;
                            var columns = that.option("columns");
                            that._commandColumns = that._commandColumns || [];
                            that._columns = that._columns || [];
                            that._isColumnsFromOptions = !!columns;
                            if (that._isColumnsFromOptions) {
                                assignColumns(that, columns ? createColumnsFromOptions(that, columns) : []);
                                applyUserState(that)
                            } else {
                                assignColumns(that, that._columnsUserState ? createColumnsFromOptions(that, that._columnsUserState) : that._columns)
                            }
                            addExpandColumn(that);
                            if (that._dataSourceApplied) {
                                that.applyDataSource(that._dataSource, true)
                            } else {
                                updateIndexes(that)
                            }
                        },
                        callbackNames: function() {
                            return ["columnsChanged"]
                        },
                        getColumnByPath: function(path, columns) {
                            var that = this;
                            var column;
                            var columnIndexes = [];
                            path.replace(regExp, function(_, columnIndex) {
                                columnIndexes.push(parseInt(columnIndex));
                                return ""
                            });
                            if (columnIndexes.length) {
                                if (columns) {
                                    column = columnIndexes.reduce(function(column, index) {
                                        return column && column.columns && column.columns[index]
                                    }, {
                                        columns: columns
                                    })
                                } else {
                                    column = getColumnByIndexes(that, columnIndexes)
                                }
                            }
                            return column
                        },
                        optionChanged: function(args) {
                            var needUpdateRequireResize;
                            switch (args.name) {
                                case "adaptColumnWidthByRatio":
                                    args.handled = true;
                                    break;
                                case "dataSource":
                                    if (args.value !== args.previousValue && !this.option("columns") && (!Array.isArray(args.value) || !Array.isArray(args.previousValue))) {
                                        this._columns = []
                                    }
                                    break;
                                case "columns":
                                    needUpdateRequireResize = this._skipProcessingColumnsChange;
                                    args.handled = true;
                                    if (!this._skipProcessingColumnsChange) {
                                        if (args.name === args.fullName) {
                                            this._columnsUserState = null;
                                            this._ignoreColumnOptionNames = null;
                                            this.init()
                                        } else {
                                            this._columnOptionChanged(args);
                                            needUpdateRequireResize = true
                                        }
                                    }
                                    if (needUpdateRequireResize) {
                                        this._updateRequireResize(args)
                                    }
                                    break;
                                case "commonColumnSettings":
                                case "columnAutoWidth":
                                case "allowColumnResizing":
                                case "allowColumnReordering":
                                case "columnFixing":
                                case "grouping":
                                case "groupPanel":
                                case "regenerateColumnsByVisibleItems":
                                case "customizeColumns":
                                case "editing":
                                case "columnHidingEnabled":
                                case "dateSerializationFormat":
                                case "columnResizingMode":
                                case "columnMinWidth":
                                case "columnWidth":
                                    args.handled = true;
                                    var ignoreColumnOptionNames = "columnWidth" === args.fullName && ["width"];
                                    var isEditingPopup = args.fullName && 0 === args.fullName.indexOf("editing.popup");
                                    var isEditingForm = args.fullName && 0 === args.fullName.indexOf("editing.form");
                                    if (!isEditingPopup && !isEditingForm) {
                                        this.reinit(ignoreColumnOptionNames)
                                    }
                                    break;
                                case "rtlEnabled":
                                    this.reinit();
                                    break;
                                default:
                                    this.callBase(args)
                            }
                        },
                        _columnOptionChanged: function(args) {
                            var columnOptionValue = {};
                            var column = this.getColumnByPath(args.fullName);
                            var columnOptionName = args.fullName.replace(regExp, "");
                            if (column) {
                                if (columnOptionName) {
                                    columnOptionValue[columnOptionName] = args.value
                                } else {
                                    columnOptionValue = args.value
                                }
                                this._skipProcessingColumnsChange = args.fullName;
                                this.columnOption(column.index, columnOptionValue);
                                this._skipProcessingColumnsChange = false
                            }
                        },
                        _updateRequireResize: function(args) {
                            var component = this.component;
                            if ("width" === args.fullName.replace(regExp, "") && component._updateLockCount) {
                                component._requireResize = true
                            }
                        },
                        publicMethods: function() {
                            return ["addColumn", "deleteColumn", "columnOption", "columnCount", "clearSorting", "clearGrouping", "getVisibleColumns", "getVisibleColumnIndex"]
                        },
                        applyDataSource: function(dataSource, forceApplying) {
                            var that = this;
                            var isDataSourceLoaded = dataSource && dataSource.isLoaded();
                            that._dataSource = dataSource;
                            if (!that._dataSourceApplied || 0 === that._dataSourceColumnsCount || forceApplying || that.option("regenerateColumnsByVisibleItems")) {
                                if (isDataSourceLoaded) {
                                    if (!that._isColumnsFromOptions) {
                                        var columnsFromDataSource = createColumnsFromDataSource(that, dataSource);
                                        if (columnsFromDataSource.length) {
                                            assignColumns(that, columnsFromDataSource);
                                            that._dataSourceColumnsCount = that._columns.length;
                                            applyUserState(that)
                                        }
                                    }
                                    return that.updateColumns(dataSource, forceApplying)
                                } else {
                                    that._dataSourceApplied = false
                                }
                            } else {
                                if (isDataSourceLoaded && !that.isAllDataTypesDefined(true) && that.updateColumnDataTypes(dataSource)) {
                                    updateColumnChanges(that, "columns");
                                    fireColumnsChanged(that);
                                    return (new _deferred.Deferred).reject().promise()
                                }
                            }
                        },
                        reset: function() {
                            this._dataSourceApplied = false;
                            this._dataSourceColumnsCount = void 0;
                            this.reinit()
                        },
                        resetColumnsCache: function() {
                            var that = this;
                            that._visibleColumns = void 0;
                            that._fixedColumns = void 0;
                            that._rowCount = void 0;
                            resetBandColumnsCache(that)
                        },
                        reinit: function(ignoreColumnOptionNames) {
                            this._columnsUserState = this.getUserState();
                            this._ignoreColumnOptionNames = ignoreColumnOptionNames || null;
                            this.init();
                            if (ignoreColumnOptionNames) {
                                this._ignoreColumnOptionNames = null
                            }
                        },
                        isInitialized: function() {
                            return !!this._columns.length || !!this.option("columns")
                        },
                        isDataSourceApplied: function() {
                            return this._dataSourceApplied
                        },
                        getCommonSettings: function(column) {
                            var commonColumnSettings = (!column || !column.type) && this.option("commonColumnSettings") || {};
                            var groupingOptions = this.option("grouping") || {};
                            var groupPanelOptions = this.option("groupPanel") || {};
                            return (0, _extend.extend)({
                                allowFixing: this.option("columnFixing.enabled"),
                                allowResizing: this.option("allowColumnResizing") || void 0,
                                allowReordering: this.option("allowColumnReordering"),
                                minWidth: this.option("columnMinWidth"),
                                width: this.option("columnWidth"),
                                autoExpandGroup: groupingOptions.autoExpandAll,
                                allowCollapsing: groupingOptions.allowCollapsing,
                                allowGrouping: groupPanelOptions.allowColumnDragging && groupPanelOptions.visible || groupingOptions.contextMenuEnabled
                            }, commonColumnSettings)
                        },
                        isColumnOptionUsed: function(optionName) {
                            for (var i = 0; i < this._columns.length; i++) {
                                if (this._columns[i][optionName]) {
                                    return true
                                }
                            }
                        },
                        isAllDataTypesDefined: function(checkSerializers) {
                            var columns = this._columns;
                            if (!columns.length) {
                                return false
                            }
                            for (var i = 0; i < columns.length; i++) {
                                if (!columns[i].dataField && columns[i].calculateCellValue === columns[i].defaultCalculateCellValue) {
                                    continue
                                }
                                if (!columns[i].dataType || checkSerializers && columns[i].deserializeValue && void 0 === columns[i].serializationFormat) {
                                    return false
                                }
                            }
                            return true
                        },
                        getColumns: function() {
                            return this._columns
                        },
                        isBandColumnsUsed: function() {
                            return this.getColumns().some(function(column) {
                                return column.isBand
                            })
                        },
                        getGroupColumns: function() {
                            var result = [];
                            _iterator2.default.each(this._columns, function() {
                                var column = this;
                                if ((0, _type.isDefined)(column.groupIndex)) {
                                    result[column.groupIndex] = column
                                }
                            });
                            return result
                        },
                        getVisibleColumns: function(rowIndex) {
                            this._visibleColumns = this._visibleColumns || this._getVisibleColumnsCore();
                            rowIndex = (0, _type.isDefined)(rowIndex) ? rowIndex : this._visibleColumns.length - 1;
                            return this._visibleColumns[rowIndex] || []
                        },
                        getFixedColumns: function(rowIndex) {
                            this._fixedColumns = this._fixedColumns || this._getFixedColumnsCore();
                            rowIndex = (0, _type.isDefined)(rowIndex) ? rowIndex : this._fixedColumns.length - 1;
                            return this._fixedColumns[rowIndex] || []
                        },
                        getFilteringColumns: function() {
                            return this.getColumns().filter(function(item) {
                                return (item.dataField || item.name) && (item.allowFiltering || item.allowHeaderFiltering)
                            }).map(function(item) {
                                var field = (0, _extend.extend)(true, {}, item);
                                if (!(0, _type.isDefined)(field.dataField)) {
                                    field.dataField = field.name
                                }
                                field.filterOperations = item.filterOperations !== item.defaultFilterOperations ? field.filterOperations : null;
                                return field
                            })
                        },
                        _getFixedColumnsCore: function() {
                            var that = this;
                            var result = [];
                            var rowCount = that.getRowCount();
                            var isColumnFixing = that._isColumnFixing();
                            var transparentColumn = {
                                command: "transparent"
                            };
                            var transparentColspan = 0;
                            var notFixedColumnCount;
                            var transparentColumnIndex;
                            var lastFixedPosition;
                            if (isColumnFixing) {
                                for (var i = 0; i <= rowCount; i++) {
                                    notFixedColumnCount = 0;
                                    lastFixedPosition = null;
                                    transparentColumnIndex = null;
                                    var visibleColumns = that.getVisibleColumns(i, true);
                                    for (var j = 0; j < visibleColumns.length; j++) {
                                        var prevColumn = visibleColumns[j - 1];
                                        var column = visibleColumns[j];
                                        if (!column.fixed) {
                                            if (0 === i) {
                                                if (column.isBand && column.colspan) {
                                                    transparentColspan += column.colspan
                                                } else {
                                                    transparentColspan++
                                                }
                                            }
                                            notFixedColumnCount++;
                                            if (!(0, _type.isDefined)(transparentColumnIndex)) {
                                                transparentColumnIndex = j
                                            }
                                        } else {
                                            if (prevColumn && prevColumn.fixed && getFixedPosition(that, prevColumn) !== getFixedPosition(that, column)) {
                                                if (!(0, _type.isDefined)(transparentColumnIndex)) {
                                                    transparentColumnIndex = j
                                                }
                                            } else {
                                                lastFixedPosition = column.fixedPosition
                                            }
                                        }
                                    }
                                    if (0 === i && (0 === notFixedColumnCount || notFixedColumnCount >= visibleColumns.length)) {
                                        return []
                                    }
                                    if (!(0, _type.isDefined)(transparentColumnIndex)) {
                                        transparentColumnIndex = "right" === lastFixedPosition ? 0 : visibleColumns.length
                                    }
                                    result[i] = visibleColumns.slice(0);
                                    if (!transparentColumn.colspan) {
                                        transparentColumn.colspan = transparentColspan
                                    }
                                    result[i].splice(transparentColumnIndex, notFixedColumnCount, transparentColumn)
                                }
                            }
                            return result
                        },
                        _isColumnFixing: function() {
                            var isColumnFixing = this.option("columnFixing.enabled");
                            !isColumnFixing && _iterator2.default.each(this._columns, function(_, column) {
                                if (column.fixed) {
                                    isColumnFixing = true;
                                    return false
                                }
                            });
                            return isColumnFixing
                        },
                        _getExpandColumnsCore: function() {
                            return this.getGroupColumns()
                        },
                        getExpandColumns: function() {
                            var expandColumns = this._getExpandColumnsCore();
                            var expandColumn;
                            var firstGroupColumn = expandColumns.filter(function(column) {
                                return 0 === column.groupIndex
                            })[0];
                            var isFixedFirstGroupColumn = firstGroupColumn && firstGroupColumn.fixed;
                            var isColumnFixing = this._isColumnFixing();
                            if (expandColumns.length) {
                                expandColumn = this.columnOption("command:expand")
                            }
                            expandColumns = _iterator2.default.map(expandColumns, function(column) {
                                return (0, _extend.extend)({}, column, {
                                    visibleWidth: null,
                                    minWidth: null,
                                    cellTemplate: !(0, _type.isDefined)(column.groupIndex) ? column.cellTemplate : null,
                                    headerCellTemplate: null,
                                    fixed: !(0, _type.isDefined)(column.groupIndex) || !isFixedFirstGroupColumn ? isColumnFixing : true
                                }, expandColumn, {
                                    index: column.index,
                                    type: column.type || GROUP_COMMAND_COLUMN_NAME
                                })
                            });
                            return expandColumns
                        },
                        getBandColumnsCache: function() {
                            if (!this._bandColumnsCache) {
                                var columns = this._columns;
                                var columnChildrenByIndex = {};
                                var columnParentByIndex = {};
                                var isPlain = true;
                                columns.forEach(function(column) {
                                    var parentIndex = column.ownerBand;
                                    var parent = columns[parentIndex];
                                    if (column.hasColumns) {
                                        isPlain = false
                                    }
                                    if (column.colspan) {
                                        column.colspan = void 0
                                    }
                                    if (column.rowspan) {
                                        column.rowspan = void 0
                                    }
                                    if (parent) {
                                        columnParentByIndex[column.index] = parent
                                    } else {
                                        parentIndex = -1
                                    }
                                    columnChildrenByIndex[parentIndex] = columnChildrenByIndex[parentIndex] || [];
                                    columnChildrenByIndex[parentIndex].push(column)
                                });
                                this._bandColumnsCache = {
                                    isPlain: isPlain,
                                    columnChildrenByIndex: columnChildrenByIndex,
                                    columnParentByIndex: columnParentByIndex
                                }
                            }
                            return this._bandColumnsCache
                        },
                        _isColumnVisible: function(column) {
                            return column.visible && this.isParentColumnVisible(column.index)
                        },
                        _getVisibleColumnsCore: function() {
                            var that = this;
                            var i;
                            var result = [];
                            var rowspanGroupColumns = 0;
                            var rowspanExpandColumns = 0;
                            var rowCount = that.getRowCount();
                            var positiveIndexedColumns = [];
                            var negativeIndexedColumns = [];
                            var notGroupedColumnsCount = 0;
                            var isFixedToEnd;
                            var rtlEnabled = that.option("rtlEnabled");
                            var bandColumnsCache = that.getBandColumnsCache();
                            var expandColumns = mergeColumns(that, that.getExpandColumns(), that._columns);
                            var columns = mergeColumns(that, that._columns, that._commandColumns, true);
                            var columnDigitsCount = digitsCount(columns.length);
                            processBandColumns(that, columns, bandColumnsCache);
                            for (i = 0; i < rowCount; i++) {
                                result[i] = [];
                                negativeIndexedColumns[i] = [{}];
                                positiveIndexedColumns[i] = [{}, {}, {}]
                            }
                            _iterator2.default.each(columns, function() {
                                var column = this;
                                var visibleIndex = column.visibleIndex;
                                var indexedColumns;
                                var parentBandColumns = getParentBandColumns(column.index, bandColumnsCache.columnParentByIndex);
                                var visible = that._isColumnVisible(column);
                                if (visible && (!(0, _type.isDefined)(column.groupIndex) || column.showWhenGrouped)) {
                                    var rowIndex = parentBandColumns.length;
                                    if (visibleIndex < 0) {
                                        visibleIndex = -visibleIndex;
                                        indexedColumns = negativeIndexedColumns[rowIndex]
                                    } else {
                                        column.fixed = parentBandColumns.length ? parentBandColumns[0].fixed : column.fixed;
                                        column.fixedPosition = parentBandColumns.length ? parentBandColumns[0].fixedPosition : column.fixedPosition;
                                        if (column.fixed) {
                                            isFixedToEnd = "right" === column.fixedPosition;
                                            if (rtlEnabled && (!column.command || isCustomCommandColumn(that, column))) {
                                                isFixedToEnd = !isFixedToEnd
                                            }
                                            if (isFixedToEnd) {
                                                indexedColumns = positiveIndexedColumns[rowIndex][2]
                                            } else {
                                                indexedColumns = positiveIndexedColumns[rowIndex][0]
                                            }
                                        } else {
                                            indexedColumns = positiveIndexedColumns[rowIndex][1]
                                        }
                                    }
                                    if (parentBandColumns.length) {
                                        visibleIndex = numberToString(visibleIndex, columnDigitsCount);
                                        for (i = parentBandColumns.length - 1; i >= 0; i--) {
                                            visibleIndex = numberToString(parentBandColumns[i].visibleIndex, columnDigitsCount) + visibleIndex
                                        }
                                    }
                                    indexedColumns[visibleIndex] = indexedColumns[visibleIndex] || [];
                                    indexedColumns[visibleIndex].push(column);
                                    notGroupedColumnsCount++
                                }
                            });
                            _iterator2.default.each(result, function(rowIndex) {
                                (0, _object.orderEach)(negativeIndexedColumns[rowIndex], function(_, columns) {
                                    result[rowIndex].unshift.apply(result[rowIndex], columns)
                                });
                                var firstPositiveIndexColumn = result[rowIndex].length;
                                _iterator2.default.each(positiveIndexedColumns[rowIndex], function(index, columnsByFixing) {
                                    (0, _object.orderEach)(columnsByFixing, function(_, columnsByVisibleIndex) {
                                        result[rowIndex].push.apply(result[rowIndex], columnsByVisibleIndex)
                                    })
                                });
                                if (rowspanExpandColumns < rowIndex + 1) {
                                    rowspanExpandColumns += processExpandColumns.call(that, result[rowIndex], expandColumns, "detailExpand", firstPositiveIndexColumn)
                                }
                                if (rowspanGroupColumns < rowIndex + 1) {
                                    rowspanGroupColumns += processExpandColumns.call(that, result[rowIndex], expandColumns, GROUP_COMMAND_COLUMN_NAME, firstPositiveIndexColumn)
                                }
                            });
                            result.push(getDataColumns(result));
                            if (!notGroupedColumnsCount && that._columns.length) {
                                result[rowCount].push({
                                    command: "empty"
                                })
                            }
                            return result
                        },
                        getInvisibleColumns: function(columns, bandColumnIndex) {
                            var that = this;
                            var result = [];
                            var hiddenColumnsByBand;
                            columns = columns || that._columns;
                            _iterator2.default.each(columns, function(_, column) {
                                if (column.ownerBand !== bandColumnIndex) {
                                    return
                                }
                                if (column.isBand) {
                                    if (!column.visible) {
                                        hiddenColumnsByBand = that.getChildrenByBandColumn(column.index)
                                    } else {
                                        hiddenColumnsByBand = that.getInvisibleColumns(that.getChildrenByBandColumn(column.index), column.index)
                                    }
                                    if (hiddenColumnsByBand.length) {
                                        result.push(column);
                                        result = result.concat(hiddenColumnsByBand)
                                    }
                                    return
                                }
                                if (!column.visible) {
                                    result.push(column)
                                }
                            });
                            return result
                        },
                        getChooserColumns: function(getAllColumns) {
                            var columns = getAllColumns ? this.getColumns() : this.getInvisibleColumns();
                            return (0, _common.grep)(columns, function(column) {
                                return column.showInColumnChooser
                            })
                        },
                        allowMoveColumn: function(fromVisibleIndex, toVisibleIndex, sourceLocation, targetLocation) {
                            var that = this;
                            var columnIndex = getColumnIndexByVisibleIndex(that, fromVisibleIndex, sourceLocation);
                            var sourceColumn = that._columns[columnIndex];
                            if (sourceColumn && (sourceColumn.allowReordering || sourceColumn.allowGrouping || sourceColumn.allowHiding)) {
                                if (sourceLocation === targetLocation) {
                                    if (sourceLocation === COLUMN_CHOOSER_LOCATION) {
                                        return false
                                    }
                                    fromVisibleIndex = (0, _type.isObject)(fromVisibleIndex) ? fromVisibleIndex.columnIndex : fromVisibleIndex;
                                    toVisibleIndex = (0, _type.isObject)(toVisibleIndex) ? toVisibleIndex.columnIndex : toVisibleIndex;
                                    return fromVisibleIndex !== toVisibleIndex && fromVisibleIndex + 1 !== toVisibleIndex
                                } else {
                                    if (sourceLocation === GROUP_LOCATION && targetLocation !== COLUMN_CHOOSER_LOCATION || targetLocation === GROUP_LOCATION) {
                                        return sourceColumn && sourceColumn.allowGrouping
                                    } else {
                                        if (sourceLocation === COLUMN_CHOOSER_LOCATION || targetLocation === COLUMN_CHOOSER_LOCATION) {
                                            return sourceColumn && sourceColumn.allowHiding
                                        }
                                    }
                                }
                                return true
                            }
                            return false
                        },
                        moveColumn: function(fromVisibleIndex, toVisibleIndex, sourceLocation, targetLocation) {
                            var that = this;
                            var options = {};
                            var prevGroupIndex;
                            var fromIndex = getColumnIndexByVisibleIndex(that, fromVisibleIndex, sourceLocation);
                            var toIndex = getColumnIndexByVisibleIndex(that, toVisibleIndex, targetLocation);
                            var targetGroupIndex;
                            if (fromIndex >= 0) {
                                var column = that._columns[fromIndex];
                                toVisibleIndex = (0, _type.isObject)(toVisibleIndex) ? toVisibleIndex.columnIndex : toVisibleIndex;
                                targetGroupIndex = toIndex >= 0 ? that._columns[toIndex].groupIndex : -1;
                                if ((0, _type.isDefined)(column.groupIndex) && sourceLocation === GROUP_LOCATION) {
                                    if (targetGroupIndex > column.groupIndex) {
                                        targetGroupIndex--
                                    }
                                    if (targetLocation !== GROUP_LOCATION) {
                                        options.groupIndex = void 0
                                    } else {
                                        prevGroupIndex = column.groupIndex;
                                        delete column.groupIndex;
                                        updateColumnGroupIndexes(that)
                                    }
                                }
                                if (targetLocation === GROUP_LOCATION) {
                                    options.groupIndex = moveColumnToGroup(that, column, targetGroupIndex);
                                    column.groupIndex = prevGroupIndex
                                } else {
                                    if (toVisibleIndex >= 0) {
                                        var targetColumn = that._columns[toIndex];
                                        if (!targetColumn || column.ownerBand !== targetColumn.ownerBand) {
                                            options.visibleIndex = MAX_SAFE_INTEGER
                                        } else {
                                            if (isColumnFixed(that, column) ^ isColumnFixed(that, targetColumn)) {
                                                options.visibleIndex = MAX_SAFE_INTEGER
                                            } else {
                                                options.visibleIndex = targetColumn.visibleIndex
                                            }
                                        }
                                    }
                                }
                                var isVisible = targetLocation !== COLUMN_CHOOSER_LOCATION;
                                if (column.visible !== isVisible) {
                                    options.visible = isVisible
                                }
                                that.columnOption(column.index, options)
                            }
                        },
                        changeSortOrder: function(columnIndex, sortOrder) {
                            var that = this;
                            var options = {};
                            var sortingOptions = that.option("sorting");
                            var sortingMode = sortingOptions && sortingOptions.mode;
                            var needResetSorting = "single" === sortingMode || !sortOrder;
                            var allowSorting = "single" === sortingMode || "multiple" === sortingMode;
                            var column = that._columns[columnIndex];
                            var nextSortOrder = function(column) {
                                if ("ctrl" === sortOrder) {
                                    if (!("sortOrder" in column && "sortIndex" in column)) {
                                        return false
                                    }
                                    options.sortOrder = void 0;
                                    options.sortIndex = void 0
                                } else {
                                    if ((0, _type.isDefined)(column.groupIndex) || (0, _type.isDefined)(column.sortIndex)) {
                                        options.sortOrder = "desc" === column.sortOrder ? "asc" : "desc"
                                    } else {
                                        options.sortOrder = "asc"
                                    }
                                }
                                return true
                            };
                            if (allowSorting && column && column.allowSorting) {
                                if (needResetSorting && !(0, _type.isDefined)(column.groupIndex)) {
                                    _iterator2.default.each(that._columns, function(index) {
                                        if (index !== columnIndex && this.sortOrder && !(0, _type.isDefined)(this.groupIndex)) {
                                            delete this.sortOrder;
                                            delete this.sortIndex
                                        }
                                    })
                                }
                                if (isSortOrderValid(sortOrder)) {
                                    if (column.sortOrder !== sortOrder) {
                                        options.sortOrder = sortOrder
                                    }
                                } else {
                                    if ("none" === sortOrder) {
                                        if (column.sortOrder) {
                                            options.sortIndex = void 0;
                                            options.sortOrder = void 0
                                        }
                                    } else {
                                        nextSortOrder(column)
                                    }
                                }
                            }
                            that.columnOption(column.index, options)
                        },
                        getSortDataSourceParameters: function(useLocalSelector) {
                            var that = this;
                            var sortColumns = [];
                            var sort = [];
                            _iterator2.default.each(that._columns, function() {
                                if ((this.dataField || this.selector || this.calculateCellValue) && (0, _type.isDefined)(this.sortIndex) && !(0, _type.isDefined)(this.groupIndex)) {
                                    sortColumns[this.sortIndex] = this
                                }
                            });
                            _iterator2.default.each(sortColumns, function() {
                                var sortOrder = this && this.sortOrder;
                                if (isSortOrderValid(sortOrder)) {
                                    var sortItem = {
                                        selector: this.calculateSortValue || this.displayField || this.calculateDisplayValue || useLocalSelector && this.selector || this.dataField || this.calculateCellValue,
                                        desc: "desc" === this.sortOrder
                                    };
                                    if (this.sortingMethod) {
                                        sortItem.compare = this.sortingMethod.bind(this)
                                    }
                                    sort.push(sortItem)
                                }
                            });
                            return sort.length > 0 ? sort : null
                        },
                        getGroupDataSourceParameters: function(useLocalSelector) {
                            var group = [];
                            _iterator2.default.each(this.getGroupColumns(), function() {
                                var selector = this.calculateGroupValue || this.displayField || this.calculateDisplayValue || useLocalSelector && this.selector || this.dataField || this.calculateCellValue;
                                if (selector) {
                                    var groupItem = {
                                        selector: selector,
                                        desc: "desc" === this.sortOrder,
                                        isExpanded: !!this.autoExpandGroup
                                    };
                                    if (this.sortingMethod) {
                                        groupItem.compare = this.sortingMethod.bind(this)
                                    }
                                    group.push(groupItem)
                                }
                            });
                            return group.length > 0 ? group : null
                        },
                        refresh: function(updateNewLookupsOnly) {
                            var deferreds = [];
                            _iterator2.default.each(this._columns, function() {
                                var lookup = this.lookup;
                                if (lookup && !this.calculateDisplayValue) {
                                    if (updateNewLookupsOnly && lookup.valueMap) {
                                        return
                                    }
                                    if (lookup.update) {
                                        deferreds.push(lookup.update())
                                    }
                                }
                            });
                            return _deferred.when.apply(_renderer2.default, deferreds).done(resetColumnsCache.bind(null, this))
                        },
                        _updateColumnOptions: function(column, columnIndex) {
                            column.selector = column.selector || function(data) {
                                return column.calculateCellValue(data)
                            };
                            _iterator2.default.each(["calculateSortValue", "calculateGroupValue", "calculateDisplayValue"], function(_, calculateCallbackName) {
                                var calculateCallback = column[calculateCallbackName];
                                if ((0, _type.isFunction)(calculateCallback) && !calculateCallback.originalCallback) {
                                    column[calculateCallbackName] = function(data) {
                                        return calculateCallback.call(column, data)
                                    };
                                    column[calculateCallbackName].originalCallback = calculateCallback;
                                    column[calculateCallbackName].columnIndex = columnIndex
                                }
                            });
                            if ((0, _type.isString)(column.calculateDisplayValue)) {
                                column.displayField = column.calculateDisplayValue;
                                column.calculateDisplayValue = _data2.default.compileGetter(column.displayField)
                            }
                            if (column.calculateDisplayValue) {
                                column.displayValueMap = column.displayValueMap || {}
                            }
                            updateSerializers(column, column.dataType);
                            var lookup = column.lookup;
                            if (lookup) {
                                updateSerializers(lookup, lookup.dataType)
                            }
                            var dataType = lookup ? lookup.dataType : column.dataType;
                            if (dataType) {
                                column.alignment = column.alignment || getAlignmentByDataType(dataType, this.option("rtlEnabled"));
                                column.format = column.format || (0, _uiGrid_core3.getFormatByDataType)(dataType);
                                column.customizeText = column.customizeText || getCustomizeTextByDataType(dataType);
                                column.defaultFilterOperations = column.defaultFilterOperations || !lookup && DATATYPE_OPERATIONS[dataType] || [];
                                if (!(0, _type.isDefined)(column.filterOperations)) {
                                    setFilterOperationsAsDefaultValues(column)
                                }
                                column.defaultFilterOperation = column.filterOperations && column.filterOperations[0] || "=";
                                column.showEditorAlways = (0, _type.isDefined)(column.showEditorAlways) ? column.showEditorAlways : "boolean" === dataType && !column.cellTemplate
                            }
                        },
                        updateColumnDataTypes: function(dataSource) {
                            var that = this;
                            var dateSerializationFormat = that.option("dateSerializationFormat");
                            var firstItems = that._getFirstItems(dataSource);
                            var isColumnDataTypesUpdated = false;
                            _iterator2.default.each(that._columns, function(index, column) {
                                var i;
                                var value;
                                var dataType;
                                var lookupDataType;
                                var valueDataType;
                                var lookup = column.lookup;
                                if ((0, _uiGrid_core3.isDateType)(column.dataType) && void 0 === column.serializationFormat) {
                                    column.serializationFormat = dateSerializationFormat
                                }
                                if (lookup && (0, _uiGrid_core3.isDateType)(lookup.dataType) && void 0 === column.serializationFormat) {
                                    lookup.serializationFormat = dateSerializationFormat
                                }
                                if (column.calculateCellValue && firstItems.length) {
                                    if (!column.dataType || lookup && !lookup.dataType) {
                                        for (i = 0; i < firstItems.length; i++) {
                                            value = column.calculateCellValue(firstItems[i]);
                                            if (!column.dataType) {
                                                valueDataType = getValueDataType(value);
                                                dataType = dataType || valueDataType;
                                                if (dataType && valueDataType && dataType !== valueDataType) {
                                                    dataType = "string"
                                                }
                                            }
                                            if (lookup && !lookup.dataType) {
                                                valueDataType = getValueDataType((0, _uiGrid_core3.getDisplayValue)(column, value, firstItems[i]));
                                                lookupDataType = lookupDataType || valueDataType;
                                                if (lookupDataType && valueDataType && lookupDataType !== valueDataType) {
                                                    lookupDataType = "string"
                                                }
                                            }
                                        }
                                        if (dataType || lookupDataType) {
                                            if (dataType) {
                                                column.dataType = dataType
                                            }
                                            if (lookup && lookupDataType) {
                                                lookup.dataType = lookupDataType
                                            }
                                            isColumnDataTypesUpdated = true
                                        }
                                    }
                                    if (void 0 === column.serializationFormat || lookup && void 0 === lookup.serializationFormat) {
                                        for (i = 0; i < firstItems.length; i++) {
                                            value = column.calculateCellValue(firstItems[i], true);
                                            if (void 0 === column.serializationFormat) {
                                                column.serializationFormat = getSerializationFormat(column.dataType, value)
                                            }
                                            if (lookup && void 0 === lookup.serializationFormat) {
                                                lookup.serializationFormat = getSerializationFormat(lookup.dataType, lookup.calculateCellValue(value, true))
                                            }
                                        }
                                    }
                                }
                                that._updateColumnOptions(column, index)
                            });
                            return isColumnDataTypesUpdated
                        },
                        _customizeColumns: function(columns) {
                            var that = this;
                            var customizeColumns = that.option("customizeColumns");
                            if (customizeColumns) {
                                var hasOwnerBand = columns.some(function(column) {
                                    return (0, _type.isObject)(column.ownerBand)
                                });
                                if (hasOwnerBand) {
                                    updateIndexes(that)
                                }
                                customizeColumns(columns);
                                assignColumns(that, createColumnsFromOptions(that, columns))
                            }
                        },
                        updateColumns: function(dataSource, forceApplying) {
                            var that = this;
                            if (!forceApplying) {
                                that.updateSortingGrouping(dataSource)
                            }
                            if (!dataSource || dataSource.isLoaded()) {
                                var sortParameters = dataSource ? dataSource.sort() || [] : that.getSortDataSourceParameters();
                                var groupParameters = dataSource ? dataSource.group() || [] : that.getGroupDataSourceParameters();
                                that._customizeColumns(that._columns);
                                updateIndexes(that);
                                var columns = that._columns;
                                return (0, _deferred.when)(that.refresh(true)).always(function() {
                                    if (that._columns !== columns) {
                                        return
                                    }
                                    that._updateChanges(dataSource, {
                                        sorting: sortParameters,
                                        grouping: groupParameters
                                    });
                                    fireColumnsChanged(that)
                                })
                            }
                        },
                        _updateChanges: function(dataSource, parameters) {
                            var that = this;
                            if (dataSource) {
                                that.updateColumnDataTypes(dataSource);
                                that._dataSourceApplied = true
                            }
                            if (!(0, _uiGrid_core3.equalSortParameters)(parameters.sorting, that.getSortDataSourceParameters())) {
                                updateColumnChanges(that, "sorting")
                            }
                            if (!(0, _uiGrid_core3.equalSortParameters)(parameters.grouping, that.getGroupDataSourceParameters())) {
                                updateColumnChanges(that, "grouping")
                            }
                            updateColumnChanges(that, "columns")
                        },
                        updateSortingGrouping: function(dataSource, fromDataSource) {
                            var that = this;
                            var sortParameters;
                            var isColumnsChanged;
                            var updateSortGroupParameterIndexes = function(columns, sortParameters, indexParameterName) {
                                _iterator2.default.each(columns, function(index, column) {
                                    delete column[indexParameterName];
                                    if (sortParameters) {
                                        for (var i = 0; i < sortParameters.length; i++) {
                                            var selector = sortParameters[i].selector;
                                            var isExpanded = sortParameters[i].isExpanded;
                                            if (selector === column.dataField || selector === column.name || selector === column.selector || selector === column.calculateCellValue || selector === column.calculateGroupValue) {
                                                column.sortOrder = column.sortOrder || (sortParameters[i].desc ? "desc" : "asc");
                                                if (void 0 !== isExpanded) {
                                                    column.autoExpandGroup = isExpanded
                                                }
                                                column[indexParameterName] = i;
                                                break
                                            }
                                        }
                                    }
                                })
                            };
                            if (dataSource) {
                                sortParameters = (0, _uiGrid_core3.normalizeSortingInfo)(dataSource.sort());
                                var groupParameters = (0, _uiGrid_core3.normalizeSortingInfo)(dataSource.group());
                                var columnsGroupParameters = that.getGroupDataSourceParameters();
                                var columnsSortParameters = that.getSortDataSourceParameters();
                                if (!that._columns.length) {
                                    _iterator2.default.each(groupParameters, function(index, group) {
                                        that._columns.push(group.selector)
                                    });
                                    _iterator2.default.each(sortParameters, function(index, sort) {
                                        that._columns.push(sort.selector)
                                    });
                                    assignColumns(that, createColumnsFromOptions(that, that._columns))
                                }
                                if ((fromDataSource || !columnsGroupParameters && !that._hasUserState) && !(0, _uiGrid_core3.equalSortParameters)(groupParameters, columnsGroupParameters)) {
                                    that.__groupingUpdated = true;
                                    updateSortGroupParameterIndexes(that._columns, groupParameters, "groupIndex");
                                    if (fromDataSource) {
                                        updateColumnChanges(that, "grouping");
                                        isColumnsChanged = true
                                    }
                                }
                                if ((fromDataSource || !columnsSortParameters && !that._hasUserState) && !(0, _uiGrid_core3.equalSortParameters)(sortParameters, columnsSortParameters)) {
                                    that.__sortingUpdated = true;
                                    updateSortGroupParameterIndexes(that._columns, sortParameters, "sortIndex");
                                    if (fromDataSource) {
                                        updateColumnChanges(that, "sorting");
                                        isColumnsChanged = true
                                    }
                                }
                                if (isColumnsChanged) {
                                    fireColumnsChanged(that)
                                }
                            }
                        },
                        updateFilter: function(filter, remoteFiltering, columnIndex, filterValue) {
                            var that = this;
                            if (!Array.isArray(filter)) {
                                return filter
                            }
                            filter = (0, _extend.extend)([], filter);
                            columnIndex = void 0 !== filter.columnIndex ? filter.columnIndex : columnIndex;
                            filterValue = void 0 !== filter.filterValue ? filter.filterValue : filterValue;
                            if ((0, _type.isString)(filter[0]) && "!" !== filter[0]) {
                                var column = that.columnOption(filter[0]);
                                if (remoteFiltering) {
                                    if ((0, _config2.default)().forceIsoDateParsing && column && column.serializeValue && filter.length > 1) {
                                        filter[filter.length - 1] = column.serializeValue(filter[filter.length - 1], "filter")
                                    }
                                } else {
                                    if (column && column.selector) {
                                        filter[0] = column.selector;
                                        filter[0].columnIndex = column.index
                                    }
                                }
                            } else {
                                if ((0, _type.isFunction)(filter[0])) {
                                    filter[0].columnIndex = columnIndex;
                                    filter[0].filterValue = filterValue
                                }
                            }
                            for (var i = 0; i < filter.length; i++) {
                                filter[i] = that.updateFilter(filter[i], remoteFiltering, columnIndex, filterValue)
                            }
                            return filter
                        },
                        columnCount: function() {
                            return this._columns ? this._columns.length : 0
                        },
                        columnOption: function(identifier, option, value, notFireEvent) {
                            var that = this;
                            var identifierOptionName = (0, _type.isString)(identifier) && identifier.substr(0, identifier.indexOf(":"));
                            var columns = that._columns.concat(that._commandColumns);
                            var column;
                            if (void 0 === identifier) {
                                return
                            }
                            if (identifierOptionName) {
                                identifier = identifier.substr(identifierOptionName.length + 1)
                            }
                            for (var i = 0; i < columns.length; i++) {
                                if (identifierOptionName) {
                                    if ("" + columns[i][identifierOptionName] === identifier) {
                                        column = columns[i];
                                        break
                                    }
                                } else {
                                    if (columns[i].index === identifier || columns[i].name === identifier || columns[i].dataField === identifier || columns[i].caption === identifier) {
                                        column = columns[i];
                                        break
                                    }
                                }
                            }
                            if (column) {
                                if (1 === arguments.length) {
                                    return (0, _extend.extend)({}, column)
                                }
                                if ((0, _type.isString)(option)) {
                                    if (2 === arguments.length) {
                                        return columnOptionCore(that, column, option)
                                    } else {
                                        columnOptionCore(that, column, option, value, notFireEvent)
                                    }
                                } else {
                                    if ((0, _type.isObject)(option)) {
                                        _iterator2.default.each(option, function(optionName, value) {
                                            columnOptionCore(that, column, optionName, value, notFireEvent)
                                        })
                                    }
                                }
                                fireColumnsChanged(that)
                            }
                        },
                        clearSorting: function() {
                            var that = this;
                            var columnCount = this.columnCount();
                            that.beginUpdate();
                            for (var i = 0; i < columnCount; i++) {
                                that.columnOption(i, "sortOrder", void 0)
                            }
                            that.endUpdate()
                        },
                        clearGrouping: function() {
                            var that = this;
                            var columnCount = this.columnCount();
                            that.beginUpdate();
                            for (var i = 0; i < columnCount; i++) {
                                that.columnOption(i, "groupIndex", void 0)
                            }
                            that.endUpdate()
                        },
                        getVisibleIndex: function(index, rowIndex) {
                            var columns = this.getVisibleColumns(rowIndex);
                            for (var i = columns.length - 1; i >= 0; i--) {
                                if (columns[i].index === index) {
                                    return i
                                }
                            }
                            return -1
                        },
                        getVisibleColumnIndex: function(id, rowIndex) {
                            var index = this.columnOption(id, "index");
                            return this.getVisibleIndex(index, rowIndex)
                        },
                        addColumn: function(options) {
                            var that = this;
                            var column = createColumn(that, options);
                            var index = that._columns.length;
                            that._columns.push(column);
                            if (column.isBand) {
                                that._columns = createColumnsFromOptions(that, that._columns);
                                column = that._columns[index]
                            }
                            column.added = options;
                            updateIndexes(that, column);
                            that.updateColumns(that._dataSource)
                        },
                        deleteColumn: function(id) {
                            var that = this;
                            var column = that.columnOption(id);
                            if (column && column.index >= 0) {
                                convertOwnerBandToColumnReference(that._columns);
                                that._columns.splice(column.index, 1);
                                if (column.isBand) {
                                    var childIndexes = that.getChildrenByBandColumn(column.index).map(function(column) {
                                        return column.index
                                    });
                                    that._columns = that._columns.filter(function(column) {
                                        return childIndexes.indexOf(column.index) < 0
                                    })
                                }
                                updateIndexes(that);
                                that.updateColumns(that._dataSource)
                            }
                        },
                        addCommandColumn: function(options) {
                            var commandColumn = this._commandColumns.filter(function(column) {
                                return column.command === options.command
                            })[0];
                            if (!commandColumn) {
                                commandColumn = options;
                                this._commandColumns.push(commandColumn)
                            }
                        },
                        getUserState: function() {
                            var columns = this._columns;
                            var result = [];
                            var i;

                            function handleStateField(index, value) {
                                if (void 0 !== columns[i][value]) {
                                    result[i][value] = columns[i][value]
                                }
                            }
                            for (i = 0; i < columns.length; i++) {
                                result[i] = {};
                                _iterator2.default.each(USER_STATE_FIELD_NAMES, handleStateField)
                            }
                            return result
                        },
                        setUserState: function(state) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var ignoreColumnOptionNames = that.option("stateStoring.ignoreColumnOptionNames");
                            if (!ignoreColumnOptionNames) {
                                ignoreColumnOptionNames = [];
                                var commonColumnSettings = that.getCommonSettings();
                                if (!that.option("columnChooser.enabled")) {
                                    ignoreColumnOptionNames.push("visible")
                                }
                                if ("none" === that.option("sorting.mode")) {
                                    ignoreColumnOptionNames.push("sortIndex", "sortOrder")
                                }
                                if (!commonColumnSettings.allowGrouping) {
                                    ignoreColumnOptionNames.push("groupIndex")
                                }
                                if (!commonColumnSettings.allowFixing) {
                                    ignoreColumnOptionNames.push("fixed", "fixedPosition")
                                }
                                if (!commonColumnSettings.allowResizing) {
                                    ignoreColumnOptionNames.push("width", "visibleWidth")
                                }
                                var isFilterPanelHidden = !that.option("filterPanel.visible");
                                if (!that.option("filterRow.visible") && isFilterPanelHidden) {
                                    ignoreColumnOptionNames.push("filterValue", "selectedFilterOperation")
                                }
                                if (!that.option("headerFilter.visible") && isFilterPanelHidden) {
                                    ignoreColumnOptionNames.push("filterValues", "filterType")
                                }
                            }
                            that._columnsUserState = state;
                            that._ignoreColumnOptionNames = ignoreColumnOptionNames;
                            that._hasUserState = !!state;
                            updateColumnChanges(that, "filtering");
                            that.init();
                            if (dataSource) {
                                dataSource.sort(that.getSortDataSourceParameters());
                                dataSource.group(that.getGroupDataSourceParameters())
                            }
                        },
                        _createCalculatedColumnOptions: function(columnOptions, bandColumn) {
                            var calculatedColumnOptions = {};
                            var dataField = columnOptions.dataField;
                            if (Array.isArray(columnOptions.columns) && columnOptions.columns.length || columnOptions.isBand) {
                                calculatedColumnOptions.isBand = true;
                                dataField = null
                            }
                            if (dataField) {
                                if ((0, _type.isString)(dataField)) {
                                    var getter = _data2.default.compileGetter(dataField);
                                    calculatedColumnOptions = {
                                        caption: _inflector2.default.captionize(dataField),
                                        calculateCellValue: function(data, skipDeserialization) {
                                            var value = getter(data);
                                            return this.deserializeValue && !skipDeserialization ? this.deserializeValue(value) : value
                                        },
                                        setCellValue: defaultSetCellValue,
                                        parseValue: function(text) {
                                            var column = this;
                                            var result;
                                            var parsedValue;
                                            if ("number" === column.dataType) {
                                                if ((0, _type.isString)(text) && column.format) {
                                                    parsedValue = _number2.default.parse(text);
                                                    if ((0, _type.isNumeric)(parsedValue)) {
                                                        result = parsedValue
                                                    }
                                                } else {
                                                    if ((0, _type.isDefined)(text) && (0, _type.isNumeric)(text)) {
                                                        result = Number(text)
                                                    }
                                                }
                                            } else {
                                                if ("boolean" === column.dataType) {
                                                    if (text === column.trueText) {
                                                        result = true
                                                    } else {
                                                        if (text === column.falseText) {
                                                            result = false
                                                        }
                                                    }
                                                } else {
                                                    if ((0, _uiGrid_core3.isDateType)(column.dataType)) {
                                                        parsedValue = _date2.default.parse(text, column.format);
                                                        if (parsedValue) {
                                                            result = parsedValue
                                                        }
                                                    } else {
                                                        result = text
                                                    }
                                                }
                                            }
                                            return result
                                        }
                                    }
                                }
                                calculatedColumnOptions.allowFiltering = true
                            } else {
                                calculatedColumnOptions.allowFiltering = !!columnOptions.calculateFilterExpression
                            }
                            calculatedColumnOptions.calculateFilterExpression = function() {
                                return _filtering2.default.defaultCalculateFilterExpression.apply(this, arguments)
                            };
                            calculatedColumnOptions.createFilterExpression = function(filterValue) {
                                var result;
                                if (this.calculateFilterExpression) {
                                    result = this.calculateFilterExpression.apply(this, arguments)
                                }
                                if ((0, _type.isFunction)(result)) {
                                    result = [result, "=", true]
                                }
                                if (result) {
                                    result.columnIndex = this.index;
                                    result.filterValue = filterValue
                                }
                                return result
                            };
                            if (!dataField || !(0, _type.isString)(dataField)) {
                                (0, _extend.extend)(true, calculatedColumnOptions, {
                                    allowSorting: false,
                                    allowGrouping: false,
                                    calculateCellValue: function() {
                                        return null
                                    }
                                })
                            }
                            if (bandColumn) {
                                calculatedColumnOptions.allowFixing = false
                            }
                            if (columnOptions.dataType) {
                                calculatedColumnOptions.userDataType = columnOptions.dataType
                            }
                            if (columnOptions.selectedFilterOperation && !("defaultSelectedFilterOperation" in calculatedColumnOptions)) {
                                calculatedColumnOptions.defaultSelectedFilterOperation = columnOptions.selectedFilterOperation
                            }
                            if (columnOptions.lookup) {
                                calculatedColumnOptions.lookup = {
                                    calculateCellValue: function(value, skipDeserialization) {
                                        if (this.valueExpr) {
                                            value = this.valueMap && this.valueMap[value]
                                        }
                                        return this.deserializeValue && !skipDeserialization ? this.deserializeValue(value) : value
                                    },
                                    updateValueMap: function() {
                                        this.valueMap = {};
                                        if (this.items) {
                                            var calculateValue = _data2.default.compileGetter(this.valueExpr);
                                            var calculateDisplayValue = _data2.default.compileGetter(this.displayExpr);
                                            for (var i = 0; i < this.items.length; i++) {
                                                var item = this.items[i];
                                                var displayValue = calculateDisplayValue(item);
                                                this.valueMap[calculateValue(item)] = displayValue;
                                                this.dataType = this.dataType || getValueDataType(displayValue)
                                            }
                                        }
                                    },
                                    update: function() {
                                        var that = this;
                                        var dataSource = that.dataSource;
                                        if (dataSource) {
                                            if ((0, _type.isFunction)(dataSource) && !(0, _variable_wrapper.isWrapped)(dataSource)) {
                                                dataSource = dataSource({})
                                            }
                                            if ((0, _type.isPlainObject)(dataSource) || dataSource instanceof _abstract_store2.default || Array.isArray(dataSource)) {
                                                if (that.valueExpr) {
                                                    var dataSourceOptions = (0, _utils.normalizeDataSourceOptions)(dataSource);
                                                    dataSourceOptions.paginate = false;
                                                    dataSource = new _data_source.DataSource(dataSourceOptions);
                                                    return dataSource.load().done(function(data) {
                                                        that.items = data;
                                                        that.updateValueMap && that.updateValueMap()
                                                    })
                                                }
                                            } else {
                                                _ui2.default.log("E1016")
                                            }
                                        } else {
                                            that.updateValueMap && that.updateValueMap()
                                        }
                                    }
                                }
                            }
                            calculatedColumnOptions.resizedCallbacks = (0, _callbacks2.default)();
                            if (columnOptions.resized) {
                                calculatedColumnOptions.resizedCallbacks.add(columnOptions.resized.bind(columnOptions))
                            }
                            _iterator2.default.each(calculatedColumnOptions, function(optionName) {
                                if ((0, _type.isFunction)(calculatedColumnOptions[optionName]) && 0 !== optionName.indexOf("default")) {
                                    var defaultOptionName = "default" + optionName.charAt(0).toUpperCase() + optionName.substr(1);
                                    calculatedColumnOptions[defaultOptionName] = calculatedColumnOptions[optionName]
                                }
                            });
                            return calculatedColumnOptions
                        },
                        getRowCount: function() {
                            this._rowCount = this._rowCount || _getRowCount(this);
                            return this._rowCount
                        },
                        getRowIndex: function(columnIndex, alwaysGetRowIndex) {
                            var column = this._columns[columnIndex];
                            var bandColumnsCache = this.getBandColumnsCache();
                            return column && (alwaysGetRowIndex || column.visible && !(column.command || (0, _type.isDefined)(column.groupIndex))) ? getParentBandColumns(columnIndex, bandColumnsCache.columnParentByIndex).length : 0
                        },
                        getChildrenByBandColumn: function(bandColumnIndex, onlyVisibleDirectChildren) {
                            var that = this;
                            var bandColumnsCache = that.getBandColumnsCache();
                            var result = _getChildrenByBandColumn(bandColumnIndex, bandColumnsCache.columnChildrenByIndex, !onlyVisibleDirectChildren);
                            if (onlyVisibleDirectChildren) {
                                return result.filter(function(column) {
                                    return column.visible && !column.command
                                }).sort(function(column1, column2) {
                                    return column1.visibleIndex - column2.visibleIndex
                                })
                            }
                            return result
                        },
                        isParentBandColumn: function(columnIndex, bandColumnIndex) {
                            var result = false;
                            var column = this._columns[columnIndex];
                            var bandColumnsCache = this.getBandColumnsCache();
                            var parentBandColumns = column && getParentBandColumns(columnIndex, bandColumnsCache.columnParentByIndex);
                            if (parentBandColumns) {
                                _iterator2.default.each(parentBandColumns, function(_, bandColumn) {
                                    if (bandColumn.index === bandColumnIndex) {
                                        result = true;
                                        return false
                                    }
                                })
                            }
                            return result
                        },
                        isParentColumnVisible: function(columnIndex) {
                            var result = true;
                            var bandColumnsCache = this.getBandColumnsCache();
                            var bandColumns = columnIndex >= 0 && getParentBandColumns(columnIndex, bandColumnsCache.columnParentByIndex);
                            bandColumns && _iterator2.default.each(bandColumns, function(_, bandColumn) {
                                result = result && bandColumn.visible;
                                return result
                            });
                            return result
                        },
                        getColumnId: function(column) {
                            if (column.command && column.type === GROUP_COMMAND_COLUMN_NAME) {
                                if (isCustomCommandColumn(this, column)) {
                                    return "type:" + column.type
                                }
                                return "command:" + column.command
                            }
                            return column.index
                        },
                        getCustomizeTextByDataType: getCustomizeTextByDataType,
                        getHeaderContentAlignment: function(columnAlignment) {
                            var rtlEnabled = this.option("rtlEnabled");
                            if (rtlEnabled) {
                                return "left" === columnAlignment ? "right" : "left"
                            }
                            return columnAlignment
                        }
                    }
                }())
            }
        }
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.data_source_adapter.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _uiData_grid = __webpack_require__( /*! ../data_grid/ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _array_utils = __webpack_require__( /*! ../../data/array_utils */ 142);
        var _array_utils2 = _interopRequireDefault(_array_utils);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _uiData_grid2.default.Controller.inherit(function() {
            function cloneItems(items, groupCount) {
                if (items) {
                    items = items.slice(0);
                    if (groupCount) {
                        for (var i = 0; i < items.length; i++) {
                            items[i] = (0, _extend.extend)({
                                key: items[i].key
                            }, items[i]);
                            items[i].items = cloneItems(items[i].items, groupCount - 1)
                        }
                    }
                }
                return items
            }

            function calculateOperationTypes(loadOptions, lastLoadOptions) {
                var operationTypes = {};
                if (lastLoadOptions) {
                    operationTypes = {
                        sorting: !_uiData_grid2.default.equalSortParameters(loadOptions.sort, lastLoadOptions.sort),
                        grouping: !_uiData_grid2.default.equalSortParameters(loadOptions.group, lastLoadOptions.group, true),
                        groupExpanding: !_uiData_grid2.default.equalSortParameters(loadOptions.group, lastLoadOptions.group) || lastLoadOptions.groupExpand,
                        filtering: !_uiData_grid2.default.equalFilterParameters(loadOptions.filter, lastLoadOptions.filter),
                        pageIndex: loadOptions.pageIndex !== lastLoadOptions.pageIndex,
                        skip: loadOptions.skip !== lastLoadOptions.skip,
                        take: loadOptions.take !== lastLoadOptions.take
                    };
                    operationTypes.reload = operationTypes.sorting || operationTypes.grouping || operationTypes.filtering;
                    operationTypes.paging = operationTypes.pageIndex || operationTypes.take
                }
                return operationTypes
            }

            function executeTask(action, timeout) {
                if (_type2.default.isDefined(timeout)) {
                    (0, _common.executeAsync)(action, timeout)
                } else {
                    action()
                }
            }

            function createEmptyPagesData() {
                return {
                    pages: {}
                }
            }

            function getPageDataFromCache(options) {
                return options.cachedPagesData.pages[options.pageIndex]
            }

            function setPageDataToCache(options, data) {
                var pageIndex = options.pageIndex;
                if (void 0 !== pageIndex) {
                    options.cachedPagesData.pages[pageIndex] = data
                }
            }
            return {
                init: function(dataSource, remoteOperations) {
                    var that = this;
                    that._dataSource = dataSource;
                    that._remoteOperations = remoteOperations || {};
                    that._isLastPage = !dataSource.isLastPage();
                    that._hasLastPage = false;
                    that._currentTotalCount = 0;
                    that._cachedPagesData = createEmptyPagesData();
                    that._lastOperationTypes = {};
                    that._eventsStrategy = dataSource._eventsStrategy;
                    that._skipCorrection = 0;
                    that.changed = (0, _callbacks2.default)();
                    that.loadingChanged = (0, _callbacks2.default)();
                    that.loadError = (0, _callbacks2.default)();
                    that.customizeStoreLoadOptions = (0, _callbacks2.default)();
                    that.changing = (0, _callbacks2.default)();
                    that._dataChangedHandler = that._handleDataChanged.bind(that);
                    that._dataLoadingHandler = that._handleDataLoading.bind(that);
                    that._dataLoadedHandler = that._handleDataLoaded.bind(that);
                    that._loadingChangedHandler = that._handleLoadingChanged.bind(that);
                    that._loadErrorHandler = that._handleLoadError.bind(that);
                    that._pushHandler = that._handlePush.bind(that);
                    that._changingHandler = that._handleChanging.bind(that);
                    dataSource.on("changed", that._dataChangedHandler);
                    dataSource.on("customizeStoreLoadOptions", that._dataLoadingHandler);
                    dataSource.on("customizeLoadResult", that._dataLoadedHandler);
                    dataSource.on("loadingChanged", that._loadingChangedHandler);
                    dataSource.on("loadError", that._loadErrorHandler);
                    dataSource.on("changing", that._changingHandler);
                    dataSource.store().on("push", that._pushHandler);
                    (0, _iterator.each)(dataSource, function(memberName, member) {
                        if (!that[memberName] && _type2.default.isFunction(member)) {
                            that[memberName] = function() {
                                return this._dataSource[memberName].apply(this._dataSource, arguments)
                            }
                        }
                    })
                },
                remoteOperations: function() {
                    return this._remoteOperations
                },
                dispose: function(isSharedDataSource) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var store = dataSource.store();
                    dataSource.off("changed", that._dataChangedHandler);
                    dataSource.off("customizeStoreLoadOptions", that._dataLoadingHandler);
                    dataSource.off("customizeLoadResult", that._dataLoadedHandler);
                    dataSource.off("loadingChanged", that._loadingChangedHandler);
                    dataSource.off("loadError", that._loadErrorHandler);
                    dataSource.off("changing", that._changingHandler);
                    store && store.off("push", that._pushHandler);
                    if (!isSharedDataSource) {
                        dataSource.dispose()
                    }
                },
                refresh: function(options, isReload, operationTypes) {
                    var that = this;
                    var dataSource = that._dataSource;
                    if (isReload || operationTypes.reload) {
                        that._currentTotalCount = 0;
                        that._skipCorrection = 0;
                        that._isLastPage = !dataSource.paginate();
                        that._hasLastPage = that._isLastPage
                    }
                },
                resetCache: function() {
                    this._cachedStoreData = void 0;
                    this._cachedPagingData = void 0
                },
                resetPagesCache: function() {
                    this._cachedPagesData = createEmptyPagesData()
                },
                _needClearStoreDataCache: function() {
                    var remoteOperations = this.remoteOperations();
                    var operationTypes = calculateOperationTypes(this._lastLoadOptions || {}, {});
                    var isLocalOperations = Object.keys(remoteOperations).every(function(operationName) {
                        return !operationTypes[operationName] || !remoteOperations[operationName]
                    });
                    return !isLocalOperations
                },
                push: function(changes, fromStore) {
                    var store = this.store();
                    if (this._needClearStoreDataCache()) {
                        this._cachedStoreData = void 0
                    }
                    this._cachedPagingData = void 0;
                    this.resetPagesCache(true);
                    if (this._cachedStoreData) {
                        _array_utils2.default.applyBatch(store, this._cachedStoreData, changes)
                    }
                    if (!fromStore) {
                        this._applyBatch(changes)
                    }
                },
                getDataIndexGetter: function() {
                    var _this = this;
                    if (!this._dataIndexGetter) {
                        var indexByKey;
                        var storeData;
                        var store = this.store();
                        this._dataIndexGetter = function(data) {
                            var isCacheUpdated = storeData && storeData !== _this._cachedStoreData;
                            if (!indexByKey || isCacheUpdated) {
                                storeData = _this._cachedStoreData || [];
                                indexByKey = {};
                                for (var i = 0; i < storeData.length; i++) {
                                    indexByKey[(0, _common.getKeyHash)(store.keyOf(storeData[i]))] = i
                                }
                            }
                            return indexByKey[(0, _common.getKeyHash)(store.keyOf(data))]
                        }
                    }
                    return this._dataIndexGetter
                },
                _getKeyInfo: function() {
                    return this.store()
                },
                _applyBatch: function(changes) {
                    var _this2 = this;
                    var keyInfo = this._getKeyInfo();
                    var dataSource = this._dataSource;
                    var groupCount = _uiData_grid2.default.normalizeSortingInfo(this.group()).length;
                    changes = changes.filter(function(change) {
                        return !dataSource.paginate() || "insert" !== change.type || void 0 !== change.index
                    });
                    var getItemCount = function() {
                        return groupCount ? _this2.itemsCount() : _this2._items.length
                    };
                    var oldItemCount = getItemCount();
                    _array_utils2.default.applyBatch(keyInfo, this._items, changes, groupCount, true);
                    _array_utils2.default.applyBatch(keyInfo, dataSource.items(), changes, groupCount, true);
                    if (this._currentTotalCount > 0) {
                        this._skipCorrection += getItemCount() - oldItemCount
                    }
                    changes.splice(0, changes.length)
                },
                _handlePush: function(changes) {
                    this.push(changes, true)
                },
                _handleChanging: function(e) {
                    this.changing.fire(e);
                    this._applyBatch(e.changes)
                },
                _needCleanCacheByOperation: function(operationType, remoteOperations) {
                    var operationTypesByOrder = ["filtering", "sorting", "paging"];
                    var operationTypeIndex = operationTypesByOrder.indexOf(operationType);
                    var currentOperationTypes = operationTypeIndex >= 0 ? operationTypesByOrder.slice(operationTypeIndex) : [operationType];
                    return currentOperationTypes.some(function(operationType) {
                        return remoteOperations[operationType]
                    })
                },
                _customizeRemoteOperations: function(options, isReload, operationTypes) {
                    var that = this;
                    var cachedStoreData = that._cachedStoreData;
                    var cachedPagingData = that._cachedPagingData;
                    var cachedPagesData = that._cachedPagesData;
                    if (options.storeLoadOptions.filter && !options.remoteOperations.filtering || options.storeLoadOptions.sort && !options.remoteOperations.sorting) {
                        options.remoteOperations = {
                            filtering: options.remoteOperations.filtering
                        }
                    }
                    if (isReload) {
                        cachedStoreData = void 0;
                        cachedPagingData = void 0;
                        cachedPagesData = createEmptyPagesData()
                    } else {
                        if (operationTypes.reload) {
                            cachedPagingData = void 0;
                            cachedPagesData = createEmptyPagesData()
                        } else {
                            if (operationTypes.take || operationTypes.groupExpanding) {
                                cachedPagesData = createEmptyPagesData()
                            }
                        }(0, _iterator.each)(operationTypes, function(operationType, value) {
                            if (value && that._needCleanCacheByOperation(operationType, options.remoteOperations)) {
                                cachedStoreData = void 0;
                                cachedPagingData = void 0
                            }
                        })
                    }
                    if (cachedPagingData) {
                        options.remoteOperations.paging = false
                    }
                    options.cachedStoreData = cachedStoreData;
                    options.cachedPagingData = cachedPagingData;
                    options.cachedPagesData = cachedPagesData;
                    if (!options.isCustomLoading) {
                        that._cachedStoreData = cachedStoreData;
                        that._cachedPagingData = cachedPagingData;
                        that._cachedPagesData = cachedPagesData
                    }
                },
                _handleDataLoading: function(options) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var lastLoadOptions = that._lastLoadOptions;
                    that.customizeStoreLoadOptions.fire(options);
                    options.delay = this.option("loadingTimeout");
                    options.originalStoreLoadOptions = options.storeLoadOptions;
                    options.remoteOperations = (0, _extend.extend)({}, this.remoteOperations());
                    var isReload = !that.isLoaded() && !that._isRefreshing;
                    if (that.option("integrationOptions.renderedOnServer") && !that.isLoaded()) {
                        options.delay = void 0
                    }
                    var loadOptions = (0, _extend.extend)({
                        pageIndex: that.pageIndex()
                    }, options.storeLoadOptions);
                    var operationTypes = calculateOperationTypes(loadOptions, lastLoadOptions);
                    that._customizeRemoteOperations(options, isReload, operationTypes);
                    if (!options.isCustomLoading) {
                        var isRefreshing = that._isRefreshing;
                        options.pageIndex = dataSource.pageIndex();
                        options.lastLoadOptions = loadOptions;
                        options.operationTypes = operationTypes;
                        that._loadingOperationTypes = operationTypes;
                        that._isRefreshing = true;
                        (0, _deferred.when)(isRefreshing || that._isRefreshed || that.refresh(options, isReload, operationTypes)).done(function() {
                            if (that._lastOperationId === options.operationId) {
                                that._isRefreshed = true;
                                that.load().always(function() {
                                    that._isRefreshed = false
                                })
                            }
                        }).fail(function() {
                            dataSource.cancel(options.operationId)
                        }).always(function() {
                            that._isRefreshing = false
                        });
                        dataSource.cancel(that._lastOperationId);
                        that._lastOperationId = options.operationId;
                        if (that._isRefreshing) {
                            dataSource.cancel(that._lastOperationId)
                        }
                    }
                    this._handleDataLoadingCore(options)
                },
                _handleDataLoadingCore: function(options) {
                    var remoteOperations = options.remoteOperations;
                    options.loadOptions = {};
                    var cachedExtra = options.cachedPagesData.extra;
                    var localLoadOptionNames = {
                        filter: !remoteOperations.filtering,
                        sort: !remoteOperations.sorting,
                        group: !remoteOperations.grouping,
                        summary: !remoteOperations.summary,
                        skip: !remoteOperations.paging,
                        take: !remoteOperations.paging,
                        requireTotalCount: cachedExtra && "totalCount" in cachedExtra || !remoteOperations.paging
                    };
                    (0, _iterator.each)(options.storeLoadOptions, function(optionName, optionValue) {
                        if (localLoadOptionNames[optionName]) {
                            options.loadOptions[optionName] = optionValue;
                            delete options.storeLoadOptions[optionName]
                        }
                    });
                    if (cachedExtra) {
                        options.extra = cachedExtra
                    }
                    options.data = getPageDataFromCache(options) || options.cachedStoreData
                },
                _handleDataLoaded: function(options) {
                    var _this3 = this;
                    var loadOptions = options.loadOptions;
                    var localPaging = options.remoteOperations && !options.remoteOperations.paging;
                    var cachedPagesData = options.cachedPagesData;
                    var storeLoadOptions = options.storeLoadOptions;
                    var needCache = false !== this.option("cacheEnabled") && storeLoadOptions;
                    var needPageCache = needCache && !options.isCustomLoading && cachedPagesData && (!localPaging || storeLoadOptions.group) && !this.option("legacyRendering");
                    var needPagingCache = needCache && localPaging;
                    var needStoreCache = needPagingCache && !options.isCustomLoading;
                    if (!loadOptions) {
                        this._dataSource.cancel(options.operationId);
                        return
                    }
                    if (options.lastLoadOptions) {
                        this._lastLoadOptions = options.lastLoadOptions;
                        Object.keys(options.operationTypes).forEach(function(operationType) {
                            _this3._lastOperationTypes[operationType] = _this3._lastOperationTypes[operationType] || options.operationTypes[operationType]
                        })
                    }
                    if (localPaging) {
                        options.skip = loadOptions.skip;
                        options.take = loadOptions.take;
                        delete loadOptions.skip;
                        delete loadOptions.take
                    }
                    if (loadOptions.group) {
                        loadOptions.group = options.group || loadOptions.group
                    }
                    var groupCount = _uiData_grid2.default.normalizeSortingInfo(storeLoadOptions.group || loadOptions.group).length;
                    if (!needPageCache || !getPageDataFromCache(options)) {
                        if (needPagingCache && options.cachedPagingData) {
                            options.data = cloneItems(options.cachedPagingData, groupCount)
                        } else {
                            if (needStoreCache) {
                                if (!this._cachedStoreData) {
                                    this._cachedStoreData = cloneItems(options.data, _uiData_grid2.default.normalizeSortingInfo(storeLoadOptions.group).length)
                                } else {
                                    if (options.mergeStoreLoadData) {
                                        options.data = this._cachedStoreData = this._cachedStoreData.concat(options.data)
                                    }
                                }
                            }
                            new _array_store2.default(options.data).load(loadOptions).done(function(data) {
                                options.data = data;
                                if (needStoreCache) {
                                    _this3._cachedPagingData = cloneItems(options.data, groupCount)
                                }
                            }).fail(function(error) {
                                options.data = (new _deferred.Deferred).reject(error)
                            })
                        }
                        if (loadOptions.requireTotalCount && localPaging) {
                            options.extra = _type2.default.isPlainObject(options.extra) ? options.extra : {};
                            options.extra.totalCount = options.data.length
                        }
                        if (options.extra && options.extra.totalCount >= 0 && (false === storeLoadOptions.requireTotalCount || false === loadOptions.requireTotalCount)) {
                            options.extra.totalCount = -1
                        }
                        this._handleDataLoadedCore(options);
                        if (needPageCache) {
                            cachedPagesData.extra = cachedPagesData.extra || (0, _extend.extend)({}, options.extra);
                            (0, _deferred.when)(options.data).done(function(data) {
                                setPageDataToCache(options, cloneItems(data, groupCount))
                            })
                        }
                    }
                    options.storeLoadOptions = options.originalStoreLoadOptions
                },
                _handleDataLoadedCore: function(options) {
                    if (options.remoteOperations && !options.remoteOperations.paging && Array.isArray(options.data)) {
                        if (void 0 !== options.skip) {
                            options.data = options.data.slice(options.skip)
                        }
                        if (void 0 !== options.take) {
                            options.data = options.data.slice(0, options.take)
                        }
                    }
                },
                _handleLoadingChanged: function(isLoading) {
                    this.loadingChanged.fire(isLoading)
                },
                _handleLoadError: function(error) {
                    this.loadError.fire(error);
                    this.changed.fire({
                        changeType: "loadError",
                        error: error
                    })
                },
                _handleDataChanged: function(args) {
                    var that = this;
                    var currentTotalCount;
                    var dataSource = that._dataSource;
                    var isLoading = false;
                    var itemsCount = that.itemsCount();
                    that._isLastPage = !itemsCount || !that.pageSize() || itemsCount < that.pageSize();
                    if (that._isLastPage) {
                        that._hasLastPage = true
                    }
                    if (dataSource.totalCount() >= 0) {
                        if (dataSource.pageIndex() >= that.pageCount()) {
                            dataSource.pageIndex(that.pageCount() - 1);
                            that.pageIndex(dataSource.pageIndex());
                            that.resetPagesCache();
                            dataSource.load();
                            isLoading = true
                        }
                    } else {
                        currentTotalCount = dataSource.pageIndex() * that.pageSize() + itemsCount;
                        that._currentTotalCount = Math.max(that._currentTotalCount, currentTotalCount);
                        if (0 === itemsCount && dataSource.pageIndex() >= that.pageCount()) {
                            dataSource.pageIndex(that.pageCount() - 1);
                            if ("infinite" !== that.option("scrolling.mode")) {
                                dataSource.load();
                                isLoading = true
                            }
                        }
                    }
                    if (!isLoading) {
                        that._operationTypes = that._lastOperationTypes;
                        that._lastOperationTypes = {};
                        that.component._optionCache = {};
                        that.changed.fire(args);
                        that.component._optionCache = void 0
                    }
                },
                _scheduleCustomLoadCallbacks: function(deferred) {
                    var that = this;
                    that._isCustomLoading = true;
                    deferred.always(function() {
                        that._isCustomLoading = false
                    })
                },
                loadingOperationTypes: function() {
                    return this._loadingOperationTypes
                },
                operationTypes: function() {
                    return this._operationTypes
                },
                lastLoadOptions: function() {
                    return this._lastLoadOptions || {}
                },
                isLastPage: function() {
                    return this._isLastPage
                },
                totalCount: function() {
                    return parseInt(this._currentTotalCount + this._skipCorrection || this._dataSource.totalCount())
                },
                itemsCount: function() {
                    return this._dataSource.items().length
                },
                totalItemsCount: function() {
                    return this.totalCount()
                },
                pageSize: function() {
                    var dataSource = this._dataSource;
                    if (!arguments.length && !dataSource.paginate()) {
                        return 0
                    }
                    return dataSource.pageSize.apply(dataSource, arguments)
                },
                pageCount: function() {
                    var that = this;
                    var count = that.totalItemsCount();
                    var pageSize = that.pageSize();
                    if (pageSize && count > 0) {
                        return Math.max(1, Math.ceil(count / pageSize))
                    }
                    return 1
                },
                hasKnownLastPage: function() {
                    return this._hasLastPage || this._dataSource.totalCount() >= 0
                },
                loadFromStore: function(loadOptions, store) {
                    var dataSource = this._dataSource;
                    var d = new _deferred.Deferred;
                    if (!dataSource) {
                        return
                    }
                    store = store || dataSource.store();
                    store.load(loadOptions).done(function(data, extra) {
                        if (data && !Array.isArray(data) && Array.isArray(data.data)) {
                            extra = data;
                            data = data.data
                        }
                        d.resolve(data, extra)
                    }).fail(d.reject);
                    return d
                },
                isCustomLoading: function() {
                    return !!this._isCustomLoading
                },
                load: function(options) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var d = new _deferred.Deferred;
                    if (options) {
                        var store = dataSource.store();
                        var dataSourceLoadOptions = dataSource.loadOptions();
                        var loadResult = {
                            storeLoadOptions: options,
                            isCustomLoading: true
                        };
                        (0, _iterator.each)(store._customLoadOptions() || [], function(_, optionName) {
                            if (!(optionName in loadResult.storeLoadOptions)) {
                                loadResult.storeLoadOptions[optionName] = dataSourceLoadOptions[optionName]
                            }
                        });
                        that._scheduleCustomLoadCallbacks(d);
                        dataSource._scheduleLoadCallbacks(d);
                        that._handleDataLoading(loadResult);
                        executeTask(function() {
                            if (!dataSource.store()) {
                                return d.reject("canceled")
                            }(0, _deferred.when)(loadResult.data || that.loadFromStore(loadResult.storeLoadOptions)).done(function(data, extra) {
                                loadResult.data = data;
                                loadResult.extra = extra || {};
                                that._handleDataLoaded(loadResult);
                                if (options.requireTotalCount && void 0 === loadResult.extra.totalCount) {
                                    loadResult.extra.totalCount = store.totalCount(loadResult.storeLoadOptions)
                                }(0, _deferred.when)(loadResult.data, loadResult.extra.totalCount).done(function(data, totalCount) {
                                    loadResult.extra.totalCount = totalCount;
                                    d.resolve(data, loadResult.extra)
                                }).fail(d.reject)
                            }).fail(d.reject)
                        }, that.option("loadingTimeout"));
                        return d.fail(function() {
                            that._eventsStrategy.fireEvent("loadError", arguments)
                        }).promise()
                    } else {
                        return dataSource.load()
                    }
                },
                reload: function(full) {
                    return full ? this._dataSource.reload() : this._dataSource.load()
                },
                getCachedStoreData: function() {
                    return this._cachedStoreData
                }
            }
        }())
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.data_controller.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _custom_store = __webpack_require__( /*! ../../data/custom_store */ 118);
        var _custom_store2 = _interopRequireDefault(_custom_store);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _data_helper = __webpack_require__( /*! ../../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _array_compare = __webpack_require__( /*! ../../core/utils/array_compare */ 319);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = {
            defaultOptions: function() {
                return {
                    loadingTimeout: 0,
                    dataSource: null,
                    cacheEnabled: true,
                    repaintChangesOnly: false,
                    highlightChanges: false,
                    onDataErrorOccurred: null,
                    remoteOperations: "auto",
                    paging: {
                        enabled: true,
                        pageSize: void 0,
                        pageIndex: void 0
                    }
                }
            },
            controllers: {
                data: _uiGrid_core2.default.Controller.inherit({}).include(_data_helper2.default).inherit(function() {
                    var changePaging = function(that, optionName, value) {
                        var dataSource = that._dataSource;
                        if (dataSource) {
                            if (void 0 !== value) {
                                if (dataSource[optionName]() !== value) {
                                    if ("pageSize" === optionName) {
                                        dataSource.pageIndex(0)
                                    }
                                    dataSource[optionName](value);
                                    that._skipProcessingPagingChange = true;
                                    that.option("paging." + optionName, value);
                                    that._skipProcessingPagingChange = false;
                                    return dataSource["pageIndex" === optionName ? "load" : "reload"]().done(that.pageChanged.fire.bind(that.pageChanged))
                                }
                                return (0, _deferred.Deferred)().resolve().promise()
                            }
                            return dataSource[optionName]()
                        }
                        return 0
                    };
                    var members = {
                        init: function() {
                            var that = this;
                            that._items = [];
                            that._columnsController = that.getController("columns");
                            that._columnsChangedHandler = that._handleColumnsChanged.bind(that);
                            that._dataChangedHandler = that._handleDataChanged.bind(that);
                            that._loadingChangedHandler = that._handleLoadingChanged.bind(that);
                            that._loadErrorHandler = that._handleLoadError.bind(that);
                            that._customizeStoreLoadOptionsHandler = that._handleCustomizeStoreLoadOptions.bind(that);
                            that._changingHandler = that._handleChanging.bind(that);
                            that._columnsController.columnsChanged.add(that._columnsChangedHandler);
                            that._isLoading = false;
                            that._isCustomLoading = false;
                            that._repaintChangesOnly = void 0;
                            that._changes = [];
                            that.createAction("onDataErrorOccurred");
                            that.dataErrorOccurred.add(function(error) {
                                return that.executeAction("onDataErrorOccurred", {
                                    error: error
                                })
                            });
                            that._refreshDataSource()
                        },
                        callbackNames: function() {
                            return ["changed", "loadingChanged", "dataErrorOccurred", "pageChanged", "dataSourceChanged"]
                        },
                        callbackFlags: function(name) {
                            if ("dataErrorOccurred" === name) {
                                return {
                                    stopOnFalse: true
                                }
                            }
                        },
                        publicMethods: function() {
                            return ["beginCustomLoading", "endCustomLoading", "refresh", "filter", "clearFilter", "getCombinedFilter", "keyOf", "byKey", "getDataByKeys", "pageIndex", "pageSize", "pageCount", "totalCount", "_disposeDataSource", "getKeyByRowIndex", "getRowIndexByKey", "getDataSource", "getVisibleRows", "repaintRows"]
                        },
                        reset: function() {
                            this._columnsController.reset();
                            this._items = [];
                            this._refreshDataSource()
                        },
                        optionChanged: function(args) {
                            var that = this;
                            var dataSource;

                            function handled() {
                                args.handled = true
                            }
                            if ("dataSource" === args.name && args.name === args.fullName && (args.value === args.previousValue || that.option("columns") && Array.isArray(args.value) && Array.isArray(args.previousValue))) {
                                if (args.value !== args.previousValue) {
                                    var store = that.store();
                                    if (store) {
                                        store._array = args.value
                                    }
                                }
                                handled();
                                that.refresh(that.option("repaintChangesOnly"));
                                return
                            }
                            switch (args.name) {
                                case "cacheEnabled":
                                case "repaintChangesOnly":
                                case "highlightChanges":
                                case "loadingTimeout":
                                    handled();
                                    break;
                                case "remoteOperations":
                                case "keyExpr":
                                case "dataSource":
                                case "scrolling":
                                    handled();
                                    that.reset();
                                    break;
                                case "paging":
                                    dataSource = that.dataSource();
                                    if (dataSource && that._setPagingOptions(dataSource)) {
                                        dataSource.load().done(that.pageChanged.fire.bind(that.pageChanged))
                                    }
                                    handled();
                                    break;
                                case "rtlEnabled":
                                    that.reset();
                                    break;
                                case "columns":
                                    dataSource = that.dataSource();
                                    if (dataSource && dataSource.isLoading() && args.name === args.fullName) {
                                        dataSource.load()
                                    }
                                    break;
                                default:
                                    that.callBase(args)
                            }
                        },
                        isReady: function() {
                            return !this._isLoading
                        },
                        getDataSource: function() {
                            return this._dataSource && this._dataSource._dataSource
                        },
                        getCombinedFilter: function(returnDataField) {
                            return this.combinedFilter(void 0, returnDataField)
                        },
                        combinedFilter: function(filter, returnDataField) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var columnsController = that._columnsController;
                            if (dataSource) {
                                if (void 0 === filter) {
                                    filter = dataSource.filter()
                                }
                                var additionalFilter = that._calculateAdditionalFilter();
                                if (additionalFilter) {
                                    if (columnsController.isDataSourceApplied() || columnsController.isAllDataTypesDefined()) {
                                        filter = _uiGrid_core4.default.combineFilters([additionalFilter, filter])
                                    }
                                }
                                filter = columnsController.updateFilter(filter, returnDataField || dataSource.remoteOperations().filtering)
                            }
                            return filter
                        },
                        waitReady: function() {
                            if (this._updateLockCount) {
                                this._readyDeferred = new _deferred.Deferred;
                                return this._readyDeferred
                            }
                            return (0, _deferred.when)()
                        },
                        _endUpdateCore: function() {
                            var changes = this._changes;
                            if (changes.length) {
                                this._changes = [];
                                var repaintChangesOnly = changes.every(function(change) {
                                    return change.repaintChangesOnly
                                });
                                this.updateItems(1 === changes.length ? changes[0] : {
                                    repaintChangesOnly: repaintChangesOnly
                                })
                            }
                            if (this._readyDeferred) {
                                this._readyDeferred.resolve();
                                this._readyDeferred = null
                            }
                        },
                        _handleCustomizeStoreLoadOptions: function(e) {
                            var columnsController = this._columnsController;
                            var dataSource = this._dataSource;
                            var storeLoadOptions = e.storeLoadOptions;
                            if (e.isCustomLoading && !storeLoadOptions.isLoadingAll) {
                                return
                            }
                            storeLoadOptions.filter = this.combinedFilter(storeLoadOptions.filter);
                            if (!columnsController.isDataSourceApplied()) {
                                columnsController.updateColumnDataTypes(dataSource)
                            }
                            this._columnsUpdating = true;
                            columnsController.updateSortingGrouping(dataSource, !this._isFirstLoading);
                            this._columnsUpdating = false;
                            storeLoadOptions.sort = columnsController.getSortDataSourceParameters();
                            storeLoadOptions.group = columnsController.getGroupDataSourceParameters();
                            dataSource.sort(storeLoadOptions.sort);
                            dataSource.group(storeLoadOptions.group);
                            storeLoadOptions.sort = columnsController.getSortDataSourceParameters(!dataSource.remoteOperations().sorting);
                            e.group = columnsController.getGroupDataSourceParameters(!dataSource.remoteOperations().grouping)
                        },
                        _handleColumnsChanged: function(e) {
                            var that = this;
                            var changeTypes = e.changeTypes;
                            var optionNames = e.optionNames;
                            var filterValue;
                            var filterValues;
                            var filterApplied;
                            var updateItemsHandler = function updateItemsHandler() {
                                that._columnsController.columnsChanged.remove(updateItemsHandler);
                                that.updateItems()
                            };
                            if (changeTypes.sorting || changeTypes.grouping) {
                                if (that._dataSource && !that._columnsUpdating) {
                                    that._dataSource.group(that._columnsController.getGroupDataSourceParameters());
                                    that._dataSource.sort(that._columnsController.getSortDataSourceParameters());
                                    that.reload()
                                }
                            } else {
                                if (changeTypes.columns) {
                                    if (optionNames.filterValues || optionNames.filterValue || optionNames.selectedFilterOperation) {
                                        filterValue = that._columnsController.columnOption(e.columnIndex, "filterValue");
                                        filterValues = that._columnsController.columnOption(e.columnIndex, "filterValues");
                                        if (Array.isArray(filterValues) || void 0 === e.columnIndex || _type2.default.isDefined(filterValue) || !optionNames.selectedFilterOperation || optionNames.filterValue) {
                                            that._applyFilter();
                                            filterApplied = true
                                        }
                                    }
                                    if (!that._needApplyFilter && !_uiGrid_core4.default.checkChanges(optionNames, ["width", "visibleWidth", "filterValue", "bufferedFilterValue", "selectedFilterOperation", "filterValues", "filterType"])) {
                                        that._columnsController.columnsChanged.add(updateItemsHandler)
                                    }
                                    if (_type2.default.isDefined(optionNames.visible)) {
                                        var column = that._columnsController.columnOption(e.columnIndex);
                                        if (column && (_type2.default.isDefined(column.filterValue) || _type2.default.isDefined(column.filterValues))) {
                                            that._applyFilter();
                                            filterApplied = true
                                        }
                                    }
                                }
                            }
                            if (!filterApplied && changeTypes.filtering) {
                                that.reload()
                            }
                        },
                        _handleDataChanged: function(e) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var columnsController = that._columnsController;
                            var isAsyncDataSourceApplying = false;
                            this._isFirstLoading = false;
                            if (dataSource && !that._isDataSourceApplying) {
                                that._isDataSourceApplying = true;
                                (0, _deferred.when)(that._columnsController.applyDataSource(dataSource)).done(function() {
                                    if (that._isLoading) {
                                        that._handleLoadingChanged(false)
                                    }
                                    if (isAsyncDataSourceApplying && e && e.isDelayed) {
                                        e.isDelayed = false
                                    }
                                    that._isDataSourceApplying = false;
                                    var hasAdditionalFilter = function() {
                                        var additionalFilter = that._calculateAdditionalFilter();
                                        return additionalFilter && additionalFilter.length
                                    };
                                    var needApplyFilter = that._needApplyFilter;
                                    that._needApplyFilter = false;
                                    if (needApplyFilter && !that._isAllDataTypesDefined && hasAdditionalFilter()) {
                                        _ui2.default.log("W1005", that.component.NAME);
                                        that._applyFilter()
                                    } else {
                                        that.updateItems(e, true)
                                    }
                                }).fail(function() {
                                    that._isDataSourceApplying = false
                                });
                                if (that._isDataSourceApplying) {
                                    isAsyncDataSourceApplying = true;
                                    that._handleLoadingChanged(true)
                                }
                                that._needApplyFilter = !that._columnsController.isDataSourceApplied();
                                that._isAllDataTypesDefined = columnsController.isAllDataTypesDefined()
                            }
                        },
                        _handleLoadingChanged: function(isLoading) {
                            this._isLoading = isLoading;
                            this._fireLoadingChanged()
                        },
                        _handleLoadError: function(e) {
                            this.dataErrorOccurred.fire(e)
                        },
                        fireError: function() {
                            this.dataErrorOccurred.fire(_ui2.default.Error.apply(_ui2.default, arguments))
                        },
                        _setPagingOptions: function(dataSource) {
                            var pageIndex = this.option("paging.pageIndex");
                            var pageSize = this.option("paging.pageSize");
                            var pagingEnabled = this.option("paging.enabled");
                            var scrollingMode = this.option("scrolling.mode");
                            var appendMode = "infinite" === scrollingMode;
                            var virtualMode = "virtual" === scrollingMode;
                            var paginate = pagingEnabled || virtualMode || appendMode;
                            var isChanged = false;
                            dataSource.requireTotalCount(!appendMode);
                            if (void 0 !== pagingEnabled && dataSource.paginate() !== paginate) {
                                dataSource.paginate(paginate);
                                isChanged = true
                            }
                            if (void 0 !== pageSize && dataSource.pageSize() !== pageSize) {
                                dataSource.pageSize(pageSize);
                                isChanged = true
                            }
                            if (void 0 !== pageIndex && dataSource.pageIndex() !== pageIndex) {
                                dataSource.pageIndex(pageIndex);
                                isChanged = true
                            }
                            return isChanged
                        },
                        _getSpecificDataSourceOption: function() {
                            var dataSource = this.option("dataSource");
                            if (Array.isArray(dataSource)) {
                                return {
                                    store: {
                                        type: "array",
                                        data: dataSource,
                                        key: this.option("keyExpr")
                                    }
                                }
                            }
                            return dataSource
                        },
                        _initDataSource: function() {
                            var that = this;
                            var dataSource = this.option("dataSource");
                            var oldDataSource = this._dataSource;
                            that.callBase();
                            dataSource = that._dataSource;
                            that._isFirstLoading = true;
                            if (dataSource) {
                                that._setPagingOptions(dataSource);
                                that.setDataSource(dataSource)
                            } else {
                                if (oldDataSource) {
                                    that.updateItems()
                                }
                            }
                        },
                        _loadDataSource: function() {
                            var that = this;
                            var dataSource = that._dataSource;
                            var result = new _deferred.Deferred;
                            (0, _deferred.when)(this._columnsController.refresh(true)).always(function() {
                                if (dataSource) {
                                    dataSource.load().done(result.resolve).fail(result.reject)
                                } else {
                                    result.resolve()
                                }
                            });
                            return result.promise()
                        },
                        _beforeProcessItems: function(items) {
                            return items.slice(0)
                        },
                        getRowIndexDelta: function() {
                            return 0
                        },
                        _processItems: function(items, change) {
                            var that = this;
                            var rowIndexDelta = that.getRowIndexDelta();
                            var changeType = change.changeType;
                            var visibleColumns = that._columnsController.getVisibleColumns(null, "loadingAll" === changeType);
                            var visibleItems = that._items;
                            var dataIndex = "append" === changeType && visibleItems.length > 0 ? visibleItems[visibleItems.length - 1].dataIndex + 1 : 0;
                            var options = {
                                visibleColumns: visibleColumns,
                                dataIndex: dataIndex
                            };
                            var result = [];
                            (0, _iterator.each)(items, function(index, item) {
                                if (_type2.default.isDefined(item)) {
                                    options.rowIndex = index - rowIndexDelta;
                                    item = that._processItem(item, options);
                                    result.push(item)
                                }
                            });
                            return result
                        },
                        _processItem: function(item, options) {
                            item = this._generateDataItem(item, options);
                            item = this._processDataItem(item, options);
                            item.dataIndex = options.dataIndex++;
                            return item
                        },
                        _generateDataItem: function(data) {
                            return {
                                rowType: "data",
                                data: data,
                                key: this.keyOf(data)
                            }
                        },
                        _processDataItem: function(dataItem, options) {
                            dataItem.values = this.generateDataValues(dataItem.data, options.visibleColumns);
                            return dataItem
                        },
                        generateDataValues: function(data, columns, isModified) {
                            var values = [];
                            var value;
                            for (var i = 0; i < columns.length; i++) {
                                var column = columns[i];
                                value = isModified ? void 0 : null;
                                if (!column.command) {
                                    if (column.calculateCellValue) {
                                        value = column.calculateCellValue(data)
                                    } else {
                                        if (column.dataField) {
                                            value = data[column.dataField]
                                        }
                                    }
                                }
                                values.push(value)
                            }
                            return values
                        },
                        _applyChange: function(change) {
                            var that = this;
                            if ("update" === change.changeType) {
                                that._applyChangeUpdate(change)
                            } else {
                                if (that.items().length && change.repaintChangesOnly && "refresh" === change.changeType) {
                                    that._applyChangesOnly(change)
                                } else {
                                    if ("refresh" === change.changeType) {
                                        that._applyChangeFull(change)
                                    }
                                }
                            }
                        },
                        _applyChangeFull: function(change) {
                            this._items = change.items.slice(0)
                        },
                        _getRowIndices: function(change) {
                            var rowIndices = change.rowIndices.slice(0);
                            var rowIndexDelta = this.getRowIndexDelta();
                            rowIndices.sort(function(a, b) {
                                return a - b
                            });
                            for (var i = 0; i < rowIndices.length; i++) {
                                var correctedRowIndex = rowIndices[i];
                                if (change.allowInvisibleRowIndices) {
                                    correctedRowIndex += rowIndexDelta
                                }
                                if (correctedRowIndex < 0) {
                                    rowIndices.splice(i, 1);
                                    i--
                                }
                            }
                            return rowIndices
                        },
                        _applyChangeUpdate: function(change) {
                            var that = this;
                            var items = change.items;
                            var rowIndices = that._getRowIndices(change);
                            var rowIndexDelta = that.getRowIndexDelta();
                            var repaintChangesOnly = that.option("repaintChangesOnly");
                            var prevIndex = -1;
                            var rowIndexCorrection = 0;
                            var changeType;
                            change.items = [];
                            change.rowIndices = [];
                            change.columnIndices = [];
                            change.changeTypes = [];
                            var equalItems = function(item1, item2, strict) {
                                var result = item1 && item2 && (0, _common.equalByValue)(item1.key, item2.key);
                                if (result && strict) {
                                    result = item1.rowType === item2.rowType && ("detail" !== item2.rowType || item1.isEditing === item2.isEditing)
                                }
                                return result
                            };
                            (0, _iterator.each)(rowIndices, function(index, rowIndex) {
                                var columnIndices;
                                rowIndex += rowIndexCorrection + rowIndexDelta;
                                if (prevIndex === rowIndex) {
                                    return
                                }
                                prevIndex = rowIndex;
                                var oldItem = that._items[rowIndex];
                                var oldNextItem = that._items[rowIndex + 1];
                                var newItem = items[rowIndex];
                                var newNextItem = items[rowIndex + 1];
                                var strict = equalItems(oldItem, oldNextItem) || equalItems(newItem, newNextItem);
                                if (newItem) {
                                    newItem.rowIndex = rowIndex;
                                    change.items.push(newItem)
                                }
                                if (oldItem && newItem && equalItems(oldItem, newItem, strict)) {
                                    changeType = "update";
                                    that._items[rowIndex] = newItem;
                                    if (oldItem.visible !== newItem.visible) {
                                        change.items.splice(-1, 1, {
                                            visible: newItem.visible
                                        })
                                    } else {
                                        if (repaintChangesOnly && !change.isFullUpdate) {
                                            columnIndices = that._partialUpdateRow(oldItem, newItem, rowIndex - rowIndexDelta)
                                        }
                                    }
                                } else {
                                    if (newItem && !oldItem || newNextItem && equalItems(oldItem, newNextItem, strict)) {
                                        changeType = "insert";
                                        that._items.splice(rowIndex, 0, newItem);
                                        rowIndexCorrection++
                                    } else {
                                        if (oldItem && !newItem || oldNextItem && equalItems(newItem, oldNextItem, strict)) {
                                            changeType = "remove";
                                            that._items.splice(rowIndex, 1);
                                            rowIndexCorrection--;
                                            prevIndex = -1
                                        } else {
                                            if (newItem) {
                                                changeType = "update";
                                                that._items[rowIndex] = newItem
                                            } else {
                                                return
                                            }
                                        }
                                    }
                                }
                                change.rowIndices.push(rowIndex - rowIndexDelta);
                                change.changeTypes.push(changeType);
                                change.columnIndices.push(columnIndices)
                            })
                        },
                        _isCellChanged: function(oldRow, newRow, visibleRowIndex, columnIndex, isLiveUpdate) {
                            if (JSON.stringify(oldRow.values[columnIndex]) !== JSON.stringify(newRow.values[columnIndex])) {
                                return true
                            }

                            function isCellModified(row, columnIndex) {
                                return row.modifiedValues ? void 0 !== row.modifiedValues[columnIndex] : false
                            }
                            if (isCellModified(oldRow, columnIndex) !== isCellModified(newRow, columnIndex)) {
                                return true
                            }
                            return false
                        },
                        _getChangedColumnIndices: function(oldItem, newItem, visibleRowIndex, isLiveUpdate) {
                            if (oldItem.rowType === newItem.rowType && "group" !== newItem.rowType && "groupFooter" !== newItem.rowType) {
                                var columnIndices = [];
                                if ("detail" !== newItem.rowType) {
                                    for (var columnIndex = 0; columnIndex < oldItem.values.length; columnIndex++) {
                                        if (this._isCellChanged(oldItem, newItem, visibleRowIndex, columnIndex, isLiveUpdate)) {
                                            columnIndices.push(columnIndex)
                                        }
                                    }
                                }
                                return columnIndices
                            }
                        },
                        _partialUpdateRow: function(oldItem, newItem, visibleRowIndex, isLiveUpdate) {
                            var changedColumnIndices = this._getChangedColumnIndices(oldItem, newItem, visibleRowIndex, isLiveUpdate);
                            if (changedColumnIndices) {
                                oldItem.cells && oldItem.cells.forEach(function(cell, columnIndex) {
                                    var isCellChanged = changedColumnIndices.indexOf(columnIndex) >= 0;
                                    if (!isCellChanged && cell && cell.update) {
                                        cell.update(newItem)
                                    }
                                });
                                newItem.update = oldItem.update;
                                newItem.watch = oldItem.watch;
                                newItem.cells = oldItem.cells;
                                if (isLiveUpdate) {
                                    newItem.oldValues = oldItem.values
                                }
                                oldItem.update && oldItem.update(newItem)
                            }
                            return changedColumnIndices
                        },
                        _isItemEquals: function(item1, item2) {
                            if (JSON.stringify(item1.values) !== JSON.stringify(item2.values)) {
                                return false
                            }
                            var compareFields = ["modified", "isNewRow", "removed", "isEditing"];
                            if (compareFields.some(function(field) {
                                    return item1[field] !== item2[field]
                                })) {
                                return false
                            }
                            if ("group" === item1.rowType || "groupFooter" === item1.rowType) {
                                if (item1.isExpanded !== item2.isExpanded || JSON.stringify(item1.summaryCells) !== JSON.stringify(item2.summaryCells)) {
                                    return false
                                }
                            }
                            return true
                        },
                        _applyChangesOnly: function(change) {
                            var _this = this;
                            var rowIndices = [];
                            var columnIndices = [];
                            var changeTypes = [];
                            var items = [];
                            var newIndexByKey = {};

                            function getRowKey(row) {
                                if (row) {
                                    return row.rowType + "," + JSON.stringify(row.key)
                                }
                            }
                            var isItemEquals = function(item1, item2) {
                                if (!_this._isItemEquals(item1, item2)) {
                                    return false
                                }
                                if (item1.cells) {
                                    item1.update && item1.update(item2);
                                    item1.cells.forEach(function(cell) {
                                        if (cell && cell.update) {
                                            cell.update(item2)
                                        }
                                    })
                                }
                                return true
                            };
                            var oldItems = this._items.slice();
                            change.items.forEach(function(item, index) {
                                var key = getRowKey(item);
                                newIndexByKey[key] = index;
                                item.rowIndex = index
                            });
                            var result = (0, _array_compare.findChanges)(oldItems, change.items, getRowKey, isItemEquals);
                            if (!result) {
                                this._applyChangeFull(change);
                                return
                            }
                            result.forEach(function(change) {
                                switch (change.type) {
                                    case "update":
                                        var index = change.index;
                                        var newItem = change.data;
                                        var oldItem = change.oldItem;
                                        var changedColumnIndices = _this._partialUpdateRow(oldItem, newItem, index, true);
                                        rowIndices.push(index);
                                        changeTypes.push("update");
                                        items.push(newItem);
                                        _this._items[index] = newItem;
                                        columnIndices.push(changedColumnIndices);
                                        break;
                                    case "insert":
                                        rowIndices.push(change.index);
                                        changeTypes.push("insert");
                                        items.push(change.data);
                                        columnIndices.push(void 0);
                                        _this._items.splice(change.index, 0, change.data);
                                        break;
                                    case "remove":
                                        rowIndices.push(change.index);
                                        changeTypes.push("remove");
                                        _this._items.splice(change.index, 1);
                                        items.push(change.oldItem);
                                        columnIndices.push(void 0)
                                }
                            });
                            change.repaintChangesOnly = true;
                            change.changeType = "update";
                            change.rowIndices = rowIndices;
                            change.columnIndices = columnIndices;
                            change.changeTypes = changeTypes;
                            change.items = items;
                            if (oldItems.length) {
                                change.isLiveUpdate = true
                            }
                            this._correctRowIndices(function(rowIndex) {
                                var oldItem = oldItems[rowIndex];
                                var key = getRowKey(oldItem);
                                var newRowIndex = newIndexByKey[key];
                                return newRowIndex >= 0 ? newRowIndex - rowIndex : 0
                            })
                        },
                        _correctRowIndices: _common.noop,
                        _updateItemsCore: function(change) {
                            var that = this;
                            var items;
                            var dataSource = that._dataSource;
                            var changeType = change.changeType || "refresh";
                            change.changeType = changeType;
                            if (dataSource) {
                                items = change.items || dataSource.items();
                                items = that._beforeProcessItems(items);
                                items = that._processItems(items, change);
                                change.items = items;
                                var oldItems = that._items.length === items.length && that._items;
                                that._applyChange(change);
                                var rowIndexDelta = that.getRowIndexDelta();
                                (0, _iterator.each)(that._items, function(index, item) {
                                    item.rowIndex = index - rowIndexDelta;
                                    if (oldItems) {
                                        item.cells = oldItems[index].cells || []
                                    }
                                })
                            } else {
                                that._items = []
                            }
                        },
                        _handleChanging: function(e) {
                            var that = this;
                            var rows = that.getVisibleRows();
                            var dataSource = that.dataSource();
                            if (dataSource) {
                                e.changes.forEach(function(change) {
                                    if ("insert" === change.type && change.index >= 0) {
                                        var dataIndex = 0;
                                        for (var i = 0; i < change.index; i++) {
                                            var row = rows[i];
                                            if (row && ("data" === row.rowType || "group" === row.rowType)) {
                                                dataIndex++
                                            }
                                        }
                                        change.index = dataIndex
                                    }
                                })
                            }
                        },
                        updateItems: function(change, isDataChanged) {
                            change = change || {};
                            var that = this;
                            if (void 0 !== that._repaintChangesOnly) {
                                change.repaintChangesOnly = that._repaintChangesOnly
                            } else {
                                if (change.changes) {
                                    change.repaintChangesOnly = that.option("repaintChangesOnly")
                                } else {
                                    if (isDataChanged) {
                                        var operationTypes = that.dataSource().operationTypes();
                                        change.repaintChangesOnly = operationTypes && !operationTypes.grouping && !operationTypes.filtering && that.option("repaintChangesOnly");
                                        change.isDataChanged = true;
                                        if (operationTypes && (operationTypes.reload || operationTypes.paging || operationTypes.groupExpanding)) {
                                            change.needUpdateDimensions = true
                                        }
                                    }
                                }
                            }
                            if (that._updateLockCount) {
                                that._changes.push(change);
                                return
                            }
                            that._updateItemsCore(change);
                            if (change.cancel) {
                                return
                            }
                            that._fireChanged(change)
                        },
                        loadingOperationTypes: function() {
                            var dataSource = this.dataSource();
                            return dataSource && dataSource.loadingOperationTypes() || {}
                        },
                        _fireChanged: function(change) {
                            var that = this;
                            (0, _common.deferRender)(function() {
                                that.changed.fire(change)
                            })
                        },
                        isLoading: function() {
                            return this._isLoading || this._isCustomLoading
                        },
                        _fireLoadingChanged: function() {
                            this.loadingChanged.fire(this.isLoading(), this._loadingText)
                        },
                        _calculateAdditionalFilter: function() {
                            return null
                        },
                        _applyFilter: function() {
                            var that = this;
                            var dataSource = that._dataSource;
                            if (dataSource) {
                                dataSource.pageIndex(0);
                                return that.reload().done(that.pageChanged.fire.bind(that.pageChanged))
                            }
                        },
                        filter: function filter(filterExpr) {
                            var dataSource = this._dataSource;
                            var filter = dataSource && dataSource.filter();
                            if (0 === arguments.length) {
                                return filter
                            }
                            filterExpr = arguments.length > 1 ? Array.prototype.slice.call(arguments, 0) : filterExpr;
                            if (_uiGrid_core4.default.equalFilterParameters(filter, filterExpr)) {
                                return
                            }
                            if (dataSource) {
                                dataSource.filter(filterExpr)
                            }
                            this._applyFilter()
                        },
                        clearFilter: function(filterName) {
                            var that = this;
                            var columnsController = that._columnsController;
                            var clearColumnOption = function(optionName) {
                                var columnCount = columnsController.columnCount();
                                for (var index = 0; index < columnCount; index++) {
                                    columnsController.columnOption(index, optionName, void 0)
                                }
                            };
                            that.component.beginUpdate();
                            if (arguments.length > 0) {
                                switch (filterName) {
                                    case "dataSource":
                                        that.filter(null);
                                        break;
                                    case "search":
                                        that.searchByText("");
                                        break;
                                    case "header":
                                        clearColumnOption("filterValues");
                                        break;
                                    case "row":
                                        clearColumnOption("filterValue")
                                }
                            } else {
                                that.filter(null);
                                that.searchByText("");
                                clearColumnOption("filterValue");
                                clearColumnOption("bufferedFilterValue");
                                clearColumnOption("filterValues")
                            }
                            that.component.endUpdate()
                        },
                        _fireDataSourceChanged: function() {
                            var that = this;
                            var changedHandler = function changedHandler() {
                                that.changed.remove(changedHandler);
                                that.dataSourceChanged.fire()
                            };
                            that.changed.add(changedHandler)
                        },
                        _getDataSourceAdapter: _common.noop,
                        _createDataSourceAdapterCore: function(dataSource, remoteOperations) {
                            var dataSourceAdapterProvider = this._getDataSourceAdapter();
                            var dataSourceAdapter = dataSourceAdapterProvider.create(this.component);
                            dataSourceAdapter.init(dataSource, remoteOperations);
                            return dataSourceAdapter
                        },
                        isLocalStore: function(store) {
                            store = store || this.store();
                            return store instanceof _array_store2.default
                        },
                        isCustomStore: function(store) {
                            store = store || this.store();
                            return store instanceof _custom_store2.default
                        },
                        _createDataSourceAdapter: function(dataSource) {
                            var remoteOperations = this.option("remoteOperations");
                            var store = dataSource.store();
                            var enabledRemoteOperations = {
                                filtering: true,
                                sorting: true,
                                paging: true,
                                grouping: true,
                                summary: true
                            };
                            if (remoteOperations && remoteOperations.groupPaging) {
                                remoteOperations = (0, _extend.extend)({}, enabledRemoteOperations, remoteOperations)
                            }
                            if ("auto" === remoteOperations) {
                                remoteOperations = this.isLocalStore(store) || this.isCustomStore(store) ? {} : {
                                    filtering: true,
                                    sorting: true,
                                    paging: true
                                }
                            }
                            if (true === remoteOperations) {
                                remoteOperations = enabledRemoteOperations
                            }
                            return this._createDataSourceAdapterCore(dataSource, remoteOperations)
                        },
                        setDataSource: function(dataSource) {
                            var that = this;
                            var oldDataSource = that._dataSource;
                            if (!dataSource && oldDataSource) {
                                oldDataSource.changed.remove(that._dataChangedHandler);
                                oldDataSource.loadingChanged.remove(that._loadingChangedHandler);
                                oldDataSource.loadError.remove(that._loadErrorHandler);
                                oldDataSource.customizeStoreLoadOptions.remove(that._customizeStoreLoadOptionsHandler);
                                oldDataSource.changing.remove(that._changingHandler);
                                oldDataSource.cancelAll();
                                oldDataSource.dispose(that._isSharedDataSource)
                            }
                            if (dataSource) {
                                dataSource = that._createDataSourceAdapter(dataSource)
                            }
                            that._dataSource = dataSource;
                            if (dataSource) {
                                that._fireDataSourceChanged();
                                that._isLoading = !dataSource.isLoaded();
                                that._needApplyFilter = true;
                                that._isAllDataTypesDefined = that._columnsController.isAllDataTypesDefined();
                                dataSource.changed.add(that._dataChangedHandler);
                                dataSource.loadingChanged.add(that._loadingChangedHandler);
                                dataSource.loadError.add(that._loadErrorHandler);
                                dataSource.customizeStoreLoadOptions.add(that._customizeStoreLoadOptionsHandler);
                                dataSource.changing.add(that._changingHandler)
                            }
                        },
                        items: function() {
                            return this._items
                        },
                        isEmpty: function() {
                            return !this.items().length
                        },
                        pageCount: function() {
                            return this._dataSource ? this._dataSource.pageCount() : 1
                        },
                        dataSource: function() {
                            return this._dataSource
                        },
                        store: function() {
                            var dataSource = this._dataSource;
                            return dataSource && dataSource.store()
                        },
                        loadAll: function(data) {
                            var that = this;
                            var d = new _deferred.Deferred;
                            var dataSource = that._dataSource;
                            if (dataSource) {
                                if (data) {
                                    var options = {
                                        data: data,
                                        isCustomLoading: true,
                                        storeLoadOptions: {
                                            isLoadingAll: true
                                        },
                                        loadOptions: {
                                            filter: that.getCombinedFilter(),
                                            group: dataSource.group(),
                                            sort: dataSource.sort()
                                        }
                                    };
                                    dataSource._handleDataLoaded(options);
                                    (0, _deferred.when)(options.data).done(function(data) {
                                        data = that._beforeProcessItems(data);
                                        d.resolve(that._processItems(data, {
                                            changeType: "loadingAll"
                                        }), options.extra && options.extra.summary)
                                    }).fail(d.reject)
                                } else {
                                    if (!dataSource.isLoading()) {
                                        var loadOptions = (0, _extend.extend)({}, dataSource.loadOptions(), {
                                            isLoadingAll: true,
                                            requireTotalCount: false
                                        });
                                        dataSource.load(loadOptions).done(function(items, extra) {
                                            items = that._beforeProcessItems(items);
                                            items = that._processItems(items, {
                                                changeType: "loadingAll"
                                            });
                                            d.resolve(items, extra && extra.summary)
                                        }).fail(d.reject)
                                    } else {
                                        d.reject()
                                    }
                                }
                            } else {
                                d.resolve([])
                            }
                            return d
                        },
                        getKeyByRowIndex: function(rowIndex) {
                            var item = this.items()[rowIndex];
                            if (item) {
                                return item.key
                            }
                        },
                        getRowIndexByKey: function(key) {
                            return _uiGrid_core4.default.getIndexByKey(key, this.items())
                        },
                        keyOf: function(data) {
                            var store = this.store();
                            if (store) {
                                return store.keyOf(data)
                            }
                        },
                        byKey: function(key) {
                            var store = this.store();
                            var rowIndex = this.getRowIndexByKey(key);
                            var result;
                            if (!store) {
                                return
                            }
                            if (rowIndex >= 0) {
                                result = (new _deferred.Deferred).resolve(this.items()[rowIndex].data)
                            }
                            return result || store.byKey(key)
                        },
                        key: function() {
                            var store = this.store();
                            if (store) {
                                return store.key()
                            }
                        },
                        getRowIndexOffset: function() {
                            return 0
                        },
                        getDataByKeys: function(rowKeys) {
                            var that = this;
                            var result = new _deferred.Deferred;
                            var deferreds = [];
                            var data = [];
                            (0, _iterator.each)(rowKeys, function(index, key) {
                                deferreds.push(that.byKey(key).done(function(keyData) {
                                    data[index] = keyData
                                }))
                            });
                            _deferred.when.apply(_renderer2.default, deferreds).always(function() {
                                result.resolve(data)
                            });
                            return result
                        },
                        pageIndex: function(value) {
                            return changePaging(this, "pageIndex", value)
                        },
                        pageSize: function(value) {
                            return changePaging(this, "pageSize", value)
                        },
                        beginCustomLoading: function(messageText) {
                            this._isCustomLoading = true;
                            this._loadingText = messageText || "";
                            this._fireLoadingChanged()
                        },
                        endCustomLoading: function() {
                            this._isCustomLoading = false;
                            this._loadingText = void 0;
                            this._fireLoadingChanged()
                        },
                        refresh: function(options) {
                            if (true === options) {
                                options = {
                                    reload: true,
                                    changesOnly: true
                                }
                            } else {
                                if (!options) {
                                    options = {
                                        lookup: true,
                                        selection: true,
                                        reload: true
                                    }
                                }
                            }
                            var that = this;
                            var dataSource = that.getDataSource();
                            var changesOnly = options.changesOnly;
                            var d = new _deferred.Deferred;
                            var customizeLoadResult = function() {
                                that._repaintChangesOnly = !!changesOnly
                            };
                            (0, _deferred.when)(!options.lookup || that._columnsController.refresh()).always(function() {
                                if (options.load || options.reload) {
                                    dataSource && dataSource.on("customizeLoadResult", customizeLoadResult);
                                    (0, _deferred.when)(that.reload(options.reload, changesOnly)).always(function() {
                                        dataSource && dataSource.off("customizeLoadResult", customizeLoadResult);
                                        that._repaintChangesOnly = void 0
                                    }).done(d.resolve).fail(d.reject)
                                } else {
                                    that.updateItems({
                                        repaintChangesOnly: options.changesOnly
                                    });
                                    d.resolve()
                                }
                            });
                            return d.promise()
                        },
                        getVisibleRows: function() {
                            return this.items()
                        },
                        _disposeDataSource: function() {
                            this.setDataSource(null)
                        },
                        dispose: function() {
                            this._disposeDataSource();
                            this.callBase.apply(this, arguments)
                        },
                        repaintRows: function(rowIndexes, changesOnly) {
                            rowIndexes = Array.isArray(rowIndexes) ? rowIndexes : [rowIndexes];
                            if (rowIndexes.length > 1 || _type2.default.isDefined(rowIndexes[0])) {
                                this.updateItems({
                                    changeType: "update",
                                    rowIndices: rowIndexes,
                                    isFullUpdate: !changesOnly
                                })
                            }
                        },
                        skipProcessingPagingChange: function(fullName) {
                            return this._skipProcessingPagingChange && ("paging.pageIndex" === fullName || "paging.pageSize" === fullName)
                        },
                        getUserState: function() {
                            return {
                                searchText: this.option("searchPanel.text"),
                                pageIndex: this.pageIndex(),
                                pageSize: this.pageSize()
                            }
                        },
                        getCachedStoreData: function() {
                            return this._dataSource && this._dataSource.getCachedStoreData()
                        }
                    };
                    _uiGrid_core4.default.proxyMethod(members, "load");
                    _uiGrid_core4.default.proxyMethod(members, "reload");
                    _uiGrid_core4.default.proxyMethod(members, "push");
                    _uiGrid_core4.default.proxyMethod(members, "itemsCount", 0);
                    _uiGrid_core4.default.proxyMethod(members, "totalItemsCount", 0);
                    _uiGrid_core4.default.proxyMethod(members, "hasKnownLastPage", true);
                    _uiGrid_core4.default.proxyMethod(members, "isLoaded", true);
                    _uiGrid_core4.default.proxyMethod(members, "totalCount", 0);
                    return members
                }())
            }
        }
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.sorting.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.sorting_mixin */ 353);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLUMN_HEADERS_VIEW_NAMESPACE = "dxDataGridColumnHeadersView";
        var ColumnHeadersViewSortingExtender = (0, _extend.extend)({}, _uiGrid_core2.default, {
            _createRow: function(row) {
                var _this = this;
                var $row = this.callBase(row);
                if ("header" === row.rowType) {
                    _events_engine2.default.on($row, (0, _utils.addNamespace)(_click2.default.name, COLUMN_HEADERS_VIEW_NAMESPACE), "td", this.createAction(function(e) {
                        _this._processHeaderAction(e.event, $row)
                    }))
                }
                return $row
            },
            _processHeaderAction: function(event, $row) {
                if ((0, _renderer2.default)(event.currentTarget).parent().get(0) !== $row.get(0)) {
                    return
                }
                var that = this;
                var keyName = null;
                var $cellElementFromEvent = (0, _renderer2.default)(event.currentTarget);
                var rowIndex = $cellElementFromEvent.parent().index();
                var columnIndex = -1;
                [].slice.call(that.getCellElements(rowIndex)).some(function($cellElement, index) {
                    if ($cellElement === $cellElementFromEvent.get(0)) {
                        columnIndex = index;
                        return true
                    }
                });
                var visibleColumns = that._columnsController.getVisibleColumns(rowIndex);
                var column = visibleColumns[columnIndex];
                var editingController = that.getController("editing");
                var editingMode = that.option("editing.mode");
                var isCellEditing = editingController && editingController.isEditing() && ("batch" === editingMode || "cell" === editingMode);
                if (isCellEditing || !that._isSortableElement((0, _renderer2.default)(event.target))) {
                    return
                }
                if (column && !(0, _type.isDefined)(column.groupIndex) && !column.command) {
                    if (event.shiftKey) {
                        keyName = "shift"
                    } else {
                        if (event.ctrlKey) {
                            keyName = "ctrl"
                        }
                    }
                    setTimeout(function() {
                        that._columnsController.changeSortOrder(column.index, keyName)
                    })
                }
            },
            _renderCellContent: function($cell, options) {
                var that = this;
                var column = options.column;
                if (!column.command && "header" === options.rowType) {
                    that._applyColumnState({
                        name: "sort",
                        rootElement: $cell,
                        column: column,
                        showColumnLines: that.option("showColumnLines")
                    })
                }
                that.callBase($cell, options)
            },
            _columnOptionChanged: function(e) {
                var changeTypes = e.changeTypes;
                if (1 === changeTypes.length && changeTypes.sorting) {
                    this._updateIndicators("sort");
                    return
                }
                this.callBase(e)
            },
            optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "sorting":
                        that._invalidate();
                        args.handled = true;
                        break;
                    default:
                        that.callBase(args)
                }
            }
        });
        var HeaderPanelSortingExtender = (0, _extend.extend)({}, _uiGrid_core2.default, {
            _createGroupPanelItem: function($rootElement, groupColumn) {
                var that = this;
                var $item = that.callBase.apply(that, arguments);
                _events_engine2.default.on($item, (0, _utils.addNamespace)(_click2.default.name, "dxDataGridHeaderPanel"), that.createAction(function() {
                    that._processGroupItemAction(groupColumn.index)
                }));
                that._applyColumnState({
                    name: "sort",
                    rootElement: $item,
                    column: {
                        alignment: that.option("rtlEnabled") ? "right" : "left",
                        allowSorting: groupColumn.allowSorting,
                        sortOrder: "desc" === groupColumn.sortOrder ? "desc" : "asc"
                    },
                    showColumnLines: true
                });
                return $item
            },
            _processGroupItemAction: function(groupColumnIndex) {
                var _this2 = this;
                setTimeout(function() {
                    return _this2.getController("columns").changeSortOrder(groupColumnIndex)
                })
            },
            optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "sorting":
                        that._invalidate();
                        args.handled = true;
                        break;
                    default:
                        that.callBase(args)
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    sorting: {
                        mode: "single",
                        ascendingText: _message2.default.format("dxDataGrid-sortingAscendingText"),
                        descendingText: _message2.default.format("dxDataGrid-sortingDescendingText"),
                        clearText: _message2.default.format("dxDataGrid-sortingClearText"),
                        showSortIndexes: true
                    }
                }
            },
            extenders: {
                views: {
                    columnHeadersView: ColumnHeadersViewSortingExtender,
                    headerPanel: HeaderPanelSortingExtender
                }
            }
        }
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.sorting_mixin.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SORT_CLASS = "dx-sort";
        var SORT_NONE_CLASS = "dx-sort-none";
        var SORTUP_CLASS = "dx-sort-up";
        var SORTDOWN_CLASS = "dx-sort-down";
        var SORT_INDEX_CLASS = "dx-sort-index";
        var SORT_INDEX_ICON_CLASS = "dx-sort-index-icon";
        var HEADERS_ACTION_CLASS = "action";
        module.exports = {
            _applyColumnState: function(options) {
                var that = this;
                var ariaSortState;
                var $sortIndicator;
                var sortingMode = that.option("sorting.mode");
                var rootElement = options.rootElement;
                var column = options.column;
                var $indicatorsContainer = that._getIndicatorContainer(rootElement);
                if ("sort" === options.name) {
                    rootElement.find("." + SORT_CLASS).remove();
                    !$indicatorsContainer.children().length && $indicatorsContainer.remove();
                    var isSortingAllowed = ("single" === sortingMode || "multiple" === sortingMode) && column.allowSorting;
                    if (!(0, _type.isDefined)(column.groupIndex) && (isSortingAllowed || (0, _type.isDefined)(column.sortOrder))) {
                        ariaSortState = "asc" === column.sortOrder ? "ascending" : "descending";
                        $sortIndicator = that.callBase(options).toggleClass(SORTUP_CLASS, "asc" === column.sortOrder).toggleClass(SORTDOWN_CLASS, "desc" === column.sortOrder);
                        var hasSeveralSortIndexes = that.getController && !!that.getController("columns").columnOption("sortIndex:1");
                        if (hasSeveralSortIndexes && that.option("sorting.showSortIndexes") && column.sortIndex >= 0) {
                            (0, _renderer2.default)("<span>").addClass(SORT_INDEX_ICON_CLASS).text(column.sortIndex + 1).appendTo($sortIndicator);
                            $sortIndicator.addClass(SORT_INDEX_CLASS)
                        }
                        options.rootElement.addClass(that.addWidgetPrefix(HEADERS_ACTION_CLASS))
                    }
                    if (!(0, _type.isDefined)(column.sortOrder)) {
                        that.setAria("sort", "none", rootElement)
                    } else {
                        that.setAria("sort", ariaSortState, rootElement)
                    }
                    return $sortIndicator
                } else {
                    return that.callBase(options)
                }
            },
            _getIndicatorClassName: function(name) {
                if ("sort" === name) {
                    return SORT_CLASS
                } else {
                    if ("sortIndex" === name) {
                        return SORT_INDEX_ICON_CLASS
                    }
                }
                return this.callBase(name)
            },
            _renderIndicator: function(options) {
                var column = options.column;
                var $container = options.container;
                var $indicator = options.indicator;
                if ("sort" === options.name) {
                    var rtlEnabled = this.option("rtlEnabled");
                    if (!(0, _type.isDefined)(column.sortOrder)) {
                        $indicator && $indicator.addClass(SORT_NONE_CLASS)
                    }
                    if ($container.children().length && (!rtlEnabled && "left" === options.columnAlignment || rtlEnabled && "right" === options.columnAlignment)) {
                        $container.prepend($indicator);
                        return
                    }
                }
                this.callBase(options)
            },
            _updateIndicator: function($cell, column, indicatorName) {
                if ("sort" === indicatorName && (0, _type.isDefined)(column.groupIndex)) {
                    return
                }
                return this.callBase.apply(this, arguments)
            },
            _getIndicatorElements: function($cell, returnAll) {
                var $indicatorElements = this.callBase($cell);
                return returnAll ? $indicatorElements : $indicatorElements && $indicatorElements.not("." + SORT_NONE_CLASS)
            }
        }
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.rows.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _style = __webpack_require__( /*! ../../core/utils/style */ 93);
        var _style2 = _interopRequireDefault(_style);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core2 = __webpack_require__( /*! ./ui.grid_core.columns_view */ 170);
        var _uiGrid_core3 = _interopRequireDefault(_uiGrid_core2);
        var _ui = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var _ui2 = _interopRequireDefault(_ui);
        var _remove_event = __webpack_require__( /*! ../../core/remove_event */ 140);
        var _remove_event2 = _interopRequireDefault(_remove_event);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ROWS_VIEW_CLASS = "rowsview";
        var CONTENT_CLASS = "content";
        var NOWRAP_CLASS = "nowrap";
        var GROUP_ROW_CLASS = "dx-group-row";
        var GROUP_CELL_CLASS = "dx-group-cell";
        var DATA_ROW_CLASS = "dx-data-row";
        var FREE_SPACE_CLASS = "dx-freespace-row";
        var ROW_LINES_CLASS = "dx-row-lines";
        var COLUMN_LINES_CLASS = "dx-column-lines";
        var ROW_ALTERNATION_CLASS = "dx-row-alt";
        var LAST_ROW_BORDER = "dx-last-row-border";
        var EMPTY_CLASS = "dx-empty";
        var ROW_INSERTED_ANIMATION_CLASS = "row-inserted-animation";
        var LOADPANEL_HIDE_TIMEOUT = 200;
        module.exports = {
            defaultOptions: function() {
                return {
                    hoverStateEnabled: false,
                    scrolling: {
                        useNative: "auto"
                    },
                    loadPanel: {
                        enabled: "auto",
                        text: _message2.default.format("Loading"),
                        width: 200,
                        height: 90,
                        showIndicator: true,
                        indicatorSrc: "",
                        showPane: true
                    },
                    rowTemplate: null,
                    columnAutoWidth: false,
                    noDataText: _message2.default.format("dxDataGrid-noDataText"),
                    wordWrapEnabled: false,
                    showColumnLines: true,
                    showRowLines: false,
                    rowAlternationEnabled: false,
                    activeStateEnabled: false,
                    twoWayBindingEnabled: true
                }
            },
            views: {
                rowsView: _uiGrid_core3.default.ColumnsView.inherit(function() {
                    var defaultCellTemplate = function($container, options) {
                        var isDataTextEmpty = (0, _string.isEmpty)(options.text) && "data" === options.rowType;
                        var text = options.text;
                        var container = $container.get(0);
                        if (isDataTextEmpty) {
                            (0, _uiGrid_core.setEmptyText)($container)
                        } else {
                            if (options.column.encodeHtml) {
                                container.textContent = text
                            } else {
                                container.innerHTML = text
                            }
                        }
                    };
                    var getScrollableBottomPadding = function(that) {
                        var scrollable = that.getScrollable();
                        return scrollable ? Math.ceil(parseFloat(scrollable.$content().css("paddingBottom"))) : 0
                    };
                    return {
                        _getDefaultTemplate: function(column) {
                            switch (column.command) {
                                case "empty":
                                    return function(container) {
                                        container.html("&nbsp;")
                                    };
                                default:
                                    return defaultCellTemplate
                            }
                        },
                        _getDefaultGroupTemplate: function(column) {
                            var that = this;
                            var summaryTexts = that.option("summary.texts");
                            return function($container, options) {
                                var data = options.data;
                                var text = options.column.caption + ": " + options.text;
                                var container = $container.get(0);
                                if (options.summaryItems && options.summaryItems.length) {
                                    text += " " + (0, _uiGrid_core.getGroupRowSummaryText)(options.summaryItems, summaryTexts)
                                }
                                if (data) {
                                    if (options.groupContinuedMessage && options.groupContinuesMessage) {
                                        text += " (" + options.groupContinuedMessage + ". " + options.groupContinuesMessage + ")"
                                    } else {
                                        if (options.groupContinuesMessage) {
                                            text += " (" + options.groupContinuesMessage + ")"
                                        } else {
                                            if (options.groupContinuedMessage) {
                                                text += " (" + options.groupContinuedMessage + ")"
                                            }
                                        }
                                    }
                                }
                                $container.addClass(GROUP_CELL_CLASS);
                                if (column.encodeHtml) {
                                    container.textContent = text
                                } else {
                                    container.innerHTML = text
                                }
                            }
                        },
                        _update: function() {},
                        _getCellTemplate: function(options) {
                            var that = this;
                            var column = options.column;
                            var template;
                            if ("group" === options.rowType && (0, _type.isDefined)(column.groupIndex) && !column.showWhenGrouped && !column.command) {
                                template = column.groupCellTemplate || {
                                    allowRenderToDetachedContainer: true,
                                    render: that._getDefaultGroupTemplate(column)
                                }
                            } else {
                                if (("data" === options.rowType || column.command) && column.cellTemplate) {
                                    template = column.cellTemplate
                                } else {
                                    template = {
                                        allowRenderToDetachedContainer: true,
                                        render: that._getDefaultTemplate(column)
                                    }
                                }
                            }
                            return template
                        },
                        _createRow: function(row) {
                            var $row = this.callBase(row);
                            if (row) {
                                var isGroup = "group" === row.rowType;
                                var isDataRow = "data" === row.rowType;
                                isDataRow && $row.addClass(DATA_ROW_CLASS);
                                isDataRow && this.option("showRowLines") && $row.addClass(ROW_LINES_CLASS);
                                this.option("showColumnLines") && $row.addClass(COLUMN_LINES_CLASS);
                                if (false === row.visible) {
                                    $row.hide()
                                }
                                if (isGroup) {
                                    $row.addClass(GROUP_ROW_CLASS);
                                    var isRowExpanded = row.isExpanded;
                                    this.setAria("role", "row", $row);
                                    this.setAria("expanded", (0, _type.isDefined)(isRowExpanded) && isRowExpanded.toString(), $row)
                                }
                            }
                            return $row
                        },
                        _rowPrepared: function($row, rowOptions, row) {
                            var _this = this;
                            if ("data" === rowOptions.rowType) {
                                if (this.option("rowAlternationEnabled")) {
                                    this._isAltRow(row) && $row.addClass(ROW_ALTERNATION_CLASS);
                                    rowOptions.watch && rowOptions.watch(function() {
                                        return _this._isAltRow(row)
                                    }, function(value) {
                                        $row.toggleClass(ROW_ALTERNATION_CLASS, value)
                                    })
                                }
                                this._setAriaRowIndex(rowOptions, $row);
                                rowOptions.watch && rowOptions.watch(function() {
                                    return rowOptions.rowIndex
                                }, function() {
                                    return _this._setAriaRowIndex(rowOptions, $row)
                                })
                            }
                            this.callBase.apply(this, arguments)
                        },
                        _setAriaRowIndex: function(row, $row) {
                            var component = this.component;
                            var isPagerMode = "standard" === component.option("scrolling.mode") && "virtual" !== component.option("scrolling.rowRenderingMode");
                            var rowIndex = row.rowIndex + 1;
                            if (isPagerMode) {
                                rowIndex = component.pageIndex() * component.pageSize() + rowIndex
                            } else {
                                rowIndex += this._dataController.getRowIndexOffset()
                            }
                            this.setAria("rowindex", rowIndex, $row)
                        },
                        _afterRowPrepared: function(e) {
                            var _this2 = this;
                            var arg = e.args[0];
                            var dataController = this._dataController;
                            var row = dataController.getVisibleRows()[arg.rowIndex];
                            var watch = this.option("integrationOptions.watchMethod");
                            if (!arg.data || "data" !== arg.rowType || arg.isNewRow || !this.option("twoWayBindingEnabled") || !watch || !row) {
                                return
                            }
                            var dispose = watch(function() {
                                return dataController.generateDataValues(arg.data, arg.columns)
                            }, function() {
                                dataController.repaintRows([row.rowIndex], _this2.option("repaintChangesOnly"))
                            }, {
                                deep: true,
                                skipImmediate: true
                            });
                            _events_engine2.default.on(arg.rowElement, _remove_event2.default, dispose)
                        },
                        _renderScrollable: function(force) {
                            var that = this;
                            var $element = that.element();
                            if (!$element.children().length) {
                                $element.append("<div>")
                            }
                            if (force || !that._loadPanel) {
                                that._renderLoadPanel($element, $element.parent(), that._dataController.isLocalStore())
                            }
                            if ((force || !that.getScrollable()) && that._dataController.isLoaded()) {
                                var columns = that.getColumns();
                                var allColumnsHasWidth = true;
                                for (var i = 0; i < columns.length; i++) {
                                    if (!columns[i].width && !columns[i].minWidth) {
                                        allColumnsHasWidth = false;
                                        break
                                    }
                                }
                                if (that.option("columnAutoWidth") || that._hasHeight || allColumnsHasWidth || that._columnsController._isColumnFixing()) {
                                    that._renderScrollableCore($element)
                                }
                            }
                        },
                        _handleScroll: function(e) {
                            var that = this;
                            that._isScrollByEvent = !!e.event;
                            that._scrollTop = e.scrollOffset.top;
                            that._scrollLeft = e.scrollOffset.left;
                            that.scrollChanged.fire(e.scrollOffset, that.name)
                        },
                        _renderScrollableCore: function($element) {
                            var that = this;
                            var dxScrollableOptions = that._createScrollableOptions();
                            var scrollHandler = that._handleScroll.bind(that);
                            dxScrollableOptions.onScroll = scrollHandler;
                            dxScrollableOptions.onStop = scrollHandler;
                            that._scrollable = that._createComponent($element, _ui2.default, dxScrollableOptions);
                            that._scrollableContainer = that._scrollable && that._scrollable._$container
                        },
                        _renderLoadPanel: _uiGrid_core.renderLoadPanel,
                        _renderContent: function(contentElement, tableElement) {
                            contentElement.empty().append(tableElement);
                            return this._findContentElement()
                        },
                        _updateContent: function(newTableElement, change) {
                            var that = this;
                            var tableElement = that._getTableElement();
                            var contentElement = that._findContentElement();
                            var changeType = change && change.changeType;
                            var executors = [];
                            var highlightChanges = this.option("highlightChanges");
                            var rowInsertedClass = this.addWidgetPrefix(ROW_INSERTED_ANIMATION_CLASS);
                            switch (changeType) {
                                case "update":
                                    (0, _iterator.each)(change.rowIndices, function(index, rowIndex) {
                                        var $newRowElement = that._getRowElements(newTableElement).eq(index);
                                        var changeType = change.changeTypes && change.changeTypes[index];
                                        var item = change.items && change.items[index];
                                        executors.push(function() {
                                            var $rowsElement = that._getRowElements();
                                            var $rowElement = $rowsElement.eq(rowIndex);
                                            switch (changeType) {
                                                case "update":
                                                    if (item) {
                                                        var columnIndices = change.columnIndices && change.columnIndices[index];
                                                        if ((0, _type.isDefined)(item.visible) && item.visible !== $rowElement.is(":visible")) {
                                                            $rowElement.toggle(item.visible)
                                                        } else {
                                                            if (columnIndices) {
                                                                that._updateCells($rowElement, $newRowElement, columnIndices)
                                                            } else {
                                                                $rowElement.replaceWith($newRowElement)
                                                            }
                                                        }
                                                    }
                                                    break;
                                                case "insert":
                                                    if (!$rowsElement.length) {
                                                        $newRowElement.prependTo(tableElement.children("tbody"))
                                                    } else {
                                                        if ($rowElement.length) {
                                                            $newRowElement.insertBefore($rowElement)
                                                        } else {
                                                            $newRowElement.insertAfter($rowsElement.last())
                                                        }
                                                    }
                                                    if (highlightChanges && change.isLiveUpdate) {
                                                        $newRowElement.addClass(rowInsertedClass)
                                                    }
                                                    break;
                                                case "remove":
                                                    $rowElement.remove()
                                            }
                                        })
                                    });
                                    (0, _iterator.each)(executors, function() {
                                        this()
                                    });
                                    newTableElement.remove();
                                    break;
                                default:
                                    that._setTableElement(newTableElement);
                                    contentElement.addClass(that.addWidgetPrefix(CONTENT_CLASS));
                                    that._renderContent(contentElement, newTableElement)
                            }
                        },
                        _createEmptyRow: function(className, isFixed, height) {
                            var that = this;
                            var $cell;
                            var $row = that._createRow();
                            var columns = isFixed ? this.getFixedColumns() : this.getColumns();
                            $row.addClass(className).toggleClass(COLUMN_LINES_CLASS, that.option("showColumnLines"));
                            for (var i = 0; i < columns.length; i++) {
                                $cell = that._createCell({
                                    column: columns[i],
                                    rowType: "freeSpace",
                                    columnIndex: i,
                                    columns: columns
                                });
                                (0, _type.isNumeric)(height) && $cell.css("height", height);
                                $row.append($cell)
                            }
                            that.setAria("role", "presentation", $row);
                            return $row
                        },
                        _appendEmptyRow: function($table, $emptyRow, location) {
                            var $tBodies = this._getBodies($table);
                            var isTableContainer = !$tBodies.length || $emptyRow.is("tbody");
                            var $container = isTableContainer ? $table : $tBodies;
                            if ("top" === location) {
                                $container.first().prepend($emptyRow);
                                if (isTableContainer) {
                                    var $colgroup = $container.children("colgroup");
                                    $container.prepend($colgroup)
                                }
                            } else {
                                $container.last().append($emptyRow)
                            }
                        },
                        _renderFreeSpaceRow: function($tableElement) {
                            var $freeSpaceRowElement = this._createEmptyRow(FREE_SPACE_CLASS);
                            $freeSpaceRowElement = this._wrapRowIfNeed($tableElement, $freeSpaceRowElement);
                            this._appendEmptyRow($tableElement, $freeSpaceRowElement)
                        },
                        _checkRowKeys: function(options) {
                            var that = this;
                            var rows = that._getRows(options);
                            var keyExpr = that._dataController.store() && that._dataController.store().key();
                            keyExpr && rows.some(function(row) {
                                if ("data" === row.rowType && void 0 === row.key) {
                                    that._dataController.fireError("E1046", keyExpr);
                                    return true
                                }
                            })
                        },
                        _needUpdateRowHeight: function(itemsCount) {
                            return itemsCount > 0 && !this._rowHeight
                        },
                        _getRowsHeight: function($tableElement) {
                            var $rowElements = $tableElement.children("tbody").children().not(".dx-virtual-row").not("." + FREE_SPACE_CLASS);
                            return $rowElements.toArray().reduce(function(sum, row) {
                                return sum + (0, _position.getBoundingRect)(row).height
                            }, 0)
                        },
                        _updateRowHeight: function() {
                            var that = this;
                            var $tableElement = that._getTableElement();
                            var itemsCount = that._dataController.items().length;
                            if ($tableElement && that._needUpdateRowHeight(itemsCount)) {
                                var rowsHeight = that._getRowsHeight($tableElement);
                                that._rowHeight = rowsHeight / itemsCount
                            }
                        },
                        _findContentElement: function() {
                            var $content = this.element();
                            var scrollable = this.getScrollable();
                            if ($content) {
                                if (scrollable) {
                                    $content = scrollable.$content()
                                }
                                return $content.children().first()
                            }
                        },
                        _getRowElements: function(tableElement) {
                            var $rows = this.callBase(tableElement);
                            return $rows && $rows.not("." + FREE_SPACE_CLASS)
                        },
                        _getFreeSpaceRowElements: function($table) {
                            var tableElements = $table || this.getTableElements();
                            return tableElements && tableElements.children("tbody").children("." + FREE_SPACE_CLASS)
                        },
                        _getNoDataText: function() {
                            return this.option("noDataText")
                        },
                        _rowClick: function(e) {
                            var item = this._dataController.items()[e.rowIndex] || {};
                            this.executeAction("onRowClick", (0, _extend.extend)({
                                evaluate: function(expr) {
                                    var getter = (0, _data.compileGetter)(expr);
                                    return getter(item.data)
                                }
                            }, e, item))
                        },
                        _rowDblClick: function(e) {
                            var item = this._dataController.items()[e.rowIndex] || {};
                            this.executeAction("onRowDblClick", (0, _extend.extend)({}, e, item))
                        },
                        _getColumnsCountBeforeGroups: function(columns) {
                            for (var i = 0; i < columns.length; i++) {
                                if ("groupExpand" === columns[i].type) {
                                    return i
                                }
                            }
                            return 0
                        },
                        _getGroupCellOptions: function(options) {
                            var columnsCountBeforeGroups = this._getColumnsCountBeforeGroups(options.columns);
                            var columnIndex = (options.row.groupIndex || 0) + columnsCountBeforeGroups;
                            return {
                                columnIndex: columnIndex,
                                colspan: options.columns.length - columnIndex - 1
                            }
                        },
                        _renderCells: function($row, options) {
                            if ("group" === options.row.rowType) {
                                this._renderGroupedCells($row, options)
                            } else {
                                if (options.row.values) {
                                    this.callBase($row, options)
                                }
                            }
                        },
                        _renderGroupedCells: function($row, options) {
                            var row = options.row;
                            var expandColumn;
                            var columns = options.columns;
                            var rowIndex = row.rowIndex;
                            var isExpanded;
                            var groupCellOptions = this._getGroupCellOptions(options);
                            for (var i = 0; i <= groupCellOptions.columnIndex; i++) {
                                if (i === groupCellOptions.columnIndex && columns[i].allowCollapsing && "infinite" !== options.scrollingMode) {
                                    isExpanded = !!row.isExpanded;
                                    expandColumn = columns[i]
                                } else {
                                    isExpanded = null;
                                    expandColumn = {
                                        command: "expand",
                                        cssClass: columns[i].cssClass
                                    }
                                }
                                this._renderCell($row, {
                                    value: isExpanded,
                                    row: row,
                                    rowIndex: rowIndex,
                                    column: expandColumn,
                                    columnIndex: i
                                })
                            }
                            var groupColumnAlignment = (0, _position.getDefaultAlignment)(this.option("rtlEnabled"));
                            var groupColumn = (0, _extend.extend)({}, columns[groupCellOptions.columnIndex], {
                                command: null,
                                cssClass: null,
                                width: null,
                                showWhenGrouped: false,
                                alignment: groupColumnAlignment
                            });
                            if (groupCellOptions.colspan > 1) {
                                groupColumn.colspan = groupCellOptions.colspan
                            }
                            this._renderCell($row, {
                                value: row.values[row.groupIndex],
                                row: row,
                                rowIndex: rowIndex,
                                column: groupColumn,
                                columnIndex: groupCellOptions.columnIndex
                            })
                        },
                        _renderRows: function($table, options) {
                            var that = this;
                            var scrollingMode = that.option("scrolling.mode");
                            that.callBase($table, (0, _extend.extend)({
                                scrollingMode: scrollingMode
                            }, options));
                            that._checkRowKeys(options.change);
                            that._renderFreeSpaceRow($table);
                            if (!that._hasHeight) {
                                that.updateFreeSpaceRowHeight($table)
                            }
                        },
                        _renderRow: function($table, options) {
                            var that = this;
                            var row = options.row;
                            var rowTemplate = that.option("rowTemplate");
                            if (("data" === row.rowType || "group" === row.rowType) && !(0, _type.isDefined)(row.groupIndex) && rowTemplate) {
                                that.renderTemplate($table, rowTemplate, (0, _extend.extend)({
                                    columns: options.columns
                                }, row), true)
                            } else {
                                that.callBase($table, options)
                            }
                        },
                        _renderTable: function(options) {
                            var that = this;
                            var $table = that.callBase(options);
                            var resizeCompletedHandler = function resizeCompletedHandler() {
                                var scrollableInstance = that.getScrollable();
                                if (scrollableInstance && that.element().closest((0, _window.getWindow)().document).length) {
                                    that.resizeCompleted.remove(resizeCompletedHandler);
                                    scrollableInstance._visibilityChanged(true)
                                }
                            };
                            if (!(0, _type.isDefined)(that._getTableElement())) {
                                that._setTableElement($table);
                                that._renderScrollable(true);
                                that.resizeCompleted.add(resizeCompletedHandler)
                            } else {
                                that._renderScrollable()
                            }
                            return $table
                        },
                        _createTable: function() {
                            var $table = this.callBase.apply(this, arguments);
                            if (this.option("rowTemplate")) {
                                $table.appendTo(this.component.$element())
                            }
                            return $table
                        },
                        _renderCore: function(change) {
                            var that = this;
                            var $element = that.element();
                            $element.addClass(that.addWidgetPrefix(ROWS_VIEW_CLASS)).toggleClass(that.addWidgetPrefix(NOWRAP_CLASS), !that.option("wordWrapEnabled"));
                            $element.toggleClass(EMPTY_CLASS, 0 === that._dataController.items().length);
                            that.setAria("role", "presentation", $element);
                            var $table = that._renderTable({
                                change: change
                            });
                            that._updateContent($table, change);
                            that.callBase(change);
                            that._lastColumnWidths = null
                        },
                        _getRows: function(change) {
                            return change && change.items || this._dataController.items()
                        },
                        _getCellOptions: function(options) {
                            var that = this;
                            var column = options.column;
                            var row = options.row;
                            var data = row.data;
                            var summaryCells = row && row.summaryCells;
                            var value = options.value;
                            var displayValue = (0, _uiGrid_core.getDisplayValue)(column, value, data, row.rowType);
                            var parameters = this.callBase(options);
                            parameters.value = value;
                            parameters.oldValue = options.oldValue;
                            parameters.displayValue = displayValue;
                            parameters.row = row;
                            parameters.key = row.key;
                            parameters.data = data;
                            parameters.rowType = row.rowType;
                            parameters.values = row.values;
                            parameters.text = !column.command ? (0, _uiGrid_core.formatValue)(displayValue, column) : "";
                            parameters.rowIndex = row.rowIndex;
                            parameters.summaryItems = summaryCells && summaryCells[options.columnIndex];
                            parameters.resized = column.resizedCallbacks;
                            if ((0, _type.isDefined)(column.groupIndex) && !column.command) {
                                var groupingTextsOptions = that.option("grouping.texts");
                                var scrollingMode = that.option("scrolling.mode");
                                if ("virtual" !== scrollingMode && "infinite" !== scrollingMode) {
                                    parameters.groupContinuesMessage = data && data.isContinuationOnNextPage && groupingTextsOptions && groupingTextsOptions.groupContinuesMessage;
                                    parameters.groupContinuedMessage = data && data.isContinuation && groupingTextsOptions && groupingTextsOptions.groupContinuedMessage
                                }
                            }
                            return parameters
                        },
                        _setRowsOpacityCore: function($rows, visibleColumns, columnIndex, value) {
                            var columnsController = this._columnsController;
                            var columns = columnsController.getColumns();
                            var column = columns && columns[columnIndex];
                            var columnID = column && column.isBand && column.index;
                            (0, _iterator.each)($rows, function(rowIndex, row) {
                                if (!(0, _renderer2.default)(row).hasClass(GROUP_ROW_CLASS)) {
                                    for (var i = 0; i < visibleColumns.length; i++) {
                                        if ((0, _type.isNumeric)(columnID) && columnsController.isParentBandColumn(visibleColumns[i].index, columnID) || visibleColumns[i].index === columnIndex) {
                                            $rows.eq(rowIndex).children().eq(i).css({
                                                opacity: value
                                            });
                                            if (!(0, _type.isNumeric)(columnID)) {
                                                break
                                            }
                                        }
                                    }
                                }
                            })
                        },
                        _getDevicePixelRatio: function() {
                            return (0, _window.getWindow)().devicePixelRatio
                        },
                        renderNoDataText: _uiGrid_core.renderNoDataText,
                        getCellOptions: function(rowIndex, columnIdentifier) {
                            var rowOptions = this._dataController.items()[rowIndex];
                            var cellOptions;
                            var column;
                            if (rowOptions) {
                                if ((0, _type.isString)(columnIdentifier)) {
                                    column = this._columnsController.columnOption(columnIdentifier)
                                } else {
                                    column = this._columnsController.getVisibleColumns()[columnIdentifier]
                                }
                                if (column) {
                                    cellOptions = this._getCellOptions({
                                        value: column.calculateCellValue(rowOptions.data),
                                        rowIndex: rowOptions.rowIndex,
                                        row: rowOptions,
                                        column: column
                                    })
                                }
                            }
                            return cellOptions
                        },
                        getRow: function(index) {
                            if (index >= 0) {
                                var rows = this._getRowElements();
                                if (rows.length > index) {
                                    return (0, _renderer2.default)(rows[index])
                                }
                            }
                        },
                        updateFreeSpaceRowHeight: function($table) {
                            var _this3 = this;
                            var dataController = this._dataController;
                            var itemCount = dataController.items(true).length;
                            var contentElement = this._findContentElement();
                            var freeSpaceRowElements = this._getFreeSpaceRowElements($table);
                            if (freeSpaceRowElements && contentElement && dataController.totalCount() >= 0) {
                                var isFreeSpaceRowVisible = false;
                                if (itemCount > 0) {
                                    if (!this._hasHeight) {
                                        var freeSpaceRowCount = dataController.pageSize() - itemCount;
                                        var scrollingMode = this.option("scrolling.mode");
                                        if (freeSpaceRowCount > 0 && dataController.pageCount() > 1 && "virtual" !== scrollingMode && "infinite" !== scrollingMode) {
                                            _style2.default.setHeight(freeSpaceRowElements, freeSpaceRowCount * this._rowHeight);
                                            isFreeSpaceRowVisible = true
                                        }
                                        if (!isFreeSpaceRowVisible && $table) {
                                            _style2.default.setHeight(freeSpaceRowElements, 0)
                                        } else {
                                            freeSpaceRowElements.toggle(isFreeSpaceRowVisible)
                                        }
                                        this._updateLastRowBorder(isFreeSpaceRowVisible)
                                    } else {
                                        freeSpaceRowElements.hide();
                                        (0, _common.deferUpdate)(function() {
                                            var scrollbarWidth = _this3.getScrollbarWidth(true);
                                            var elementHeightWithoutScrollbar = _this3.element().height() - scrollbarWidth;
                                            var contentHeight = contentElement.outerHeight();
                                            var showFreeSpaceRow = elementHeightWithoutScrollbar - contentHeight > 0;
                                            var rowsHeight = _this3._getRowsHeight(contentElement.children().first());
                                            var $tableElement = $table || _this3.getTableElements();
                                            var borderTopWidth = Math.ceil(parseFloat($tableElement.css("borderTopWidth")));
                                            var heightCorrection = _this3._getHeightCorrection();
                                            var resultHeight = elementHeightWithoutScrollbar - rowsHeight - borderTopWidth - heightCorrection;
                                            if (showFreeSpaceRow) {
                                                (0, _common.deferRender)(function() {
                                                    freeSpaceRowElements.css("height", resultHeight);
                                                    isFreeSpaceRowVisible = true;
                                                    freeSpaceRowElements.show()
                                                })
                                            }(0, _common.deferRender)(function() {
                                                return _this3._updateLastRowBorder(isFreeSpaceRowVisible)
                                            })
                                        })
                                    }
                                } else {
                                    freeSpaceRowElements.css("height", 0);
                                    freeSpaceRowElements.show();
                                    this._updateLastRowBorder(true)
                                }
                            }
                        },
                        _getHeightCorrection: function() {
                            var isZoomedWebkit = _browser2.default.webkit && this._getDevicePixelRatio() >= 2;
                            var hasExtraBorderTop = _browser2.default.mozilla && _browser2.default.version >= 70 && !this.option("showRowLines");
                            return isZoomedWebkit || hasExtraBorderTop ? 1 : 0
                        },
                        _columnOptionChanged: function(e) {
                            var optionNames = e.optionNames;
                            if (e.changeTypes.grouping) {
                                return
                            }
                            if (optionNames.width || optionNames.visibleWidth) {
                                this.callBase(e);
                                this._fireColumnResizedCallbacks()
                            }
                        },
                        getScrollable: function() {
                            return this._scrollable
                        },
                        init: function() {
                            var that = this;
                            var dataController = that.getController("data");
                            that.callBase();
                            that._editorFactoryController = that.getController("editorFactory");
                            that._rowHeight = 0;
                            that._scrollTop = 0;
                            that._scrollLeft = -1;
                            that._hasHeight = false;
                            dataController.loadingChanged.add(function(isLoading, messageText) {
                                that.setLoading(isLoading, messageText)
                            });
                            dataController.dataSourceChanged.add(function() {
                                if (that._scrollLeft >= 0) {
                                    that._handleScroll({
                                        scrollOffset: {
                                            top: that._scrollTop,
                                            left: that._scrollLeft
                                        }
                                    })
                                }
                            })
                        },
                        _handleDataChanged: function(change) {
                            var that = this;
                            switch (change.changeType) {
                                case "refresh":
                                case "prepend":
                                case "append":
                                case "update":
                                    that.render(null, change);
                                    break;
                                default:
                                    that._update(change)
                            }
                        },
                        publicMethods: function() {
                            return ["isScrollbarVisible", "getTopVisibleRowData", "getScrollbarWidth", "getCellElement", "getRowElement", "getScrollable"]
                        },
                        contentWidth: function() {
                            return this.element().width() - this.getScrollbarWidth()
                        },
                        getScrollbarWidth: function(isHorizontal) {
                            var scrollableContainer = this._scrollableContainer && this._scrollableContainer.get(0);
                            var scrollbarWidth = 0;
                            if (scrollableContainer) {
                                if (!isHorizontal) {
                                    scrollbarWidth = scrollableContainer.clientWidth ? scrollableContainer.offsetWidth - scrollableContainer.clientWidth : 0
                                } else {
                                    scrollbarWidth = scrollableContainer.clientHeight ? scrollableContainer.offsetHeight - scrollableContainer.clientHeight : 0;
                                    scrollbarWidth += getScrollableBottomPadding(this)
                                }
                            }
                            return scrollbarWidth > 0 ? scrollbarWidth : 0
                        },
                        _fireColumnResizedCallbacks: function() {
                            var that = this;
                            var lastColumnWidths = that._lastColumnWidths || [];
                            var columnWidths = [];
                            var columns = that.getColumns();
                            for (var i = 0; i < columns.length; i++) {
                                columnWidths[i] = columns[i].visibleWidth;
                                if (columns[i].resizedCallbacks && !(0, _type.isDefined)(columns[i].groupIndex) && lastColumnWidths[i] !== columnWidths[i]) {
                                    columns[i].resizedCallbacks.fire(columnWidths[i])
                                }
                            }
                            that._lastColumnWidths = columnWidths
                        },
                        _updateLastRowBorder: function(isFreeSpaceRowVisible) {
                            if (this.option("showBorders") && this.option("showRowLines") && !isFreeSpaceRowVisible) {
                                this.element().addClass(LAST_ROW_BORDER)
                            } else {
                                this.element().removeClass(LAST_ROW_BORDER)
                            }
                        },
                        _updateScrollable: function() {
                            var dxScrollable = _ui2.default.getInstance(this.element());
                            if (dxScrollable) {
                                dxScrollable.update();
                                this._updateHorizontalScrollPosition()
                            }
                        },
                        _updateHorizontalScrollPosition: function() {
                            var scrollable = this.getScrollable();
                            var scrollLeft = scrollable && scrollable.scrollOffset().left;
                            if (this._scrollLeft >= 0 && scrollLeft !== this._scrollLeft) {
                                scrollable.scrollTo({
                                    x: this._scrollLeft
                                })
                            }
                        },
                        _resizeCore: function() {
                            var that = this;
                            that._fireColumnResizedCallbacks();
                            that._updateRowHeight();
                            (0, _common.deferRender)(function() {
                                that._renderScrollable();
                                that.renderNoDataText();
                                that.updateFreeSpaceRowHeight();
                                (0, _common.deferUpdate)(function() {
                                    that._updateScrollable()
                                })
                            })
                        },
                        scrollTo: function(location) {
                            var $element = this.element();
                            var dxScrollable = $element && _ui2.default.getInstance($element);
                            if (dxScrollable) {
                                dxScrollable.scrollTo(location)
                            }
                        },
                        height: function(_height, hasHeight) {
                            var that = this;
                            var $element = this.element();
                            if (0 === arguments.length) {
                                return $element ? $element.outerHeight(true) : 0
                            }
                            that._hasHeight = void 0 === hasHeight ? "auto" !== _height : hasHeight;
                            if ((0, _type.isDefined)(_height) && $element) {
                                _style2.default.setHeight($element, _height)
                            }
                        },
                        setLoading: function(isLoading, messageText) {
                            var that = this;
                            var loadPanel = that._loadPanel;
                            var dataController = that._dataController;
                            var loadPanelOptions = that.option("loadPanel") || {};
                            var animation = dataController.isLoaded() ? loadPanelOptions.animation : null;
                            var $element = that.element();
                            if (!(0, _window.hasWindow)()) {
                                return
                            }
                            if (!loadPanel && void 0 !== messageText && dataController.isLocalStore() && "auto" === loadPanelOptions.enabled && $element) {
                                that._renderLoadPanel($element, $element.parent());
                                loadPanel = that._loadPanel
                            }
                            if (loadPanel) {
                                var visibilityOptions = {
                                    message: messageText || loadPanelOptions.text,
                                    animation: animation,
                                    visible: isLoading
                                };
                                clearTimeout(that._hideLoadingTimeoutID);
                                if (loadPanel.option("visible") && !isLoading) {
                                    that._hideLoadingTimeoutID = setTimeout(function() {
                                        loadPanel.option(visibilityOptions)
                                    }, LOADPANEL_HIDE_TIMEOUT)
                                } else {
                                    loadPanel.option(visibilityOptions)
                                }
                            }
                        },
                        setRowsOpacity: function(columnIndex, value) {
                            var $rows = this._getRowElements().not("." + GROUP_ROW_CLASS) || [];
                            this._setRowsOpacityCore($rows, this.getColumns(), columnIndex, value)
                        },
                        _getCellElementsCore: function(rowIndex) {
                            var $cells = this.callBase(rowIndex);
                            if ($cells) {
                                var groupCellIndex = $cells.filter("." + GROUP_CELL_CLASS).index();
                                if (groupCellIndex >= 0 && $cells.length > groupCellIndex + 1) {
                                    return $cells.slice(0, groupCellIndex + 1)
                                }
                            }
                            return $cells
                        },
                        getTopVisibleItemIndex: function(isFloor) {
                            var that = this;
                            var itemIndex = 0;
                            var prevOffsetTop = 0;
                            var offsetTop = 0;
                            var scrollPosition = that._scrollTop;
                            var $contentElement = that._findContentElement();
                            var contentElementOffsetTop = $contentElement && $contentElement.offset().top;
                            var items = that._dataController.items();
                            var tableElement = that._getTableElement();
                            if (items.length && tableElement) {
                                var rowElements = that._getRowElements(tableElement).filter(":visible");
                                for (itemIndex = 0; itemIndex < items.length; itemIndex++) {
                                    prevOffsetTop = offsetTop;
                                    var rowElement = rowElements.eq(itemIndex);
                                    if (rowElement.length) {
                                        offsetTop = rowElement.offset().top - contentElementOffsetTop;
                                        if (offsetTop > scrollPosition) {
                                            if (itemIndex) {
                                                if (isFloor || 2 * scrollPosition < Math.round(offsetTop + prevOffsetTop)) {
                                                    itemIndex--
                                                }
                                            }
                                            break
                                        }
                                    }
                                }
                                if (itemIndex && itemIndex === items.length) {
                                    itemIndex--
                                }
                            }
                            return itemIndex
                        },
                        getTopVisibleRowData: function() {
                            var itemIndex = this.getTopVisibleItemIndex();
                            var items = this._dataController.items();
                            if (items[itemIndex]) {
                                return items[itemIndex].data
                            }
                        },
                        _scrollToElement: function($element, offset) {
                            var scrollable = this.getScrollable();
                            scrollable && scrollable.scrollToElement($element, offset)
                        },
                        optionChanged: function(args) {
                            var that = this;
                            that.callBase(args);
                            switch (args.name) {
                                case "wordWrapEnabled":
                                case "showColumnLines":
                                case "showRowLines":
                                case "rowAlternationEnabled":
                                case "rowTemplate":
                                case "twoWayBindingEnabled":
                                    that._invalidate(true, true);
                                    args.handled = true;
                                    break;
                                case "scrolling":
                                    that._rowHeight = null;
                                    that._tableElement = null;
                                    args.handled = true;
                                    break;
                                case "rtlEnabled":
                                    that._rowHeight = null;
                                    that._tableElement = null;
                                    break;
                                case "loadPanel":
                                    that._tableElement = null;
                                    that._invalidate(true, "loadPanel.enabled" !== args.fullName);
                                    args.handled = true;
                                    break;
                                case "noDataText":
                                    that.renderNoDataText();
                                    args.handled = true
                            }
                        },
                        dispose: function() {
                            clearTimeout(this._hideLoadingTimeoutID);
                            this._scrollable && this._scrollable.dispose()
                        },
                        setScrollerSpacing: function() {}
                    }
                }())
            }
        }
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.context_menu.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var CONTEXT_MENU = "dx-context-menu";
        var viewName = {
            columnHeadersView: "header",
            rowsView: "content",
            footerView: "footer",
            headerPanel: "headerPanel"
        };
        var VIEW_NAMES = ["columnHeadersView", "rowsView", "footerView", "headerPanel"];
        var ContextMenuController = _uiGrid_core2.default.ViewController.inherit({
            init: function() {
                this.createAction("onContextMenuPreparing")
            },
            getContextMenuItems: function(dxEvent) {
                if (!dxEvent) {
                    return false
                }
                var that = this;
                var $targetElement = (0, _renderer2.default)(dxEvent.target);
                var $element;
                var $targetRowElement;
                var $targetCellElement;
                var menuItems;
                (0, _iterator.each)(VIEW_NAMES, function() {
                    var view = that.getView(this);
                    $element = view && view.element();
                    if ($element && ($element.is($targetElement) || $element.find($targetElement).length)) {
                        $targetCellElement = $targetElement.closest(".dx-row > td, .dx-row > tr");
                        $targetRowElement = $targetCellElement.parent();
                        var rowIndex = view.getRowIndex($targetRowElement);
                        var columnIndex = $targetCellElement[0] && $targetCellElement[0].cellIndex;
                        var rowOptions = $targetRowElement.data("options");
                        var options = {
                            event: dxEvent,
                            targetElement: (0, _dom.getPublicElement)($targetElement),
                            target: viewName[this],
                            rowIndex: rowIndex,
                            row: view._getRows()[rowIndex],
                            columnIndex: columnIndex,
                            column: rowOptions && rowOptions.cells[columnIndex].column
                        };
                        options.items = view.getContextMenuItems && view.getContextMenuItems(options);
                        that.executeAction("onContextMenuPreparing", options);
                        that._contextMenuPrepared(options);
                        menuItems = options.items;
                        if (menuItems) {
                            return false
                        }
                    }
                });
                return menuItems
            },
            _contextMenuPrepared: _common.noop
        });
        var ContextMenuView = _uiGrid_core2.default.View.inherit({
            _renderCore: function() {
                var that = this;
                var $element = that.element().addClass(CONTEXT_MENU);
                this.setAria("role", "presentation", $element);
                this._createComponent($element, _context_menu2.default, {
                    onPositioning: function(actionArgs) {
                        var event = actionArgs.event;
                        var contextMenuInstance = actionArgs.component;
                        var items = that.getController("contextMenu").getContextMenuItems(event);
                        if (items) {
                            contextMenuInstance.option("items", items);
                            event.stopPropagation()
                        } else {
                            actionArgs.cancel = true
                        }
                    },
                    onItemClick: function(params) {
                        params.itemData.onItemClick && params.itemData.onItemClick(params)
                    },
                    cssClass: that.getWidgetContainerClass(),
                    target: that.component.$element()
                })
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    onContextMenuPreparing: null
                }
            },
            controllers: {
                contextMenu: ContextMenuController
            },
            views: {
                contextMenuView: ContextMenuView
            }
        }
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.error_handling.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ERROR_ROW_CLASS = "dx-error-row";
        var ERROR_MESSAGE_CLASS = "dx-error-message";
        var ERROR_CLOSEBUTTON_CLASS = "dx-closebutton";
        var ACTION_CLASS = "action";
        var ErrorHandlingController = _uiGrid_core2.default.ViewController.inherit({
            init: function() {
                var that = this;
                that._columnHeadersView = that.getView("columnHeadersView");
                that._rowsView = that.getView("rowsView")
            },
            _createErrorRow: function(error, $tableElements) {
                var that = this;
                var $errorRow;
                var $closeButton;
                var $errorMessage = this._renderErrorMessage(error);
                if ($tableElements) {
                    $errorRow = (0, _renderer2.default)("<tr>").addClass(ERROR_ROW_CLASS);
                    $closeButton = (0, _renderer2.default)("<div>").addClass(ERROR_CLOSEBUTTON_CLASS).addClass(that.addWidgetPrefix(ACTION_CLASS));
                    _events_engine2.default.on($closeButton, _click2.default.name, that.createAction(function(args) {
                        var e = args.event;
                        var $errorRow;
                        var errorRowIndex = (0, _renderer2.default)(e.currentTarget).closest("." + ERROR_ROW_CLASS).index();
                        e.stopPropagation();
                        (0, _iterator.each)($tableElements, function(_, tableElement) {
                            $errorRow = (0, _renderer2.default)(tableElement).children("tbody").children("tr").eq(errorRowIndex);
                            that.removeErrorRow($errorRow)
                        });
                        that.getController("resizing") && that.getController("resizing").fireContentReadyAction()
                    }));
                    (0, _renderer2.default)("<td>").attr({
                        colSpan: that.getController("columns").getVisibleColumns().length,
                        role: "presentation"
                    }).prepend($closeButton).append($errorMessage).appendTo($errorRow);
                    return $errorRow
                }
                return $errorMessage
            },
            _renderErrorMessage: function(error) {
                var message = error.url ? error.message.replace(error.url, "") : error.message || error;
                var $message = (0, _renderer2.default)("<div>").addClass(ERROR_MESSAGE_CLASS).text(message);
                if (error.url) {
                    (0, _renderer2.default)("<a>").attr("href", error.url).text(error.url).appendTo($message)
                }
                return $message
            },
            renderErrorRow: function(error, rowIndex, $popupContent) {
                var that = this;
                var $errorMessageElement;
                var $firstErrorRow;
                if ($popupContent) {
                    $popupContent.find("." + ERROR_MESSAGE_CLASS).remove();
                    $errorMessageElement = that._createErrorRow(error);
                    $popupContent.prepend($errorMessageElement);
                    return $errorMessageElement
                }
                var viewElement = rowIndex >= 0 || !that._columnHeadersView.isVisible() ? that._rowsView : that._columnHeadersView;
                var $tableElements = $popupContent || viewElement.getTableElements();
                (0, _iterator.each)($tableElements, function(_, tableElement) {
                    $errorMessageElement = that._createErrorRow(error, $tableElements);
                    $firstErrorRow = $firstErrorRow || $errorMessageElement;
                    if (rowIndex >= 0) {
                        var $row = viewElement._getRowElements((0, _renderer2.default)(tableElement)).eq(rowIndex);
                        that.removeErrorRow($row.next());
                        $errorMessageElement.insertAfter($row)
                    } else {
                        var $tbody = (0, _renderer2.default)(tableElement).children("tbody");
                        var rowElements = $tbody.children("tr");
                        if (that._columnHeadersView.isVisible()) {
                            that.removeErrorRow(rowElements.last());
                            (0, _renderer2.default)(tableElement).append($errorMessageElement)
                        } else {
                            that.removeErrorRow(rowElements.first());
                            $tbody.first().prepend($errorMessageElement)
                        }
                    }
                });
                if (!$popupContent) {
                    var resizingController = that.getController("resizing");
                    resizingController && resizingController.fireContentReadyAction()
                }
                return $firstErrorRow
            },
            removeErrorRow: function($row) {
                if (!$row) {
                    var $columnHeaders = this._columnHeadersView && this._columnHeadersView.element();
                    $row = $columnHeaders && $columnHeaders.find("." + ERROR_ROW_CLASS);
                    if (!$row || !$row.length) {
                        var $rowsViewElement = this._rowsView.element();
                        $row = $rowsViewElement && $rowsViewElement.find("." + ERROR_ROW_CLASS)
                    }
                }
                $row && $row.hasClass(ERROR_ROW_CLASS) && $row.remove()
            },
            optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "errorRowEnabled":
                        args.handled = true;
                        break;
                    default:
                        that.callBase(args)
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    errorRowEnabled: true
                }
            },
            controllers: {
                errorHandling: ErrorHandlingController
            },
            extenders: {
                controllers: {
                    data: {
                        init: function() {
                            var that = this;
                            var errorHandlingController = that.getController("errorHandling");
                            that.callBase();
                            that.dataErrorOccurred.add(function(error, $popupContent) {
                                if (that.option("errorRowEnabled")) {
                                    errorHandlingController.renderErrorRow(error, void 0, $popupContent)
                                }
                            });
                            that.changed.add(function(e) {
                                if (e && "loadError" === e.changeType) {
                                    return
                                }
                                var errorHandlingController = that.getController("errorHandling");
                                var editingController = that.getController("editing");
                                if (editingController && !editingController.hasChanges()) {
                                    errorHandlingController && errorHandlingController.removeErrorRow()
                                }
                            })
                        }
                    }
                }
            }
        }
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.grid_view.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);
        var _accessibility2 = _interopRequireDefault(_accessibility);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TABLE_CLASS = "table";
        var BORDERS_CLASS = "borders";
        var TABLE_FIXED_CLASS = "table-fixed";
        var IMPORTANT_MARGIN_CLASS = "important-margin";
        var TEXT_CONTENT_CLASS = "text-content";
        var HIDDEN_CLASS = "dx-hidden";
        var GRIDBASE_CONTAINER_CLASS = "dx-gridbase-container";
        var HIDDEN_COLUMNS_WIDTH = "adaptiveHidden";
        var EDITORS_INPUT_SELECTOR = "input:not([type='hidden'])";
        var VIEW_NAMES = ["columnsSeparatorView", "blockSeparatorView", "trackerView", "headerPanel", "columnHeadersView", "rowsView", "footerView", "columnChooserView", "filterPanelView", "pagerView", "draggingHeaderView", "contextMenuView", "errorView", "headerFilterView", "filterBuilderView"];
        var isPercentWidth = function(width) {
            return _type2.default.isString(width) && "%" === width.slice(-1)
        };
        var isPixelWidth = function(width) {
            return _type2.default.isString(width) && "px" === width.slice(-2)
        };
        var mergeArraysByMaxValue = function(values1, values2) {
            var result = [];
            if (values1 && values2 && values1.length && values1.length === values2.length) {
                for (var i = 0; i < values1.length; i++) {
                    result.push(values1[i] > values2[i] ? values1[i] : values2[i])
                }
            } else {
                if (values1 && values1.length) {
                    result = values1
                } else {
                    if (values2) {
                        result = values2
                    }
                }
            }
            return result
        };
        var getContainerHeight = function($container) {
            var clientHeight = $container.get(0).clientHeight;
            var paddingTop = parseFloat($container.css("paddingTop"));
            var paddingBottom = parseFloat($container.css("paddingBottom"));
            return clientHeight - paddingTop - paddingBottom
        };
        var calculateFreeWidth = function(that, widths) {
            var contentWidth = that._rowsView.contentWidth();
            var totalWidth = that._getTotalWidth(widths, contentWidth);
            return contentWidth - totalWidth
        };
        var calculateFreeWidthWithCurrentMinWidth = function(that, columnIndex, currentMinWidth, widths) {
            return calculateFreeWidth(that, widths.map(function(width, index) {
                return index === columnIndex ? currentMinWidth : width
            }))
        };
        var restoreFocus = function(focusedElement, selectionRange) {
            _accessibility2.default.hiddenFocus(focusedElement);
            _uiGrid_core4.default.setSelectionRange(focusedElement, selectionRange)
        };
        var ResizingController = _uiGrid_core2.default.ViewController.inherit({
            _initPostRenderHandlers: function() {
                var that = this;
                var dataController = that._dataController;
                if (!that._refreshSizesHandler) {
                    that._refreshSizesHandler = function(e) {
                        dataController.changed.remove(that._refreshSizesHandler);
                        var resizeDeferred;
                        var changeType = e && e.changeType;
                        var isDelayed = e && e.isDelayed;
                        var items = dataController.items();
                        if (!e || "refresh" === changeType || "prepend" === changeType || "append" === changeType) {
                            if (!isDelayed) {
                                resizeDeferred = that.resize()
                            }
                        } else {
                            if ("update" === changeType && e.changeTypes) {
                                if ((items.length > 1 || "insert" !== e.changeTypes[0]) && !(0 === items.length && "remove" === e.changeTypes[0]) && !e.needUpdateDimensions) {
                                    _common2.default.deferUpdate(function() {
                                        that._rowsView.resize()
                                    })
                                } else {
                                    resizeDeferred = that.resize()
                                }
                            }
                        }
                        if (changeType && "updateSelection" !== changeType && "updateFocusedRow" !== changeType && !isDelayed) {
                            (0, _deferred.when)(resizeDeferred).done(function() {
                                that._setAriaRowColCount();
                                that.fireContentReadyAction()
                            })
                        }
                    };
                    that._dataController.changed.add(function() {
                        that._dataController.changed.add(that._refreshSizesHandler)
                    })
                }
            },
            fireContentReadyAction: function() {
                this.component._fireContentReadyAction()
            },
            _setAriaRowColCount: function() {
                var component = this.component;
                component.setAria({
                    rowCount: this._dataController.totalItemsCount(),
                    colCount: component.columnCount()
                }, component.$element().children("." + GRIDBASE_CONTAINER_CLASS))
            },
            _getBestFitWidths: function() {
                if (!this.option("legacyRendering")) {
                    return this._rowsView.getColumnWidths()
                }
                var rowsColumnWidths = this._rowsView.getColumnWidths();
                var headerColumnWidths = this._columnHeadersView && this._columnHeadersView.getColumnWidths();
                var footerColumnWidths = this._footerView && this._footerView.getColumnWidths();
                var resultWidths = mergeArraysByMaxValue(rowsColumnWidths, headerColumnWidths);
                resultWidths = mergeArraysByMaxValue(resultWidths, footerColumnWidths);
                return resultWidths
            },
            _setVisibleWidths: function(visibleColumns, widths) {
                var columnsController = this._columnsController;
                columnsController.beginUpdate();
                (0, _iterator.each)(visibleColumns, function(index, column) {
                    var columnId = columnsController.getColumnId(column);
                    columnsController.columnOption(columnId, "visibleWidth", widths[index])
                });
                columnsController.endUpdate()
            },
            _toggleBestFitModeForView: function(view, className, isBestFit) {
                var _this = this;
                if (!view || !view.isVisible()) {
                    return
                }
                var $rowsTables = this._rowsView.getTableElements();
                var $viewTables = view.getTableElements();
                (0, _iterator.each)($rowsTables, function(index, tableElement) {
                    var $tableBody;
                    var $rowsTable = (0, _renderer2.default)(tableElement);
                    var $viewTable = $viewTables.eq(index);
                    if ($viewTable && $viewTable.length) {
                        if (isBestFit) {
                            $tableBody = $viewTable.children("tbody").appendTo($rowsTable)
                        } else {
                            $tableBody = $rowsTable.children("." + className).appendTo($viewTable)
                        }
                        $tableBody.toggleClass(className, isBestFit);
                        $tableBody.toggleClass(_this.addWidgetPrefix("best-fit"), isBestFit)
                    }
                })
            },
            _toggleBestFitMode: function(isBestFit) {
                var $element = this.component.$element();
                var that = this;
                if (!that.option("legacyRendering")) {
                    var $rowsTable = that._rowsView._getTableElement();
                    var $rowsFixedTable = that._rowsView.getTableElements().eq(1);
                    if (!$rowsTable) {
                        return
                    }
                    $rowsTable.css("tableLayout", isBestFit ? "auto" : "fixed");
                    $rowsTable.children("colgroup").css("display", isBestFit ? "none" : "");
                    $rowsFixedTable.toggleClass(this.addWidgetPrefix(TABLE_FIXED_CLASS), !isBestFit);
                    that._toggleBestFitModeForView(that._columnHeadersView, "dx-header", isBestFit);
                    that._toggleBestFitModeForView(that._footerView, "dx-footer", isBestFit);
                    if (that._needStretch()) {
                        $rowsTable.get(0).style.width = isBestFit ? "auto" : ""
                    }
                    if (_browser2.default.msie && 11 === parseInt(_browser2.default.version)) {
                        $rowsTable.find("." + this.addWidgetPrefix(TABLE_FIXED_CLASS)).each(function() {
                            this.style.width = isBestFit ? "10px" : ""
                        })
                    }
                } else {
                    $element.find("." + this.addWidgetPrefix(TABLE_CLASS)).toggleClass(this.addWidgetPrefix(TABLE_FIXED_CLASS), !isBestFit);
                    $element.find(EDITORS_INPUT_SELECTOR).toggleClass(HIDDEN_CLASS, isBestFit);
                    $element.find(".dx-group-cell").toggleClass(HIDDEN_CLASS, isBestFit);
                    $element.find(".dx-header-row ." + this.addWidgetPrefix(TEXT_CONTENT_CLASS)).css("maxWidth", "")
                }
            },
            _synchronizeColumns: function() {
                var that = this;
                var columnsController = that._columnsController;
                var visibleColumns = columnsController.getVisibleColumns();
                var columnAutoWidth = that.option("columnAutoWidth");
                var legacyRendering = that.option("legacyRendering");
                var needBestFit = that._needBestFit();
                var hasMinWidth = false;
                var resetBestFitMode;
                var isColumnWidthsCorrected = false;
                var resultWidths = [];
                var focusedElement;
                var selectionRange;
                var normalizeWidthsByExpandColumns = function() {
                    var expandColumnWidth;
                    (0, _iterator.each)(visibleColumns, function(index, column) {
                        if ("groupExpand" === column.type) {
                            expandColumnWidth = resultWidths[index]
                        }
                    });
                    (0, _iterator.each)(visibleColumns, function(index, column) {
                        if ("groupExpand" === column.type && expandColumnWidth) {
                            resultWidths[index] = expandColumnWidth
                        }
                    })
                };
                !needBestFit && (0, _iterator.each)(visibleColumns, function(index, column) {
                    if ("auto" === column.width || legacyRendering && column.fixed) {
                        needBestFit = true;
                        return false
                    }
                });
                (0, _iterator.each)(visibleColumns, function(index, column) {
                    if (column.minWidth) {
                        hasMinWidth = true;
                        return false
                    }
                });
                that._setVisibleWidths(visibleColumns, []);
                if (needBestFit) {
                    focusedElement = _dom_adapter2.default.getActiveElement();
                    selectionRange = _uiGrid_core4.default.getSelectionRange(focusedElement);
                    that._toggleBestFitMode(true);
                    resetBestFitMode = true
                }
                _common2.default.deferUpdate(function() {
                    if (needBestFit) {
                        resultWidths = that._getBestFitWidths();
                        (0, _iterator.each)(visibleColumns, function(index, column) {
                            var columnId = columnsController.getColumnId(column);
                            columnsController.columnOption(columnId, "bestFitWidth", resultWidths[index], true)
                        })
                    } else {
                        if (hasMinWidth) {
                            resultWidths = that._getBestFitWidths()
                        }
                    }(0, _iterator.each)(visibleColumns, function(index) {
                        var width = this.width;
                        if ("auto" !== width) {
                            if (_type2.default.isDefined(width)) {
                                resultWidths[index] = _type2.default.isNumeric(width) || isPixelWidth(width) ? parseFloat(width) : width
                            } else {
                                if (!columnAutoWidth) {
                                    resultWidths[index] = void 0
                                }
                            }
                        }
                    });
                    if (resetBestFitMode) {
                        that._toggleBestFitMode(false);
                        resetBestFitMode = false;
                        if (focusedElement && focusedElement !== _dom_adapter2.default.getActiveElement()) {
                            var isFocusOutsideWindow = (0, _position.getBoundingRect)(focusedElement).bottom < 0;
                            if (!isFocusOutsideWindow) {
                                if (_browser2.default.msie) {
                                    setTimeout(function() {
                                        restoreFocus(focusedElement, selectionRange)
                                    })
                                } else {
                                    restoreFocus(focusedElement, selectionRange)
                                }
                            }
                        }
                    }
                    isColumnWidthsCorrected = that._correctColumnWidths(resultWidths, visibleColumns);
                    if (columnAutoWidth) {
                        normalizeWidthsByExpandColumns();
                        if (that._needStretch()) {
                            that._processStretch(resultWidths, visibleColumns)
                        }
                    }
                    _common2.default.deferRender(function() {
                        if (needBestFit || isColumnWidthsCorrected) {
                            that._setVisibleWidths(visibleColumns, resultWidths)
                        }
                    })
                })
            },
            _needBestFit: function() {
                return this.option("columnAutoWidth")
            },
            _needStretch: function() {
                return this.option("legacyRendering") || this._columnsController.getVisibleColumns().some(function(c) {
                    return "auto" === c.width && !c.command
                })
            },
            _getAverageColumnsWidth: function(resultWidths) {
                var freeWidth = calculateFreeWidth(this, resultWidths);
                var columnCountWithoutWidth = resultWidths.filter(function(width) {
                    return void 0 === width
                }).length;
                return freeWidth / columnCountWithoutWidth
            },
            _correctColumnWidths: function(resultWidths, visibleColumns) {
                var that = this;
                var i;
                var hasPercentWidth = false;
                var hasAutoWidth = false;
                var isColumnWidthsCorrected = false;
                var $element = that.component.$element();
                var hasWidth = that._hasWidth;
                for (i = 0; i < visibleColumns.length; i++) {
                    var index = i;
                    var column = visibleColumns[index];
                    var isHiddenColumn = resultWidths[index] === HIDDEN_COLUMNS_WIDTH;
                    var width = resultWidths[index];
                    var minWidth = column.minWidth;
                    if (minWidth) {
                        if (void 0 === width) {
                            var averageColumnsWidth = that._getAverageColumnsWidth(resultWidths);
                            width = averageColumnsWidth
                        } else {
                            if (isPercentWidth(width)) {
                                var freeWidth = calculateFreeWidthWithCurrentMinWidth(that, index, minWidth, resultWidths);
                                if (freeWidth < 0) {
                                    width = -1
                                }
                            }
                        }
                    }
                    if (minWidth && that._getRealColumnWidth(width) < minWidth && !isHiddenColumn) {
                        resultWidths[index] = minWidth;
                        isColumnWidthsCorrected = true;
                        i = -1
                    }
                    if (!_type2.default.isDefined(column.width)) {
                        hasAutoWidth = true
                    }
                    if (isPercentWidth(column.width)) {
                        hasPercentWidth = true
                    }
                }
                if ($element && that._maxWidth) {
                    delete that._maxWidth;
                    $element.css("maxWidth", "")
                }
                if (!hasAutoWidth && resultWidths.length) {
                    var contentWidth = that._rowsView.contentWidth();
                    var scrollbarWidth = that._rowsView.getScrollbarWidth();
                    var totalWidth = that._getTotalWidth(resultWidths, contentWidth);
                    if (totalWidth < contentWidth) {
                        var lastColumnIndex = _uiGrid_core4.default.getLastResizableColumnIndex(visibleColumns, resultWidths);
                        if (lastColumnIndex >= 0) {
                            resultWidths[lastColumnIndex] = "auto";
                            isColumnWidthsCorrected = true;
                            if (false === hasWidth && !hasPercentWidth) {
                                that._maxWidth = totalWidth + scrollbarWidth + (that.option("showBorders") ? 2 : 0);
                                $element.css("maxWidth", that._maxWidth)
                            }
                        }
                    }
                }
                return isColumnWidthsCorrected
            },
            _processStretch: function(resultSizes, visibleColumns) {
                var groupSize = this._rowsView.contentWidth();
                var tableSize = this._getTotalWidth(resultSizes, groupSize);
                var unusedIndexes = {
                    length: 0
                };
                if (!resultSizes.length) {
                    return
                }(0, _iterator.each)(visibleColumns, function(index) {
                    if (this.width || resultSizes[index] === HIDDEN_COLUMNS_WIDTH) {
                        unusedIndexes[index] = true;
                        unusedIndexes.length++
                    }
                });
                var diff = groupSize - tableSize;
                var diffElement = Math.floor(diff / (resultSizes.length - unusedIndexes.length));
                var onePixelElementsCount = diff - diffElement * (resultSizes.length - unusedIndexes.length);
                if (diff >= 0) {
                    for (var i = 0; i < resultSizes.length; i++) {
                        if (unusedIndexes[i]) {
                            continue
                        }
                        resultSizes[i] += diffElement;
                        if (onePixelElementsCount > 0) {
                            if (onePixelElementsCount < 1) {
                                resultSizes[i] += onePixelElementsCount;
                                onePixelElementsCount = 0
                            } else {
                                resultSizes[i]++;
                                onePixelElementsCount--
                            }
                        }
                    }
                }
            },
            _getRealColumnWidth: function(width, groupWidth) {
                if (!isPercentWidth(width)) {
                    return parseFloat(width)
                }
                groupWidth = groupWidth || this._rowsView.contentWidth();
                return parseFloat(width) * groupWidth / 100
            },
            _getTotalWidth: function(widths, groupWidth) {
                var result = 0;
                for (var i = 0; i < widths.length; i++) {
                    var width = widths[i];
                    if (width && width !== HIDDEN_COLUMNS_WIDTH) {
                        result += this._getRealColumnWidth(width, groupWidth)
                    }
                }
                return result
            },
            updateSize: function($rootElement) {
                var that = this;
                var $groupElement;
                var width;
                var importantMarginClass = that.addWidgetPrefix(IMPORTANT_MARGIN_CLASS);
                if (void 0 === that._hasHeight && $rootElement && $rootElement.is(":visible") && $rootElement.width()) {
                    $groupElement = $rootElement.children("." + that.getWidgetContainerClass());
                    if ($groupElement.length) {
                        $groupElement.detach()
                    }
                    that._hasHeight = !!getContainerHeight($rootElement);
                    width = $rootElement.width();
                    $rootElement.addClass(importantMarginClass);
                    that._hasWidth = $rootElement.width() === width;
                    $rootElement.removeClass(importantMarginClass);
                    if ($groupElement.length) {
                        $groupElement.appendTo($rootElement)
                    }
                }
            },
            publicMethods: function() {
                return ["resize", "updateDimensions"]
            },
            resize: function() {
                return !this.component._requireResize && this.updateDimensions()
            },
            updateDimensions: function(checkSize) {
                var that = this;
                that._initPostRenderHandlers();
                if (!that._checkSize(checkSize)) {
                    return
                }
                var prevResult = that._resizeDeferred;
                var result = that._resizeDeferred = new _deferred.Deferred;
                (0, _deferred.when)(prevResult).always(function() {
                    _common2.default.deferRender(function() {
                        if (that._dataController.isLoaded()) {
                            that._synchronizeColumns()
                        }
                        that._resetGroupElementHeight();
                        _common2.default.deferUpdate(function() {
                            _common2.default.deferRender(function() {
                                _common2.default.deferUpdate(function() {
                                    that._updateDimensionsCore()
                                })
                            })
                        })
                    }).done(result.resolve).fail(result.reject)
                });
                return result.promise()
            },
            _resetGroupElementHeight: function() {
                var groupElement = this.component.$element().children().get(0);
                var scrollable = this._rowsView.getScrollable();
                if (groupElement && groupElement.style.height && (!scrollable || !scrollable.scrollTop())) {
                    groupElement.style.height = ""
                }
            },
            _checkSize: function(checkSize) {
                var $rootElement = this.component.$element();
                if (checkSize && (this._lastWidth === $rootElement.width() && this._lastHeight === $rootElement.height() || !$rootElement.is(":visible"))) {
                    return false
                }
                return true
            },
            _setScrollerSpacingCore: function(hasHeight) {
                var that = this;
                var vScrollbarWidth = hasHeight ? that._rowsView.getScrollbarWidth() : 0;
                var hScrollbarWidth = that._rowsView.getScrollbarWidth(true);
                _common2.default.deferRender(function() {
                    that._columnHeadersView && that._columnHeadersView.setScrollerSpacing(vScrollbarWidth);
                    that._footerView && that._footerView.setScrollerSpacing(vScrollbarWidth);
                    that._rowsView.setScrollerSpacing(vScrollbarWidth, hScrollbarWidth)
                })
            },
            _setScrollerSpacing: function(hasHeight) {
                var _this2 = this;
                if (true === this.option("scrolling.useNative")) {
                    _common2.default.deferRender(function() {
                        _common2.default.deferUpdate(function() {
                            _this2._setScrollerSpacingCore(hasHeight)
                        })
                    })
                } else {
                    this._setScrollerSpacingCore(hasHeight)
                }
            },
            _updateDimensionsCore: function() {
                var that = this;
                var dataController = that._dataController;
                var rowsView = that._rowsView;
                var $rootElement = that.component.$element();
                var groupElement = $rootElement.children().get(0);
                var rootElementHeight = $rootElement && ($rootElement.get(0).clientHeight || $rootElement.height());
                var maxHeight = parseInt($rootElement.css("maxHeight"));
                var maxHeightHappened = maxHeight && rootElementHeight >= maxHeight;
                var height = that.option("height") || $rootElement.get(0).style.height;
                var editorFactory = that.getController("editorFactory");
                var isMaxHeightApplied = maxHeightHappened && groupElement.scrollHeight === groupElement.offsetHeight;
                var $testDiv;
                that.updateSize($rootElement);
                var hasHeight = that._hasHeight || maxHeightHappened;
                if (height && that._hasHeight ^ "auto" !== height) {
                    $testDiv = (0, _renderer2.default)("<div>").height(height).appendTo($rootElement);
                    that._hasHeight = !!$testDiv.height();
                    $testDiv.remove()
                }
                _common2.default.deferRender(function() {
                    rowsView.height(null, hasHeight);
                    if (maxHeightHappened && !isMaxHeightApplied) {
                        (0, _renderer2.default)(groupElement).css("height", maxHeight)
                    }
                    if (!dataController.isLoaded()) {
                        rowsView.setLoading(dataController.isLoading());
                        return
                    }
                    _common2.default.deferUpdate(function() {
                        that._updateLastSizes($rootElement);
                        that._setScrollerSpacing(hasHeight);
                        (0, _iterator.each)(VIEW_NAMES, function(index, viewName) {
                            var view = that.getView(viewName);
                            if (view) {
                                view.resize()
                            }
                        });
                        editorFactory && editorFactory.resize()
                    })
                })
            },
            _updateLastSizes: function($rootElement) {
                this._lastWidth = $rootElement.width();
                this._lastHeight = $rootElement.height()
            },
            optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                    case "height":
                        this.component._renderDimensions();
                        this.resize();
                    case "legacyRendering":
                    case "renderAsync":
                        args.handled = true;
                        return;
                    default:
                        this.callBase(args)
                }
            },
            init: function() {
                var that = this;
                that._dataController = that.getController("data");
                that._columnsController = that.getController("columns");
                that._columnHeadersView = that.getView("columnHeadersView");
                that._footerView = that.getView("footerView");
                that._rowsView = that.getView("rowsView")
            }
        });
        var SynchronizeScrollingController = _uiGrid_core2.default.ViewController.inherit({
            _scrollChangedHandler: function(views, pos, viewName) {
                for (var j = 0; j < views.length; j++) {
                    if (views[j] && views[j].name !== viewName) {
                        views[j].scrollTo({
                            left: pos.left,
                            top: pos.top
                        })
                    }
                }
            },
            init: function() {
                var views = [this.getView("columnHeadersView"), this.getView("footerView"), this.getView("rowsView")];
                for (var i = 0; i < views.length; i++) {
                    var view = views[i];
                    if (view) {
                        view.scrollChanged.add(this._scrollChangedHandler.bind(this, views))
                    }
                }
            }
        });
        var GridView = _uiGrid_core2.default.View.inherit({
            _endUpdateCore: function() {
                if (this.component._requireResize) {
                    this.component._requireResize = false;
                    this._resizingController.resize()
                }
            },
            _getWidgetAriaLabel: function() {
                return "dxDataGrid-ariaDataGrid"
            },
            init: function() {
                var that = this;
                that._resizingController = that.getController("resizing");
                that._dataController = that.getController("data")
            },
            getView: function(name) {
                return this.component._views[name]
            },
            element: function() {
                return this._groupElement
            },
            optionChanged: function(args) {
                var that = this;
                if (_type2.default.isDefined(that._groupElement) && "showBorders" === args.name) {
                    that._groupElement.toggleClass(that.addWidgetPrefix(BORDERS_CLASS), !!args.value);
                    args.handled = true
                } else {
                    that.callBase(args)
                }
            },
            _renderViews: function($groupElement) {
                var that = this;
                (0, _iterator.each)(VIEW_NAMES, function(index, viewName) {
                    var view = that.getView(viewName);
                    if (view) {
                        view.render($groupElement)
                    }
                })
            },
            _getTableRoleName: function() {
                return "grid"
            },
            render: function($rootElement) {
                var that = this;
                var isFirstRender = !that._groupElement;
                var $groupElement = that._groupElement || (0, _renderer2.default)("<div>").addClass(that.getWidgetContainerClass());
                $groupElement.addClass(GRIDBASE_CONTAINER_CLASS);
                $groupElement.toggleClass(that.addWidgetPrefix(BORDERS_CLASS), !!that.option("showBorders"));
                that.setAria("role", "presentation", $rootElement);
                that.component.setAria({
                    role: this._getTableRoleName(),
                    label: _message2.default.format(that._getWidgetAriaLabel())
                }, $groupElement);
                that._rootElement = $rootElement || that._rootElement;
                if (isFirstRender) {
                    that._groupElement = $groupElement;
                    _window2.default.hasWindow() && that.getController("resizing").updateSize($rootElement);
                    $groupElement.appendTo($rootElement)
                }
                that._renderViews($groupElement)
            },
            update: function() {
                var that = this;
                var $rootElement = that._rootElement;
                var $groupElement = that._groupElement;
                var resizingController = that.getController("resizing");
                if ($rootElement && $groupElement) {
                    resizingController.resize();
                    if (that._dataController.isLoaded()) {
                        that._resizingController.fireContentReadyAction()
                    }
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    showBorders: false,
                    renderAsync: false,
                    legacyRendering: false
                }
            },
            controllers: {
                resizing: ResizingController,
                synchronizeScrolling: SynchronizeScrollingController
            },
            views: {
                gridView: GridView
            }
        }
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.header_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _toolbar = __webpack_require__( /*! ../toolbar */ 145);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.columns_view */ 170);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        __webpack_require__( /*! ../drop_down_menu */ 201);
        var HEADER_PANEL_CLASS = "header-panel";
        var TOOLBAR_BUTTON_CLASS = "toolbar-button";
        var HeaderPanel = _uiGrid_core2.default.ColumnsView.inherit({
            _getToolbarItems: function() {
                return []
            },
            _getButtonContainer: function() {
                return (0, _renderer2.default)("<div>").addClass(this.addWidgetPrefix(TOOLBAR_BUTTON_CLASS))
            },
            _getToolbarButtonClass: function(specificClass) {
                var secondClass = specificClass ? " " + specificClass : "";
                return this.addWidgetPrefix(TOOLBAR_BUTTON_CLASS) + secondClass
            },
            _getToolbarOptions: function() {
                var options = {
                    toolbarOptions: {
                        items: this._getToolbarItems(),
                        onItemRendered: function(e) {
                            var itemRenderedCallback = e.itemData.onItemRendered;
                            if (itemRenderedCallback) {
                                itemRenderedCallback(e)
                            }
                        }
                    }
                };
                this.executeAction("onToolbarPreparing", options);
                if (options.toolbarOptions && !(0, _type.isDefined)(options.toolbarOptions.visible)) {
                    var toolbarItems = options.toolbarOptions.items;
                    options.toolbarOptions.visible = !!(toolbarItems && toolbarItems.length)
                }
                return options.toolbarOptions
            },
            _renderCore: function() {
                if (!this._toolbar) {
                    this.element().addClass(this.addWidgetPrefix(HEADER_PANEL_CLASS));
                    this._toolbar = this._createComponent((0, _renderer2.default)("<div>").appendTo(this.element()), _toolbar2.default, this._toolbarOptions)
                } else {
                    this._toolbar.option(this._toolbarOptions)
                }
            },
            _columnOptionChanged: _common.noop,
            _handleDataChanged: function() {
                if (this._requireReady) {
                    this.render()
                }
            },
            init: function() {
                this.callBase();
                this.createAction("onToolbarPreparing", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            render: function() {
                this._toolbarOptions = this._getToolbarOptions();
                this.callBase.apply(this, arguments)
            },
            setToolbarItemDisabled: function(name, optionValue) {
                var toolbarInstance = this._toolbar;
                if (toolbarInstance) {
                    var items = toolbarInstance.option("items") || [];
                    var itemIndex = items.indexOf(items.filter(function(item) {
                        return item.name === name
                    })[0]);
                    if (itemIndex >= 0) {
                        var itemOptionPrefix = "items[" + itemIndex + "]";
                        if (toolbarInstance.option(itemOptionPrefix + ".options")) {
                            toolbarInstance.option(itemOptionPrefix + ".options.disabled", optionValue)
                        } else {
                            toolbarInstance.option(itemOptionPrefix + ".disabled", optionValue)
                        }
                    }
                }
            },
            updateToolbarDimensions: function() {
                if (this._toolbar) {
                    (0, _dom.triggerResizeEvent)(this.getHeaderPanel())
                }
            },
            getHeaderPanel: function() {
                return this.element()
            },
            getHeight: function() {
                return this.getElementHeight()
            },
            optionChanged: function(args) {
                if ("onToolbarPreparing" === args.name) {
                    this._invalidate();
                    args.handled = true
                }
                this.callBase(args)
            },
            isVisible: function() {
                return this._toolbarOptions && this._toolbarOptions.visible
            },
            allowDragging: _common.noop
        });
        module.exports = {
            defaultOptions: function() {
                return {}
            },
            views: {
                headerPanel: HeaderPanel
            },
            extenders: {
                controllers: {
                    resizing: {
                        _updateDimensionsCore: function() {
                            this.callBase.apply(this, arguments);
                            this.getView("headerPanel").updateToolbarDimensions()
                        }
                    }
                }
            }
        }
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.state_storing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.state_storing_core */ 360);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var getDataState = function(that) {
            var pagerView = that.getView("pagerView");
            var dataController = that.getController("data");
            var state = {
                allowedPageSizes: pagerView ? pagerView.getPageSizes() : void 0,
                filterPanel: {
                    filterEnabled: that.option("filterPanel.filterEnabled")
                },
                filterValue: that.option("filterValue"),
                focusedRowKey: that.option("focusedRowEnabled") ? that.option("focusedRowKey") : void 0
            };
            return (0, _extend.extend)(state, dataController.getUserState())
        };
        var processLoadState = function(that) {
            var columnsController = that.getController("columns");
            var selectionController = that.getController("selection");
            var exportController = that.getController("export");
            var dataController = that.getController("data");
            if (columnsController) {
                columnsController.columnsChanged.add(function() {
                    that.updateState({
                        columns: columnsController.getUserState()
                    })
                })
            }
            if (selectionController) {
                selectionController.selectionChanged.add(function(e) {
                    that.updateState({
                        selectedRowKeys: e.selectedRowKeys,
                        selectionFilter: e.selectionFilter
                    })
                })
            }
            if (dataController) {
                that._initialPageSize = that.option("paging.pageSize");
                that._initialFilterValue = that.option("filterValue");
                dataController.changed.add(function() {
                    var state = getDataState(that);
                    that.updateState(state)
                })
            }
            if (exportController) {
                exportController.selectionOnlyChanged.add(function() {
                    that.updateState({
                        exportSelectionOnly: exportController.selectionOnly()
                    })
                })
            }
        };
        var DEFAULT_FILTER_VALUE = null;
        var getFilterValue = function(that, state) {
            var filterSyncController = that.getController("filterSync");
            var columnsController = that.getController("columns");
            var hasFilterState = state.columns || void 0 !== state.filterValue;
            if (filterSyncController) {
                if (hasFilterState) {
                    return state.filterValue || filterSyncController.getFilterValueFromColumns(state.columns)
                } else {
                    return that._initialFilterValue || filterSyncController.getFilterValueFromColumns(columnsController.getColumns())
                }
            }
            return DEFAULT_FILTER_VALUE
        };
        module.exports = {
            defaultOptions: function() {
                return {
                    stateStoring: {
                        enabled: false,
                        storageKey: null,
                        type: "localStorage",
                        customLoad: null,
                        customSave: null,
                        savingTimeout: 2e3
                    }
                }
            },
            controllers: {
                stateStoring: _uiGrid_core2.default.StateStoringController
            },
            extenders: {
                views: {
                    rowsView: {
                        init: function() {
                            var that = this;
                            var dataController = that.getController("data");
                            that.callBase();
                            dataController.stateLoaded.add(function() {
                                if (dataController.isLoaded() && !dataController.getDataSource()) {
                                    that.setLoading(false);
                                    that.renderNoDataText();
                                    var columnHeadersView = that.component.getView("columnHeadersView");
                                    columnHeadersView && columnHeadersView.render();
                                    that.component._fireContentReadyAction()
                                }
                            })
                        }
                    }
                },
                controllers: {
                    stateStoring: {
                        init: function() {
                            this.callBase.apply(this, arguments);
                            processLoadState(this)
                        },
                        isLoading: function() {
                            return this.callBase() || this.getController("data").isStateLoading()
                        },
                        state: function(_state) {
                            var result = this.callBase.apply(this, arguments);
                            if (void 0 !== _state) {
                                this.applyState((0, _extend.extend)({}, _state))
                            }
                            return result
                        },
                        updateState: function(state) {
                            if (this.isEnabled()) {
                                var oldState = this.state();
                                var newState = (0, _extend.extend)({}, oldState, state);
                                var oldStateHash = (0, _common.getKeyHash)(oldState);
                                var newStateHash = (0, _common.getKeyHash)(newState);
                                if (!(0, _common.equalByValue)(oldStateHash, newStateHash)) {
                                    (0, _extend.extend)(this._state, state);
                                    this.save()
                                }
                            } else {
                                (0, _extend.extend)(this._state, state)
                            }
                        },
                        applyState: function(state) {
                            var that = this;
                            var allowedPageSizes = state.allowedPageSizes;
                            var searchText = state.searchText;
                            var selectedRowKeys = state.selectedRowKeys;
                            var selectionFilter = state.selectionFilter;
                            var exportController = that.getController("export");
                            var columnsController = that.getController("columns");
                            var dataController = that.getController("data");
                            var scrollingMode = that.option("scrolling.mode");
                            var isVirtualScrollingMode = "virtual" === scrollingMode || "infinite" === scrollingMode;
                            var showPageSizeSelector = true === that.option("pager.visible") && that.option("pager.showPageSizeSelector");
                            that.component.beginUpdate();
                            if (columnsController) {
                                columnsController.setUserState(state.columns)
                            }
                            if (exportController) {
                                exportController.selectionOnly(state.exportSelectionOnly)
                            }
                            if (selectedRowKeys) {
                                that.option("selectedRowKeys", selectedRowKeys)
                            }
                            that.option("selectionFilter", selectionFilter);
                            if (allowedPageSizes && "auto" === that.option("pager.allowedPageSizes")) {
                                that.option("pager").allowedPageSizes = allowedPageSizes
                            }
                            if (that.option("focusedRowEnabled")) {
                                that.option("focusedRowKey", state.focusedRowKey)
                            }
                            that.component.endUpdate();
                            searchText && that.option("searchPanel.text", searchText);
                            that.option("filterValue", getFilterValue(that, state));
                            that.option("filterPanel.filterEnabled", state.filterPanel ? state.filterPanel.filterEnabled : true);
                            that.option("paging.pageSize", (!isVirtualScrollingMode || showPageSizeSelector) && (0, _type.isDefined)(state.pageSize) ? state.pageSize : that._initialPageSize);
                            that.option("paging.pageIndex", state.pageIndex || 0);
                            dataController && dataController.reset()
                        }
                    },
                    columns: {
                        getVisibleColumns: function() {
                            var visibleColumns = this.callBase.apply(this, arguments);
                            var stateStoringController = this.getController("stateStoring");
                            return stateStoringController.isEnabled() && !stateStoringController.isLoaded() ? [] : visibleColumns
                        }
                    },
                    data: {
                        callbackNames: function() {
                            return this.callBase().concat(["stateLoaded"])
                        },
                        _refreshDataSource: function() {
                            var that = this;
                            var callBase = that.callBase;
                            var stateStoringController = that.getController("stateStoring");
                            if (stateStoringController.isEnabled() && !stateStoringController.isLoaded()) {
                                clearTimeout(that._restoreStateTimeoutID);
                                var deferred = new _deferred.Deferred;
                                that._restoreStateTimeoutID = setTimeout(function() {
                                    stateStoringController.load().always(function() {
                                        that._restoreStateTimeoutID = null;
                                        callBase.call(that);
                                        that.stateLoaded.fire();
                                        deferred.resolve()
                                    })
                                });
                                return deferred.promise()
                            } else {
                                if (!that.isStateLoading()) {
                                    callBase.call(that)
                                }
                            }
                        },
                        isLoading: function() {
                            var that = this;
                            var stateStoringController = that.getController("stateStoring");
                            return this.callBase() || stateStoringController.isLoading()
                        },
                        isStateLoading: function() {
                            return (0, _type.isDefined)(this._restoreStateTimeoutID)
                        },
                        isLoaded: function() {
                            return this.callBase() && !this.isStateLoading()
                        },
                        dispose: function() {
                            clearTimeout(this._restoreStateTimeoutID);
                            this.callBase()
                        }
                    },
                    selection: {
                        _fireSelectionChanged: function(options) {
                            var stateStoringController = this.getController("stateStoring");
                            var isDeferredSelection = this.option("selection.deferred");
                            if (stateStoringController.isLoading() && isDeferredSelection) {
                                return
                            }
                            this.callBase.apply(this, arguments)
                        }
                    }
                }
            }
        }
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.state_storing_core.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _storage = __webpack_require__( /*! ../../core/utils/storage */ 299);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATE_REGEX = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/;
        var parseDates = function parseDates(state) {
            if (!state) {
                return
            }(0, _iterator.each)(state, function(key, value) {
                if ((0, _type.isPlainObject)(value) || Array.isArray(value)) {
                    parseDates(value)
                } else {
                    if ("string" === typeof value) {
                        var date = DATE_REGEX.exec(value);
                        if (date) {
                            state[key] = new Date(Date.UTC(+date[1], +date[2] - 1, +date[3], +date[4], +date[5], +date[6]))
                        }
                    }
                }
            })
        };
        exports.StateStoringController = _uiGrid_core2.default.ViewController.inherit(function() {
            var getStorage = function(options) {
                var storage = "sessionStorage" === options.type ? (0, _storage.sessionStorage)() : (0, _window.getWindow)().localStorage;
                if (!storage) {
                    if ("file:" === (0, _window.getWindow)().location.protocol && _browser2.default.msie) {
                        throw new Error("E1038")
                    } else {
                        throw new Error("E1007")
                    }
                }
                return storage
            };
            var getUniqueStorageKey = function(options) {
                return (0, _type.isDefined)(options.storageKey) ? options.storageKey : "storage"
            };
            return {
                _loadState: function() {
                    var options = this.option("stateStoring");
                    if ("custom" === options.type) {
                        return options.customLoad && options.customLoad()
                    }
                    try {
                        return JSON.parse(getStorage(options).getItem(getUniqueStorageKey(options)))
                    } catch (e) {
                        _ui2.default.log(e.message)
                    }
                },
                _saveState: function(state) {
                    var options = this.option("stateStoring");
                    if ("custom" === options.type) {
                        options.customSave && options.customSave(state);
                        return
                    }
                    try {
                        getStorage(options).setItem(getUniqueStorageKey(options), JSON.stringify(state))
                    } catch (e) {}
                },
                publicMethods: function() {
                    return ["state"]
                },
                isEnabled: function() {
                    return this.option("stateStoring.enabled")
                },
                init: function() {
                    var that = this;
                    that._state = {};
                    that._isLoaded = false;
                    that._isLoading = false;
                    that._windowUnloadHandler = function() {
                        if (void 0 !== that._savingTimeoutID) {
                            that._saveState(that.state())
                        }
                    };
                    _events_engine2.default.on((0, _window.getWindow)(), "unload", that._windowUnloadHandler);
                    return that
                },
                isLoaded: function() {
                    return this._isLoaded
                },
                isLoading: function() {
                    return this._isLoading
                },
                load: function() {
                    var that = this;
                    that._isLoading = true;
                    var loadResult = (0, _deferred.fromPromise)(that._loadState());
                    loadResult.done(function(state) {
                        that._isLoaded = true;
                        that._isLoading = false;
                        that.state(state)
                    });
                    return loadResult
                },
                state: function(_state) {
                    var that = this;
                    if (!arguments.length) {
                        return (0, _extend.extend)(true, {}, that._state)
                    } else {
                        that._state = (0, _extend.extend)({}, _state);
                        parseDates(that._state)
                    }
                },
                save: function() {
                    var that = this;
                    clearTimeout(that._savingTimeoutID);
                    that._savingTimeoutID = setTimeout(function() {
                        that._saveState(that.state());
                        that._savingTimeoutID = void 0
                    }, that.option("stateStoring.savingTimeout"))
                },
                optionChanged: function(args) {
                    var that = this;
                    switch (args.name) {
                        case "stateStoring":
                            if (that.isEnabled() && !that.isLoading()) {
                                that.load()
                            }
                            args.handled = true;
                            break;
                        default:
                            that.callBase(args)
                    }
                },
                dispose: function() {
                    clearTimeout(this._savingTimeoutID);
                    _events_engine2.default.off((0, _window.getWindow)(), "unload", this._windowUnloadHandler)
                }
            }
        }())
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.selection.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiData_grid = __webpack_require__( /*! ../data_grid/ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var _support2 = _interopRequireDefault(_support);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _hold = __webpack_require__( /*! ../../events/hold */ 95);
        var _hold2 = _interopRequireDefault(_hold);
        var _selection = __webpack_require__( /*! ../selection/selection */ 218);
        var _selection2 = _interopRequireDefault(_selection);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var EDITOR_CELL_CLASS = "dx-editor-cell";
        var ROW_CLASS = "dx-row";
        var ROW_SELECTION_CLASS = "dx-selection";
        var SELECT_CHECKBOX_CLASS = "dx-select-checkbox";
        var CHECKBOXES_HIDDEN_CLASS = "dx-select-checkboxes-hidden";
        var COMMAND_SELECT_CLASS = "dx-command-select";
        var SELECTION_DISABLED_CLASS = "dx-selection-disabled";
        var DATA_ROW_CLASS = "dx-data-row";
        var SHOW_CHECKBOXES_MODE = "selection.showCheckBoxesMode";
        var SELECTION_MODE = "selection.mode";
        var processLongTap = function(that, dxEvent) {
            var selectionController = that.getController("selection");
            var rowsView = that.getView("rowsView");
            var $row = (0, _renderer2.default)(dxEvent.target).closest("." + DATA_ROW_CLASS);
            var rowIndex = rowsView.getRowIndex($row);
            if (rowIndex < 0) {
                return
            }
            if ("onLongTap" === that.option(SHOW_CHECKBOXES_MODE)) {
                if (selectionController.isSelectionWithCheckboxes()) {
                    selectionController.stopSelectionWithCheckboxes()
                } else {
                    selectionController.startSelectionWithCheckboxes()
                }
            } else {
                if ("onClick" === that.option(SHOW_CHECKBOXES_MODE)) {
                    selectionController.startSelectionWithCheckboxes()
                }
                if ("always" !== that.option(SHOW_CHECKBOXES_MODE)) {
                    selectionController.changeItemSelection(rowIndex, {
                        control: true
                    })
                }
            }
        };
        exports.SelectionController = _uiData_grid2.default.Controller.inherit(function() {
            var isSeveralRowsSelected = function(that, selectionFilter) {
                var keyIndex = 0;
                var store = that._dataController.store();
                var key = store && store.key();
                var isComplexKey = Array.isArray(key);
                if (!selectionFilter.length) {
                    return false
                }
                if (isComplexKey && Array.isArray(selectionFilter[0]) && "and" === selectionFilter[1]) {
                    for (var i = 0; i < selectionFilter.length; i++) {
                        if (Array.isArray(selectionFilter[i])) {
                            if (selectionFilter[i][0] !== key[keyIndex] || "=" !== selectionFilter[i][1]) {
                                return true
                            }
                            keyIndex++
                        }
                    }
                    return false
                }
                return key !== selectionFilter[0]
            };
            var selectionCellTemplate = function(container, options) {
                var component = options.component;
                var rowsView = component.getView("rowsView");
                if (component.option("renderAsync")) {
                    var selectedRowKeys = component.getSelectedRowKeys();
                    if (selectedRowKeys.indexOf(options.row.key) !== -1) {
                        options.value = true
                    }
                }
                rowsView.renderSelectCheckBoxContainer((0, _renderer2.default)(container), options)
            };
            var selectionHeaderTemplate = function(container, options) {
                var column = options.column;
                var $cellElement = (0, _renderer2.default)(container);
                var columnHeadersView = options.component.getView("columnHeadersView");
                $cellElement.addClass(EDITOR_CELL_CLASS);
                columnHeadersView._renderSelectAllCheckBox($cellElement, column);
                columnHeadersView._attachSelectAllCheckBoxClickEvent($cellElement)
            };
            return {
                init: function() {
                    this._dataController = this.getController("data");
                    this._selectionMode = this.option(SELECTION_MODE);
                    this._isSelectionWithCheckboxes = false;
                    this._selection = this._createSelection();
                    this._updateSelectColumn();
                    this.createAction("onSelectionChanged", {
                        excludeValidators: ["disabled", "readOnly"]
                    })
                },
                _getSelectionConfig: function() {
                    var that = this;
                    var dataController = that._dataController;
                    var selectionOptions = that.option("selection") || {};
                    return {
                        selectedKeys: that.option("selectedRowKeys"),
                        mode: that._selectionMode,
                        deferred: selectionOptions.deferred,
                        maxFilterLengthInRequest: selectionOptions.maxFilterLengthInRequest,
                        selectionFilter: that.option("selectionFilter"),
                        key: function() {
                            return dataController && dataController.key()
                        },
                        keyOf: function(item) {
                            return dataController && dataController.keyOf(item)
                        },
                        dataFields: function() {
                            return dataController.dataSource() && dataController.dataSource().select()
                        },
                        load: function(options) {
                            return dataController.dataSource() && dataController.dataSource().load(options) || (new _deferred.Deferred).resolve([])
                        },
                        plainItems: function() {
                            return dataController.items(true)
                        },
                        isItemSelected: function(item) {
                            return item.selected
                        },
                        isSelectableItem: function(item) {
                            return item && "data" === item.rowType && !item.isNewRow
                        },
                        getItemData: function(item) {
                            return item && (item.oldData || item.data || item)
                        },
                        filter: function() {
                            return dataController.getCombinedFilter()
                        },
                        totalCount: function() {
                            return dataController.totalCount()
                        },
                        onSelectionChanged: that._updateSelectedItems.bind(this)
                    }
                },
                _updateSelectColumn: function() {
                    var columnsController = this.getController("columns");
                    var isSelectColumnVisible = this.isSelectColumnVisible();
                    columnsController.addCommandColumn({
                        type: "selection",
                        command: "select",
                        visible: isSelectColumnVisible,
                        visibleIndex: -1,
                        dataType: "boolean",
                        alignment: "center",
                        cssClass: COMMAND_SELECT_CLASS,
                        width: "auto",
                        cellTemplate: selectionCellTemplate,
                        headerCellTemplate: selectionHeaderTemplate
                    });
                    columnsController.columnOption("command:select", "visible", isSelectColumnVisible)
                },
                _createSelection: function() {
                    var options = this._getSelectionConfig();
                    return new _selection2.default(options)
                },
                _fireSelectionChanged: function(options) {
                    if (options) {
                        this.executeAction("onSelectionChanged", options)
                    }
                    var argument = this.option("selection.deferred") ? {
                        selectionFilter: this.option("selectionFilter")
                    } : {
                        selectedRowKeys: this.option("selectedRowKeys")
                    };
                    this.selectionChanged.fire(argument)
                },
                _updateCheckboxesState: function(options) {
                    var isDeferredMode = options.isDeferredMode;
                    var selectionFilter = options.selectionFilter;
                    var selectedItemKeys = options.selectedItemKeys;
                    var removedItemKeys = options.removedItemKeys;
                    if ("onClick" === this.option(SHOW_CHECKBOXES_MODE)) {
                        if (isDeferredMode ? selectionFilter && isSeveralRowsSelected(this, selectionFilter) : selectedItemKeys.length > 1) {
                            this.startSelectionWithCheckboxes()
                        } else {
                            if (isDeferredMode ? selectionFilter && !selectionFilter.length : 0 === selectedItemKeys.length && removedItemKeys.length) {
                                this.stopSelectionWithCheckboxes()
                            }
                        }
                    }
                },
                _updateSelectedItems: function(args) {
                    var that = this;
                    var selectionChangedOptions;
                    var isDeferredMode = that.option("selection.deferred");
                    var selectionFilter = that._selection.selectionFilter();
                    var dataController = that._dataController;
                    var items = dataController.items();
                    if (!items) {
                        return
                    }
                    var isSelectionWithCheckboxes = that.isSelectionWithCheckboxes();
                    var changedItemIndexes = that.getChangedItemIndexes(items);
                    that._updateCheckboxesState({
                        selectedItemKeys: args.selectedItemKeys,
                        removedItemKeys: args.removedItemKeys,
                        selectionFilter: selectionFilter,
                        isDeferredMode: isDeferredMode
                    });
                    if (changedItemIndexes.length || isSelectionWithCheckboxes !== that.isSelectionWithCheckboxes()) {
                        dataController.updateItems({
                            changeType: "updateSelection",
                            itemIndexes: changedItemIndexes
                        })
                    }
                    if (isDeferredMode) {
                        that.option("selectionFilter", selectionFilter);
                        selectionChangedOptions = {}
                    } else {
                        if (args.addedItemKeys.length || args.removedItemKeys.length) {
                            that._selectedItemsInternalChange = true;
                            that.option("selectedRowKeys", args.selectedItemKeys.slice(0));
                            that._selectedItemsInternalChange = false;
                            selectionChangedOptions = {
                                selectedRowsData: args.selectedItems.slice(0),
                                selectedRowKeys: args.selectedItemKeys.slice(0),
                                currentSelectedRowKeys: args.addedItemKeys.slice(0),
                                currentDeselectedRowKeys: args.removedItemKeys.slice(0)
                            }
                        }
                    }
                    that._fireSelectionChanged(selectionChangedOptions)
                },
                getChangedItemIndexes: function(items) {
                    var that = this;
                    var itemIndexes = [];
                    var isDeferredSelection = this.option("selection.deferred");
                    for (var i = 0, length = items.length; i < length; i++) {
                        var row = items[i];
                        var isItemSelected = that.isRowSelected(isDeferredSelection ? row.data : row.key);
                        if (that._selection.isDataItem(row) && row.isSelected !== isItemSelected) {
                            itemIndexes.push(i)
                        }
                    }
                    return itemIndexes
                },
                callbackNames: function() {
                    return ["selectionChanged"]
                },
                optionChanged: function(args) {
                    var that = this;
                    that.callBase(args);
                    switch (args.name) {
                        case "selection":
                            var oldSelectionMode = that._selectionMode;
                            that.init();
                            var selectionMode = that._selectionMode;
                            var selectedRowKeys = that.option("selectedRowKeys");
                            if (oldSelectionMode !== selectionMode) {
                                if ("single" === selectionMode) {
                                    if (selectedRowKeys.length > 1) {
                                        selectedRowKeys = [selectedRowKeys[0]]
                                    }
                                } else {
                                    if ("multiple" !== selectionMode) {
                                        selectedRowKeys = []
                                    }
                                }
                            }
                            that.selectRows(selectedRowKeys).always(function() {
                                that._fireSelectionChanged()
                            });
                            that.getController("columns").updateColumns();
                            args.handled = true;
                            break;
                        case "selectionFilter":
                            this._selection.selectionFilter(args.value);
                            args.handled = true;
                            break;
                        case "selectedRowKeys":
                            var value = args.value || [];
                            if (Array.isArray(value) && !that._selectedItemsInternalChange && (that.component.getDataSource() || !value.length)) {
                                that.selectRows(value)
                            }
                            args.handled = true
                    }
                },
                publicMethods: function() {
                    return ["selectRows", "deselectRows", "selectRowsByIndexes", "getSelectedRowKeys", "getSelectedRowsData", "clearSelection", "selectAll", "deselectAll", "startSelectionWithCheckboxes", "stopSelectionWithCheckboxes", "isRowSelected"]
                },
                isRowSelected: function(arg) {
                    return this._selection.isItemSelected(arg)
                },
                isSelectColumnVisible: function() {
                    return "multiple" === this.option(SELECTION_MODE) && ("always" === this.option(SHOW_CHECKBOXES_MODE) || "onClick" === this.option(SHOW_CHECKBOXES_MODE) || this._isSelectionWithCheckboxes)
                },
                _isOnePageSelectAll: function() {
                    return "page" === this.option("selection.selectAllMode")
                },
                isSelectAll: function() {
                    return this._selection.getSelectAllState(this._isOnePageSelectAll())
                },
                selectAll: function() {
                    if ("onClick" === this.option(SHOW_CHECKBOXES_MODE)) {
                        this.startSelectionWithCheckboxes()
                    }
                    return this._selection.selectAll(this._isOnePageSelectAll())
                },
                deselectAll: function() {
                    return this._selection.deselectAll(this._isOnePageSelectAll())
                },
                clearSelection: function() {
                    return this.selectedItemKeys([])
                },
                refresh: function() {
                    var selectedRowKeys = this.option("selectedRowKeys") || [];
                    if (!this.option("selection.deferred") && selectedRowKeys.length) {
                        return this.selectedItemKeys(selectedRowKeys)
                    }
                    return (new _deferred.Deferred).resolve().promise()
                },
                selectedItemKeys: function(value, preserve, isDeselect, isSelectAll) {
                    return this._selection.selectedItemKeys(value, preserve, isDeselect, isSelectAll)
                },
                getSelectedRowKeys: function() {
                    return this._selection.getSelectedItemKeys()
                },
                selectRows: function(keys, preserve) {
                    return this.selectedItemKeys(keys, preserve)
                },
                deselectRows: function(keys) {
                    return this.selectedItemKeys(keys, true, true)
                },
                selectRowsByIndexes: function(indexes) {
                    var items = this._dataController.items();
                    var keys = [];
                    if (!Array.isArray(indexes)) {
                        indexes = Array.prototype.slice.call(arguments, 0)
                    }(0, _iterator.each)(indexes, function() {
                        var item = items[this];
                        if (item && "data" === item.rowType) {
                            keys.push(item.key)
                        }
                    });
                    return this.selectRows(keys)
                },
                getSelectedRowsData: function() {
                    return this._selection.getSelectedItems()
                },
                changeItemSelection: function(itemIndex, keys) {
                    keys = keys || {};
                    if (this.isSelectionWithCheckboxes()) {
                        keys.control = true
                    }
                    return this._selection.changeItemSelection(this._dataController.getRowIndexDelta() + itemIndex, keys)
                },
                focusedItemIndex: function(itemIndex) {
                    var that = this;
                    if ((0, _type.isDefined)(itemIndex)) {
                        that._selection._focusedItemIndex = itemIndex
                    } else {
                        return that._selection._focusedItemIndex
                    }
                },
                isSelectionWithCheckboxes: function() {
                    return "multiple" === this.option(SELECTION_MODE) && ("always" === this.option(SHOW_CHECKBOXES_MODE) || this._isSelectionWithCheckboxes)
                },
                startSelectionWithCheckboxes: function() {
                    var that = this;
                    if ("multiple" === that.option(SELECTION_MODE) && !that.isSelectionWithCheckboxes()) {
                        that._isSelectionWithCheckboxes = true;
                        that._updateSelectColumn();
                        return true
                    }
                    return false
                },
                stopSelectionWithCheckboxes: function() {
                    var that = this;
                    if (that._isSelectionWithCheckboxes) {
                        that._isSelectionWithCheckboxes = false;
                        that._updateSelectColumn();
                        return true
                    }
                    return false
                }
            }
        }());
        module.exports = {
            defaultOptions: function() {
                return {
                    selection: {
                        mode: "none",
                        showCheckBoxesMode: "onClick",
                        allowSelectAll: true,
                        selectAllMode: "allPages",
                        maxFilterLengthInRequest: 1500,
                        deferred: false
                    },
                    selectionFilter: [],
                    selectedRowKeys: []
                }
            },
            controllers: {
                selection: exports.SelectionController
            },
            extenders: {
                controllers: {
                    data: {
                        init: function() {
                            var selectionController = this.getController("selection");
                            var isDeferredMode = this.option("selection.deferred");
                            this.callBase.apply(this, arguments);
                            if (isDeferredMode) {
                                selectionController._updateCheckboxesState({
                                    isDeferredMode: true,
                                    selectionFilter: this.option("selectionFilter")
                                })
                            }
                        },
                        _loadDataSource: function() {
                            var that = this;
                            return that.callBase().done(function() {
                                that.getController("selection").refresh()
                            })
                        },
                        _processDataItem: function(item, options) {
                            var that = this;
                            var selectionController = that.getController("selection");
                            var hasSelectColumn = selectionController.isSelectColumnVisible();
                            var isDeferredSelection = options.isDeferredSelection = void 0 === options.isDeferredSelection ? this.option("selection.deferred") : options.isDeferredSelection;
                            var dataItem = this.callBase.apply(this, arguments);
                            dataItem.isSelected = selectionController.isRowSelected(isDeferredSelection ? dataItem.data : dataItem.key);
                            if (hasSelectColumn && dataItem.values) {
                                for (var i = 0; i < options.visibleColumns.length; i++) {
                                    if ("select" === options.visibleColumns[i].command) {
                                        dataItem.values[i] = dataItem.isSelected;
                                        break
                                    }
                                }
                            }
                            return dataItem
                        },
                        refresh: function(options) {
                            var that = this;
                            var d = new _deferred.Deferred;
                            this.callBase.apply(this, arguments).done(function() {
                                if (!options || options.selection) {
                                    that.getController("selection").refresh().done(d.resolve).fail(d.reject)
                                } else {
                                    d.resolve()
                                }
                            }).fail(d.reject);
                            return d.promise()
                        },
                        _handleDataChanged: function(e) {
                            this.callBase.apply(this, arguments);
                            if ((!e || "refresh" === e.changeType) && !this._repaintChangesOnly) {
                                this.getController("selection").focusedItemIndex(-1)
                            }
                        },
                        _applyChange: function(change) {
                            var _this = this;
                            if (change && "updateSelection" === change.changeType) {
                                change.items.forEach(function(item, index) {
                                    var currentItem = _this._items[index];
                                    if (currentItem) {
                                        currentItem.isSelected = item.isSelected;
                                        currentItem.values = item.values
                                    }
                                });
                                return
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _endUpdateCore: function() {
                            var changes = this._changes;
                            var isUpdateSelection = changes.length > 1 && changes.every(function(change) {
                                return "updateSelection" === change.changeType
                            });
                            if (isUpdateSelection) {
                                var itemIndexes = changes.map(function(change) {
                                    return change.itemIndexes || []
                                }).reduce(function(a, b) {
                                    return a.concat(b)
                                });
                                this._changes = [{
                                    changeType: "updateSelection",
                                    itemIndexes: itemIndexes
                                }]
                            }
                            this.callBase.apply(this, arguments)
                        }
                    },
                    contextMenu: {
                        _contextMenuPrepared: function(options) {
                            var dxEvent = options.event;
                            if (dxEvent.originalEvent && "dxhold" !== dxEvent.originalEvent.type || options.items && options.items.length > 0) {
                                return
                            }
                            processLongTap(this, dxEvent)
                        }
                    }
                },
                views: {
                    columnHeadersView: {
                        init: function() {
                            var that = this;
                            that.callBase();
                            that.getController("selection").selectionChanged.add(that._updateSelectAllValue.bind(that))
                        },
                        _updateSelectAllValue: function() {
                            var that = this;
                            var $element = that.element();
                            var $editor = $element && $element.find("." + SELECT_CHECKBOX_CLASS);
                            if ($element && $editor.length && "multiple" === that.option("selection.mode")) {
                                $editor.dxCheckBox("instance").option("value", that.getController("selection").isSelectAll())
                            }
                        },
                        _handleDataChanged: function(e) {
                            this.callBase(e);
                            if (!e || "refresh" === e.changeType) {
                                this._updateSelectAllValue()
                            }
                        },
                        _renderSelectAllCheckBox: function($container, column) {
                            var that = this;
                            var selectionController = that.getController("selection");
                            var groupElement = (0, _renderer2.default)("<div>").appendTo($container).addClass(SELECT_CHECKBOX_CLASS);
                            that.setAria("label", _message2.default.format("dxDataGrid-ariaSelectAll"), $container);
                            that.getController("editorFactory").createEditor(groupElement, (0, _extend.extend)({}, column, {
                                parentType: "headerRow",
                                dataType: "boolean",
                                value: selectionController.isSelectAll(),
                                editorOptions: {
                                    visible: that.option("selection.allowSelectAll") || false !== selectionController.isSelectAll()
                                },
                                tabIndex: that.option("useLegacyKeyboardNavigation") ? -1 : that.option("tabIndex") || 0,
                                setValue: function(value, e) {
                                    var allowSelectAll = that.option("selection.allowSelectAll");
                                    e.component.option("visible", allowSelectAll || false !== e.component.option("value"));
                                    if (!e.event || selectionController.isSelectAll() === value) {
                                        return
                                    }
                                    if (e.value && !allowSelectAll) {
                                        e.component.option("value", false)
                                    } else {
                                        e.value ? selectionController.selectAll() : selectionController.deselectAll()
                                    }
                                    e.event.preventDefault()
                                }
                            }));
                            return groupElement
                        },
                        _attachSelectAllCheckBoxClickEvent: function($element) {
                            _events_engine2.default.on($element, _click2.default.name, this.createAction(function(e) {
                                var event = e.event;
                                if (!(0, _renderer2.default)(event.target).closest("." + SELECT_CHECKBOX_CLASS).length) {
                                    _events_engine2.default.trigger((0, _renderer2.default)(event.currentTarget).children("." + SELECT_CHECKBOX_CLASS), _click2.default.name)
                                }
                                event.preventDefault()
                            }))
                        }
                    },
                    rowsView: {
                        renderSelectCheckBoxContainer: function($container, options) {
                            if ("data" === options.rowType && !options.row.isNewRow) {
                                $container.addClass(EDITOR_CELL_CLASS);
                                this._attachCheckBoxClickEvent($container);
                                this.setAria("label", _message2.default.format("dxDataGrid-ariaSelectRow"), $container);
                                this._renderSelectCheckBox($container, options)
                            } else {
                                (0, _uiGrid_core.setEmptyText)($container)
                            }
                        },
                        _renderSelectCheckBox: function(container, options) {
                            var groupElement = (0, _renderer2.default)("<div>").addClass(SELECT_CHECKBOX_CLASS).appendTo(container);
                            this.getController("editorFactory").createEditor(groupElement, (0, _extend.extend)({}, options.column, {
                                parentType: "dataRow",
                                dataType: "boolean",
                                lookup: null,
                                value: options.value,
                                setValue: function(value, e) {
                                    if (e && e.event && "keydown" === e.event.type) {
                                        _events_engine2.default.trigger(container, _click2.default.name, e)
                                    }
                                },
                                row: options.row
                            }));
                            return groupElement
                        },
                        _attachCheckBoxClickEvent: function($element) {
                            _events_engine2.default.on($element, _click2.default.name, this.createAction(function(e) {
                                var selectionController = this.getController("selection");
                                var event = e.event;
                                var rowIndex = this.getRowIndex((0, _renderer2.default)(event.currentTarget).closest("." + ROW_CLASS));
                                if (rowIndex >= 0) {
                                    selectionController.startSelectionWithCheckboxes();
                                    selectionController.changeItemSelection(rowIndex, {
                                        shift: event.shiftKey
                                    });
                                    if ((0, _renderer2.default)(event.target).closest("." + SELECT_CHECKBOX_CLASS).length) {
                                        this.getController("data").updateItems({
                                            changeType: "updateSelection",
                                            itemIndexes: [rowIndex]
                                        })
                                    }
                                }
                            }))
                        },
                        _update: function(change) {
                            var that = this;
                            var tableElements = that.getTableElements();
                            if ("updateSelection" === change.changeType) {
                                if (tableElements.length > 0) {
                                    (0, _iterator.each)(tableElements, function(_, tableElement) {
                                        (0, _iterator.each)(change.itemIndexes || [], function(_, index) {
                                            var $row;
                                            if (change.items[index]) {
                                                $row = that._getRowElements((0, _renderer2.default)(tableElement)).eq(index);
                                                if ($row.length) {
                                                    var isSelected = change.items[index].isSelected;
                                                    $row.toggleClass(ROW_SELECTION_CLASS, void 0 === isSelected ? false : isSelected).find("." + SELECT_CHECKBOX_CLASS).dxCheckBox("option", "value", isSelected);
                                                    that.setAria("selected", isSelected, $row)
                                                }
                                            }
                                        })
                                    });
                                    that._updateCheckboxesClass()
                                }
                            } else {
                                that.callBase(change)
                            }
                        },
                        _createTable: function() {
                            var that = this;
                            var selectionMode = that.option("selection.mode");
                            var $table = that.callBase.apply(that, arguments);
                            if ("none" !== selectionMode) {
                                if ("onLongTap" === that.option(SHOW_CHECKBOXES_MODE) || !_support2.default.touch) {
                                    _events_engine2.default.on($table, (0, _utils.addNamespace)(_hold2.default.name, "dxDataGridRowsView"), "." + DATA_ROW_CLASS, that.createAction(function(e) {
                                        processLongTap(that.component, e.event);
                                        e.event.stopPropagation()
                                    }))
                                }
                                _events_engine2.default.on($table, "mousedown selectstart", that.createAction(function(e) {
                                    var event = e.event;
                                    if (event.shiftKey) {
                                        event.preventDefault()
                                    }
                                }))
                            }
                            return $table
                        },
                        _createRow: function(row) {
                            var $row = this.callBase(row);
                            if (row) {
                                var isSelected = !!row.isSelected;
                                if (isSelected) {
                                    $row.addClass(ROW_SELECTION_CLASS)
                                }
                                this.setAria("selected", isSelected, $row)
                            }
                            return $row
                        },
                        _rowClick: function(e) {
                            var that = this;
                            var dxEvent = e.event;
                            var isSelectionDisabled = (0, _renderer2.default)(dxEvent.target).closest("." + SELECTION_DISABLED_CLASS).length;
                            if (!that.isClickableElement((0, _renderer2.default)(dxEvent.target))) {
                                if (!isSelectionDisabled && ("multiple" !== that.option(SELECTION_MODE) || "always" !== that.option(SHOW_CHECKBOXES_MODE))) {
                                    if (that.getController("selection").changeItemSelection(e.rowIndex, {
                                            control: dxEvent.ctrlKey || dxEvent.metaKey,
                                            shift: dxEvent.shiftKey
                                        })) {
                                        dxEvent.preventDefault();
                                        e.handled = true
                                    }
                                }
                                that.callBase(e)
                            }
                        },
                        isClickableElement: function($target) {
                            var isCommandSelect = $target.closest("." + COMMAND_SELECT_CLASS).length;
                            return !!isCommandSelect
                        },
                        _renderCore: function(change) {
                            this.callBase(change);
                            this._updateCheckboxesClass()
                        },
                        _updateCheckboxesClass: function() {
                            var tableElements = this.getTableElements();
                            var selectionController = this.getController("selection");
                            var isCheckBoxesHidden = selectionController.isSelectColumnVisible() && !selectionController.isSelectionWithCheckboxes();
                            (0, _iterator.each)(tableElements, function(_, tableElement) {
                                (0, _renderer2.default)(tableElement).toggleClass(CHECKBOXES_HIDDEN_CLASS, isCheckBoxesHidden)
                            })
                        }
                    }
                }
            }
        }
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.column_chooser.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.columns_view */ 170);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _tree_view = __webpack_require__( /*! ../tree_view */ 146);
        var _tree_view2 = _interopRequireDefault(_tree_view);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLUMN_CHOOSER_CLASS = "column-chooser";
        var COLUMN_CHOOSER_BUTTON_CLASS = "column-chooser-button";
        var NOTOUCH_ACTION_CLASS = "notouch-action";
        var COLUMN_CHOOSER_LIST_CLASS = "column-chooser-list";
        var COLUMN_CHOOSER_PLAIN_CLASS = "column-chooser-plain";
        var COLUMN_CHOOSER_DRAG_CLASS = "column-chooser-mode-drag";
        var COLUMN_CHOOSER_SELECT_CLASS = "column-chooser-mode-select";
        var COLUMN_CHOOSER_ICON_NAME = "column-chooser";
        var COLUMN_CHOOSER_ITEM_CLASS = "dx-column-chooser-item";
        var TREEVIEW_NODE_SELECTOR = ".dx-treeview-node";
        var CHECKBOX_SELECTOR = ".dx-checkbox";
        var CLICK_TIMEOUT = 300;
        var processItems = function(that, chooserColumns) {
            var items = [];
            var isSelectMode = "select" === that.option("columnChooser.mode");
            if (chooserColumns.length) {
                (0, _iterator.each)(chooserColumns, function(index, column) {
                    var item = {
                        text: column.caption,
                        cssClass: column.cssClass,
                        allowHiding: column.allowHiding,
                        expanded: true,
                        id: column.index,
                        disabled: false,
                        disableCheckBox: false === column.allowHiding,
                        parentId: (0, _type.isDefined)(column.ownerBand) ? column.ownerBand : null
                    };
                    if (isSelectMode) {
                        item.selected = column.visible
                    }
                    items.push(item)
                })
            }
            return items
        };
        var ColumnChooserController = _uiGrid_core2.default.ViewController.inherit({
            renderShowColumnChooserButton: function($element) {
                var that = this;
                var columnChooserButtonClass = that.addWidgetPrefix(COLUMN_CHOOSER_BUTTON_CLASS);
                var columnChooserEnabled = that.option("columnChooser.enabled");
                var $showColumnChooserButton = $element.find("." + columnChooserButtonClass);
                var $columnChooserButton;
                if (columnChooserEnabled) {
                    if (!$showColumnChooserButton.length) {
                        $columnChooserButton = (0, _renderer2.default)("<div>").addClass(columnChooserButtonClass).appendTo($element);
                        that._createComponent($columnChooserButton, _button2.default, {
                            icon: COLUMN_CHOOSER_ICON_NAME,
                            onClick: function() {
                                that.getView("columnChooserView").showColumnChooser()
                            },
                            hint: that.option("columnChooser.title"),
                            integrationOptions: {}
                        })
                    } else {
                        $showColumnChooserButton.show()
                    }
                } else {
                    $showColumnChooserButton.hide()
                }
            },
            getPosition: function() {
                var rowsView = this.getView("rowsView");
                return {
                    my: "right bottom",
                    at: "right bottom",
                    of: rowsView && rowsView.element(),
                    collision: "fit",
                    offset: "-2 -2",
                    boundaryOffset: "2 2"
                }
            }
        });
        var ColumnChooserView = _uiGrid_core4.default.ColumnsView.inherit({
            _resizeCore: _common.noop,
            _isWinDevice: function() {
                return !!_devices2.default.real().win
            },
            _updateList: function(change) {
                var items;
                var $popupContent = this._popupContainer.$content();
                var isSelectMode = "select" === this.option("columnChooser.mode");
                var columnChooserList = this._columnChooserList;
                var chooserColumns = this._columnsController.getChooserColumns(isSelectMode);
                if (isSelectMode && columnChooserList && change && "selection" === change.changeType) {
                    items = processItems(this, chooserColumns);
                    for (var i = 0; i < items.length; i++) {
                        var selected = items[i].selected;
                        var id = items[i].id;
                        if (id === change.columnIndex) {
                            if (selected) {
                                columnChooserList.selectItem(id, selected)
                            } else {
                                columnChooserList.unselectItem(id, selected)
                            }
                        }
                    }
                } else {
                    if (!isSelectMode || !columnChooserList || "full" === change) {
                        this._popupContainer._wrapper().toggleClass(this.addWidgetPrefix(COLUMN_CHOOSER_DRAG_CLASS), !isSelectMode).toggleClass(this.addWidgetPrefix(COLUMN_CHOOSER_SELECT_CLASS), isSelectMode);
                        items = processItems(this, chooserColumns);
                        this._renderTreeView($popupContent, items)
                    }
                }
            },
            _initializePopupContainer: function() {
                var that = this;
                var $element = that.element().addClass(that.addWidgetPrefix(COLUMN_CHOOSER_CLASS));
                var columnChooserOptions = that.option("columnChooser");
                var themeName = _themes2.default.current();
                var isGenericTheme = _themes2.default.isGeneric(themeName);
                var isMaterial = _themes2.default.isMaterial(themeName);
                var dxPopupOptions = {
                    visible: false,
                    shading: false,
                    showCloseButton: false,
                    dragEnabled: true,
                    resizeEnabled: true,
                    toolbarItems: [{
                        text: columnChooserOptions.title,
                        toolbar: "top",
                        location: isGenericTheme || isMaterial ? "before" : "center"
                    }],
                    position: that.getController("columnChooser").getPosition(),
                    width: columnChooserOptions.width,
                    height: columnChooserOptions.height,
                    rtlEnabled: that.option("rtlEnabled"),
                    onHidden: function() {
                        if (that._isWinDevice()) {
                            (0, _renderer2.default)("body").removeClass(that.addWidgetPrefix(NOTOUCH_ACTION_CLASS))
                        }
                    },
                    container: columnChooserOptions.container
                };
                if (isGenericTheme || isMaterial) {
                    (0, _extend.extend)(dxPopupOptions, {
                        showCloseButton: true
                    })
                } else {
                    dxPopupOptions.toolbarItems[dxPopupOptions.toolbarItems.length] = {
                        shortcut: "cancel"
                    }
                }
                if (!(0, _type.isDefined)(this._popupContainer)) {
                    that._popupContainer = that._createComponent($element, _popup2.default, dxPopupOptions);
                    that._popupContainer.on("optionChanged", function(args) {
                        if ("visible" === args.name) {
                            that.renderCompleted.fire()
                        }
                    })
                } else {
                    this._popupContainer.option(dxPopupOptions)
                }
            },
            _renderCore: function(change) {
                if (this._popupContainer) {
                    this._updateList(change)
                }
            },
            _renderTreeView: function($container, items) {
                var that = this;
                var columnChooser = this.option("columnChooser");
                var isSelectMode = "select" === columnChooser.mode;
                var treeViewConfig = {
                    items: items,
                    dataStructure: "plain",
                    activeStateEnabled: true,
                    focusStateEnabled: true,
                    hoverStateEnabled: true,
                    itemTemplate: "item",
                    showCheckBoxesMode: "none",
                    rootValue: null,
                    searchEnabled: columnChooser.allowSearch,
                    searchTimeout: columnChooser.searchTimeout,
                    onItemRendered: function(e) {
                        if (e.itemData.disableCheckBox) {
                            var $treeViewNode = (0, _renderer2.default)(e.itemElement).closest(TREEVIEW_NODE_SELECTOR);
                            var $checkBox;
                            if ($treeViewNode.length) {
                                $checkBox = $treeViewNode.find(CHECKBOX_SELECTOR);
                                if ($checkBox.length) {
                                    var checkBoxInstance = $checkBox.data("dxCheckBox");
                                    checkBoxInstance && checkBoxInstance.option("disabled", true)
                                }
                            }
                        }
                    }
                };
                var scrollableInstance = $container.find(".dx-scrollable").data("dxScrollable");
                var scrollTop = scrollableInstance && scrollableInstance.scrollTop();
                if (isSelectMode && !this._columnsController.isBandColumnsUsed()) {
                    $container.addClass(this.addWidgetPrefix(COLUMN_CHOOSER_PLAIN_CLASS))
                }
                treeViewConfig.onContentReady = function(e) {
                    (0, _common.deferUpdate)(function() {
                        if (scrollTop) {
                            var scrollable = (0, _renderer2.default)(e.element).find(".dx-scrollable").data("dxScrollable");
                            scrollable && scrollable.scrollTo({
                                y: scrollTop
                            })
                        }
                        that.renderCompleted.fire()
                    })
                };
                if (this._isWinDevice()) {
                    treeViewConfig.useNativeScrolling = false
                }(0, _extend.extend)(treeViewConfig, isSelectMode ? this._prepareSelectModeConfig() : this._prepareDragModeConfig());
                if (this._columnChooserList) {
                    if (!treeViewConfig.searchEnabled) {
                        treeViewConfig.searchValue = ""
                    }
                    this._columnChooserList.option(treeViewConfig)
                } else {
                    this._columnChooserList = this._createComponent($container, _tree_view2.default, treeViewConfig);
                    $container.addClass(this.addWidgetPrefix(COLUMN_CHOOSER_LIST_CLASS))
                }
            },
            _prepareDragModeConfig: function() {
                var columnChooserOptions = this.option("columnChooser");
                return {
                    noDataText: columnChooserOptions.emptyPanelText,
                    activeStateEnabled: false,
                    focusStateEnabled: false,
                    hoverStateEnabled: false,
                    itemTemplate: function(data, index, item) {
                        (0, _renderer2.default)(item).text(data.text).parent().addClass(data.cssClass).addClass(COLUMN_CHOOSER_ITEM_CLASS)
                    }
                }
            },
            _prepareSelectModeConfig: function() {
                var that = this;
                var selectionChangedHandler = function(e) {
                    var visibleColumns = that._columnsController.getVisibleColumns().filter(function(item) {
                        return !item.command
                    });
                    var isLastColumnUnselected = 1 === visibleColumns.length && !e.itemData.selected;
                    if (isLastColumnUnselected) {
                        e.component.selectItem(e.itemElement)
                    } else {
                        setTimeout(function() {
                            that._columnsController.columnOption(e.itemData.id, "visible", e.itemData.selected)
                        }, CLICK_TIMEOUT)
                    }
                };
                return {
                    selectNodesRecursive: false,
                    showCheckBoxesMode: "normal",
                    onItemSelectionChanged: selectionChangedHandler
                }
            },
            _columnOptionChanged: function(e) {
                var changeTypes = e.changeTypes;
                var optionNames = e.optionNames;
                var isSelectMode = "select" === this.option("columnChooser.mode");
                this.callBase(e);
                if (isSelectMode) {
                    if (optionNames.visible && 1 === optionNames.length && void 0 !== e.columnIndex) {
                        this.render(null, {
                            changeType: "selection",
                            columnIndex: e.columnIndex
                        })
                    } else {
                        if (optionNames.showInColumnChooser || optionNames.visible || changeTypes.columns && optionNames.all) {
                            this.render(null, "full")
                        }
                    }
                }
            },
            optionChanged: function(args) {
                switch (args.name) {
                    case "columnChooser":
                        this._initializePopupContainer();
                        this.render(null, "full");
                        break;
                    default:
                        this.callBase(args)
                }
            },
            getColumnElements: function() {
                var result = [];
                var $node;
                var isSelectMode = "select" === this.option("columnChooser.mode");
                var chooserColumns = this._columnsController.getChooserColumns(isSelectMode);
                var $content = this._popupContainer && this._popupContainer.$content();
                var $nodes = $content && $content.find(".dx-treeview-node");
                if ($nodes) {
                    chooserColumns.forEach(function(column) {
                        $node = $nodes.filter("[data-item-id = '" + column.index + "']");
                        var item = $node.length ? $node.children("." + COLUMN_CHOOSER_ITEM_CLASS).get(0) : null;
                        result.push(item)
                    })
                }
                return (0, _renderer2.default)(result)
            },
            getName: function() {
                return "columnChooser"
            },
            getColumns: function() {
                return this._columnsController.getChooserColumns()
            },
            allowDragging: function(column, sourceLocation) {
                var columnVisible = column && column.allowHiding && ("columnChooser" !== sourceLocation || !column.visible && this._columnsController.isParentColumnVisible(column.index));
                return this.isColumnChooserVisible() && columnVisible
            },
            getBoundingRect: function() {
                var that = this;
                var container = that._popupContainer && that._popupContainer._container();
                if (container && container.is(":visible")) {
                    var offset = container.offset();
                    return {
                        left: offset.left,
                        top: offset.top,
                        right: offset.left + container.outerWidth(),
                        bottom: offset.top + container.outerHeight()
                    }
                }
                return null
            },
            showColumnChooser: function() {
                this._isPopupContainerShown = true;
                if (!this._popupContainer) {
                    this._initializePopupContainer();
                    this.render()
                }
                this._popupContainer.show();
                if (this._isWinDevice()) {
                    (0, _renderer2.default)("body").addClass(this.addWidgetPrefix(NOTOUCH_ACTION_CLASS))
                }
            },
            hideColumnChooser: function() {
                if (this._popupContainer) {
                    this._popupContainer.hide();
                    this._isPopupContainerShown = false
                }
            },
            isColumnChooserVisible: function() {
                var popupContainer = this._popupContainer;
                return popupContainer && popupContainer.option("visible")
            },
            publicMethods: function() {
                return ["showColumnChooser", "hideColumnChooser"]
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    columnChooser: {
                        enabled: false,
                        allowSearch: false,
                        searchTimeout: 500,
                        mode: "dragAndDrop",
                        width: 250,
                        height: 260,
                        title: _message2.default.format("dxDataGrid-columnChooserTitle"),
                        emptyPanelText: _message2.default.format("dxDataGrid-columnChooserEmptyText"),
                        container: void 0
                    }
                }
            },
            controllers: {
                columnChooser: ColumnChooserController
            },
            views: {
                columnChooserView: ColumnChooserView
            },
            extenders: {
                views: {
                    headerPanel: {
                        _getToolbarItems: function() {
                            var items = this.callBase();
                            return this._appendColumnChooserItem(items)
                        },
                        _appendColumnChooserItem: function(items) {
                            var that = this;
                            var columnChooserEnabled = that.option("columnChooser.enabled");
                            if (columnChooserEnabled) {
                                var onClickHandler = function() {
                                    that.component.getView("columnChooserView").showColumnChooser()
                                };
                                var onInitialized = function(e) {
                                    (0, _renderer2.default)(e.element).addClass(that._getToolbarButtonClass(that.addWidgetPrefix(COLUMN_CHOOSER_BUTTON_CLASS)))
                                };
                                var hintText = that.option("columnChooser.title");
                                var toolbarItem = {
                                    widget: "dxButton",
                                    options: {
                                        icon: COLUMN_CHOOSER_ICON_NAME,
                                        onClick: onClickHandler,
                                        hint: hintText,
                                        text: hintText,
                                        onInitialized: onInitialized
                                    },
                                    showText: "inMenu",
                                    location: "after",
                                    name: "columnChooserButton",
                                    locateInMenu: "auto",
                                    sortIndex: 40
                                };
                                items.push(toolbarItem)
                            }
                            return items
                        },
                        optionChanged: function(args) {
                            switch (args.name) {
                                case "columnChooser":
                                    this._invalidate();
                                    args.handled = true;
                                    break;
                                default:
                                    this.callBase(args)
                            }
                        },
                        isVisible: function() {
                            var that = this;
                            var columnChooserEnabled = that.option("columnChooser.enabled");
                            return that.callBase() || columnChooserEnabled
                        }
                    }
                },
                controllers: {
                    columns: {
                        allowMoveColumn: function(fromVisibleIndex, toVisibleIndex, sourceLocation, targetLocation) {
                            var columnChooserMode = this.option("columnChooser.mode");
                            var isMoveColumnDisallowed = "select" === columnChooserMode && "columnChooser" === targetLocation;
                            return isMoveColumnDisallowed ? false : this.callBase(fromVisibleIndex, toVisibleIndex, sourceLocation, targetLocation)
                        }
                    }
                }
            }
        }
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_view/ui.tree_view.search.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _ui = __webpack_require__( /*! ../widget/ui.search_box_mixin */ 231);
        var _ui2 = _interopRequireDefault(_ui);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiTree_view = __webpack_require__( /*! ./ui.tree_view.base */ 643);
        var _uiTree_view2 = _interopRequireDefault(_uiTree_view);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var WIDGET_CLASS = "dx-treeview";
        var NODE_CONTAINER_CLASS = "".concat(WIDGET_CLASS, "-node-container");
        var TreeViewSearch = _uiTree_view2.default.inherit(_ui2.default).inherit({
            _addWidgetPrefix: function(className) {
                return "".concat(WIDGET_CLASS, "-").concat(className)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "searchValue":
                        if (this._showCheckboxes() && this._isRecursiveSelection()) {
                            this._removeSelection()
                        }
                        this._initDataAdapter();
                        this._updateSearch();
                        this._repaintContainer();
                        break;
                    case "searchExpr":
                        this._initDataAdapter();
                        this.repaint();
                        break;
                    case "searchMode":
                        this.option("expandNodesRecursive") ? this._updateDataAdapter() : this._initDataAdapter();
                        this.repaint();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _updateDataAdapter: function() {
                this._setOptionWithoutOptionChange("expandNodesRecursive", false);
                this._initDataAdapter();
                this._setOptionWithoutOptionChange("expandNodesRecursive", true)
            },
            _getDataAdapterOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    searchValue: this.option("searchValue"),
                    searchMode: this.option("searchMode") || "contains",
                    searchExpr: this.option("searchExpr")
                })
            },
            _updateSearch: function() {
                if (this._searchEditor) {
                    var editorOptions = this._getSearchEditorOptions();
                    this._searchEditor.option(editorOptions)
                }
            },
            _repaintContainer: function() {
                var $container = this.$element().find(".".concat(NODE_CONTAINER_CLASS)).first();
                var rootNodes;
                if ($container.length) {
                    $container.empty();
                    rootNodes = this._dataAdapter.getRootNodes();
                    this._renderEmptyMessage(rootNodes);
                    this._renderItems($container, rootNodes);
                    this._fireContentReadyAction()
                }
            },
            _itemContainer: function(isSearchMode) {
                if (this._scrollableContainer && isSearchMode) {
                    return (0, _renderer2.default)(this._scrollableContainer.content())
                }
                return this.callBase()
            },
            _addWidgetClass: function() {
                this.$element().addClass(this._widgetClass())
            },
            _clean: function() {
                this.callBase();
                this._removeSearchBox()
            }
        });
        (0, _component_registrator2.default)("dxTreeView", TreeViewSearch);
        module.exports = TreeViewSearch
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.grouping.core.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.createOffsetFilter = function(path, storeLoadOptions) {
            var groups = (0, _utils.normalizeSortingInfo)(storeLoadOptions.group);
            var filter = [];
            for (var i = 0; i < path.length; i++) {
                var filterElement = [];
                for (var j = 0; j <= i; j++) {
                    var selector = groups[j].selector;
                    if (i === j && (null === path[j] || false === path[j] || true === path[j])) {
                        if (false === path[j]) {
                            filterElement.push([selector, "=", groups[j].desc ? true : null])
                        } else {
                            if (path[j] ? !groups[j].desc : groups[j].desc) {
                                filterElement.push([selector, "<>", path[j]])
                            } else {
                                filterElement.push([selector, "<>", null]);
                                filterElement.push([selector, "=", null])
                            }
                        }
                    } else {
                        var currentFilter = [selector, i === j ? groups[j].desc ? ">" : "<" : "=", path[j]];
                        if ("<" === currentFilter[1]) {
                            filterElement.push([currentFilter, "or", [selector, "=", null]])
                        } else {
                            filterElement.push(currentFilter)
                        }
                    }
                }
                filter.push(_uiData_grid2.default.combineFilters(filterElement))
            }
            filter = _uiData_grid2.default.combineFilters(filter, "or");
            return _uiData_grid2.default.combineFilters([filter, storeLoadOptions.filter])
        };
        exports.GroupingHelper = _class2.default.inherit(function() {
            var findGroupInfoByKey = function(groupsInfo, key) {
                var hash = groupsInfo.hash;
                return hash && hash[JSON.stringify(key)]
            };
            var getGroupInfoIndexByOffset = function(groupsInfo, offset) {
                var leftIndex = 0;
                var rightIndex = groupsInfo.length - 1;
                if (!groupsInfo.length) {
                    return 0
                }
                do {
                    var middleIndex = rightIndex + leftIndex >> 1;
                    if (groupsInfo[middleIndex].offset > offset) {
                        rightIndex = middleIndex
                    } else {
                        leftIndex = middleIndex
                    }
                } while (rightIndex - leftIndex > 1);
                var index;
                for (index = leftIndex; index <= rightIndex; index++) {
                    if (groupsInfo[index].offset > offset) {
                        break
                    }
                }
                return index
            };
            var cleanGroupsInfo = function cleanGroupsInfo(groupsInfo, groupIndex, groupsCount) {
                for (var i = 0; i < groupsInfo.length; i++) {
                    if (groupIndex + 1 >= groupsCount) {
                        groupsInfo[i].children = []
                    } else {
                        cleanGroupsInfo(groupsInfo[i].children, groupIndex + 1, groupsCount)
                    }
                }
            };
            var calculateItemsCount = function calculateItemsCount(that, items, groupsCount) {
                var result = 0;
                if (items) {
                    if (!groupsCount) {
                        result = items.length
                    } else {
                        for (var i = 0; i < items.length; i++) {
                            if (that.isGroupItemCountable(items[i])) {
                                result++
                            }
                            result += calculateItemsCount(that, items[i].items, groupsCount - 1)
                        }
                    }
                }
                return result
            };
            return {
                ctor: function(dataSourceAdapter) {
                    this._dataSource = dataSourceAdapter;
                    this.reset()
                },
                reset: function() {
                    this._groupsInfo = [];
                    this._totalCountCorrection = 0
                },
                totalCountCorrection: function() {
                    return this._totalCountCorrection
                },
                updateTotalItemsCount: function(totalCountCorrection) {
                    this._totalCountCorrection = totalCountCorrection || 0
                },
                isGroupItemCountable: function(item) {
                    return !this._isVirtualPaging() || !item.isContinuation
                },
                _isVirtualPaging: function() {
                    var scrollingMode = this._dataSource.option("scrolling.mode");
                    return "virtual" === scrollingMode || "infinite" === scrollingMode
                },
                itemsCount: function itemsCount() {
                    var dataSourceAdapter = this._dataSource;
                    var dataSource = dataSourceAdapter._dataSource;
                    var groupCount = _uiData_grid2.default.normalizeSortingInfo(dataSource.group() || []).length;
                    var itemsCount = calculateItemsCount(this, dataSource.items(), groupCount);
                    return itemsCount
                },
                foreachGroups: function(callback, childrenAtFirst, foreachCollapsedGroups, updateOffsets, updateParentOffsets) {
                    var that = this;

                    function foreachGroupsCore(groupsInfo, callback, childrenAtFirst, parents) {
                        var callbackResults = [];

                        function executeCallback(callback, data, parents, callbackResults) {
                            var callbackResult = data && callback(data, parents);
                            callbackResult && callbackResults.push(callbackResult);
                            return callbackResult
                        }
                        for (var i = 0; i < groupsInfo.length; i++) {
                            parents.push(groupsInfo[i].data);
                            if (!childrenAtFirst && false === executeCallback(callback, groupsInfo[i].data, parents, callbackResults)) {
                                return false
                            }
                            if (!groupsInfo[i].data || groupsInfo[i].data.isExpanded || foreachCollapsedGroups) {
                                var children = groupsInfo[i].children;
                                var callbackResult = children.length && foreachGroupsCore(children, callback, childrenAtFirst, parents);
                                callbackResult && callbackResults.push(callbackResult);
                                if (false === callbackResult) {
                                    return false
                                }
                            }
                            if (childrenAtFirst && false === executeCallback(callback, groupsInfo[i].data, parents, callbackResults)) {
                                return false
                            }
                            if (!groupsInfo[i].data || groupsInfo[i].data.offset !== groupsInfo[i].offset) {
                                updateOffsets = true
                            }
                            parents.pop()
                        }
                        var currentParents = updateParentOffsets && parents.slice(0);
                        return updateOffsets && _deferred.when.apply(_renderer2.default, callbackResults).always(function() {
                            that._updateGroupInfoOffsets(groupsInfo, currentParents)
                        })
                    }
                    return foreachGroupsCore(that._groupsInfo, callback, childrenAtFirst, [])
                },
                _updateGroupInfoOffsets: function(groupsInfo, parents) {
                    parents = parents || [];
                    for (var index = 0; index < groupsInfo.length; index++) {
                        var groupInfo = groupsInfo[index];
                        if (groupInfo.data && groupInfo.data.offset !== groupInfo.offset) {
                            groupInfo.offset = groupInfo.data.offset;
                            for (var parentIndex = 0; parentIndex < parents.length; parentIndex++) {
                                parents[parentIndex].offset = groupInfo.offset
                            }
                        }
                    }
                    groupsInfo.sort(function(a, b) {
                        return a.offset - b.offset
                    })
                },
                findGroupInfo: function(path) {
                    var that = this;
                    var groupInfo;
                    var groupsInfo = that._groupsInfo;
                    for (var pathIndex = 0; groupsInfo && pathIndex < path.length; pathIndex++) {
                        groupInfo = findGroupInfoByKey(groupsInfo, path[pathIndex]);
                        groupsInfo = groupInfo && groupInfo.children
                    }
                    return groupInfo && groupInfo.data
                },
                addGroupInfo: function(groupInfoData) {
                    var that = this;
                    var groupInfo;
                    var path = groupInfoData.path;
                    var groupsInfo = that._groupsInfo;
                    for (var pathIndex = 0; pathIndex < path.length; pathIndex++) {
                        groupInfo = findGroupInfoByKey(groupsInfo, path[pathIndex]);
                        if (!groupInfo) {
                            groupInfo = {
                                key: path[pathIndex],
                                offset: groupInfoData.offset,
                                data: {
                                    offset: groupInfoData.offset,
                                    isExpanded: true,
                                    path: path.slice(0, pathIndex + 1)
                                },
                                children: []
                            };
                            var index = getGroupInfoIndexByOffset(groupsInfo, groupInfoData.offset);
                            groupsInfo.splice(index, 0, groupInfo);
                            groupsInfo.hash = groupsInfo.hash || {};
                            groupsInfo.hash[JSON.stringify(groupInfo.key)] = groupInfo
                        }
                        if (pathIndex === path.length - 1) {
                            groupInfo.data = groupInfoData;
                            if (groupInfo.offset !== groupInfoData.offset) {
                                that._updateGroupInfoOffsets(groupsInfo)
                            }
                        }
                        groupsInfo = groupInfo.children
                    }
                },
                allowCollapseAll: function() {
                    return true
                },
                refresh: function(options) {
                    var that = this;
                    var storeLoadOptions = options.storeLoadOptions;
                    var groups = (0, _utils.normalizeSortingInfo)(storeLoadOptions.group || []);
                    var oldGroups = "_group" in that ? (0, _utils.normalizeSortingInfo)(that._group || []) : groups;
                    var groupsCount = Math.min(oldGroups.length, groups.length);
                    that._group = storeLoadOptions.group;
                    for (var groupIndex = 0; groupIndex < groupsCount; groupIndex++) {
                        if (oldGroups[groupIndex].selector !== groups[groupIndex].selector) {
                            groupsCount = groupIndex;
                            break
                        }
                    }
                    if (!groupsCount) {
                        that.reset()
                    } else {
                        cleanGroupsInfo(that._groupsInfo, 0, groupsCount)
                    }
                },
                handleDataLoading: function() {},
                handleDataLoaded: function(options, callBase) {
                    callBase(options)
                },
                handleDataLoadedCore: function(options, callBase) {
                    callBase(options)
                }
            }
        }())
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.master_detail.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MASTER_DETAIL_CELL_CLASS = "dx-master-detail-cell";
        var MASTER_DETAIL_ROW_CLASS = "dx-master-detail-row";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var ROW_LINES_CLASS = "dx-row-lines";
        module.exports = {
            defaultOptions: function() {
                return {
                    masterDetail: {
                        enabled: false,
                        autoExpandAll: false,
                        template: null
                    }
                }
            },
            extenders: {
                controllers: {
                    columns: {
                        _getExpandColumnsCore: function() {
                            var expandColumns = this.callBase();
                            if (this.option("masterDetail.enabled")) {
                                expandColumns.push({
                                    type: "detailExpand",
                                    cellTemplate: _uiGrid_core2.default.getExpandCellTemplate()
                                })
                            }
                            return expandColumns
                        }
                    },
                    data: function() {
                        var initMasterDetail = function(that) {
                            that._expandedItems = [];
                            that._isExpandAll = that.option("masterDetail.autoExpandAll")
                        };
                        return {
                            init: function() {
                                var that = this;
                                initMasterDetail(that);
                                that.callBase()
                            },
                            expandAll: function(groupIndex) {
                                var that = this;
                                if (groupIndex < 0) {
                                    that._isExpandAll = true;
                                    that._expandedItems = [];
                                    that.updateItems()
                                } else {
                                    that.callBase.apply(that, arguments)
                                }
                            },
                            collapseAll: function(groupIndex) {
                                var that = this;
                                if (groupIndex < 0) {
                                    that._isExpandAll = false;
                                    that._expandedItems = [];
                                    that.updateItems()
                                } else {
                                    that.callBase.apply(that, arguments)
                                }
                            },
                            isRowExpanded: function(key) {
                                var that = this;
                                var expandIndex = _uiGrid_core2.default.getIndexByKey(key, that._expandedItems);
                                if (Array.isArray(key)) {
                                    return that.callBase.apply(that, arguments)
                                } else {
                                    return !!(that._isExpandAll ^ (expandIndex >= 0 && that._expandedItems[expandIndex].visible))
                                }
                            },
                            _getRowIndicesForExpand: function(key) {
                                var rowIndex = this.getRowIndexByKey(key);
                                return [rowIndex, rowIndex + 1]
                            },
                            _changeRowExpandCore: function(key) {
                                var that = this;
                                var result;
                                if (Array.isArray(key)) {
                                    result = that.callBase.apply(that, arguments)
                                } else {
                                    var expandIndex = _uiGrid_core2.default.getIndexByKey(key, that._expandedItems);
                                    if (expandIndex >= 0) {
                                        var visible = that._expandedItems[expandIndex].visible;
                                        that._expandedItems[expandIndex].visible = !visible
                                    } else {
                                        that._expandedItems.push({
                                            key: key,
                                            visible: true
                                        });
                                        var editingController = that.getController("editing");
                                        if (editingController) {
                                            editingController.correctEditRowIndexAfterExpand(key)
                                        }
                                    }
                                    that.updateItems({
                                        changeType: "update",
                                        rowIndices: that._getRowIndicesForExpand(key)
                                    });
                                    result = (new _deferred.Deferred).resolve()
                                }
                                return result
                            },
                            _processDataItem: function(data, options) {
                                var that = this;
                                var dataItem = that.callBase.apply(that, arguments);
                                dataItem.isExpanded = that.isRowExpanded(dataItem.key);
                                if (void 0 === options.detailColumnIndex) {
                                    options.detailColumnIndex = -1;
                                    (0, _iterator.each)(options.visibleColumns, function(index, column) {
                                        if ("expand" === column.command && !(0, _type.isDefined)(column.groupIndex)) {
                                            options.detailColumnIndex = index;
                                            return false
                                        }
                                    })
                                }
                                if (options.detailColumnIndex >= 0) {
                                    dataItem.values[options.detailColumnIndex] = dataItem.isExpanded
                                }
                                return dataItem
                            },
                            _processItems: function(items, change) {
                                var that = this;
                                var changeType = change.changeType;
                                var result = [];
                                items = that.callBase.apply(that, arguments);
                                if ("loadingAll" === changeType) {
                                    return items
                                }
                                if ("refresh" === changeType) {
                                    that._expandedItems = (0, _common.grep)(that._expandedItems, function(item) {
                                        return item.visible
                                    })
                                }(0, _iterator.each)(items, function(index, item) {
                                    result.push(item);
                                    var expandIndex = _uiGrid_core2.default.getIndexByKey(item.key, that._expandedItems);
                                    if ("data" === item.rowType && (item.isExpanded || expandIndex >= 0) && !item.isNewRow) {
                                        result.push({
                                            visible: item.isExpanded,
                                            rowType: "detail",
                                            key: item.key,
                                            data: item.data,
                                            values: []
                                        })
                                    }
                                });
                                return result
                            },
                            optionChanged: function(args) {
                                var that = this;
                                var isEnabledChanged;
                                var isAutoExpandAllChanged;
                                if ("masterDetail" === args.name) {
                                    args.name = "dataSource";
                                    switch (args.fullName) {
                                        case "masterDetail":
                                            var value = args.value || {};
                                            var previousValue = args.previousValue || {};
                                            isEnabledChanged = value.enabled !== previousValue.enabled;
                                            isAutoExpandAllChanged = value.autoExpandAll !== previousValue.autoExpandAll;
                                            break;
                                        case "masterDetail.enabled":
                                            isEnabledChanged = true;
                                            break;
                                        case "masterDetail.autoExpandAll":
                                            isAutoExpandAllChanged = true
                                    }
                                    if (isEnabledChanged || isAutoExpandAllChanged) {
                                        initMasterDetail(that)
                                    }
                                }
                                that.callBase(args)
                            }
                        }
                    }(),
                    resizing: {
                        fireContentReadyAction: function() {
                            this.callBase.apply(this, arguments);
                            this._updateParentDataGrids(this.component.$element())
                        },
                        _updateParentDataGrids: function($element) {
                            var _this = this;
                            var $masterDetailRow = $element.closest("." + MASTER_DETAIL_ROW_CLASS);
                            if ($masterDetailRow.length) {
                                (0, _deferred.when)(this._updateMasterDataGrid($masterDetailRow, $element)).done(function() {
                                    _this._updateParentDataGrids($masterDetailRow.parent())
                                })
                            }
                        },
                        _updateMasterDataGrid: function($masterDetailRow, $detailElement) {
                            var masterRowOptions = (0, _renderer2.default)($masterDetailRow).data("options");
                            var masterDataGrid = (0, _renderer2.default)($masterDetailRow).closest("." + this.getWidgetContainerClass()).parent().data("dxDataGrid");
                            if (masterRowOptions && masterDataGrid) {
                                if (masterDataGrid.getView("rowsView").isFixedColumns()) {
                                    this._updateFixedMasterDetailGrids(masterDataGrid, masterRowOptions.rowIndex, $detailElement)
                                } else {
                                    var scrollable = masterDataGrid.getScrollable();
                                    return scrollable && scrollable.update()
                                }
                            }
                        },
                        _updateFixedMasterDetailGrids: function(masterDataGrid, masterRowIndex, $detailElement) {
                            var _this2 = this;
                            var $rows = (0, _renderer2.default)(masterDataGrid.getRowElement(masterRowIndex));
                            if ($rows && 2 === $rows.length && $rows.eq(0).height() !== $rows.eq(1).height()) {
                                var detailElementWidth = $detailElement.width();
                                return masterDataGrid.updateDimensions().done(function() {
                                    var isDetailHorizontalScrollCanBeShown = _this2.option("columnAutoWidth") && true === masterDataGrid.option("scrolling.useNative");
                                    var isDetailGridWidthChanged = isDetailHorizontalScrollCanBeShown && detailElementWidth !== $detailElement.width();
                                    if (isDetailHorizontalScrollCanBeShown && isDetailGridWidthChanged) {
                                        _this2.updateDimensions()
                                    }
                                })
                            }
                        }
                    }
                },
                views: {
                    rowsView: function() {
                        return {
                            _getCellTemplate: function(options) {
                                var that = this;
                                var column = options.column;
                                var editingController = that.getController("editing");
                                var isEditRow = editingController && editingController.isEditRow(options.rowIndex);
                                var template;
                                if ("detail" === column.command && !isEditRow) {
                                    template = that.option("masterDetail.template") || {
                                        allowRenderToDetachedContainer: false,
                                        render: that._getDefaultTemplate(column)
                                    }
                                } else {
                                    template = that.callBase.apply(that, arguments)
                                }
                                return template
                            },
                            _isDetailRow: function(row) {
                                return row && row.rowType && 0 === row.rowType.indexOf("detail")
                            },
                            _createRow: function(row) {
                                var $row = this.callBase(row);
                                if (row && this._isDetailRow(row)) {
                                    this.option("showRowLines") && $row.addClass(ROW_LINES_CLASS);
                                    $row.addClass(MASTER_DETAIL_ROW_CLASS);
                                    if ((0, _type.isDefined)(row.visible)) {
                                        $row.toggle(row.visible)
                                    }
                                }
                                return $row
                            },
                            _renderCells: function($row, options) {
                                var row = options.row;
                                var $detailCell;
                                var visibleColumns = this._columnsController.getVisibleColumns();
                                if (row.rowType && this._isDetailRow(row)) {
                                    if (this._needRenderCell(0, options.columnIndices)) {
                                        $detailCell = this._renderCell($row, {
                                            value: null,
                                            row: row,
                                            rowIndex: row.rowIndex,
                                            column: {
                                                command: "detail"
                                            },
                                            columnIndex: 0
                                        });
                                        $detailCell.addClass(CELL_FOCUS_DISABLED_CLASS).addClass(MASTER_DETAIL_CELL_CLASS).attr("colSpan", visibleColumns.length)
                                    }
                                } else {
                                    this.callBase.apply(this, arguments)
                                }
                            }
                        }
                    }()
                }
            }
        }
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.editor_factory.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _position2 = _interopRequireDefault(_position);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position3 = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _ui = __webpack_require__( /*! ../shared/ui.editor_factory_mixin */ 367);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var EDITOR_INLINE_BLOCK = "dx-editor-inline-block";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var FOCUS_OVERLAY_CLASS = "focus-overlay";
        var CONTENT_CLASS = "content";
        var FOCUSED_ELEMENT_CLASS = "dx-focused";
        var ROW_CLASS = "dx-row";
        var MODULE_NAMESPACE = "dxDataGridEditorFactory";
        var UPDATE_FOCUS_EVENTS = (0, _utils.addNamespace)([_pointer2.default.down, "focusin", _click2.default.name].join(" "), MODULE_NAMESPACE);
        var POINTER_EVENTS_TARGET_CLASS = "dx-pointer-events-target";
        var POINTER_EVENTS_NONE_CLASS = "dx-pointer-events-none";
        var DX_HIDDEN = "dx-hidden";
        var EditorFactory = _uiGrid_core2.default.ViewController.inherit({
            _getFocusedElement: function($dataGridElement) {
                var rowSelector = this.option("focusedRowEnabled") ? "tr[tabindex]:focus" : "tr[tabindex]:not(.dx-data-row):focus";
                var focusedElementSelector = "td[tabindex]:focus, ".concat(rowSelector, ", input:focus, textarea:focus, .dx-lookup-field:focus, .dx-checkbox:focus");
                return $dataGridElement.find(focusedElementSelector)
            },
            _getFocusCellSelector: function() {
                return ".dx-row > td"
            },
            _updateFocusCore: function() {
                var $focus = this._$focusedElement;
                var $dataGridElement = this.component && this.component.$element();
                var $focusCell;
                var hideBorders;
                if ($dataGridElement) {
                    $focus = this._getFocusedElement($dataGridElement);
                    if ($focus.length) {
                        if (!$focus.hasClass(CELL_FOCUS_DISABLED_CLASS) && !$focus.hasClass(ROW_CLASS)) {
                            $focusCell = $focus.closest(this._getFocusCellSelector() + ", ." + CELL_FOCUS_DISABLED_CLASS);
                            hideBorders = $focusCell.get(0) !== $focus.get(0) && $focusCell.hasClass(EDITOR_INLINE_BLOCK);
                            $focus = $focusCell
                        }
                        if ($focus.length && !$focus.hasClass(CELL_FOCUS_DISABLED_CLASS)) {
                            this.focus($focus, hideBorders);
                            return
                        }
                    }
                }
                this.loseFocus()
            },
            _updateFocus: function(e) {
                var that = this;
                var isFocusOverlay = e && e.event && (0, _renderer2.default)(e.event.target).hasClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS));
                that._isFocusOverlay = that._isFocusOverlay || isFocusOverlay;
                clearTimeout(that._updateFocusTimeoutID);
                that._updateFocusTimeoutID = setTimeout(function() {
                    delete that._updateFocusTimeoutID;
                    if (!that._isFocusOverlay) {
                        that._updateFocusCore()
                    }
                    that._isFocusOverlay = false
                })
            },
            _updateFocusOverlaySize: function($element, position) {
                $element.hide();
                var location = _position2.default.calculate($element, (0, _extend.extend)({
                    collision: "fit"
                }, position));
                if (location.h.oversize > 0) {
                    $element.outerWidth($element.outerWidth() - location.h.oversize)
                }
                if (location.v.oversize > 0) {
                    $element.outerHeight($element.outerHeight() - location.v.oversize)
                }
                $element.show()
            },
            callbackNames: function() {
                return ["focused"]
            },
            focus: function($element, hideBorder) {
                var that = this;
                if (void 0 === $element) {
                    return that._$focusedElement
                } else {
                    if ($element) {
                        if (!$element.is(that._$focusedElement)) {
                            that._$focusedElement && that._$focusedElement.removeClass(FOCUSED_ELEMENT_CLASS)
                        }
                        that._$focusedElement = $element;
                        clearTimeout(that._focusTimeoutID);
                        that._focusTimeoutID = setTimeout(function() {
                            delete that._focusTimeoutID;
                            that.renderFocusOverlay($element, hideBorder);
                            $element.addClass(FOCUSED_ELEMENT_CLASS);
                            that.focused.fire($element)
                        })
                    }
                }
            },
            renderFocusOverlay: function($element, hideBorder) {
                var that = this;
                if (!(0, _uiGrid_core3.isElementInCurrentGrid)(this, $element)) {
                    return
                }
                if (!that._$focusOverlay) {
                    that._$focusOverlay = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS) + " " + POINTER_EVENTS_TARGET_CLASS)
                }
                if (hideBorder) {
                    that._$focusOverlay.addClass(DX_HIDDEN)
                } else {
                    if ($element.length) {
                        var align = _browser2.default.msie ? "left bottom" : _browser2.default.mozilla ? "right bottom" : "left top";
                        var $content = $element.closest("." + that.addWidgetPrefix(CONTENT_CLASS));
                        var elemCoord = (0, _position3.getBoundingRect)($element.get(0));
                        that._$focusOverlay.removeClass(DX_HIDDEN).appendTo($content).outerWidth(elemCoord.right - elemCoord.left + 1).outerHeight(elemCoord.bottom - elemCoord.top + 1);
                        var focusOverlayPosition = {
                            precise: true,
                            my: align,
                            at: align,
                            of: $element,
                            boundary: $content.length && $content
                        };
                        that._updateFocusOverlaySize(that._$focusOverlay, focusOverlayPosition);
                        _position2.default.setup(that._$focusOverlay, focusOverlayPosition);
                        that._$focusOverlay.css("visibility", "visible")
                    }
                }
            },
            resize: function() {
                var $focusedElement = this._$focusedElement;
                if ($focusedElement) {
                    this.focus($focusedElement)
                }
            },
            loseFocus: function() {
                this._$focusedElement && this._$focusedElement.removeClass(FOCUSED_ELEMENT_CLASS);
                this._$focusedElement = null;
                this._$focusOverlay && this._$focusOverlay.addClass(DX_HIDDEN)
            },
            init: function() {
                this.createAction("onEditorPreparing", {
                    excludeValidators: ["disabled", "readOnly"],
                    category: "rendering"
                });
                this.createAction("onEditorPrepared", {
                    excludeValidators: ["disabled", "readOnly"],
                    category: "rendering"
                });
                this._updateFocusHandler = this._updateFocusHandler || this.createAction(this._updateFocus.bind(this));
                _events_engine2.default.on(_dom_adapter2.default.getDocument(), UPDATE_FOCUS_EVENTS, this._updateFocusHandler);
                this._attachContainerEventHandlers()
            },
            _attachContainerEventHandlers: function() {
                var that = this;
                var $container = that.component && that.component.$element();
                if ($container) {
                    _events_engine2.default.on($container, (0, _utils.addNamespace)("keydown", MODULE_NAMESPACE), function(e) {
                        if ("tab" === (0, _utils.normalizeKeyName)(e)) {
                            that._updateFocusHandler(e)
                        }
                    })
                }
            },
            _focusOverlayEventProxy: function(e) {
                var $target = (0, _renderer2.default)(e.target);
                var $currentTarget = (0, _renderer2.default)(e.currentTarget);
                var needProxy = $target.hasClass(POINTER_EVENTS_TARGET_CLASS) || $target.hasClass(POINTER_EVENTS_NONE_CLASS);
                if (!needProxy || $currentTarget.hasClass(DX_HIDDEN)) {
                    return
                }
                $currentTarget.addClass(DX_HIDDEN);
                var element = $target.get(0).ownerDocument.elementFromPoint(e.clientX, e.clientY);
                (0, _utils.fireEvent)({
                    originalEvent: e,
                    target: element
                });
                e.stopPropagation();
                $currentTarget.removeClass(DX_HIDDEN);
                if (e.type === _click2.default.name && "INPUT" === element.tagName) {
                    _events_engine2.default.trigger((0, _renderer2.default)(element), "focus")
                }
            },
            dispose: function() {
                clearTimeout(this._focusTimeoutID);
                clearTimeout(this._updateFocusTimeoutID);
                _events_engine2.default.off(_dom_adapter2.default.getDocument(), UPDATE_FOCUS_EVENTS, this._updateFocusHandler)
            }
        }).include(_ui2.default);
        module.exports = {
            defaultOptions: function() {
                return {}
            },
            controllers: {
                editorFactory: EditorFactory
            }
        }
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/shared/ui.editor_factory_mixin.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var isWrapped = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94).isWrapped;
        var compileGetter = __webpack_require__( /*! ../../core/utils/data */ 20).compileGetter;
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 11).getPublicElement;
        var normalizeDataSourceOptions = __webpack_require__( /*! ../../data/data_source/utils */ 64).normalizeDataSourceOptions;
        var normalizeKeyName = __webpack_require__( /*! ../../events/utils */ 8).normalizeKeyName;
        __webpack_require__( /*! ../text_box */ 88);
        __webpack_require__( /*! ../number_box */ 121);
        __webpack_require__( /*! ../check_box */ 120);
        __webpack_require__( /*! ../select_box */ 97);
        __webpack_require__( /*! ../date_box */ 198);
        var CHECKBOX_SIZE_CLASS = "checkbox-size";
        var EDITOR_INLINE_BLOCK = "dx-editor-inline-block";
        var EditorFactoryMixin = function() {
            var getResultConfig = function(config, options) {
                return extend(config, {
                    readOnly: options.readOnly,
                    placeholder: options.placeholder,
                    inputAttr: {
                        id: options.id
                    },
                    tabIndex: options.tabIndex
                }, options.editorOptions)
            };
            var checkEnterBug = function() {
                return browser.msie || browser.mozilla || devices.real().ios
            };
            var getTextEditorConfig = function(options) {
                var data = {};
                var isEnterBug = checkEnterBug();
                var sharedData = options.sharedData || data;
                return getResultConfig({
                    placeholder: options.placeholder,
                    width: options.width,
                    value: options.value,
                    onValueChanged: function(e) {
                        var needDelayedUpdate = "filterRow" === options.parentType || "searchPanel" === options.parentType;
                        var isInputOrKeyUpEvent = e.event && ("input" === e.event.type || "keyup" === e.event.type);
                        var updateValue = function(e, notFireEvent) {
                            options && options.setValue(e.value, notFireEvent)
                        };
                        clearTimeout(data.valueChangeTimeout);
                        if (isInputOrKeyUpEvent && needDelayedUpdate) {
                            sharedData.valueChangeTimeout = data.valueChangeTimeout = setTimeout(function() {
                                updateValue(e, data.valueChangeTimeout !== sharedData.valueChangeTimeout)
                            }, typeUtils.isDefined(options.updateValueTimeout) ? options.updateValueTimeout : 0)
                        } else {
                            updateValue(e)
                        }
                    },
                    onKeyDown: function(e) {
                        if (isEnterBug && "enter" === normalizeKeyName(e.event)) {
                            eventsEngine.trigger($(e.component._input()), "change")
                        }
                    },
                    valueChangeEvent: "change" + ("filterRow" === options.parentType ? " keyup input" : "")
                }, options)
            };
            var prepareDateBox = function(options) {
                options.editorName = "dxDateBox";
                options.editorOptions = getResultConfig({
                    value: options.value,
                    onValueChanged: function(args) {
                        options.setValue(args.value)
                    },
                    onKeyDown: function(e) {
                        if (checkEnterBug() && "enter" === normalizeKeyName(e.event)) {
                            e.component.blur();
                            e.component.focus()
                        }
                    },
                    displayFormat: options.format,
                    type: options.dataType,
                    dateSerializationFormat: null,
                    width: "filterBuilder" === options.parentType ? void 0 : "auto"
                }, options)
            };
            var prepareTextBox = function(options) {
                var config = getTextEditorConfig(options);
                var isSearching = "searchPanel" === options.parentType;
                var toString = function(value) {
                    return typeUtils.isDefined(value) ? value.toString() : ""
                };
                if (options.editorType && "dxTextBox" !== options.editorType) {
                    config.value = options.value
                } else {
                    config.value = toString(options.value)
                }
                config.valueChangeEvent += isSearching ? " keyup input search" : "";
                config.mode = config.mode || (isSearching ? "search" : "text");
                options.editorName = "dxTextBox";
                options.editorOptions = config
            };
            var prepareNumberBox = function(options) {
                var config = getTextEditorConfig(options);
                config.value = typeUtils.isDefined(options.value) ? options.value : null;
                options.editorName = "dxNumberBox";
                options.editorOptions = config
            };
            var prepareBooleanEditor = function(options) {
                if ("filterRow" === options.parentType || "filterBuilder" === options.parentType) {
                    prepareSelectBox(extend(options, {
                        lookup: {
                            displayExpr: function(data) {
                                if (true === data) {
                                    return options.trueText || "true"
                                } else {
                                    if (false === data) {
                                        return options.falseText || "false"
                                    }
                                }
                            },
                            dataSource: [true, false]
                        }
                    }))
                } else {
                    prepareCheckBox(options)
                }
            };

            function watchLookupDataSource(options) {
                if (options.row && options.row.watch && "dataRow" === options.parentType) {
                    var editorOptions = options.editorOptions || {};
                    options.editorOptions = editorOptions;
                    var selectBox;
                    var onInitialized = editorOptions.onInitialized;
                    editorOptions.onInitialized = function(e) {
                        onInitialized && onInitialized.apply(this, arguments);
                        selectBox = e.component;
                        selectBox.on("disposing", stopWatch)
                    };
                    var dataSource;
                    var stopWatch = options.row.watch(function() {
                        dataSource = options.lookup.dataSource(options.row);
                        return dataSource && dataSource.filter
                    }, function() {
                        selectBox.option("dataSource", dataSource)
                    }, function(row) {
                        options.row = row
                    })
                }
            }

            function prepareSelectBox(options) {
                var lookup = options.lookup;
                var displayGetter;
                var dataSource;
                var postProcess;
                var isFilterRow = "filterRow" === options.parentType;
                if (lookup) {
                    displayGetter = compileGetter(lookup.displayExpr);
                    dataSource = lookup.dataSource;
                    if (typeUtils.isFunction(dataSource) && !isWrapped(dataSource)) {
                        dataSource = dataSource(options.row || {});
                        watchLookupDataSource(options)
                    }
                    if (typeUtils.isObject(dataSource) || Array.isArray(dataSource)) {
                        dataSource = normalizeDataSourceOptions(dataSource);
                        if (isFilterRow) {
                            postProcess = dataSource.postProcess;
                            dataSource.postProcess = function(items) {
                                if (0 === this.pageIndex()) {
                                    items = items.slice(0);
                                    items.unshift(null)
                                }
                                if (postProcess) {
                                    return postProcess.call(this, items)
                                }
                                return items
                            }
                        }
                    }
                    var allowClearing = Boolean(lookup.allowClearing && !isFilterRow);
                    options.editorName = "dxSelectBox";
                    options.editorOptions = getResultConfig({
                        searchEnabled: true,
                        value: options.value,
                        valueExpr: options.lookup.valueExpr,
                        searchExpr: options.lookup.searchExpr || options.lookup.displayExpr,
                        allowClearing: allowClearing,
                        showClearButton: allowClearing,
                        displayExpr: function(data) {
                            if (null === data) {
                                return options.showAllText
                            }
                            return displayGetter(data)
                        },
                        dataSource: dataSource,
                        onValueChanged: function(e) {
                            var params = [e.value];
                            !isFilterRow && params.push(e.component.option("text"));
                            options.setValue.apply(this, params)
                        }
                    }, options)
                }
            }

            function prepareCheckBox(options) {
                options.editorName = "dxCheckBox";
                options.editorOptions = getResultConfig({
                    value: typeUtils.isDefined(options.value) ? options.value : void 0,
                    hoverStateEnabled: !options.readOnly,
                    focusStateEnabled: !options.readOnly,
                    activeStateEnabled: false,
                    onValueChanged: function(e) {
                        options.setValue && options.setValue(e.value, e)
                    }
                }, options)
            }
            var createEditorCore = function(that, options) {
                var $editorElement = $(options.editorElement);
                if (options.editorName && options.editorOptions && $editorElement[options.editorName]) {
                    if ("dxCheckBox" === options.editorName) {
                        if (!options.isOnForm) {
                            $editorElement.addClass(that.addWidgetPrefix(CHECKBOX_SIZE_CLASS));
                            $editorElement.parent().addClass(EDITOR_INLINE_BLOCK)
                        }
                    }
                    that._createComponent($editorElement, options.editorName, options.editorOptions);
                    if ("dxTextBox" === options.editorName) {
                        $editorElement.dxTextBox("instance").registerKeyHandler("enter", noop)
                    }
                    if ("dxDateBox" === options.editorName) {
                        $editorElement.dxDateBox("instance").registerKeyHandler("enter", function() {
                            return true
                        })
                    }
                    if ("dxTextArea" === options.editorName) {
                        $editorElement.dxTextArea("instance").registerKeyHandler("enter", function(event) {
                            if ("enter" === normalizeKeyName(event) && !event.ctrlKey && !event.shiftKey) {
                                event.stopPropagation()
                            }
                        })
                    }
                }
            };
            return {
                createEditor: function($container, options) {
                    options.cancel = false;
                    options.editorElement = getPublicElement($container);
                    if (!typeUtils.isDefined(options.tabIndex)) {
                        options.tabIndex = this.option("tabIndex")
                    }
                    if (options.lookup) {
                        prepareSelectBox(options)
                    } else {
                        switch (options.dataType) {
                            case "date":
                            case "datetime":
                                prepareDateBox(options);
                                break;
                            case "boolean":
                                prepareBooleanEditor(options);
                                break;
                            case "number":
                                prepareNumberBox(options);
                                break;
                            default:
                                prepareTextBox(options)
                        }
                    }
                    var editorName = options.editorName;
                    this.executeAction("onEditorPreparing", options);
                    if (options.cancel) {
                        return
                    } else {
                        if ("dataRow" === options.parentType && options.editorType && editorName === options.editorName) {
                            options.editorName = options.editorType
                        }
                    }
                    if ("dataRow" === options.parentType && !options.isOnForm && !typeUtils.isDefined(options.editorOptions.showValidationMark)) {
                        options.editorOptions.showValidationMark = false
                    }
                    createEditorCore(this, options);
                    this.executeAction("onEditorPrepared", options)
                }
            }
        }();
        module.exports = EditorFactoryMixin
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.editing.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _double_click = __webpack_require__( /*! ../../events/double_click */ 137);
        var _double_click2 = _interopRequireDefault(_double_click);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _dialog = __webpack_require__( /*! ../dialog */ 223);
        var _dialog2 = _interopRequireDefault(_dialog);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _form = __webpack_require__( /*! ../form */ 144);
        var _form2 = _interopRequireDefault(_form);
        var _hold = __webpack_require__( /*! ../../events/hold */ 95);
        var _hold2 = _interopRequireDefault(_hold);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _deferred2 = _interopRequireDefault(_deferred);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _icon2 = _interopRequireDefault(_icon);
        var _ui3 = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var _ui4 = _interopRequireDefault(_ui3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var EDIT_FORM_CLASS = "edit-form";
        var EDIT_FORM_ITEM_CLASS = "edit-form-item";
        var FOCUS_OVERLAY_CLASS = "focus-overlay";
        var READONLY_CLASS = "readonly";
        var EDIT_POPUP_CLASS = "edit-popup";
        var FORM_BUTTONS_CONTAINER_CLASS = "form-buttons-container";
        var ADD_ROW_BUTTON_CLASS = "addrow-button";
        var DROPDOWN_EDITOR_OVERLAY_CLASS = "dx-dropdowneditor-overlay";
        var LINK_CLASS = "dx-link";
        var EDITOR_CELL_CLASS = "dx-editor-cell";
        var ROW_SELECTED = "dx-selection";
        var EDIT_ROW = "dx-edit-row";
        var EDIT_BUTTON_CLASS = "dx-edit-button";
        var COMMAND_EDIT_CLASS = "dx-command-edit";
        var COMMAND_EDIT_WITH_ICONS_CLASS = COMMAND_EDIT_CLASS + "-with-icons";
        var SCROLLABLE_CONTAINER_CLASS = "dx-scrollable-container";
        var BUTTON_CLASS = "dx-button";
        var INSERT_INDEX = "__DX_INSERT_INDEX__";
        var ROW_CLASS = "dx-row";
        var ROW_REMOVED = "dx-row-removed";
        var ROW_INSERTED = "dx-row-inserted";
        var ROW_MODIFIED = "dx-row-modified";
        var CELL_MODIFIED = "dx-cell-modified";
        var CELL_HIGHLIGHT_OUTLINE = "dx-highlight-outline";
        var EDITING_NAMESPACE = "dxDataGridEditing";
        var DATA_ROW_CLASS = "dx-data-row";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var EDITORS_INPUT_SELECTOR = "input:not([type='hidden'])";
        var FOCUSABLE_ELEMENT_SELECTOR = "[tabindex], " + EDITORS_INPUT_SELECTOR;
        var EDIT_MODE_BATCH = "batch";
        var EDIT_MODE_ROW = "row";
        var EDIT_MODE_CELL = "cell";
        var EDIT_MODE_FORM = "form";
        var EDIT_MODE_POPUP = "popup";
        var DATA_EDIT_DATA_INSERT_TYPE = "insert";
        var DATA_EDIT_DATA_UPDATE_TYPE = "update";
        var DATA_EDIT_DATA_REMOVE_TYPE = "remove";
        var POINTER_EVENTS_TARGET_CLASS = "dx-pointer-events-target";
        var DEFAULT_START_EDIT_ACTION = "click";
        var EDIT_MODES = [EDIT_MODE_BATCH, EDIT_MODE_ROW, EDIT_MODE_CELL, EDIT_MODE_FORM, EDIT_MODE_POPUP];
        var ROW_BASED_MODES = [EDIT_MODE_ROW, EDIT_MODE_FORM, EDIT_MODE_POPUP];
        var CELL_BASED_MODES = [EDIT_MODE_BATCH, EDIT_MODE_CELL];
        var FORM_BASED_MODES = [EDIT_MODE_FORM, EDIT_MODE_POPUP];
        var MODES_WITH_DELAYED_FOCUS = [EDIT_MODE_ROW, EDIT_MODE_FORM];
        var TARGET_COMPONENT_NAME = "targetComponent";
        var EDIT_LINK_CLASS = {
            save: "dx-link-save",
            cancel: "dx-link-cancel",
            edit: "dx-link-edit",
            undelete: "dx-link-undelete",
            "delete": "dx-link-delete",
            add: "dx-link-add"
        };
        var EDIT_ICON_CLASS = {
            save: "save",
            cancel: "revert",
            edit: "edit",
            undelete: "revert",
            "delete": "trash",
            add: "add"
        };
        var METHOD_NAMES = {
            edit: "editRow",
            "delete": "deleteRow",
            undelete: "undeleteRow",
            save: "saveEditData",
            cancel: "cancelEditData",
            add: "addRowByRowIndex"
        };
        var ACTION_OPTION_NAMES = {
            add: "allowAdding",
            edit: "allowUpdating",
            "delete": "allowDeleting"
        };
        var BUTTON_NAMES = ["edit", "save", "cancel", "delete", "undelete"];
        var EDITING_POPUP_OPTION_NAME = "editing.popup";
        var createFailureHandler = function(deferred) {
            return function(arg) {
                var error = arg instanceof Error ? arg : new Error(arg && String(arg) || "Unknown error");
                deferred.reject(error)
            }
        };
        var _getEditMode = function(that) {
            var editMode = that.option("editing.mode");
            if (EDIT_MODES.indexOf(editMode) !== -1) {
                return editMode
            }
            return EDIT_MODE_ROW
        };
        var _isRowEditMode = function(that) {
            var editMode = _getEditMode(that);
            return ROW_BASED_MODES.indexOf(editMode) !== -1
        };
        var EditingController = _uiGrid_core2.default.ViewController.inherit(function() {
            var getDefaultEditorTemplate = function(that) {
                return function(container, options) {
                    var $editor = (0, _renderer2.default)("<div>").appendTo(container);
                    that.getController("editorFactory").createEditor($editor, (0, _extend.extend)({}, options.column, {
                        value: options.value,
                        setValue: options.setValue,
                        row: options.row,
                        parentType: "dataRow",
                        width: null,
                        readOnly: !options.setValue,
                        isOnForm: options.isOnForm,
                        id: options.id
                    }))
                }
            };
            var getEditingTexts = function(options) {
                var editingTexts = options.component.option("editing.texts") || {};
                return {
                    save: editingTexts.saveRowChanges,
                    cancel: editingTexts.cancelRowChanges,
                    edit: editingTexts.editRow,
                    undelete: editingTexts.undeleteRow,
                    "delete": editingTexts.deleteRow,
                    add: editingTexts.addRowToNode
                }
            };
            var getButtonIndex = function(buttons, name) {
                var result = -1;
                buttons.some(function(button, index) {
                    if (getButtonName(button) === name) {
                        result = index;
                        return true
                    }
                });
                return result
            };

            function getButtonName(button) {
                return _type2.default.isObject(button) ? button.name : button
            }
            var getEditorType = function(item) {
                var column = item.column;
                return item.isCustomEditorType ? item.editorType : column.formItem && column.formItem.editorType
            };
            var forEachFormItems = function forEachFormItems(items, callBack) {
                items.forEach(function(item) {
                    if (item.items || item.tabs) {
                        forEachFormItems(item.items || item.tabs, callBack)
                    } else {
                        callBack(item)
                    }
                })
            };
            return {
                init: function() {
                    var that = this;
                    that._editRowIndex = -1;
                    that._editData = [];
                    that._editColumnIndex = -1;
                    that._columnsController = that.getController("columns");
                    that._dataController = that.getController("data");
                    that._rowsView = that.getView("rowsView");
                    that._editForm = null;
                    that._updateEditFormDeferred = null;
                    that._lastOperation = null;
                    if (that._deferreds) {
                        that._deferreds.forEach(function(d) {
                            return d.reject("cancel")
                        })
                    }
                    that._deferreds = [];
                    if (!that._dataChangedHandler) {
                        that._dataChangedHandler = that._handleDataChanged.bind(that);
                        that._dataController.changed.add(that._dataChangedHandler)
                    }
                    if (!that._saveEditorHandler) {
                        that.createAction("onInitNewRow", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowInserting", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowInserted", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onEditingStart", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowUpdating", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowUpdated", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowRemoving", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        that.createAction("onRowRemoved", {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        var $pointerDownTarget;
                        that._pointerDownEditorHandler = function(e) {
                            return $pointerDownTarget = (0, _renderer2.default)(e.target)
                        };
                        that._saveEditorHandler = that.createAction(function(e) {
                            var event = e.event;
                            var $target = (0, _renderer2.default)(event.target);
                            var targetComponent = event[TARGET_COMPONENT_NAME];
                            if ($pointerDownTarget && $pointerDownTarget.is("input") && !$pointerDownTarget.is($target)) {
                                return
                            }

                            function checkEditorPopup($element) {
                                return $element && !!$element.closest(".".concat(DROPDOWN_EDITOR_OVERLAY_CLASS)).length
                            }
                            if (!_isRowEditMode(that) && !that._editCellInProgress) {
                                var isEditorPopup = checkEditorPopup($target) || checkEditorPopup($pointerDownTarget);
                                var isDomElement = !!$target.closest((0, _window.getWindow)().document).length;
                                var isAnotherComponent = targetComponent && targetComponent !== that.component;
                                var isAddRowButton = !!$target.closest(".".concat(that.addWidgetPrefix(ADD_ROW_BUTTON_CLASS))).length;
                                var isFocusOverlay = $target.hasClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS));
                                var isCellEditMode = _getEditMode(that) === EDIT_MODE_CELL;
                                if (!isEditorPopup && !isFocusOverlay && !(isAddRowButton && isCellEditMode && that.isEditing()) && (isDomElement || isAnotherComponent)) {
                                    that._closeEditItem.bind(that)($target)
                                }
                            }
                        });
                        _events_engine2.default.on(_dom_adapter2.default.getDocument(), _pointer2.default.down, that._pointerDownEditorHandler);
                        _events_engine2.default.on(_dom_adapter2.default.getDocument(), _click2.default.name, that._saveEditorHandler)
                    }
                    that._updateEditColumn();
                    that._updateEditButtons()
                },
                getUpdatedData: function(data) {
                    var key = this._dataController.keyOf(data);
                    var editData = this._editData;
                    var editIndex = (0, _uiGrid_core3.getIndexByKey)(key, editData);
                    if (editData[editIndex]) {
                        return (0, _uiGrid_core3.createObjectWithChanges)(data, editData[editIndex].data)
                    }
                    return data
                },
                getInsertedData: function() {
                    return this._editData.filter(function(editData) {
                        return editData.data && editData.type === DATA_EDIT_DATA_INSERT_TYPE
                    }).map(function(editData) {
                        return editData.data
                    })
                },
                getRemovedData: function() {
                    return this._editData.filter(function(editData) {
                        return editData.oldData && editData.type === DATA_EDIT_DATA_REMOVE_TYPE
                    }).map(function(editData) {
                        return editData.oldData
                    })
                },
                _fireDataErrorOccurred: function(arg) {
                    if ("cancel" === arg) {
                        return
                    }
                    var $popupContent = this.getPopupContent();
                    this._dataController.dataErrorOccurred.fire(arg, $popupContent)
                },
                _needToCloseEditableCell: function($targetElement) {
                    var $element = this.component.$element();
                    var result = this.isEditing();
                    var isCurrentComponentElement = !$element || !!$targetElement.closest($element).length;
                    if (isCurrentComponentElement) {
                        var isDataRow = $targetElement.closest("." + DATA_ROW_CLASS).length;
                        if (isDataRow) {
                            var rowsView = this.getView("rowsView");
                            var $targetCell = $targetElement.closest("." + ROW_CLASS + "> td");
                            var rowIndex = rowsView.getRowIndex($targetCell.parent());
                            var columnIndex = rowsView.getCellElements(rowIndex).index($targetCell);
                            var visibleColumns = this._columnsController.getVisibleColumns();
                            var allowEditing = visibleColumns[columnIndex] && visibleColumns[columnIndex].allowEditing;
                            result = result && !allowEditing && !this.isEditCell(rowIndex, columnIndex)
                        }
                    }
                    return result
                },
                _closeEditItem: function($targetElement) {
                    if (this._needToCloseEditableCell($targetElement)) {
                        this.closeEditCell()
                    }
                },
                _handleDataChanged: function(args) {
                    var that = this;
                    var editForm = that._editForm;
                    if ("standard" === that.option("scrolling.mode")) {
                        that.resetRowAndPageIndices()
                    }
                    if ("prepend" === args.changeType) {
                        (0, _iterator.each)(that._editData, function(_, editData) {
                            editData.rowIndex += args.items.length
                        })
                    }
                    if ("refresh" === args.changeType && _getEditMode(that) === EDIT_MODE_POPUP && editForm && editForm.option("visible")) {
                        this._repaintEditPopup()
                    }
                },
                _isDefaultButtonVisible: function(button, options) {
                    var result = true;
                    var isRowMode = _isRowEditMode(this);
                    var isEditRow = options.row && options.row.rowIndex === this._getVisibleEditRowIndex() && isRowMode;
                    switch (button.name) {
                        case "edit":
                            result = !isEditRow && this.allowUpdating(options) && isRowMode;
                            break;
                        case "save":
                        case "cancel":
                            result = isEditRow;
                            break;
                        case "delete":
                            result = !isEditRow && this.allowDeleting(options) && !options.row.removed;
                            break;
                        case "undelete":
                            result = this.allowDeleting(options) && options.row.removed
                    }
                    return result
                },
                _isButtonVisible: function(button, options) {
                    var visible = button.visible;
                    if (!_type2.default.isDefined(visible)) {
                        return this._isDefaultButtonVisible(button, options)
                    }
                    return _type2.default.isFunction(visible) ? visible.call(button, {
                        component: options.component,
                        row: options.row,
                        column: options.column
                    }) : visible
                },
                _getButtonConfig: function(button, options) {
                    var _this = this;
                    var config = _type2.default.isObject(button) ? button : {};
                    var buttonName = getButtonName(button);
                    var editingTexts = getEditingTexts(options);
                    var methodName = METHOD_NAMES[buttonName];
                    var editingOptions = this.option("editing");
                    var actionName = ACTION_OPTION_NAMES[buttonName];
                    var allowAction = actionName ? editingOptions[actionName] : true;
                    return (0, _extend.extend)({
                        name: buttonName,
                        text: editingTexts[buttonName],
                        cssClass: EDIT_LINK_CLASS[buttonName],
                        onClick: function(e) {
                            var event = e.event;
                            event.stopPropagation();
                            event.preventDefault();
                            setTimeout(function() {
                                options.row && allowAction && _this[methodName] && _this[methodName](options.row.rowIndex)
                            })
                        }
                    }, config)
                },
                _getEditingButtons: function(options) {
                    var _this2 = this;
                    var buttonIndex;
                    var haveCustomButtons = !!options.column.buttons;
                    var buttons = (options.column.buttons || []).slice();
                    if (haveCustomButtons) {
                        buttonIndex = getButtonIndex(buttons, "edit");
                        if (buttonIndex >= 0) {
                            if (getButtonIndex(buttons, "save") < 0) {
                                buttons.splice(buttonIndex + 1, 0, "save")
                            }
                            if (getButtonIndex(buttons, "cancel") < 0) {
                                buttons.splice(getButtonIndex(buttons, "save") + 1, 0, "cancel")
                            }
                        }
                        buttonIndex = getButtonIndex(buttons, "delete");
                        if (buttonIndex >= 0 && getButtonIndex(buttons, "undelete") < 0) {
                            buttons.splice(buttonIndex + 1, 0, "undelete")
                        }
                    } else {
                        buttons = BUTTON_NAMES.slice()
                    }
                    return buttons.map(function(button) {
                        return _this2._getButtonConfig(button, options)
                    })
                },
                _renderEditingButtons: function($container, buttons, options) {
                    var _this3 = this;
                    buttons.forEach(function(button) {
                        if (_this3._isButtonVisible(button, options)) {
                            _this3._createButton($container, button, options)
                        }
                    })
                },
                _getEditCommandCellTemplate: function() {
                    var _this4 = this;
                    return function(container, options) {
                        var $container = (0, _renderer2.default)(container);
                        if ("data" === options.rowType) {
                            options.rtlEnabled = _this4.option("rtlEnabled");
                            var buttons = _this4._getEditingButtons(options);
                            _this4._renderEditingButtons($container, buttons, options);
                            options.watch && options.watch(function() {
                                return buttons.map(function(button) {
                                    return _this4._isButtonVisible(button, options)
                                })
                            }, function() {
                                $container.empty();
                                _this4._renderEditingButtons($container, buttons, options)
                            })
                        } else {
                            (0, _uiGrid_core3.setEmptyText)($container)
                        }
                    }
                },
                correctEditRowIndexAfterExpand: function(key) {
                    if (this._editRowIndex > this._dataController.getRowIndexByKey(key)) {
                        this._editRowIndex++
                    }
                },
                correctEditRowIndex: function(getRowIndexCorrection) {
                    this._editRowIndex += getRowIndexCorrection(this._getVisibleEditRowIndex())
                },
                isRowEditMode: function() {
                    return _isRowEditMode(this)
                },
                isFormEditMode: function() {
                    var editMode = _getEditMode(this);
                    return FORM_BASED_MODES.indexOf(editMode) !== -1
                },
                isCellOrBatchEditMode: function() {
                    var editMode = this.getEditMode();
                    return editMode === EDIT_MODE_BATCH || editMode === EDIT_MODE_CELL
                },
                getEditMode: function() {
                    return _getEditMode(this)
                },
                getFirstEditableColumnIndex: function() {
                    var columnsController = this.getController("columns");
                    var firstFormItem = this._firstFormItem;
                    var columnIndex;
                    if (_getEditMode(this) === EDIT_MODE_FORM && firstFormItem) {
                        var $editFormElements = this._rowsView.getCellElements(this._editRowIndex);
                        columnIndex = this._rowsView._getEditFormEditorVisibleIndex($editFormElements, firstFormItem.column)
                    } else {
                        var visibleColumns = columnsController.getVisibleColumns();
                        (0, _iterator.each)(visibleColumns, function(index, column) {
                            if (column.allowEditing) {
                                columnIndex = index;
                                return false
                            }
                        })
                    }
                    return columnIndex
                },
                getFirstEditableCellInRow: function(rowIndex) {
                    var rowsView = this.getView("rowsView");
                    return rowsView && rowsView._getCellElement(rowIndex ? rowIndex : 0, this.getFirstEditableColumnIndex())
                },
                getFocusedCellInRow: function(rowIndex) {
                    return this.getFirstEditableCellInRow(rowIndex)
                },
                getIndexByKey: function(key, items) {
                    return (0, _uiGrid_core3.getIndexByKey)(key, items)
                },
                hasChanges: function(rowIndex) {
                    var that = this;
                    var result = false;
                    for (var i = 0; i < that._editData.length; i++) {
                        if (that._editData[i].type && (!_type2.default.isDefined(rowIndex) || that._dataController.getRowIndexByKey(that._editData[i].key) === rowIndex)) {
                            result = true;
                            break
                        }
                    }
                    return result
                },
                dispose: function() {
                    this.callBase();
                    clearTimeout(this._inputFocusTimeoutID);
                    _events_engine2.default.off(_dom_adapter2.default.getDocument(), _pointer2.default.down, this._pointerDownEditorHandler);
                    _events_engine2.default.off(_dom_adapter2.default.getDocument(), _click2.default.name, this._saveEditorHandler)
                },
                optionChanged: function(args) {
                    if ("editing" === args.name) {
                        var fullName = args.fullName;
                        var editPopup = this._editPopup;
                        if (fullName && 0 === fullName.indexOf(EDITING_POPUP_OPTION_NAME)) {
                            if (editPopup) {
                                var popupOptionName = fullName.slice(EDITING_POPUP_OPTION_NAME.length + 1);
                                if (popupOptionName) {
                                    editPopup.option(popupOptionName, args.value)
                                } else {
                                    editPopup.option(args.value)
                                }
                            }
                        } else {
                            if (editPopup && editPopup.option("visible") && 0 === fullName.indexOf("editing.form")) {
                                this._repaintEditPopup()
                            } else {
                                this.init()
                            }
                        }
                        args.handled = true
                    } else {
                        this.callBase(args)
                    }
                },
                publicMethods: function() {
                    return ["insertRow", "addRow", "removeRow", "deleteRow", "undeleteRow", "editRow", "editCell", "closeEditCell", "saveEditData", "cancelEditData", "hasEditData"]
                },
                refresh: function(isPageChanged) {
                    var editMode = _getEditMode(this);
                    var needResetIndexes = editMode === EDIT_MODE_BATCH || isPageChanged && "virtual" !== this.option("scrolling.mode");
                    if (editMode !== EDIT_MODE_BATCH && editMode !== EDIT_MODE_CELL) {
                        this.init()
                    } else {
                        if (needResetIndexes) {
                            this._editRowIndex = -1;
                            this._editColumnIndex = -1
                        }
                    }
                },
                isEditing: function() {
                    return this._editRowIndex > -1
                },
                isEditRow: function(rowIndex) {
                    var editMode = _getEditMode(this);
                    return this._getVisibleEditRowIndex() === rowIndex && ROW_BASED_MODES.indexOf(editMode) !== -1
                },
                getEditRowKey: function() {
                    var items = this._dataController.items();
                    var item = items[this._getVisibleEditRowIndex()];
                    return item && item.key
                },
                getEditRowIndex: function() {
                    return this._getVisibleEditRowIndex()
                },
                getEditFormRowIndex: function() {
                    var editMode = _getEditMode(this);
                    return editMode === EDIT_MODE_FORM || editMode === EDIT_MODE_POPUP ? this._getVisibleEditRowIndex() : -1
                },
                isEditCell: function(visibleRowIndex, columnIndex) {
                    var hasEditData = !!(Array.isArray(this._editData) && this._editData.length);
                    return hasEditData && this._getVisibleEditRowIndex() === visibleRowIndex && this._editColumnIndex === columnIndex
                },
                getPopupContent: function() {
                    var editMode = _getEditMode(this);
                    var popupVisible = this._editPopup && this._editPopup.option("visible");
                    if (editMode === EDIT_MODE_POPUP && popupVisible) {
                        return this._$popupContent
                    }
                },
                getEditForm: function() {
                    return this._editForm
                },
                _needInsertItem: function(editData, changeType) {
                    var that = this;
                    var dataSource = that._dataController.dataSource();
                    var scrollingMode = that.option("scrolling.mode");
                    var pageIndex = dataSource.pageIndex();
                    var beginPageIndex = dataSource.beginPageIndex ? dataSource.beginPageIndex() : pageIndex;
                    var endPageIndex = dataSource.endPageIndex ? dataSource.endPageIndex() : pageIndex;
                    if ("standard" !== scrollingMode) {
                        switch (changeType) {
                            case "append":
                                return editData.key.pageIndex === endPageIndex;
                            case "prepend":
                                return editData.key.pageIndex === beginPageIndex;
                            case "refresh":
                                editData.key.rowIndex = 0;
                                editData.key.dataRowIndex = 0;
                                editData.key.pageIndex = 0;
                                break;
                            default:
                                return editData.key.pageIndex >= beginPageIndex && editData.key.pageIndex <= endPageIndex
                        }
                    }
                    return editData.key.pageIndex === pageIndex
                },
                _generateNewItem: function(key) {
                    var item = {
                        key: key
                    };
                    if (key && key[INSERT_INDEX]) {
                        item[INSERT_INDEX] = key[INSERT_INDEX]
                    }
                    return item
                },
                processItems: function(items, change) {
                    var changeType = change.changeType;
                    var dataController = this._dataController;
                    var dataRowIndex = -1;
                    this.update(changeType);
                    var editData = this._editData;
                    for (var i = 0; i < editData.length; i++) {
                        var key = editData[i].key;
                        if (key) {
                            var rowIndexOffset = dataController.getRowIndexOffset();
                            dataRowIndex = key.dataRowIndex - rowIndexOffset + dataController.getRowIndexDelta();
                            if ("append" === changeType) {
                                dataRowIndex -= dataController.items(true).length;
                                if (change.removeCount) {
                                    dataRowIndex += change.removeCount
                                }
                            }
                            var item = this._generateNewItem(key);
                            if (dataRowIndex >= 0 && editData[i].type === DATA_EDIT_DATA_INSERT_TYPE && this._needInsertItem(editData[i], changeType, items, item)) {
                                items.splice(key.dataRowIndex ? dataRowIndex : 0, 0, item)
                            }
                        }
                    }
                    return items
                },
                processDataItem: function(item, options, generateDataValues) {
                    var that = this;
                    var data;
                    var columns = options.visibleColumns;
                    var key = item.data[INSERT_INDEX] ? item.data.key : item.key;
                    var editIndex = (0, _uiGrid_core3.getIndexByKey)(key, that._editData);
                    if (editIndex >= 0) {
                        var editMode = _getEditMode(that);
                        var editData = that._editData[editIndex];
                        data = editData.data;
                        item.isEditing = false;
                        switch (editData.type) {
                            case DATA_EDIT_DATA_INSERT_TYPE:
                                if (editMode === EDIT_MODE_POPUP) {
                                    item.visible = false
                                }
                                item.isNewRow = true;
                                item.key = key;
                                item.data = data;
                                break;
                            case DATA_EDIT_DATA_UPDATE_TYPE:
                                item.modified = true;
                                item.oldData = item.data;
                                item.data = (0, _uiGrid_core3.createObjectWithChanges)(item.data, data);
                                item.modifiedValues = generateDataValues(data, columns, true);
                                break;
                            case DATA_EDIT_DATA_REMOVE_TYPE:
                                if (editMode === EDIT_MODE_BATCH) {
                                    item.data = (0, _uiGrid_core3.createObjectWithChanges)(item.data, data)
                                }
                                item.removed = true
                        }
                    }
                },
                insertRow: function() {
                    _ui2.default.log("W0002", "dxDataGrid", "insertRow", "15.2", "Use the 'addRow' method instead");
                    return this.addRow()
                },
                _initNewRow: function(options) {
                    var _this5 = this;
                    this.executeAction("onInitNewRow", options);
                    if (options.promise) {
                        var deferred = new _deferred.Deferred;
                        (0, _deferred.when)((0, _deferred.fromPromise)(options.promise)).done(deferred.resolve).fail(createFailureHandler(deferred)).fail(function(arg) {
                            return _this5._fireDataErrorOccurred(arg)
                        });
                        return deferred
                    }
                },
                _getInsertKey: function(parentKey) {
                    var that = this;
                    var dataController = that._dataController;
                    var rows = dataController.items();
                    var editMode = _getEditMode(that);
                    var insertKey = {
                        parentKey: parentKey,
                        pageIndex: dataController.pageIndex(),
                        rowIndex: that._getInsertRowIndex(parentKey)
                    };
                    var row = rows[insertKey.rowIndex];
                    if (row && (!row.isEditing && "detail" === row.rowType || "detailAdaptive" === row.rowType)) {
                        insertKey.rowIndex++
                    }
                    insertKey.dataRowIndex = dataController.getRowIndexOffset() + rows.filter(function(row, index) {
                        return index < insertKey.rowIndex && ("data" === row.rowType || "group" === row.rowType || row.isNewRow)
                    }).length;
                    if (editMode !== EDIT_MODE_BATCH) {
                        that._editRowIndex = insertKey.rowIndex + that._dataController.getRowIndexOffset()
                    }
                    insertKey[INSERT_INDEX] = that._getInsertIndex();
                    return insertKey
                },
                _getInsertRowIndex: function(parentKey) {
                    var that = this;
                    var rowsView = that.getView("rowsView");
                    var parentRowIndex = that._dataController.getRowIndexByKey(parentKey);
                    if (parentRowIndex >= 0) {
                        return parentRowIndex + 1
                    }
                    if (rowsView) {
                        return rowsView.getTopVisibleItemIndex(true)
                    }
                    return 0
                },
                _getInsertIndex: function() {
                    var maxInsertIndex = 0;
                    this._editData.forEach(function(editItem) {
                        if (editItem.type === DATA_EDIT_DATA_INSERT_TYPE && editItem.key[INSERT_INDEX] > maxInsertIndex) {
                            maxInsertIndex = editItem.key[INSERT_INDEX]
                        }
                    });
                    return maxInsertIndex + 1
                },
                addRow: function(parentKey) {
                    var that = this;
                    var dataController = that._dataController;
                    var store = dataController.store();
                    var key = store && store.key();
                    var param = {
                        data: {}
                    };
                    var editMode = _getEditMode(that);
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    var deferred = new _deferred.Deferred;
                    if (!store) {
                        dataController.fireError("E1052", this.component.NAME);
                        return deferred.reject()
                    }
                    if (editMode === EDIT_MODE_CELL && that.hasChanges()) {
                        that.saveEditData().done(function() {
                            if (!that.hasChanges()) {
                                that.addRow(parentKey).done(deferred.resolve).fail(deferred.reject)
                            } else {
                                deferred.reject("cancel")
                            }
                        });
                        return deferred.promise()
                    }
                    that.refresh();
                    if (!that._allowRowAdding()) {
                        return deferred.reject("cancel")
                    }
                    if (!key) {
                        param.data.__KEY__ = String(new _guid2.default)
                    }(0, _deferred.when)(that._initNewRow(param, parentKey)).done(function() {
                        if (that._allowRowAdding()) {
                            that._addRowCore(param.data, parentKey, oldEditRowIndex);
                            deferred.resolve()
                        } else {
                            deferred.reject("cancel")
                        }
                    }).fail(deferred.reject);
                    return deferred.promise()
                },
                _allowRowAdding: function() {
                    var that = this;
                    var editMode = _getEditMode(that);
                    var insertIndex = that._getInsertIndex();
                    if (editMode !== EDIT_MODE_BATCH && insertIndex > 1) {
                        return false
                    }
                    return true
                },
                _addRowCore: function(data, parentKey, initialOldEditRowIndex) {
                    var that = this;
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    var insertKey = that._getInsertKey(parentKey);
                    var editMode = _getEditMode(that);
                    that._addEditData({
                        key: insertKey,
                        data: data,
                        type: DATA_EDIT_DATA_INSERT_TYPE
                    });
                    that._dataController.updateItems({
                        changeType: "update",
                        rowIndices: [initialOldEditRowIndex, oldEditRowIndex, insertKey.rowIndex]
                    });
                    if (editMode === EDIT_MODE_POPUP) {
                        that._showEditPopup(insertKey.rowIndex)
                    } else {
                        that._focusFirstEditableCellInRow(insertKey.rowIndex)
                    }
                    that._afterInsertRow({
                        key: insertKey,
                        data: data
                    })
                },
                _focusFirstEditableCellInRow: function(rowIndex) {
                    var that = this;
                    var $firstCell = that.getFirstEditableCellInRow(rowIndex);
                    that._editCellInProgress = true;
                    that._delayedInputFocus($firstCell, function() {
                        that._editCellInProgress = false;
                        var $cell = that.getFirstEditableCellInRow(rowIndex);
                        var eventToTrigger = "dblClick" === that.option("editing.startEditAction") ? _double_click2.default.name : _click2.default.name;
                        $cell && _events_engine2.default.trigger($cell, eventToTrigger)
                    })
                },
                _isEditingStart: function(options) {
                    this.executeAction("onEditingStart", options);
                    return options.cancel
                },
                _beforeEditCell: function(rowIndex, columnIndex, item) {
                    var that = this;
                    if (_getEditMode(that) === EDIT_MODE_CELL && !item.isNewRow && that.hasChanges()) {
                        var d = new _deferred.Deferred;
                        that.saveEditData().always(function() {
                            d.resolve(that.hasChanges())
                        });
                        return d
                    }
                },
                _beforeUpdateItems: function() {},
                _getVisibleEditRowIndex: function() {
                    return this._editRowIndex >= 0 ? this._editRowIndex - this._dataController.getRowIndexOffset() : -1
                },
                editRow: function(rowIndex) {
                    var that = this;
                    var dataController = that._dataController;
                    var items = dataController.items();
                    var item = items[rowIndex];
                    var params = {
                        data: item && item.data,
                        cancel: false
                    };
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    var $editingCell;
                    if (!item) {
                        return
                    }
                    if (rowIndex === oldEditRowIndex) {
                        return true
                    }
                    if (!item.isNewRow) {
                        params.key = item.key
                    }
                    if (that._isEditingStart(params)) {
                        return
                    }
                    that.init();
                    that._pageIndex = dataController.pageIndex();
                    that._editRowIndex = (items[0].isNewRow ? rowIndex - 1 : rowIndex) + that._dataController.getRowIndexOffset();
                    that._addEditData({
                        data: {},
                        key: item.key,
                        oldData: item.data
                    });
                    var rowIndices = [oldEditRowIndex, rowIndex];
                    var editMode = _getEditMode(that);
                    that._beforeUpdateItems(rowIndices, rowIndex, oldEditRowIndex);
                    if (editMode === EDIT_MODE_POPUP) {
                        that._showEditPopup(rowIndex)
                    } else {
                        dataController.updateItems({
                            changeType: "update",
                            rowIndices: rowIndices
                        })
                    }
                    if (MODES_WITH_DELAYED_FOCUS.indexOf(editMode) !== -1) {
                        $editingCell = that.getFocusedCellInRow(that._getVisibleEditRowIndex());
                        that._delayedInputFocus($editingCell, function() {
                            $editingCell && that.component.focus($editingCell)
                        })
                    }
                },
                _showEditPopup: function(rowIndex, repaintForm) {
                    var that = this;
                    var isMobileDevice = "desktop" !== _devices2.default.current().deviceType;
                    var popupOptions = (0, _extend.extend)({
                        showTitle: false,
                        fullScreen: isMobileDevice,
                        toolbarItems: [{
                            toolbar: "bottom",
                            location: "after",
                            widget: "dxButton",
                            options: that._getSaveButtonConfig()
                        }, {
                            toolbar: "bottom",
                            location: "after",
                            widget: "dxButton",
                            options: that._getCancelButtonConfig()
                        }],
                        contentTemplate: that._getPopupEditFormTemplate(rowIndex)
                    }, that.option(EDITING_POPUP_OPTION_NAME));
                    if (!that._editPopup) {
                        var $popupContainer = (0, _renderer2.default)("<div>").appendTo(that.component.$element()).addClass(that.addWidgetPrefix(EDIT_POPUP_CLASS));
                        that._editPopup = that._createComponent($popupContainer, _popup2.default, {});
                        that._editPopup.on("hiding", that._getEditPopupHiddenHandler());
                        that._editPopup.on("shown", function(e) {
                            _events_engine2.default.trigger(e.component.$content().find(FOCUSABLE_ELEMENT_SELECTOR).not("." + SCROLLABLE_CONTAINER_CLASS).first(), "focus");
                            if (repaintForm) {
                                that._editForm && that._editForm.repaint()
                            }
                        })
                    }
                    that._editPopup.option(popupOptions);
                    that._editPopup.show()
                },
                _repaintEditPopup: function() {
                    var rowIndex = this._getVisibleEditRowIndex();
                    if (this._editPopup && this._editPopup.option("visible") && rowIndex >= 0) {
                        var defaultAnimation = this._editPopup.option("animation");
                        this._editPopup.option("animation", null);
                        this._showEditPopup(rowIndex, true);
                        this._editPopup.option("animation", defaultAnimation)
                    }
                },
                _getEditPopupHiddenHandler: function() {
                    var that = this;
                    return function(e) {
                        if (that.isEditing()) {
                            that.cancelEditData()
                        }
                    }
                },
                _getPopupEditFormTemplate: function(rowIndex) {
                    var that = this;
                    var row = that.component.getVisibleRows()[rowIndex];
                    var templateOptions = {
                        row: row,
                        rowType: row.rowType,
                        key: row.key
                    };
                    return function(container) {
                        var formTemplate = that.getEditFormTemplate();
                        var scrollable = that._createComponent((0, _renderer2.default)("<div>").appendTo(container), _ui4.default);
                        that._$popupContent = scrollable.$content();
                        formTemplate(that._$popupContent, templateOptions, true)
                    }
                },
                _getSaveButtonConfig: function() {
                    return {
                        text: this.option("editing.texts.saveRowChanges"),
                        onClick: this.saveEditData.bind(this)
                    }
                },
                _getCancelButtonConfig: function() {
                    return {
                        text: this.option("editing.texts.cancelRowChanges"),
                        onClick: this.cancelEditData.bind(this)
                    }
                },
                _removeEditDataItem: function(index) {
                    if (index >= 0) {
                        this._editData.splice(index, 1)
                    }
                },
                executeOperation: function(deferred, func) {
                    var _this6 = this;
                    this._lastOperation && this._lastOperation.reject();
                    this._lastOperation = deferred;
                    this.waitForDeferredOperations().done(function() {
                        if ("rejected" === deferred.state()) {
                            return
                        }
                        func();
                        _this6._lastOperation = null
                    }).fail(function() {
                        deferred.reject();
                        _this6._lastOperation = null
                    })
                },
                waitForDeferredOperations: function() {
                    return _deferred.when.apply(void 0, _toConsumableArray(this._deferreds))
                },
                editCell: function(rowIndex, columnIndex) {
                    var _this7 = this;
                    var d = new _deferred.Deferred;
                    var coreResult;
                    this.executeOperation(d, function() {
                        coreResult = _this7._editCellCore(rowIndex, columnIndex);
                        (0, _deferred.when)(coreResult).done(d.resolve).fail(d.reject)
                    });
                    return void 0 !== coreResult ? coreResult : d.promise()
                },
                _editCellCore: function(rowIndex, columnIndex) {
                    var that = this;
                    var columnsController = that._columnsController;
                    var dataController = that._dataController;
                    var items = dataController.items();
                    var item = items[rowIndex];
                    var params = {
                        data: item && item.data,
                        cancel: false
                    };
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    var visibleColumns = columnsController.getVisibleColumns();
                    var oldColumn = visibleColumns[that._editColumnIndex];
                    if (_type2.default.isString(columnIndex)) {
                        columnIndex = columnsController.columnOption(columnIndex, "index");
                        columnIndex = columnsController.getVisibleIndex(columnIndex)
                    }
                    var column = params.column = visibleColumns[columnIndex];
                    if (column && item && ("data" === item.rowType || "detailAdaptive" === item.rowType) && !item.removed && !_isRowEditMode(that)) {
                        if (that.isEditCell(rowIndex, columnIndex)) {
                            return true
                        }
                        var editRowIndex = rowIndex + dataController.getRowIndexOffset();
                        return (0, _deferred.when)(that._beforeEditCell(rowIndex, columnIndex, item)).done(function(cancel) {
                            if (cancel) {
                                return
                            }
                            if (that._prepareEditCell(params, item, columnIndex, editRowIndex)) {
                                _common2.default.deferRender(function() {
                                    that._repaintEditCell(column, oldColumn, oldEditRowIndex)
                                })
                            } else {
                                that._processCanceledEditingCell()
                            }
                        })
                    }
                    return false
                },
                _processCanceledEditingCell: function() {},
                _prepareEditCell: function(params, item, editColumnIndex, editRowIndex) {
                    var that = this;
                    if (!item.isNewRow) {
                        params.key = item.key
                    }
                    if (that._isEditingStart(params)) {
                        return false
                    }
                    that._editRowIndex = editRowIndex;
                    that._editColumnIndex = editColumnIndex;
                    that._pageIndex = that._dataController.pageIndex();
                    that._addEditData({
                        data: {},
                        key: item.key,
                        oldData: item.data
                    });
                    return true
                },
                _repaintEditCell: function(column, oldColumn, oldEditRowIndex) {
                    var that = this;
                    var rowsView = that._rowsView;
                    if (!column || !column.showEditorAlways || oldColumn && !oldColumn.showEditorAlways) {
                        that._editCellInProgress = true;
                        that.getController("editorFactory").loseFocus();
                        that._dataController.updateItems({
                            changeType: "update",
                            rowIndices: [oldEditRowIndex, that._getVisibleEditRowIndex()]
                        })
                    }
                    var $cell = rowsView && rowsView._getCellElement(that._getVisibleEditRowIndex(), that._editColumnIndex);
                    if ($cell && !$cell.find(":focus").length) {
                        that._focusEditingCell(function() {
                            that._editCellInProgress = false
                        }, $cell, true)
                    } else {
                        that._editCellInProgress = false
                    }
                },
                _delayedInputFocus: function($cell, beforeFocusCallback, callBeforeFocusCallbackAlways) {
                    var that = this;

                    function inputFocus() {
                        if (beforeFocusCallback) {
                            beforeFocusCallback()
                        }
                        if ($cell) {
                            var $focusableElement = $cell.find(FOCUSABLE_ELEMENT_SELECTOR).first();
                            (0, _uiGrid_core3.focusAndSelectElement)(that, $focusableElement)
                        }
                        that._beforeFocusCallback = null
                    }
                    if (_devices2.default.real().ios || _devices2.default.real().android) {
                        inputFocus()
                    } else {
                        if (that._beforeFocusCallback) {
                            that._beforeFocusCallback()
                        }
                        clearTimeout(that._inputFocusTimeoutID);
                        if (callBeforeFocusCallbackAlways) {
                            that._beforeFocusCallback = beforeFocusCallback
                        }
                        that._inputFocusTimeoutID = setTimeout(inputFocus)
                    }
                },
                _focusEditingCell: function(beforeFocusCallback, $editCell, callBeforeFocusCallbackAlways) {
                    var that = this;
                    var rowsView = that.getView("rowsView");
                    $editCell = $editCell || rowsView && rowsView._getCellElement(that._getVisibleEditRowIndex(), that._editColumnIndex);
                    that._delayedInputFocus($editCell, beforeFocusCallback, callBeforeFocusCallbackAlways)
                },
                removeRow: function(rowIndex) {
                    _ui2.default.log("W0002", "dxDataGrid", "removeRow", "15.2", "Use the 'deleteRow' method instead");
                    return this.deleteRow(rowIndex)
                },
                deleteRow: function(rowIndex) {
                    var _this8 = this;
                    if ("cell" === this.option("editing.mode") && this.isEditing()) {
                        var isNewRow = this._dataController.items()[rowIndex].isNewRow;
                        this.closeEditCell(null, isNewRow).always(function() {
                            _this8._checkAndDeleteRow(rowIndex)
                        })
                    } else {
                        this._checkAndDeleteRow(rowIndex)
                    }
                },
                _checkAndDeleteRow: function(rowIndex) {
                    var that = this;
                    var editingOptions = that.option("editing");
                    var editingTexts = editingOptions && editingOptions.texts;
                    var isBatchMode = editingOptions && editingOptions.mode === EDIT_MODE_BATCH;
                    var confirmDelete = editingOptions && editingOptions.confirmDelete;
                    var confirmDeleteMessage = editingTexts && editingTexts.confirmDeleteMessage;
                    var item = that._dataController.items()[rowIndex];
                    var allowDeleting = isBatchMode || !that.isEditing() || item.isNewRow;
                    if (item && allowDeleting) {
                        if (isBatchMode || !confirmDelete || !confirmDeleteMessage) {
                            that._deleteRowCore(rowIndex)
                        } else {
                            var confirmDeleteTitle = editingTexts && editingTexts.confirmDeleteTitle;
                            var showDialogTitle = _type2.default.isDefined(confirmDeleteTitle) && confirmDeleteTitle.length > 0;
                            _dialog2.default.confirm(confirmDeleteMessage, confirmDeleteTitle, showDialogTitle).done(function(confirmResult) {
                                if (confirmResult) {
                                    that._deleteRowCore(rowIndex)
                                }
                            })
                        }
                    }
                },
                _deleteRowCore: function(rowIndex) {
                    var dataController = this._dataController;
                    var item = dataController.items()[rowIndex];
                    var key = item && item.key;
                    var oldEditRowIndex = this._getVisibleEditRowIndex();
                    var isBatchMode = this.option("editing.mode") === EDIT_MODE_BATCH;
                    this.refresh();
                    var editIndex = (0, _uiGrid_core3.getIndexByKey)(key, this._editData);
                    if (editIndex >= 0) {
                        if (this._editData[editIndex].type === DATA_EDIT_DATA_INSERT_TYPE) {
                            this._removeEditDataItem(editIndex)
                        } else {
                            this._addEditData({
                                key: key,
                                type: DATA_EDIT_DATA_REMOVE_TYPE
                            })
                        }
                    } else {
                        this._addEditData({
                            key: key,
                            oldData: item.data,
                            type: DATA_EDIT_DATA_REMOVE_TYPE
                        })
                    }
                    if (isBatchMode) {
                        dataController.updateItems({
                            changeType: "update",
                            rowIndices: [oldEditRowIndex, rowIndex]
                        })
                    } else {
                        this.saveEditData()
                    }
                },
                undeleteRow: function(rowIndex) {
                    var that = this;
                    var dataController = that._dataController;
                    var item = dataController.items()[rowIndex];
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    var key = item && item.key;
                    if (item) {
                        var editIndex = (0, _uiGrid_core3.getIndexByKey)(key, that._editData);
                        if (editIndex >= 0) {
                            var editData = that._editData[editIndex];
                            if (_type2.default.isEmptyObject(editData.data)) {
                                that._removeEditDataItem(editIndex)
                            } else {
                                that._addEditData({
                                    key: key,
                                    type: DATA_EDIT_DATA_UPDATE_TYPE
                                })
                            }
                            dataController.updateItems({
                                changeType: "update",
                                rowIndices: [oldEditRowIndex, rowIndex]
                            })
                        }
                    }
                },
                _saveEditDataCore: function(deferreds, results, changes) {
                    var that = this;
                    var store = that._dataController.store();
                    var isDataSaved = true;

                    function executeEditingAction(actionName, params, func) {
                        var deferred = new _deferred.Deferred;
                        that.executeAction(actionName, params);
                        (0, _deferred.when)((0, _deferred.fromPromise)(params.cancel)).done(function(cancel) {
                            if (cancel) {
                                setTimeout(function() {
                                    deferred.resolve("cancel")
                                })
                            } else {
                                func(params).done(deferred.resolve).fail(createFailureHandler(deferred))
                            }
                        }).fail(createFailureHandler(deferred));
                        return deferred
                    }(0, _iterator.each)(that._editData, function(index, editData) {
                        var data = editData.data;
                        var oldData = editData.oldData;
                        var type = editData.type;
                        var deferred;
                        var params;
                        if (that._beforeSaveEditData(editData, index)) {
                            return
                        }
                        switch (type) {
                            case DATA_EDIT_DATA_REMOVE_TYPE:
                                params = {
                                    data: oldData,
                                    key: editData.key,
                                    cancel: false
                                };
                                deferred = executeEditingAction("onRowRemoving", params, function() {
                                    return store.remove(editData.key).done(function(key) {
                                        changes.push({
                                            type: "remove",
                                            key: key
                                        })
                                    })
                                });
                                break;
                            case DATA_EDIT_DATA_INSERT_TYPE:
                                params = {
                                    data: data,
                                    cancel: false
                                };
                                deferred = executeEditingAction("onRowInserting", params, function() {
                                    return store.insert(params.data).done(function(data, key) {
                                        if (_type2.default.isDefined(key)) {
                                            editData.key = key
                                        }
                                        if (data && _type2.default.isObject(data) && data !== params.data) {
                                            editData.data = data
                                        }
                                        changes.push({
                                            type: "insert",
                                            data: data,
                                            index: 0
                                        })
                                    })
                                });
                                break;
                            case DATA_EDIT_DATA_UPDATE_TYPE:
                                params = {
                                    newData: data,
                                    oldData: oldData,
                                    key: editData.key,
                                    cancel: false
                                };
                                deferred = executeEditingAction("onRowUpdating", params, function() {
                                    return store.update(editData.key, params.newData).done(function(data, key) {
                                        if (data && _type2.default.isObject(data) && data !== params.newData) {
                                            editData.data = data
                                        }
                                        changes.push({
                                            type: "update",
                                            key: key,
                                            data: data
                                        })
                                    })
                                })
                        }
                        if (deferred) {
                            var doneDeferred = new _deferred.Deferred;
                            deferred.always(function(data) {
                                isDataSaved = "cancel" !== data;
                                results.push({
                                    key: editData.key,
                                    result: data
                                })
                            }).always(doneDeferred.resolve);
                            deferreds.push(doneDeferred.promise())
                        }
                    });
                    return isDataSaved
                },
                _processSaveEditDataResult: function(results) {
                    var that = this;
                    var hasSavedData = false;
                    var editMode = _getEditMode(that);
                    for (var i = 0; i < results.length; i++) {
                        var arg = results[i].result;
                        var cancel = "cancel" === arg;
                        var editIndex = (0, _uiGrid_core3.getIndexByKey)(results[i].key, that._editData);
                        var editData = that._editData[editIndex];
                        var isError = arg && arg instanceof Error;
                        if (isError) {
                            if (editData) {
                                editData.error = arg
                            }
                            that._fireDataErrorOccurred(arg);
                            if (editMode !== EDIT_MODE_BATCH) {
                                if (editData && editData.type === DATA_EDIT_DATA_REMOVE_TYPE) {
                                    that._removeEditDataItem(editIndex)
                                }
                                break
                            }
                        } else {
                            if (!cancel || !editData || editMode !== EDIT_MODE_BATCH && editData.type === DATA_EDIT_DATA_REMOVE_TYPE) {
                                that._removeEditDataItem(editIndex);
                                hasSavedData = !cancel
                            }
                        }
                    }
                    return hasSavedData
                },
                _fireSaveEditDataEvents: function(editData) {
                    var that = this;
                    (0, _iterator.each)(editData, function(_, itemData) {
                        var data = itemData.data;
                        var key = itemData.key;
                        var type = itemData.type;
                        var params = {
                            key: key,
                            data: data
                        };
                        if (itemData.error) {
                            params.error = itemData.error
                        }
                        switch (type) {
                            case DATA_EDIT_DATA_REMOVE_TYPE:
                                that.executeAction("onRowRemoved", (0, _extend.extend)({}, params, {
                                    data: itemData.oldData
                                }));
                                break;
                            case DATA_EDIT_DATA_INSERT_TYPE:
                                that.executeAction("onRowInserted", params);
                                break;
                            case DATA_EDIT_DATA_UPDATE_TYPE:
                                that.executeAction("onRowUpdated", params)
                        }
                    })
                },
                saveEditData: function() {
                    var _this9 = this;
                    var deferred = new _deferred.Deferred;
                    var afterSaveEditData = function() {
                        (0, _deferred.when)(_this9._afterSaveEditData()).done(function() {
                            deferred.resolve()
                        })
                    };
                    this.waitForDeferredOperations().done(function() {
                        if (_this9._saving) {
                            afterSaveEditData();
                            return
                        }(0, _deferred.when)(_this9._beforeSaveEditData()).done(function(cancel) {
                            if (cancel) {
                                afterSaveEditData();
                                return
                            }
                            _this9._saveEditDataInner().done(deferred.resolve).fail(deferred.reject)
                        }).fail(deferred.reject)
                    }).fail(deferred.reject);
                    return deferred.promise()
                },
                _saveEditDataInner: function() {
                    var _this10 = this;
                    var results = [];
                    var deferreds = [];
                    var changes = [];
                    var dataController = this._dataController;
                    var dataSource = dataController.dataSource();
                    var editMode = _getEditMode(this);
                    var result = new _deferred.Deferred;
                    var resetEditIndices = function() {
                        if (editMode !== EDIT_MODE_CELL) {
                            _this10._editColumnIndex = -1;
                            _this10._editRowIndex = -1
                        }
                    };
                    var afterSaveEditData = function(error) {
                        (0, _deferred.when)(_this10._afterSaveEditData()).done(function() {
                            result.resolve(error)
                        })
                    };
                    var editData = this._editData.slice(0);
                    if (!this._saveEditDataCore(deferreds, results, changes) && editMode === EDIT_MODE_CELL) {
                        this._focusEditingCell()
                    }
                    if (deferreds.length) {
                        this._saving = true;
                        dataSource && dataSource.beginLoading();
                        _deferred.when.apply(_renderer2.default, deferreds).done(function() {
                            if (_this10._processSaveEditDataResult(results)) {
                                resetEditIndices();
                                if (editMode === EDIT_MODE_POPUP && _this10._editPopup) {
                                    _this10._editPopup.hide()
                                }
                                dataSource && dataSource.endLoading();
                                var refreshMode = _this10.option("editing.refreshMode");
                                var isFullRefresh = "reshape" !== refreshMode && "repaint" !== refreshMode;
                                if (!isFullRefresh) {
                                    dataController.push(changes)
                                }(0, _deferred.when)(dataController.refresh({
                                    selection: isFullRefresh,
                                    reload: isFullRefresh,
                                    load: "reshape" === refreshMode,
                                    changesOnly: _this10.option("repaintChangesOnly")
                                })).always(function() {
                                    _this10._fireSaveEditDataEvents(editData)
                                }).done(function() {
                                    afterSaveEditData()
                                }).fail(function(error) {
                                    afterSaveEditData(error)
                                })
                            } else {
                                dataSource && dataSource.endLoading();
                                result.resolve()
                            }
                        }).fail(function(error) {
                            dataSource && dataSource.endLoading();
                            result.resolve(error)
                        });
                        return result.always(function() {
                            _this10._focusEditingCell();
                            _this10._saving = false
                        }).promise()
                    }
                    if (_isRowEditMode(this)) {
                        if (!this.hasChanges()) {
                            this.cancelEditData()
                        }
                    } else {
                        if (CELL_BASED_MODES.indexOf(editMode) !== -1) {
                            resetEditIndices();
                            dataController.updateItems()
                        } else {
                            this._focusEditingCell()
                        }
                    }
                    afterSaveEditData();
                    return result.promise()
                },
                isSaving: function() {
                    return this._saving
                },
                _updateEditColumn: function() {
                    var that = this;
                    var isEditColumnVisible = that._isEditColumnVisible();
                    var useIcons = that.option("editing.useIcons");
                    var cssClass = COMMAND_EDIT_CLASS + (useIcons ? " " + COMMAND_EDIT_WITH_ICONS_CLASS : "");
                    that._columnsController.addCommandColumn({
                        type: "buttons",
                        command: "edit",
                        visible: isEditColumnVisible,
                        cssClass: cssClass,
                        width: "auto",
                        alignment: "center",
                        cellTemplate: that._getEditCommandCellTemplate(),
                        fixedPosition: "right"
                    });
                    that._columnsController.columnOption("command:edit", {
                        visible: isEditColumnVisible,
                        cssClass: cssClass
                    })
                },
                _isEditColumnVisible: function() {
                    var that = this;
                    var editingOptions = that.option("editing");
                    if (editingOptions) {
                        var editMode = _getEditMode(that);
                        var isVisibleWithCurrentEditMode = false;
                        switch (editMode) {
                            case EDIT_MODE_ROW:
                                isVisibleWithCurrentEditMode = editingOptions.allowUpdating || editingOptions.allowAdding;
                                break;
                            case EDIT_MODE_FORM:
                            case EDIT_MODE_POPUP:
                                isVisibleWithCurrentEditMode = editingOptions.allowUpdating
                        }
                        return editingOptions.allowDeleting || isVisibleWithCurrentEditMode
                    }
                },
                _updateEditButtons: function() {
                    var that = this;
                    var headerPanel = that.getView("headerPanel");
                    var hasChanges = that.hasChanges();
                    if (headerPanel) {
                        headerPanel.setToolbarItemDisabled("saveButton", !hasChanges);
                        headerPanel.setToolbarItemDisabled("revertButton", !hasChanges)
                    }
                },
                _applyModified: function($element) {
                    $element && $element.addClass(CELL_MODIFIED)
                },
                _beforeCloseEditCellInBatchMode: function() {},
                cancelEditData: function() {
                    var that = this;
                    var editMode = _getEditMode(that);
                    var rowIndex = this._getVisibleEditRowIndex();
                    var dataController = that._dataController;
                    that._beforeCancelEditData();
                    that.init();
                    if (ROW_BASED_MODES.indexOf(editMode) !== -1 && rowIndex >= 0) {
                        dataController.updateItems({
                            changeType: "update",
                            rowIndices: [rowIndex, rowIndex + 1]
                        })
                    } else {
                        dataController.updateItems({
                            repaintChangesOnly: that.option("repaintChangesOnly")
                        })
                    }
                    if (editMode === EDIT_MODE_POPUP) {
                        that._hideEditPopup()
                    }
                },
                _hideEditPopup: function() {
                    this._editPopup && this._editPopup.option("visible", false)
                },
                hasEditData: function() {
                    return this.hasChanges()
                },
                closeEditCell: function(isError, withoutSaveEditData) {
                    var _this11 = this;
                    var that = this;
                    var result = _deferred2.default.when();
                    var oldEditRowIndex = that._getVisibleEditRowIndex();
                    if (!_isRowEditMode(that)) {
                        result = _deferred2.default.Deferred();
                        this.executeOperation(result, function() {
                            _this11._closeEditCellCore(isError, oldEditRowIndex, withoutSaveEditData);
                            result.resolve()
                        })
                    }
                    return result.promise()
                },
                _closeEditCellCore: function(isError, oldEditRowIndex, withoutSaveEditData) {
                    var that = this;
                    var editMode = _getEditMode(that);
                    var dataController = that._dataController;
                    if (editMode === EDIT_MODE_CELL && that.hasChanges()) {
                        if (!withoutSaveEditData) {
                            that.saveEditData().done(function(error) {
                                if (!that.hasChanges()) {
                                    that.closeEditCell(!!error)
                                }
                            })
                        }
                    } else {
                        if (oldEditRowIndex >= 0) {
                            var rowIndices = [oldEditRowIndex];
                            that._editRowIndex = -1;
                            that._editColumnIndex = -1;
                            that._beforeCloseEditCellInBatchMode(rowIndices);
                            if (!isError) {
                                dataController.updateItems({
                                    changeType: "update",
                                    rowIndices: rowIndices
                                })
                            }
                        }
                    }
                },
                update: function(changeType) {
                    var that = this;
                    var dataController = that._dataController;
                    if (dataController && that._pageIndex !== dataController.pageIndex()) {
                        if ("refresh" === changeType) {
                            that.refresh(true)
                        }
                        that._pageIndex = dataController.pageIndex()
                    }
                    that._updateEditButtons()
                },
                _getRowIndicesForCascadeUpdating: function(row, skipCurrentRow) {
                    return skipCurrentRow ? [] : [row.rowIndex]
                },
                addDeferred: function(deferred) {
                    var _this12 = this;
                    if (this._deferreds.indexOf(deferred) < 0) {
                        this._deferreds.push(deferred);
                        deferred.always(function() {
                            var index = _this12._deferreds.indexOf(deferred);
                            if (index >= 0) {
                                _this12._deferreds.splice(index, 1)
                            }
                        })
                    }
                },
                _prepareEditDataParams: function(options, value, text) {
                    var _options$row;
                    var that = this;
                    var newData = {};
                    var oldData = null === (_options$row = options.row) || void 0 === _options$row ? void 0 : _options$row.data;
                    var rowKey = options.key;
                    var $cellElement = (0, _renderer2.default)(options.cellElement);
                    var editMode = _getEditMode(that);
                    var deferred = new _deferred.Deferred;
                    if (void 0 !== rowKey) {
                        if (editMode === EDIT_MODE_BATCH) {
                            that._applyModified($cellElement, options)
                        }
                        options.value = value;
                        var setCellValueResult = (0, _deferred.fromPromise)(options.column.setCellValue(newData, value, (0, _extend.extend)(true, {}, oldData), text));
                        setCellValueResult.done(function() {
                            deferred.resolve({
                                data: newData,
                                key: rowKey,
                                oldData: oldData,
                                type: DATA_EDIT_DATA_UPDATE_TYPE
                            })
                        }).fail(createFailureHandler(deferred)).fail(function(arg) {
                            return that._fireDataErrorOccurred(arg)
                        });
                        if (_type2.default.isDefined(text) && options.column.displayValueMap) {
                            options.column.displayValueMap[value] = text
                        }
                        if (options.values) {
                            options.values[options.columnIndex] = value
                        }
                        that.addDeferred(deferred)
                    }
                    return deferred
                },
                updateFieldValue: function(options, value, text, forceUpdateRow) {
                    var _this13 = this;
                    var rowKey = options.key;
                    var deferred = new _deferred.Deferred;
                    if (void 0 === rowKey) {
                        this._dataController.fireError("E1043")
                    }
                    if (options.column.setCellValue) {
                        this._prepareEditDataParams(options, value, text).done(function(params) {
                            (0, _deferred.when)(_this13._applyEditDataParams(options, params, forceUpdateRow)).always(function() {
                                deferred.resolve()
                            })
                        })
                    } else {
                        deferred.resolve()
                    }
                    return deferred.promise()
                },
                _focusPreviousEditingCellIfNeed: function(options) {
                    var that = this;
                    if (that.hasEditData() && !that.isEditCell(options.rowIndex, options.columnIndex)) {
                        that._focusEditingCell();
                        that._updateEditRow(options.row, true);
                        return true
                    }
                },
                _applyEditDataParams: function(options, params, forceUpdateRow) {
                    var that = this;
                    var editMode = _getEditMode(that);
                    var isCustomSetCellValue = options.column.setCellValue !== options.column.defaultSetCellValue;
                    var showEditorAlways = options.column.showEditorAlways;
                    var isUpdateInCellMode = editMode === EDIT_MODE_CELL && options.row && !options.row.isNewRow;
                    var focusPreviousEditingCell = showEditorAlways && !forceUpdateRow && isUpdateInCellMode && that.hasEditData() && !that.isEditCell(options.rowIndex, options.columnIndex);
                    var columns = that._columnsController.getVisibleColumns();
                    var isCustomCalculateCellValue = columns.some(function(column) {
                        return column.calculateCellValue !== column.defaultCalculateCellValue
                    });
                    var focusCellAfterRowUpdate = false;
                    if (focusPreviousEditingCell) {
                        that._focusEditingCell();
                        that._updateEditRow(options.row, true, isCustomSetCellValue);
                        return
                    }
                    that._addEditData(params, options.row);
                    that._updateEditButtons();
                    if (editMode === EDIT_MODE_CELL && (isCustomSetCellValue || isCustomCalculateCellValue)) {
                        forceUpdateRow = focusCellAfterRowUpdate = true
                    }
                    if (showEditorAlways && !forceUpdateRow) {
                        if (isUpdateInCellMode) {
                            that._editRowIndex = options.row.rowIndex + that._dataController.getRowIndexOffset();
                            that._editColumnIndex = options.columnIndex;
                            return that.saveEditData()
                        } else {
                            if (editMode === EDIT_MODE_BATCH) {
                                forceUpdateRow = isCustomSetCellValue || isCustomCalculateCellValue
                            }
                        }
                    }
                    var row = options.row;
                    if (row) {
                        if (forceUpdateRow || isCustomSetCellValue) {
                            that._updateEditRow(row, forceUpdateRow, isCustomSetCellValue);
                            focusCellAfterRowUpdate && that._focusEditingCell()
                        } else {
                            if (row.update) {
                                row.update()
                            }
                        }
                    }
                },
                _updateEditRowCore: function(row, skipCurrentRow, isCustomSetCellValue) {
                    var that = this;
                    var editForm = that._editForm;
                    var editMode = _getEditMode(that);
                    if (editMode === EDIT_MODE_POPUP) {
                        if (that.option("repaintChangesOnly")) {
                            row.update && row.update(row)
                        } else {
                            if (editForm) {
                                that._updateEditFormDeferred = (new _deferred.Deferred).done(function() {
                                    return editForm.repaint()
                                });
                                if (!that._updateLockCount) {
                                    that._updateEditFormDeferred.resolve()
                                }
                            }
                        }
                    } else {
                        that._dataController.updateItems({
                            changeType: "update",
                            rowIndices: that._getRowIndicesForCascadeUpdating(row, skipCurrentRow)
                        })
                    }
                    if (isCustomSetCellValue && that._editForm && !row.isNewRow) {
                        that._editForm.validate()
                    }
                },
                _endUpdateCore: function() {
                    this._updateEditFormDeferred && this._updateEditFormDeferred.resolve()
                },
                _updateEditRow: function(row, forceUpdateRow, isCustomSetCellValue) {
                    var that = this;
                    if (forceUpdateRow || !_isRowEditMode(that)) {
                        that._updateEditRowCore(row, !forceUpdateRow, isCustomSetCellValue);
                        if (!forceUpdateRow) {
                            that._focusEditingCell()
                        }
                    } else {
                        var deferred = new _deferred.Deferred;
                        that.addDeferred(deferred);
                        setTimeout(function() {
                            var $focusedElement = (0, _renderer2.default)(_dom_adapter2.default.getActiveElement());
                            var columnIndex = that._rowsView.getCellIndex($focusedElement, row.rowIndex);
                            var focusedElement = $focusedElement.get(0);
                            var selectionRange = (0, _uiGrid_core3.getSelectionRange)(focusedElement);
                            that._updateEditRowCore(row, false, isCustomSetCellValue);
                            if (columnIndex >= 0) {
                                var $focusedItem = that._rowsView._getCellElement(row.rowIndex, columnIndex);
                                that._delayedInputFocus($focusedItem, function() {
                                    setTimeout(function() {
                                        focusedElement = _dom_adapter2.default.getActiveElement();
                                        if (selectionRange.selectionStart >= 0) {
                                            (0, _uiGrid_core3.setSelectionRange)(focusedElement, selectionRange)
                                        }
                                    })
                                })
                            }
                            deferred.resolve()
                        })
                    }
                },
                _addEditData: function(options, row) {
                    var that = this;
                    var editDataIndex = (0, _uiGrid_core3.getIndexByKey)(options.key, that._editData);
                    if (editDataIndex < 0) {
                        editDataIndex = that._editData.length;
                        that._editData.push(options)
                    }
                    if (that._editData[editDataIndex]) {
                        if (options.data) {
                            that._editData[editDataIndex].data = (0, _uiGrid_core3.createObjectWithChanges)(that._editData[editDataIndex].data, options.data)
                        }
                        if ((!that._editData[editDataIndex].type || !options.data) && options.type) {
                            that._editData[editDataIndex].type = options.type
                        }
                        if (row) {
                            row.oldData = that._editData[editDataIndex].oldData;
                            row.data = (0, _uiGrid_core3.createObjectWithChanges)(row.data, options.data)
                        }
                    }
                    return editDataIndex
                },
                _getFormEditItemTemplate: function(cellOptions, column) {
                    return column.editCellTemplate || getDefaultEditorTemplate(this)
                },
                renderFormEditTemplate: function(detailCellOptions, item, form, container, isReadOnly) {
                    var that = this;
                    var $container = (0, _renderer2.default)(container);
                    var column = item.column;
                    var editorType = getEditorType(item);
                    var rowData = null === detailCellOptions || void 0 === detailCellOptions ? void 0 : detailCellOptions.row.data;
                    var cellOptions = (0, _extend.extend)({}, detailCellOptions, {
                        data: rowData,
                        cellElement: null,
                        isOnForm: true,
                        item: item,
                        column: (0, _extend.extend)({}, column, {
                            editorType: editorType,
                            editorOptions: item.editorOptions
                        }),
                        id: form.getItemID(item.name || item.dataField),
                        columnIndex: column.index,
                        setValue: !isReadOnly && column.allowEditing && function(value) {
                            that.updateFieldValue(cellOptions, value)
                        }
                    });
                    cellOptions.value = column.calculateCellValue(rowData);
                    var template = that._getFormEditItemTemplate.bind(that)(cellOptions, column);
                    that._rowsView.renderTemplate($container, template, cellOptions, !!$container.closest((0, _window.getWindow)().document).length).done(function() {
                        that._rowsView._updateCell($container, cellOptions)
                    });
                    return cellOptions
                },
                getFormEditorTemplate: function(cellOptions, item) {
                    var that = this;
                    var column = this.component.columnOption(item.dataField);
                    return function(options, container) {
                        var $container = (0, _renderer2.default)(container);
                        cellOptions.row.watch && cellOptions.row.watch(function() {
                            return column.selector(cellOptions.row.data)
                        }, function() {
                            var _validator;
                            var $editorElement = $container.find(".dx-widget").first();
                            var validator = $editorElement.data("dxValidator");
                            var validatorOptions = null === (_validator = validator) || void 0 === _validator ? void 0 : _validator.option();
                            $container.contents().remove();
                            cellOptions = that.renderFormEditTemplate.bind(that)(cellOptions, item, options.component, $container);
                            $editorElement = $container.find(".dx-widget").first();
                            validator = $editorElement.data("dxValidator");
                            if (validatorOptions && !validator) {
                                $editorElement.dxValidator({
                                    validationRules: validatorOptions.validationRules,
                                    validationGroup: validatorOptions.validationGroup,
                                    dataGetter: validatorOptions.dataGetter
                                })
                            }
                        });
                        cellOptions = that.renderFormEditTemplate.bind(that)(cellOptions, item, options.component, $container)
                    }
                },
                getEditFormTemplate: function() {
                    var that = this;
                    return function($container, detailOptions, renderFormOnly) {
                        var editFormOptions = that.option("editing.form");
                        var items = that.option("editing.form.items");
                        var userCustomizeItem = that.option("editing.form.customizeItem");
                        var editData = that._editData[(0, _uiGrid_core3.getIndexByKey)(detailOptions.key, that._editData)];
                        var editFormItemClass = that.addWidgetPrefix(EDIT_FORM_ITEM_CLASS);
                        var isCustomEditorType = {};
                        if (!items) {
                            var columns = that.getController("columns").getColumns();
                            items = [];
                            (0, _iterator.each)(columns, function(_, column) {
                                if (!column.isBand && !column.type) {
                                    items.push({
                                        column: column,
                                        name: column.name,
                                        dataField: column.dataField
                                    })
                                }
                            })
                        } else {
                            forEachFormItems(items, function(item) {
                                var itemId = (null === item || void 0 === item ? void 0 : item.name) || (null === item || void 0 === item ? void 0 : item.dataField);
                                if (itemId) {
                                    isCustomEditorType[itemId] = !!item.editorType
                                }
                            })
                        }
                        that._firstFormItem = void 0;
                        that._editForm = that._createComponent((0, _renderer2.default)("<div>").appendTo($container), _form2.default, (0, _extend.extend)({}, editFormOptions, {
                            items: items,
                            formID: "dx-" + new _guid2.default,
                            validationGroup: editData,
                            customizeItem: function(item) {
                                var column;
                                var itemId = item.name || item.dataField;
                                if (item.column || itemId) {
                                    column = item.column || that._columnsController.columnOption(item.name ? "name:" + item.name : "dataField:" + item.dataField)
                                }
                                if (column) {
                                    item.label = item.label || {};
                                    item.label.text = item.label.text || column.caption;
                                    item.template = item.template || that.getFormEditorTemplate(detailOptions, item);
                                    item.column = column;
                                    item.isCustomEditorType = isCustomEditorType[itemId];
                                    if (column.formItem) {
                                        (0, _extend.extend)(item, column.formItem)
                                    }
                                    if (void 0 === item.isRequired && column.validationRules) {
                                        item.isRequired = column.validationRules.some(function(rule) {
                                            return "required" === rule.type
                                        });
                                        item.validationRules = []
                                    }
                                    var itemVisible = _type2.default.isDefined(item.visible) ? item.visible : true;
                                    if (!that._firstFormItem && itemVisible) {
                                        that._firstFormItem = item
                                    }
                                }
                                userCustomizeItem && userCustomizeItem.call(this, item);
                                item.cssClass = _type2.default.isString(item.cssClass) ? item.cssClass + " " + editFormItemClass : editFormItemClass
                            }
                        }));
                        if (!renderFormOnly) {
                            var $buttonsContainer = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FORM_BUTTONS_CONTAINER_CLASS)).appendTo($container);
                            that._createComponent((0, _renderer2.default)("<div>").appendTo($buttonsContainer), _button2.default, that._getSaveButtonConfig());
                            that._createComponent((0, _renderer2.default)("<div>").appendTo($buttonsContainer), _button2.default, that._getCancelButtonConfig())
                        }
                        that._editForm.on("contentReady", function() {
                            that._editPopup && that._editPopup.repaint()
                        })
                    }
                },
                getColumnTemplate: function(options) {
                    var that = this;
                    var column = options.column;
                    var rowIndex = options.row && options.row.rowIndex;
                    var template;
                    var isRowMode = _isRowEditMode(that);
                    var isRowEditing = that.isEditRow(rowIndex);
                    var isCellEditing = that.isEditCell(rowIndex, options.columnIndex);
                    var editingStartOptions;
                    if ((column.showEditorAlways || column.setCellValue && (isRowEditing && column.allowEditing || isCellEditing)) && ("data" === options.rowType || "detailAdaptive" === options.rowType) && !column.command) {
                        var allowUpdating = that.allowUpdating(options);
                        if (((allowUpdating || isRowEditing) && column.allowEditing || isCellEditing) && (isRowMode && isRowEditing || !isRowMode)) {
                            if (column.showEditorAlways && !isRowMode) {
                                editingStartOptions = {
                                    cancel: false,
                                    key: options.row.isNewRow ? void 0 : options.row.key,
                                    data: options.row.data,
                                    column: column
                                };
                                that._isEditingStart(editingStartOptions)
                            }
                            if (!editingStartOptions || !editingStartOptions.cancel) {
                                options.setValue = function(value, text) {
                                    that.updateFieldValue(options, value, text)
                                }
                            }
                        }
                        template = column.editCellTemplate || getDefaultEditorTemplate(that)
                    } else {
                        if ("detail" === column.command && "detail" === options.rowType && isRowEditing) {
                            template = that.getEditFormTemplate(options)
                        }
                    }
                    return template
                },
                _createButton: function($container, button, options) {
                    var that = this;
                    var icon = EDIT_ICON_CLASS[button.name];
                    var useIcons = that.option("editing.useIcons");
                    var $button = (0, _renderer2.default)("<a>").attr("href", "#").addClass(LINK_CLASS).addClass(button.cssClass);
                    if (button.template) {
                        that._rowsView.renderTemplate($container, button.template, options, true)
                    } else {
                        if (useIcons && icon || button.icon) {
                            icon = button.icon || icon;
                            var iconType = _icon2.default.getImageSourceType(icon);
                            if ("image" === iconType || "svg" === iconType) {
                                $button = _icon2.default.getImageContainer(icon).addClass(button.cssClass)
                            } else {
                                $button.addClass("dx-icon" + ("dxIcon" === iconType ? "-" : " ") + icon).attr("title", button.text)
                            }
                            $button.addClass("dx-link-icon");
                            $container.addClass(COMMAND_EDIT_WITH_ICONS_CLASS);
                            var localizationName = this.getButtonLocalizationNames()[button.name];
                            localizationName && $button.attr("aria-label", _message2.default.format(localizationName))
                        } else {
                            $button.text(button.text)
                        }
                        if (_type2.default.isDefined(button.hint)) {
                            $button.attr("title", button.hint)
                        }
                        _events_engine2.default.on($button, (0, _utils.addNamespace)("click", EDITING_NAMESPACE), that.createAction(function(e) {
                            button.onClick.call(button, (0, _extend.extend)({}, e, {
                                row: options.row,
                                column: options.column
                            }));
                            e.event.preventDefault();
                            e.event.stopPropagation()
                        }));
                        options.rtlEnabled ? $container.prepend($button, "&nbsp;") : $container.append($button, "&nbsp;")
                    }
                },
                getButtonLocalizationNames: function() {
                    return {
                        edit: "dxDataGrid-editingEditRow",
                        save: "dxDataGrid-editingSaveRowChanges",
                        "delete": "dxDataGrid-editingDeleteRow",
                        undelete: "dxDataGrid-editingUndeleteRow",
                        cancel: "dxDataGrid-editingCancelRowChanges"
                    }
                },
                prepareEditButtons: function(headerPanel) {
                    var that = this;
                    var editingOptions = that.option("editing") || {};
                    var editingTexts = that.option("editing.texts") || {};
                    var titleButtonTextByClassNames = {
                        revert: editingTexts.cancelAllChanges,
                        save: editingTexts.saveAllChanges,
                        addRow: editingTexts.addRow
                    };
                    var classNameButtonByNames = {
                        revert: "cancel",
                        save: "save",
                        addRow: "addrow"
                    };
                    var buttonItems = [];
                    var prepareButtonItem = function(name, methodName, sortIndex) {
                        var className = classNameButtonByNames[name];
                        var onInitialized = function(e) {
                            (0, _renderer2.default)(e.element).addClass(headerPanel._getToolbarButtonClass(EDIT_BUTTON_CLASS + " " + that.addWidgetPrefix(className) + "-button"))
                        };
                        var hintText = titleButtonTextByClassNames[name];
                        var isButtonDisabled = ("save" === className || "cancel" === className) && !that.hasChanges();
                        return {
                            widget: "dxButton",
                            options: {
                                onInitialized: onInitialized,
                                icon: "edit-button-" + className,
                                disabled: isButtonDisabled,
                                onClick: function() {
                                    setTimeout(function() {
                                        that[methodName]()
                                    })
                                },
                                text: hintText,
                                hint: hintText
                            },
                            showText: "inMenu",
                            name: name + "Button",
                            location: "after",
                            locateInMenu: "auto",
                            sortIndex: sortIndex
                        }
                    };
                    if (editingOptions.allowAdding) {
                        buttonItems.push(prepareButtonItem("addRow", "addRow", 20))
                    }
                    if ((editingOptions.allowUpdating || editingOptions.allowAdding || editingOptions.allowDeleting) && _getEditMode(that) === EDIT_MODE_BATCH) {
                        buttonItems.push(prepareButtonItem("save", "saveEditData", 21));
                        buttonItems.push(prepareButtonItem("revert", "cancelEditData", 22))
                    }
                    return buttonItems
                },
                showHighlighting: function($cell) {
                    var $highlight = $cell.find("." + CELL_HIGHLIGHT_OUTLINE);
                    if ("TD" === $cell.get(0).tagName && !$highlight.length) {
                        $cell.wrapInner((0, _renderer2.default)("<div>").addClass(CELL_HIGHLIGHT_OUTLINE + " " + POINTER_EVENTS_TARGET_CLASS))
                    }
                },
                highlightDataCell: function($cell, parameters) {
                    var isEditableCell = parameters.setValue;
                    var cellModified = this.isCellModified(parameters);
                    if (cellModified && parameters.column.setCellValue) {
                        this.showHighlighting($cell);
                        $cell.addClass(CELL_MODIFIED)
                    } else {
                        if (isEditableCell) {
                            this.showHighlighting($cell)
                        }
                    }
                },
                resetRowAndPageIndices: function() {
                    var that = this;
                    (0, _iterator.each)(that._editData, function(_, editData) {
                        if (editData.pageIndex !== that._pageIndex) {
                            delete editData.pageIndex;
                            delete editData.rowIndex
                        }
                    })
                },
                _afterInsertRow: function() {},
                _beforeSaveEditData: function(editData) {
                    if (editData && !_type2.default.isDefined(editData.key) && _type2.default.isDefined(editData.type)) {
                        return true
                    }
                },
                _afterSaveEditData: function() {},
                _beforeCancelEditData: function() {},
                _allowEditAction: function(actionName, options) {
                    var allowEditAction = this.option("editing." + actionName);
                    if (_type2.default.isFunction(allowEditAction)) {
                        allowEditAction = allowEditAction({
                            component: this.component,
                            row: options.row
                        })
                    }
                    return allowEditAction
                },
                allowUpdating: function(options, eventName) {
                    var startEditAction = this.option("editing.startEditAction") || DEFAULT_START_EDIT_ACTION;
                    var needCallback = arguments.length > 1 ? startEditAction === eventName || "down" === eventName : true;
                    return needCallback && this._allowEditAction("allowUpdating", options)
                },
                allowDeleting: function(options) {
                    return this._allowEditAction("allowDeleting", options)
                },
                isCellModified: function(parameters) {
                    var columnIndex = parameters.columnIndex;
                    var modifiedValues = parameters.row && (parameters.row.isNewRow ? parameters.row.values : parameters.row.modifiedValues);
                    return !!modifiedValues && void 0 !== modifiedValues[columnIndex]
                }
            }
        }());
        module.exports = {
            defaultOptions: function() {
                return {
                    editing: {
                        mode: "row",
                        refreshMode: "full",
                        allowAdding: false,
                        allowUpdating: false,
                        allowDeleting: false,
                        useIcons: false,
                        selectTextOnEditStart: false,
                        confirmDelete: true,
                        texts: {
                            editRow: _message2.default.format("dxDataGrid-editingEditRow"),
                            saveAllChanges: _message2.default.format("dxDataGrid-editingSaveAllChanges"),
                            saveRowChanges: _message2.default.format("dxDataGrid-editingSaveRowChanges"),
                            cancelAllChanges: _message2.default.format("dxDataGrid-editingCancelAllChanges"),
                            cancelRowChanges: _message2.default.format("dxDataGrid-editingCancelRowChanges"),
                            addRow: _message2.default.format("dxDataGrid-editingAddRow"),
                            deleteRow: _message2.default.format("dxDataGrid-editingDeleteRow"),
                            undeleteRow: _message2.default.format("dxDataGrid-editingUndeleteRow"),
                            confirmDeleteMessage: _message2.default.format("dxDataGrid-editingConfirmDeleteMessage"),
                            confirmDeleteTitle: ""
                        },
                        form: {
                            colCount: 2
                        },
                        popup: {},
                        startEditAction: "click"
                    }
                }
            },
            controllers: {
                editing: EditingController
            },
            extenders: {
                controllers: {
                    data: {
                        init: function() {
                            this._editingController = this.getController("editing");
                            this.callBase()
                        },
                        reload: function(full, repaintChangesOnly) {
                            !repaintChangesOnly && this._editingController.refresh();
                            return this.callBase.apply(this, arguments)
                        },
                        repaintRows: function() {
                            if (this.getController("editing").isSaving()) {
                                return
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _updateEditRow: function(items) {
                            var editingController = this._editingController;
                            var editRowIndex = editingController.getEditRowIndex();
                            var editItem = items[editRowIndex];
                            if (editItem) {
                                editItem.isEditing = true;
                                if (editingController.getEditMode() === EDIT_MODE_FORM) {
                                    editItem.rowType = "detail"
                                }
                            }
                        },
                        _updateItemsCore: function(change) {
                            this.callBase(change);
                            this._updateEditRow(this.items())
                        },
                        _applyChangeUpdate: function(change) {
                            this._updateEditRow(change.items);
                            this.callBase(change)
                        },
                        _applyChangesOnly: function(change) {
                            this._updateEditRow(change.items);
                            this.callBase(change)
                        },
                        _processItems: function(items, change) {
                            items = this._editingController.processItems(items, change);
                            return this.callBase(items, change)
                        },
                        _processDataItem: function(dataItem, options) {
                            this._editingController.processDataItem(dataItem, options, this.generateDataValues);
                            return this.callBase(dataItem, options)
                        },
                        _processItem: function(item, options) {
                            item = this.callBase(item, options);
                            if (item.isNewRow) {
                                options.dataIndex--;
                                delete item.dataIndex
                            }
                            return item
                        },
                        _correctRowIndices: function(getRowIndexCorrection) {
                            this.callBase.apply(this, arguments);
                            this._editingController.correctEditRowIndex(getRowIndexCorrection)
                        },
                        _getChangedColumnIndices: function(oldItem, newItem, rowIndex, isLiveUpdate) {
                            var editingController = this.getController("editing");
                            var isRowEditMode = editingController.isRowEditMode();
                            if (oldItem.isNewRow !== newItem.isNewRow || oldItem.removed !== newItem.removed || isRowEditMode && oldItem.isEditing !== newItem.isEditing) {
                                return
                            }
                            if (oldItem.rowType === newItem.rowType && isRowEditMode && editingController.isEditRow(rowIndex) && isLiveUpdate) {
                                return []
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _isCellChanged: function(oldRow, newRow, visibleRowIndex, columnIndex, isLiveUpdate) {
                            var editingController = this.getController("editing");
                            var cell = oldRow.cells && oldRow.cells[columnIndex];
                            var isEditing = editingController && editingController.isEditCell(visibleRowIndex, columnIndex);
                            if (isLiveUpdate && isEditing) {
                                return false
                            }
                            if (cell && cell.column && !cell.column.showEditorAlways && cell.isEditing !== isEditing) {
                                return true
                            }
                            return this.callBase.apply(this, arguments)
                        }
                    }
                },
                views: {
                    rowsView: {
                        init: function() {
                            this.callBase();
                            this._editingController = this.getController("editing")
                        },
                        getCellElements: function(rowIndex) {
                            var $cellElements = this.callBase(rowIndex);
                            var editingController = this._editingController;
                            var editForm = editingController.getEditForm();
                            var editFormRowIndex = editingController.getEditFormRowIndex();
                            if (editFormRowIndex === rowIndex && $cellElements && editForm) {
                                return editForm.$element().find("." + this.addWidgetPrefix(EDIT_FORM_ITEM_CLASS) + ", ." + BUTTON_CLASS)
                            }
                            return $cellElements
                        },
                        getCellIndex: function($cell, rowIndex) {
                            if (!$cell.is("td") && rowIndex >= 0) {
                                var $cellElements = this.getCellElements(rowIndex);
                                var cellIndex = -1;
                                (0, _iterator.each)($cellElements, function(index, cellElement) {
                                    if ((0, _renderer2.default)(cellElement).find($cell).length) {
                                        cellIndex = index
                                    }
                                });
                                return cellIndex
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _getVisibleColumnIndex: function($cells, rowIndex, columnIdentifier) {
                            var editFormRowIndex = this._editingController.getEditFormRowIndex();
                            if (editFormRowIndex === rowIndex && _type2.default.isString(columnIdentifier)) {
                                var column = this._columnsController.columnOption(columnIdentifier);
                                return this._getEditFormEditorVisibleIndex($cells, column)
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _getEditFormEditorVisibleIndex: function($cells, column) {
                            var visibleIndex = -1;
                            (0, _iterator.each)($cells, function(index, cellElement) {
                                var item = (0, _renderer2.default)(cellElement).find(".dx-field-item-content").data("dx-form-item");
                                if (item && item.column && column && item.column.index === column.index) {
                                    visibleIndex = index;
                                    return false
                                }
                            });
                            return visibleIndex
                        },
                        publicMethods: function() {
                            return this.callBase().concat(["cellValue"])
                        },
                        _getCellTemplate: function(options) {
                            var that = this;
                            var template = that._editingController.getColumnTemplate(options);
                            return template || that.callBase(options)
                        },
                        _isNativeClick: function() {
                            return (_devices2.default.real().ios || _devices2.default.real().android) && this.option("editing.allowUpdating")
                        },
                        _createTable: function() {
                            var that = this;
                            var $table = that.callBase.apply(that, arguments);
                            if (!_isRowEditMode(that) && that.option("editing.allowUpdating")) {
                                _events_engine2.default.on($table, (0, _utils.addNamespace)(_hold2.default.name, "dxDataGridRowsView"), "td:not(." + EDITOR_CELL_CLASS + ")", that.createAction(function() {
                                    var editingController = that._editingController;
                                    if (editingController.isEditing()) {
                                        editingController.closeEditCell()
                                    }
                                }))
                            }
                            return $table
                        },
                        _createRow: function(row) {
                            var $row = this.callBase(row);
                            if (row) {
                                var editingController = this._editingController;
                                var isEditRow = editingController.isEditRow(row.rowIndex);
                                var isRowRemoved = !!row.removed;
                                var isRowInserted = !!row.isNewRow;
                                var isRowModified = !!row.modified;
                                if (_getEditMode(this) === EDIT_MODE_BATCH) {
                                    isRowRemoved && $row.addClass(ROW_REMOVED)
                                } else {
                                    isEditRow && $row.addClass(EDIT_ROW)
                                }
                                isRowInserted && $row.addClass(ROW_INSERTED);
                                isRowModified && $row.addClass(ROW_MODIFIED);
                                if (isEditRow || isRowInserted || isRowRemoved) {
                                    $row.removeClass(ROW_SELECTED)
                                }
                                if (isEditRow && "detail" === row.rowType) {
                                    $row.addClass(this.addWidgetPrefix(EDIT_FORM_CLASS))
                                }
                            }
                            return $row
                        },
                        _getColumnIndexByElement: function($element) {
                            var $tableElement = $element.closest("table");
                            var $tableElements = this.getTableElements();
                            while ($tableElement.length && !$tableElements.filter($tableElement).length) {
                                $element = $tableElement.closest("td");
                                $tableElement = $element.closest("table")
                            }
                            return this._getColumnIndexByElementCore($element)
                        },
                        _getColumnIndexByElementCore: function($element) {
                            var $targetElement = $element.closest("." + ROW_CLASS + "> td:not(.dx-master-detail-cell)");
                            return this.getCellIndex($targetElement)
                        },
                        _editCellByClick: function(e, eventName) {
                            var that = this;
                            var editingController = that._editingController;
                            var $targetElement = (0, _renderer2.default)(e.event.target);
                            var columnIndex = that._getColumnIndexByElement($targetElement);
                            var row = that._dataController.items()[e.rowIndex];
                            var allowUpdating = editingController.allowUpdating({
                                row: row
                            }, eventName) || row && row.isNewRow;
                            var column = that._columnsController.getVisibleColumns()[columnIndex];
                            var allowEditing = allowUpdating && column && (column.allowEditing || editingController.isEditCell(e.rowIndex, columnIndex));
                            var startEditAction = that.option("editing.startEditAction") || "click";
                            if ("down" === eventName) {
                                return column && column.showEditorAlways && allowEditing && editingController.editCell(e.rowIndex, columnIndex)
                            }
                            if ("click" === eventName && "dblClick" === startEditAction && !editingController.isEditCell(e.rowIndex, columnIndex)) {
                                editingController.closeEditCell()
                            }
                            if (allowEditing && eventName === startEditAction) {
                                return editingController.editCell(e.rowIndex, columnIndex) || editingController.isEditRow(e.rowIndex)
                            }
                        },
                        _rowPointerDown: function(e) {
                            var _this14 = this;
                            this._pointerDownTimeout = setTimeout(function() {
                                _this14._editCellByClick(e, "down")
                            })
                        },
                        _rowClick: function(e) {
                            var isEditForm = (0, _renderer2.default)(e.rowElement).hasClass(this.addWidgetPrefix(EDIT_FORM_CLASS));
                            e.event[TARGET_COMPONENT_NAME] = this.component;
                            if (!this._editCellByClick(e, "click") && !isEditForm) {
                                this.callBase.apply(this, arguments)
                            }
                        },
                        _rowDblClick: function(e) {
                            if (!this._editCellByClick(e, "dblClick")) {
                                this.callBase.apply(this, arguments)
                            }
                        },
                        _cellPrepared: function($cell, parameters) {
                            var editingController = this._editingController;
                            var isCommandCell = !!parameters.column.command;
                            var isEditableCell = parameters.setValue;
                            var isEditing = parameters.isEditing || editingController.isEditRow(parameters.rowIndex) && parameters.column.allowEditing;
                            if ("data" === parameters.rowType && !parameters.column.command && (isEditing || parameters.column.showEditorAlways)) {
                                var alignment = parameters.column.alignment;
                                $cell.addClass(EDITOR_CELL_CLASS).toggleClass(this.addWidgetPrefix(READONLY_CLASS), !isEditableCell).toggleClass(CELL_FOCUS_DISABLED_CLASS, !isEditableCell);
                                if (alignment) {
                                    $cell.find(EDITORS_INPUT_SELECTOR).first().css("textAlign", alignment)
                                }
                            }
                            if (isEditing) {
                                this._editCellPrepared($cell)
                            }
                            if (parameters.column && !isCommandCell) {
                                editingController.highlightDataCell($cell, parameters)
                            }
                            this.callBase.apply(this, arguments)
                        },
                        _editCellPrepared: function($cell) {},
                        _formItemPrepared: function() {},
                        _isFormItem: function(parameters) {
                            var isDetailRow = "detail" === parameters.rowType || "detailAdaptive" === parameters.rowType;
                            var isPopupEditing = "data" === parameters.rowType && "popup" === _getEditMode(this);
                            return (isDetailRow || isPopupEditing) && parameters.item
                        },
                        _updateCell: function($cell, parameters) {
                            if (this._isFormItem(parameters)) {
                                this._formItemPrepared(parameters, $cell)
                            } else {
                                this.callBase($cell, parameters)
                            }
                        },
                        _update: function(change) {
                            this.callBase(change);
                            if ("updateSelection" === change.changeType) {
                                this.getTableElements().children("tbody").children("." + EDIT_ROW).removeClass(ROW_SELECTED)
                            }
                        },
                        _getCellOptions: function(options) {
                            var cellOptions = this.callBase(options);
                            cellOptions.isEditing = this._editingController.isEditCell(cellOptions.rowIndex, cellOptions.columnIndex);
                            return cellOptions
                        },
                        _renderCellContent: function($cell, options) {
                            if ("data" === options.rowType && _getEditMode(this) === EDIT_MODE_POPUP && false === options.row.visible) {
                                return
                            }
                            this.callBase.apply(this, arguments)
                        },
                        cellValue: function(rowIndex, columnIdentifier, value, text) {
                            var cellOptions = this.getCellOptions(rowIndex, columnIdentifier);
                            if (cellOptions) {
                                if (void 0 === value) {
                                    return cellOptions.value
                                } else {
                                    this._editingController.updateFieldValue(cellOptions, value, text, true)
                                }
                            }
                        },
                        dispose: function() {
                            this.callBase.apply(this, arguments);
                            clearTimeout(this._pointerDownTimeout)
                        }
                    },
                    headerPanel: {
                        _getToolbarItems: function() {
                            var items = this.callBase();
                            var editButtonItems = this.getController("editing").prepareEditButtons(this);
                            return editButtonItems.concat(items)
                        },
                        optionChanged: function(args) {
                            var fullName = args.fullName;
                            switch (args.name) {
                                case "editing":
                                    var isEditingPopupOption = fullName && 0 === fullName.indexOf(EDITING_POPUP_OPTION_NAME);
                                    if (!isEditingPopupOption) {
                                        this._invalidate()
                                    }
                                    this.callBase(args);
                                    break;
                                default:
                                    this.callBase(args)
                            }
                        },
                        isVisible: function() {
                            var that = this;
                            var editingOptions = that.getController("editing").option("editing");
                            return that.callBase() || editingOptions && (editingOptions.allowAdding || (editingOptions.allowUpdating || editingOptions.allowDeleting) && editingOptions.mode === EDIT_MODE_BATCH)
                        }
                    }
                }
            }
        }
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.validating.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _validation_engine = __webpack_require__( /*! ../validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _validator = __webpack_require__( /*! ../validator */ 202);
        var _validator2 = _interopRequireDefault(_validator);
        var _tooltip = __webpack_require__( /*! ../tooltip */ 168);
        var _tooltip2 = _interopRequireDefault(_tooltip);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _load_indicator = __webpack_require__( /*! ../load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var INVALIDATE_CLASS = "invalid";
        var REVERT_TOOLTIP_CLASS = "revert-tooltip";
        var ROWS_VIEW_CLASS = "rowsview";
        var INVALID_MESSAGE_CLASS = "dx-invalid-message";
        var WIDGET_INVALID_MESSAGE_CLASS = "invalid-message";
        var INVALID_MESSAGE_ALWAYS_CLASS = "dx-invalid-message-always";
        var REVERT_BUTTON_CLASS = "dx-revert-button";
        var CELL_HIGHLIGHT_OUTLINE = "dx-highlight-outline";
        var VALIDATOR_CLASS = "validator";
        var PENDING_INDICATOR_CLASS = "dx-pending-indicator";
        var VALIDATION_PENDING_CLASS = "dx-validation-pending";
        var INSERT_INDEX = "__DX_INSERT_INDEX__";
        var PADDING_BETWEEN_TOOLTIPS = 2;
        var EDIT_MODE_ROW = "row";
        var EDIT_MODE_FORM = "form";
        var EDIT_MODE_BATCH = "batch";
        var EDIT_MODE_CELL = "cell";
        var EDIT_MODE_POPUP = "popup";
        var GROUP_CELL_CLASS = "dx-group-cell";
        var FORM_BASED_MODES = [EDIT_MODE_POPUP, EDIT_MODE_FORM];
        var COMMAND_TRANSPARENT = "transparent";
        var VALIDATION_STATUS = {
            valid: "valid",
            invalid: "invalid",
            pending: "pending"
        };
        var EDIT_DATA_INSERT_TYPE = "insert";
        var ValidatingController = _uiGrid_core2.default.Controller.inherit(function() {
            return {
                init: function() {
                    this._editingController = this.getController("editing");
                    this.createAction("onRowValidating")
                },
                _getBrokenRules: function(editData, validationResults) {
                    var brokenRules;
                    if (validationResults) {
                        brokenRules = validationResults.brokenRules || validationResults.brokenRule && [validationResults.brokenRule]
                    } else {
                        brokenRules = editData.brokenRules || []
                    }
                    return brokenRules
                },
                _rowValidating: function(editData, validationResults) {
                    var deferred = new _deferred.Deferred;
                    var brokenRules = this._getBrokenRules(editData, validationResults);
                    var isValid = validationResults ? validationResults.isValid : editData.isValid;
                    var parameters = {
                        brokenRules: brokenRules,
                        isValid: isValid,
                        key: editData.key,
                        newData: editData.data,
                        oldData: editData.oldData,
                        promise: null,
                        errorText: this.getHiddenValidatorsErrorText(brokenRules)
                    };
                    this.executeAction("onRowValidating", parameters);
                    (0, _deferred.when)(parameters.promise).always(function() {
                        editData.isValid = parameters.isValid;
                        editData.errorText = parameters.errorText;
                        deferred.resolve(parameters)
                    });
                    return deferred.promise()
                },
                getHiddenValidatorsErrorText: function(brokenRules) {
                    var brokenRulesMessages = [];
                    (0, _iterator.each)(brokenRules, function(_, brokenRule) {
                        var column = brokenRule.column;
                        var isGroupExpandColumn = column && void 0 !== column.groupIndex && !column.showWhenGrouped;
                        var isVisibleColumn = column && column.visible;
                        if (!brokenRule.validator.$element().parent().length && (!isVisibleColumn || isGroupExpandColumn)) {
                            brokenRulesMessages.push(brokenRule.message)
                        }
                    });
                    return brokenRulesMessages.join(", ")
                },
                validate: function(isFull) {
                    var _this = this;
                    var isValid = true;
                    var editingController = this._editingController;
                    var deferred = new _deferred.Deferred;
                    var completeList = [];
                    var editMode = editingController.getEditMode();
                    isFull = isFull || editMode === EDIT_MODE_ROW;
                    if (this._isValidationInProgress) {
                        return deferred.resolve(false).promise()
                    }
                    this._isValidationInProgress = true;
                    if (isFull) {
                        editingController.addDeferred(deferred);
                        (0, _iterator.each)(editingController._editData, function(index, editData) {
                            if (editData.type && "remove" !== editData.type) {
                                var validationResult = _this.validateGroup(editData);
                                completeList.push(validationResult);
                                validationResult.done(function(validationResult) {
                                    editData.validated = true;
                                    isValid = isValid && validationResult.isValid
                                })
                            }
                        })
                    } else {
                        if (this._currentCellValidator) {
                            var validationResult = this.validateGroup(this._currentCellValidator._findGroup());
                            completeList.push(validationResult);
                            validationResult.done(function(validationResult) {
                                isValid = validationResult.isValid
                            })
                        }
                    }
                    _deferred.when.apply(void 0, completeList).done(function() {
                        _this._isValidationInProgress = false;
                        deferred.resolve(isValid)
                    });
                    return deferred.promise()
                },
                validateGroup: function validateGroup(editData) {
                    var _this2 = this;
                    var result = new _deferred.Deferred;
                    var validateGroup = _validation_engine2.default.getGroupConfig(editData);
                    var validationResult;
                    if (validateGroup && validateGroup.validators.length) {
                        this.resetRowValidationResults(editData);
                        validationResult = _validation_engine2.default.validateGroup(editData)
                    }(0, _deferred.when)(validationResult && validationResult.complete || validationResult).done(function(validationResult) {
                        (0, _deferred.when)(_this2._rowValidating(editData, validationResult)).done(result.resolve)
                    });
                    return result.promise()
                },
                isRowDataModified: function(editData) {
                    return !(0, _type.isEmptyObject)(editData.data)
                },
                updateEditData: function(editData) {
                    var editMode = this._editingController.getEditMode();
                    if (FORM_BASED_MODES.indexOf(editMode) === -1) {
                        if (editData.type === EDIT_DATA_INSERT_TYPE && !this.isRowDataModified(editData)) {
                            editData.isValid = true;
                            return
                        }
                        this.setDisableApplyValidationResults(true);
                        if (_validation_engine2.default.getGroupConfig(editData)) {
                            var validationResult = _validation_engine2.default.validateGroup(editData);
                            (0, _deferred.when)(validationResult.complete || validationResult).done(function(validationResult) {
                                editData.isValid = validationResult.isValid;
                                editData.brokenRules = validationResult.brokenRules
                            })
                        } else {
                            if (!editData.brokenRules || !editData.brokenRules.length) {
                                editData.isValid = true
                            }
                        }
                        this.setDisableApplyValidationResults(false)
                    } else {
                        editData.isValid = true
                    }
                },
                setValidator: function(validator) {
                    this._currentCellValidator = validator
                },
                renderCellPendingIndicator: function($container) {
                    var $indicator = $container.find("." + PENDING_INDICATOR_CLASS);
                    if (!$indicator.length) {
                        var $indicatorContainer = $container.find("." + CELL_HIGHLIGHT_OUTLINE);
                        if (!$indicatorContainer.length) {
                            $indicatorContainer = $container
                        }
                        $indicator = (0, _renderer2.default)("<div>").appendTo($indicatorContainer).addClass(PENDING_INDICATOR_CLASS);
                        this._createComponent($indicator, _load_indicator2.default);
                        $container.addClass(VALIDATION_PENDING_CLASS)
                    }
                },
                disposeCellPendingIndicator: function($container) {
                    var $indicator = $container.find("." + PENDING_INDICATOR_CLASS);
                    if ($indicator.length) {
                        var indicator = _load_indicator2.default.getInstance($indicator);
                        if (indicator) {
                            indicator.dispose();
                            indicator.$element().remove()
                        }
                        $container.removeClass(VALIDATION_PENDING_CLASS)
                    }
                },
                validationStatusChanged: function(result) {
                    var validator = result.validator;
                    var editData = validator.option("validationGroup");
                    var column = validator.option("dataGetter")().column;
                    this.updateCellValidationResult({
                        rowKey: editData.key,
                        columnIndex: column.index,
                        validationResult: result
                    })
                },
                validatorInitialized: function(arg) {
                    arg.component.on("validating", this.validationStatusChanged.bind(this));
                    arg.component.on("validated", this.validationStatusChanged.bind(this))
                },
                validatorDisposing: function(arg) {
                    var validator = arg.component;
                    var editData = validator.option("validationGroup");
                    var column = validator.option("dataGetter")().column;
                    var result = this.getCellValidationResult({
                        rowKey: editData.key,
                        columnIndex: column.index
                    });
                    if (result && result.status === VALIDATION_STATUS.pending) {
                        this.removeCellValidationResult({
                            editData: editData,
                            columnIndex: column.index
                        })
                    }
                },
                applyValidationResult: function($container, result) {
                    var validator = result.validator;
                    var editData = validator.option("validationGroup");
                    var column = validator.option("dataGetter")().column;
                    result.brokenRules && result.brokenRules.forEach(function(rule) {
                        rule.columnIndex = column.index;
                        rule.column = column
                    });
                    if ($container) {
                        var validationResult = this.getCellValidationResult({
                            rowKey: editData.key,
                            columnIndex: column.index
                        });
                        var requestIsDisabled = validationResult && validationResult.disabledPendingId === result.id;
                        if (this._disableApplyValidationResults || requestIsDisabled) {
                            return
                        }
                        if (result.status === VALIDATION_STATUS.invalid) {
                            var $focus = $container.find(":focus");
                            this._editingController.showHighlighting($container, true);
                            if (!(0, _selectors.focused)($focus)) {
                                _events_engine2.default.trigger($focus, "focus");
                                _events_engine2.default.trigger($focus, _pointer2.default.down)
                            }
                        }
                        var editor = !column.editCellTemplate && this.getController("editorFactory").getEditorInstance($container);
                        if (result.status === VALIDATION_STATUS.pending) {
                            this._editingController.showHighlighting($container, true);
                            if (editor) {
                                editor.option("validationStatus", VALIDATION_STATUS.pending)
                            } else {
                                this.renderCellPendingIndicator($container)
                            }
                        } else {
                            if (editor) {
                                editor.option("validationStatus", VALIDATION_STATUS.valid)
                            } else {
                                this.disposeCellPendingIndicator($container)
                            }
                        }
                        $container.toggleClass(this.addWidgetPrefix(INVALIDATE_CLASS), result.status === VALIDATION_STATUS.invalid)
                    }
                },
                createValidator: function(parameters, $container) {
                    var _this3 = this;
                    var editData;
                    var editIndex;
                    var editingController = this._editingController;
                    var column = parameters.column;
                    var getValue = function() {
                        var value = column.calculateCellValue(editData.data || {});
                        return void 0 !== value ? value : parameters.value
                    };
                    var showEditorAlways = column.showEditorAlways;
                    if ((0, _type.isDefined)(column.command) || !column.validationRules || !Array.isArray(column.validationRules) || !column.validationRules.length) {
                        return
                    }
                    editIndex = editingController.getIndexByKey(parameters.key, editingController._editData);
                    if (editIndex < 0) {
                        if (!showEditorAlways) {
                            var columnsController = this.getController("columns");
                            var visibleColumns = columnsController && columnsController.getVisibleColumns() || [];
                            showEditorAlways = visibleColumns.some(function(column) {
                                return column.showEditorAlways
                            })
                        }
                        if (showEditorAlways && editingController.isCellOrBatchEditMode() && editingController.allowUpdating({
                                row: parameters.row
                            })) {
                            editIndex = editingController._addEditData({
                                key: parameters.key,
                                oldData: parameters.data
                            })
                        }
                    }
                    if (editIndex >= 0) {
                        if ($container && !$container.length) {
                            _ui2.default.log("E1050");
                            return
                        }
                        editData = editingController._editData[editIndex];
                        var useDefaultValidator = $container && $container.hasClass("dx-widget");
                        $container && $container.addClass(this.addWidgetPrefix(VALIDATOR_CLASS));
                        var validator = new _validator2.default($container || (0, _renderer2.default)("<div>"), {
                            name: column.caption,
                            validationRules: (0, _extend.extend)(true, [], column.validationRules),
                            validationGroup: editData,
                            adapter: useDefaultValidator ? null : {
                                getValue: getValue,
                                applyValidationResults: function(result) {
                                    _this3.applyValidationResult($container, result)
                                }
                            },
                            dataGetter: function() {
                                return {
                                    data: (0, _uiGrid_core3.createObjectWithChanges)(editData.oldData, editData.data),
                                    column: column
                                }
                            },
                            onInitialized: this.validatorInitialized.bind(this),
                            onDisposing: this.validatorDisposing.bind(this)
                        });
                        if (useDefaultValidator) {
                            var adapter = validator.option("adapter");
                            if (adapter) {
                                adapter.getValue = getValue;
                                adapter.validationRequestsCallbacks.empty()
                            }
                        }
                        return validator
                    }
                },
                setDisableApplyValidationResults: function(flag) {
                    this._disableApplyValidationResults = flag
                },
                getDisableApplyValidationResults: function() {
                    return this._disableApplyValidationResults
                },
                isCurrentValidatorProcessing: function(_ref) {
                    var rowKey = _ref.rowKey,
                        columnIndex = _ref.columnIndex;
                    return this._currentCellValidator && this._currentCellValidator.option("validationGroup").key === rowKey && this._currentCellValidator.option("dataGetter")().column.index === columnIndex
                },
                validateCell: function(validator) {
                    var cellParams = {
                        rowKey: validator.option("validationGroup").key,
                        columnIndex: validator.option("dataGetter")().column.index
                    };
                    var validationResult = this.getCellValidationResult(cellParams);
                    var stateRestored = !!validationResult;
                    if (!validationResult) {
                        validationResult = validator.validate()
                    }
                    var deferred = new _deferred.Deferred;
                    var adapter = validator.option("adapter");
                    if (stateRestored && validationResult.status === VALIDATION_STATUS.pending) {
                        this.updateCellValidationResult(cellParams);
                        adapter.applyValidationResults(validationResult)
                    }(0, _deferred.when)(validationResult.complete || validationResult).done(function(validationResult) {
                        stateRestored && adapter.applyValidationResults(validationResult);
                        deferred.resolve(validationResult)
                    });
                    return deferred.promise()
                },
                updateCellValidationResult: function(_ref2) {
                    var rowKey = _ref2.rowKey,
                        columnIndex = _ref2.columnIndex,
                        validationResult = _ref2.validationResult;
                    var editData = this._editingController.getEditDataByKey(rowKey);
                    if (!editData) {
                        return
                    }
                    if (!editData.validationResults) {
                        editData.validationResults = {}
                    }
                    var result;
                    if (validationResult) {
                        result = (0, _extend.extend)({}, validationResult);
                        editData.validationResults[columnIndex] = result;
                        if (validationResult.status === VALIDATION_STATUS.pending) {
                            if (this._editingController.getEditMode() === EDIT_MODE_CELL) {
                                result.deferred = new _deferred.Deferred;
                                result.complete.always(function() {
                                    result.deferred.resolve()
                                });
                                this._editingController.addDeferred(result.deferred)
                            }
                            if (this._disableApplyValidationResults) {
                                result.disabledPendingId = validationResult.id;
                                return
                            }
                        }
                    } else {
                        result = editData.validationResults[columnIndex]
                    }
                    if (result && result.disabledPendingId) {
                        delete result.disabledPendingId
                    }
                },
                getCellValidationResult: function(_ref3) {
                    var rowKey = _ref3.rowKey,
                        columnIndex = _ref3.columnIndex;
                    var editData = this._editingController.getEditDataByKey(rowKey);
                    return editData && editData.validationResults && editData.validationResults[columnIndex]
                },
                removeCellValidationResult: function(_ref4) {
                    var editData = _ref4.editData,
                        columnIndex = _ref4.columnIndex;
                    if (editData && editData.validationResults) {
                        var result = editData.validationResults[columnIndex];
                        result && result.deferred && result.deferred.reject("cancel");
                        delete editData.validationResults[columnIndex]
                    }
                },
                resetRowValidationResults: function(editData) {
                    if (editData) {
                        editData.validationResults && delete editData.validationResults;
                        delete editData.validated
                    }
                },
                isInvalidCell: function(_ref5) {
                    var rowKey = _ref5.rowKey,
                        columnIndex = _ref5.columnIndex;
                    var result = this.getCellValidationResult({
                        rowKey: rowKey,
                        columnIndex: columnIndex
                    });
                    return !!result && result.status === VALIDATION_STATUS.invalid
                },
                getCellValidator: function(_ref6) {
                    var rowKey = _ref6.rowKey,
                        columnIndex = _ref6.columnIndex;
                    var editData = this._editingController.getEditDataByKey(rowKey);
                    var groupConfig = editData && _validation_engine2.default.getGroupConfig(editData);
                    var validators = groupConfig && groupConfig.validators;
                    return validators && validators.filter(function(v) {
                        var column = v.option("dataGetter")().column;
                        return column ? column.index === columnIndex : false
                    })[0]
                }
            }
        }());
        module.exports = {
            defaultOptions: function() {
                return {
                    editing: {
                        texts: {
                            validationCancelChanges: _message2.default.format("dxDataGrid-validationCancelChanges")
                        }
                    }
                }
            },
            controllers: {
                validating: ValidatingController
            },
            extenders: {
                controllers: {
                    editing: {
                        _addEditData: function(options, row) {
                            var that = this;
                            var validatingController = that.getController("validating");
                            var editDataIndex = that.callBase(options, row);
                            if (editDataIndex >= 0) {
                                var editData = that._editData[editDataIndex];
                                validatingController.updateEditData(editData)
                            }
                            return editDataIndex
                        },
                        _updateRowAndPageIndices: function() {
                            var that = this;
                            var startInsertIndex = that.getView("rowsView").getTopVisibleItemIndex();
                            var rowIndex = startInsertIndex;
                            (0, _iterator.each)(that._editData, function(_, editData) {
                                if (!editData.isValid && editData.pageIndex !== that._pageIndex) {
                                    editData.pageIndex = that._pageIndex;
                                    if (editData.type === EDIT_DATA_INSERT_TYPE) {
                                        editData.rowIndex = startInsertIndex
                                    } else {
                                        editData.rowIndex = rowIndex
                                    }
                                    rowIndex++
                                }
                            })
                        },
                        _needInsertItem: function(editData) {
                            var result = this.callBase.apply(this, arguments);
                            if (result && !editData.isValid) {
                                result = editData.key.pageIndex === this._pageIndex
                            }
                            return result
                        },
                        processItems: function(items, changeType) {
                            var that = this;
                            var i;
                            var editData = that._editData;
                            var dataController = that.getController("data");
                            var getIndexByEditData = function(editData, items) {
                                var index = -1;
                                var isInsert = editData.type === EDIT_DATA_INSERT_TYPE;
                                var key = editData.key;
                                (0, _iterator.each)(items, function(i, item) {
                                    if ((0, _common.equalByValue)(key, isInsert ? item : dataController.keyOf(item))) {
                                        index = i;
                                        return false
                                    }
                                });
                                return index
                            };
                            items = that.callBase(items, changeType);
                            var itemsCount = items.length;
                            var addInValidItem = function(editData) {
                                var data = {
                                    key: editData.key
                                };
                                var index = getIndexByEditData(editData, items);
                                if (index >= 0) {
                                    return
                                }
                                editData.rowIndex = editData.rowIndex > itemsCount ? editData.rowIndex % itemsCount : editData.rowIndex;
                                var rowIndex = editData.rowIndex;
                                data[INSERT_INDEX] = 1;
                                items.splice(rowIndex, 0, data)
                            };
                            if (that.getEditMode() === EDIT_MODE_BATCH && "prepend" !== changeType && "append" !== changeType) {
                                for (i = 0; i < editData.length; i++) {
                                    if (editData[i].type && editData[i].pageIndex === that._pageIndex && editData[i].key.pageIndex !== that._pageIndex) {
                                        addInValidItem(editData[i])
                                    }
                                }
                            }
                            return items
                        },
                        processDataItem: function(item) {
                            var that = this;
                            var isInserted = item.data[INSERT_INDEX];
                            var key = isInserted ? item.data.key : item.key;
                            var editMode = that.getEditMode();
                            if (editMode === EDIT_MODE_BATCH && isInserted && key) {
                                var editIndex = (0, _uiGrid_core3.getIndexByKey)(key, that._editData);
                                if (editIndex >= 0) {
                                    var editData = that._editData[editIndex];
                                    if (editData.type !== EDIT_DATA_INSERT_TYPE) {
                                        item.data = (0, _extend.extend)(true, {}, editData.oldData, editData.data);
                                        item.key = key
                                    }
                                }
                            }
                            that.callBase.apply(that, arguments)
                        },
                        _getInvisibleColumns: function(editData) {
                            var _this4 = this;
                            var columnsController = this.getController("columns");
                            var hasInvisibleRows;
                            var invisibleColumns = columnsController.getInvisibleColumns();
                            if (this.isCellOrBatchEditMode()) {
                                hasInvisibleRows = editData.some(function(rowEditData) {
                                    var rowIndex = _this4._dataController.getRowIndexByKey(rowEditData.key);
                                    return rowIndex < 0
                                })
                            }
                            return hasInvisibleRows ? columnsController.getColumns() : invisibleColumns
                        },
                        _createInvisibleColumnValidators: function(editData) {
                            var validatingController = this.getController("validating");
                            var columnsController = this.getController("columns");
                            var invisibleColumns = this._getInvisibleColumns(editData).filter(function(column) {
                                return !column.isBand
                            });
                            var groupColumns = columnsController.getGroupColumns().filter(function(column) {
                                return !column.showWhenGrouped && invisibleColumns.indexOf(column) === -1
                            });
                            var invisibleColumnValidators = [];
                            invisibleColumns.push.apply(invisibleColumns, _toConsumableArray(groupColumns));
                            if (FORM_BASED_MODES.indexOf(this.getEditMode()) === -1) {
                                (0, _iterator.each)(invisibleColumns, function(_, column) {
                                    editData.forEach(function(options) {
                                        var data;
                                        if (options.type === EDIT_DATA_INSERT_TYPE) {
                                            data = options.data
                                        } else {
                                            if ("update" === options.type) {
                                                data = (0, _uiGrid_core3.createObjectWithChanges)(options.oldData, options.data)
                                            }
                                        }
                                        if (data) {
                                            var validator = validatingController.createValidator({
                                                column: column,
                                                key: options.key,
                                                value: column.calculateCellValue(data)
                                            });
                                            if (validator) {
                                                invisibleColumnValidators.push(validator)
                                            }
                                        }
                                    })
                                })
                            }
                            return function() {
                                invisibleColumnValidators.forEach(function(validator) {
                                    validator.dispose()
                                })
                            }
                        },
                        _beforeSaveEditData: function(editData, editIndex) {
                            var _this5 = this;
                            var result = this.callBase.apply(this, arguments);
                            var validatingController = this.getController("validating");
                            if (editData) {
                                var isValid = "remove" === editData.type || editData.isValid;
                                result = result || !isValid
                            } else {
                                var disposeValidators = this._createInvisibleColumnValidators(this._editData);
                                result = new _deferred.Deferred;
                                this.executeOperation(result, function() {
                                    validatingController.validate(true).done(function(isFullValid) {
                                        disposeValidators();
                                        _this5._updateRowAndPageIndices();
                                        switch (_this5.getEditMode()) {
                                            case EDIT_MODE_CELL:
                                                if (!isFullValid) {
                                                    _this5._focusEditingCell()
                                                }
                                                break;
                                            case EDIT_MODE_BATCH:
                                                if (!isFullValid) {
                                                    _this5._editRowIndex = -1;
                                                    _this5._editColumnIndex = -1;
                                                    _this5.getController("data").updateItems()
                                                }
                                        }
                                        result.resolve(!isFullValid)
                                    })
                                })
                            }
                            return result.promise ? result.promise() : result
                        },
                        _beforeEditCell: function(rowIndex, columnIndex, item) {
                            var result = this.callBase(rowIndex, columnIndex, item);
                            if (this.getEditMode() === EDIT_MODE_CELL) {
                                var $cell = this._rowsView._getCellElement(rowIndex, columnIndex);
                                var validator = $cell && $cell.data("dxValidator");
                                var value = validator && validator.option("adapter").getValue();
                                if (validator && void 0 !== value) {
                                    var validatingController = this.getController("validating");
                                    var deferred = new _deferred.Deferred;
                                    (0, _deferred.when)(validatingController.validateCell(validator), result).done(function(validationResult, result) {
                                        deferred.resolve(validationResult.status === VALIDATION_STATUS.valid && result)
                                    });
                                    return deferred.promise()
                                } else {
                                    if (!validator) {
                                        return result
                                    }
                                }
                            }
                        },
                        _afterSaveEditData: function() {
                            var _this6 = this;
                            var $firstErrorRow;
                            (0, _iterator.each)(this._editData, function(_, editData) {
                                var $errorRow = _this6._showErrorRow(editData);
                                $firstErrorRow = $firstErrorRow || $errorRow
                            });
                            if ($firstErrorRow) {
                                var scrollable = this._rowsView.getScrollable();
                                if (scrollable) {
                                    scrollable.update();
                                    scrollable.scrollToElement($firstErrorRow)
                                }
                            }
                        },
                        _showErrorRow: function(editData) {
                            var $popupContent;
                            var errorHandling = this.getController("errorHandling");
                            var items = this.getController("data").items();
                            var rowIndex = this.getIndexByKey(editData.key, items);
                            if (!editData.isValid && editData.errorText && rowIndex >= 0) {
                                $popupContent = this.getPopupContent();
                                return errorHandling && errorHandling.renderErrorRow(editData.errorText, rowIndex, $popupContent)
                            }
                        },
                        updateFieldValue: function(e) {
                            var validatingController = this.getController("validating");
                            var deferred = new _deferred.Deferred;
                            validatingController.removeCellValidationResult({
                                editData: this.getEditDataByKey(e.key),
                                columnIndex: e.column.index
                            });
                            this.callBase.apply(this, arguments).done(function() {
                                var currentValidator = validatingController.getCellValidator({
                                    rowKey: e.key,
                                    columnIndex: e.column.index
                                });
                                (0, _deferred.when)(currentValidator && validatingController.validateCell(currentValidator)).done(deferred.resolve)
                            });
                            return deferred.promise()
                        },
                        showHighlighting: function($cell, skipValidation) {
                            var _this7 = this;
                            var isValid = true;
                            var callBase = this.callBase;
                            if (!skipValidation) {
                                var validator = $cell.data("dxValidator");
                                if (validator) {
                                    (0, _deferred.when)(this.getController("validating").validateCell(validator)).done(function(validationResult) {
                                        isValid = validationResult.status === VALIDATION_STATUS.valid;
                                        if (isValid) {
                                            callBase.call(_this7, $cell)
                                        }
                                    });
                                    return
                                }
                            }
                            if (isValid) {
                                callBase.call(this, $cell)
                            }
                        },
                        highlightDataCell: function($cell, parameters) {
                            var isEditableCell = !!parameters.setValue;
                            var cellModified = this.isCellModified(parameters);
                            if (!cellModified && isEditableCell) {
                                var validationResult = this.getController("validating").getCellValidationResult({
                                    rowKey: parameters.key,
                                    columnIndex: parameters.column.index
                                });
                                var isValidated = (0, _type.isDefined)(validationResult);
                                var skipValidation = parameters.row.isNewRow || !isValidated;
                                this.showHighlighting($cell, skipValidation);
                                return
                            }
                            this.callBase.apply(this, arguments)
                        },
                        getEditDataByKey: function(key) {
                            return this._editData[(0, _uiGrid_core3.getIndexByKey)(key, this._editData)]
                        },
                        isCellModified: function(parameters) {
                            var cellModified = this.callBase(parameters);
                            var editData = this.getEditDataByKey(parameters.key);
                            var isRowValidated = !!editData && !!editData.validated;
                            var isCellInvalid = !!parameters.row && this.getController("validating").isInvalidCell({
                                rowKey: parameters.key,
                                columnIndex: parameters.column.index
                            });
                            return cellModified || isRowValidated && isCellInvalid
                        }
                    },
                    editorFactory: function() {
                        var getWidthOfVisibleCells = function(that, element) {
                            var rowIndex = (0, _renderer2.default)(element).closest("tr").index();
                            var $cellElements = (0, _renderer2.default)(that._rowsView.getRowElement(rowIndex)).first().children().filter(":not(.dx-hidden-cell)");
                            return that._rowsView._getWidths($cellElements).reduce(function(w1, w2) {
                                return w1 + w2
                            }, 0)
                        };
                        var getBoundaryNonFixedColumnsInfo = function(fixedColumns) {
                            var firstNonFixedColumnIndex;
                            var lastNonFixedColumnIndex;
                            fixedColumns.some(function(column, index) {
                                if (column.command === COMMAND_TRANSPARENT) {
                                    firstNonFixedColumnIndex = 0 === index ? -1 : index;
                                    lastNonFixedColumnIndex = index === fixedColumns.length - 1 ? -1 : index + column.colspan - 1;
                                    return true
                                }
                            });
                            return {
                                startColumnIndex: firstNonFixedColumnIndex,
                                endColumnIndex: lastNonFixedColumnIndex
                            }
                        };
                        return {
                            _showRevertButton: function($container, $targetElement) {
                                var _this8 = this;
                                if (!$targetElement || !$targetElement.length) {
                                    return
                                }
                                var $tooltipElement = $container.find("." + this.addWidgetPrefix(REVERT_TOOLTIP_CLASS));
                                $tooltipElement && $tooltipElement.remove();
                                $tooltipElement = (0, _renderer2.default)("<div>").addClass(this.addWidgetPrefix(REVERT_TOOLTIP_CLASS)).appendTo($container);
                                var tooltipOptions = {
                                    animation: null,
                                    visible: true,
                                    target: $targetElement,
                                    container: $container,
                                    closeOnOutsideClick: false,
                                    closeOnTargetScroll: false,
                                    contentTemplate: function() {
                                        var $buttonElement = (0, _renderer2.default)("<div>").addClass(REVERT_BUTTON_CLASS);
                                        var buttonOptions = {
                                            icon: "revert",
                                            hint: _this8.option("editing.texts.validationCancelChanges"),
                                            onClick: function() {
                                                _this8._editingController.cancelEditData()
                                            }
                                        };
                                        return new _button2.default($buttonElement, buttonOptions).$element()
                                    },
                                    position: {
                                        my: "left top",
                                        at: "right top",
                                        of: $targetElement,
                                        offset: "1 0",
                                        collision: "flip",
                                        boundary: this._rowsView.element()
                                    },
                                    onPositioned: this._positionedHandler.bind(this)
                                };
                                return new _tooltip2.default($tooltipElement, tooltipOptions)
                            },
                            _hideFixedGroupCell: function($cell, overlayOptions) {
                                var $nextFixedRowElement;
                                var $groupCellElement;
                                var isFixedColumns = this._rowsView.isFixedColumns();
                                var isFormEditMode = this._editingController.isFormEditMode();
                                if (isFixedColumns && !isFormEditMode) {
                                    var nextRowOptions = $cell.closest(".dx-row").next().data("options");
                                    if (nextRowOptions && "group" === nextRowOptions.rowType) {
                                        $nextFixedRowElement = (0, _renderer2.default)(this._rowsView.getRowElement(nextRowOptions.rowIndex)).last();
                                        $groupCellElement = $nextFixedRowElement.find("." + GROUP_CELL_CLASS);
                                        if ($groupCellElement.length && "hidden" !== $groupCellElement.get(0).style.visibility) {
                                            $groupCellElement.css("visibility", "hidden");
                                            overlayOptions.onDisposing = function() {
                                                $groupCellElement.css("visibility", "")
                                            }
                                        }
                                    }
                                }
                            },
                            _positionedHandler: function(e, isOverlayVisible) {
                                if (!e.component.__skipPositionProcessing) {
                                    var isRevertButton = (0, _renderer2.default)(e.element).hasClass(this.addWidgetPrefix(REVERT_TOOLTIP_CLASS));
                                    var needRepaint = !isRevertButton && this._rowsView.updateFreeSpaceRowHeight();
                                    var normalizedPosition = this._normalizeValidationMessagePositionAndMaxWidth(e, isRevertButton, isOverlayVisible);
                                    e.component.__skipPositionProcessing = !!(needRepaint || normalizedPosition);
                                    if (normalizedPosition) {
                                        e.component.option(normalizedPosition)
                                    } else {
                                        if (needRepaint) {
                                            e.component.repaint()
                                        }
                                    }
                                }
                            },
                            _showValidationMessage: function($cell, messages, alignment, revertTooltip) {
                                var _this9 = this;
                                var $highlightContainer = $cell.find("." + CELL_HIGHLIGHT_OUTLINE);
                                var isMaterial = _themes2.default.isMaterial();
                                var overlayTarget = $highlightContainer.length && !isMaterial ? $highlightContainer : $cell;
                                var editorPopup = $cell.find(".dx-dropdowneditor-overlay").data("dxPopup");
                                var isOverlayVisible = editorPopup && editorPopup.option("visible");
                                var myPosition = isOverlayVisible ? "top right" : "top " + alignment;
                                var atPosition = isOverlayVisible ? "top left" : "bottom " + alignment;
                                var errorMessageText = "";
                                messages && messages.forEach(function(message) {
                                    errorMessageText += (errorMessageText.length ? "<br/>" : "") + (0, _string.encodeHtml)(message)
                                });
                                var $overlayElement = (0, _renderer2.default)("<div>").addClass(INVALID_MESSAGE_CLASS).addClass(INVALID_MESSAGE_ALWAYS_CLASS).addClass(this.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS)).html(errorMessageText).appendTo($cell);
                                var overlayOptions = {
                                    target: overlayTarget,
                                    container: $cell,
                                    shading: false,
                                    width: "auto",
                                    height: "auto",
                                    visible: true,
                                    animation: false,
                                    propagateOutsideClick: true,
                                    closeOnOutsideClick: false,
                                    closeOnTargetScroll: false,
                                    position: {
                                        collision: "flip",
                                        boundary: this._rowsView.element(),
                                        boundaryOffset: "0 0",
                                        my: myPosition,
                                        at: atPosition
                                    },
                                    onPositioned: function(e) {
                                        _this9._positionedHandler(e, isOverlayVisible);
                                        _this9._shiftValidationMessageIfNeed(e.component.$content(), revertTooltip && revertTooltip.$content(), $cell)
                                    }
                                };
                                this._hideFixedGroupCell($cell, overlayOptions);
                                new _overlay2.default($overlayElement, overlayOptions)
                            },
                            _normalizeValidationMessagePositionAndMaxWidth: function(options, isRevertButton, isOverlayVisible) {
                                var fixedColumns = this._columnsController.getFixedColumns();
                                if (!fixedColumns || !fixedColumns.length) {
                                    return
                                }
                                var position;
                                var visibleTableWidth = !isRevertButton && getWidthOfVisibleCells(this, options.element);
                                var $overlayContentElement = isRevertButton ? options.component.overlayContent() : options.component.$content();
                                var validationMessageWidth = $overlayContentElement.outerWidth(true);
                                var needMaxWidth = !isRevertButton && validationMessageWidth > visibleTableWidth;
                                var columnIndex = this._rowsView.getCellIndex((0, _renderer2.default)(options.element).closest("td"));
                                var boundaryNonFixedColumnsInfo = getBoundaryNonFixedColumnsInfo(fixedColumns);
                                if (!isRevertButton && (columnIndex === boundaryNonFixedColumnsInfo.startColumnIndex || needMaxWidth)) {
                                    position = {
                                        collision: "none flip",
                                        my: "top left",
                                        at: isOverlayVisible ? "top right" : "bottom left"
                                    }
                                } else {
                                    if (columnIndex === boundaryNonFixedColumnsInfo.endColumnIndex) {
                                        position = {
                                            collision: "none flip",
                                            my: "top right",
                                            at: isRevertButton || isOverlayVisible ? "top left" : "bottom right"
                                        };
                                        if (isRevertButton) {
                                            position.offset = "-1 0"
                                        }
                                    }
                                }
                                return position && {
                                    position: position,
                                    maxWidth: needMaxWidth ? visibleTableWidth - 2 : void 0
                                }
                            },
                            _shiftValidationMessageIfNeed: function($content, $revertContent, $cell) {
                                if (!$revertContent) {
                                    return
                                }
                                var contentOffset = $content.offset();
                                var revertContentOffset = $revertContent.offset();
                                if (contentOffset.top === revertContentOffset.top && contentOffset.left + $content.width() > revertContentOffset.left) {
                                    var left = $revertContent.width() + PADDING_BETWEEN_TOOLTIPS;
                                    $content.css("left", revertContentOffset.left < $cell.offset().left ? -left : left)
                                }
                            },
                            _getTooltipsSelector: function() {
                                var invalidMessageClass = this.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS);
                                var revertTooltipClass = this.addWidgetPrefix(REVERT_TOOLTIP_CLASS);
                                return ".dx-editor-cell ." + revertTooltipClass + ", .dx-editor-cell ." + invalidMessageClass + ", .dx-cell-modified ." + invalidMessageClass;
                            },
                            init: function() {
                                this.callBase();
                                this._editingController = this.getController("editing");
                                this._columnsController = this.getController("columns");
                                this._rowsView = this.getView("rowsView")
                            },
                            loseFocus: function(skipValidator) {
                                if (!skipValidator) {
                                    this.getController("validating").setValidator(null)
                                }
                                this.callBase()
                            },
                            updateCellState: function($element, validationResult, hideBorder) {
                                var $focus = $element && $element.closest(this._getFocusCellSelector());
                                var $cell = $focus && $focus.is("td") ? $focus : null;
                                var rowOptions = $focus && $focus.closest(".dx-row").data("options");
                                var editData = rowOptions ? this.getController("editing").getEditDataByKey(rowOptions.key) : null;
                                var column = $cell && this.getController("columns").getVisibleColumns()[$cell.index()];
                                var revertTooltip;
                                if (validationResult && validationResult.status === VALIDATION_STATUS.invalid || editData && "update" === editData.type && !this._editingController.isSaving()) {
                                    if (this._editingController.getEditMode() === EDIT_MODE_CELL) {
                                        revertTooltip = this._showRevertButton($focus, $cell ? $focus.find("." + CELL_HIGHLIGHT_OUTLINE).first() : $focus)
                                    }
                                }
                                var showValidationMessage = validationResult && validationResult.status === VALIDATION_STATUS.invalid;
                                if (showValidationMessage && $cell && column && validationResult && validationResult.brokenRules) {
                                    var errorMessages = [];
                                    validationResult.brokenRules.forEach(function(rule) {
                                        errorMessages.push(rule.message)
                                    });
                                    this._showValidationMessage($focus, errorMessages, column.alignment || "left", revertTooltip)
                                }!hideBorder && this._rowsView.element() && this._rowsView.updateFreeSpaceRowHeight()
                            },
                            focus: function($element, hideBorder) {
                                var _this10 = this;
                                var $focus = $element && $element.closest(this._getFocusCellSelector());
                                var callBase = this.callBase;
                                var validator = $focus && ($focus.data("dxValidator") || $element.find("." + this.addWidgetPrefix(VALIDATOR_CLASS)).eq(0).data("dxValidator"));
                                var rowOptions = $focus && $focus.closest(".dx-row").data("options");
                                var editingController = this.getController("editing");
                                var editData = rowOptions ? editingController.getEditDataByKey(rowOptions.key) : null;
                                var validationResult;
                                var $tooltips = $focus && $focus.closest("." + this.addWidgetPrefix(ROWS_VIEW_CLASS)).find(this._getTooltipsSelector());
                                var $cell = $focus && $focus.is("td") ? $focus : null;
                                var column = $cell && this.getController("columns").getVisibleColumns()[$cell.index()];
                                var validatingController = this.getController("validating");
                                if (!arguments.length) {
                                    return this.callBase()
                                }
                                $tooltips && $tooltips.remove();
                                if (validator) {
                                    validatingController.setValidator(validator);
                                    if (void 0 !== validator.option("adapter").getValue() || editData && editData.validated) {
                                        editingController.waitForDeferredOperations().done(function() {
                                            (0, _deferred.when)(validatingController.validateCell(validator)).done(function(result) {
                                                validationResult = result;
                                                if (editData && column && !validatingController.isCurrentValidatorProcessing({
                                                        rowKey: editData.key,
                                                        columnIndex: column.index
                                                    })) {
                                                    return
                                                }
                                                if (validationResult.status === VALIDATION_STATUS.invalid) {
                                                    hideBorder = true
                                                }
                                                _this10.updateCellState($element, validationResult, hideBorder);
                                                callBase.call(_this10, $element, hideBorder)
                                            })
                                        });
                                        return this.callBase($element, hideBorder)
                                    }
                                }
                                this.updateCellState($element, validationResult, hideBorder);
                                return this.callBase($element, hideBorder)
                            },
                            getEditorInstance: function($container) {
                                var $editor = $container.find(".dx-texteditor").eq(0);
                                return (0, _uiGrid_core3.getWidgetInstance)($editor)
                            }
                        }
                    }()
                },
                views: {
                    rowsView: {
                        updateFreeSpaceRowHeight: function($table) {
                            var that = this;
                            var $rowElements;
                            var $freeSpaceRowElement;
                            var $freeSpaceRowElements;
                            var $element = that.element();
                            var $tooltipContent = $element && $element.find("." + that.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS) + " .dx-overlay-content");
                            that.callBase($table);
                            if ($tooltipContent && $tooltipContent.length) {
                                $rowElements = that._getRowElements();
                                $freeSpaceRowElements = that._getFreeSpaceRowElements($table);
                                $freeSpaceRowElement = $freeSpaceRowElements.first();
                                if ($freeSpaceRowElement && 1 === $rowElements.length && (!$freeSpaceRowElement.is(":visible") || $tooltipContent.outerHeight() > $freeSpaceRowElement.outerHeight())) {
                                    $freeSpaceRowElements.show();
                                    $freeSpaceRowElements.height($tooltipContent.outerHeight());
                                    return true
                                }
                            }
                        },
                        _formItemPrepared: function(cellOptions, $container) {
                            var _this11 = this;
                            this.callBase.apply(this, arguments);
                            (0, _common.deferUpdate)(function() {
                                var $editor = $container.find(".dx-widget").first();
                                var isEditorDisposed = $editor.length && !$editor.children().length;
                                if (!isEditorDisposed) {
                                    _this11.getController("validating").createValidator(cellOptions, $editor)
                                }
                            })
                        },
                        _cellPrepared: function($cell, parameters) {
                            if (!this.getController("editing").isFormEditMode()) {
                                this.getController("validating").createValidator(parameters, $cell)
                            }
                            this.callBase.apply(this, arguments)
                        }
                    }
                }
            }
        }
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.virtual_scrolling.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.virtual_scrolling_core */ 371);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _load_indicator = __webpack_require__( /*! ../load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TABLE_CLASS = "table";
        var BOTTOM_LOAD_PANEL_CLASS = "bottom-load-panel";
        var TABLE_CONTENT_CLASS = "table-content";
        var GROUP_SPACE_CLASS = "group-space";
        var CONTENT_CLASS = "content";
        var ROW_CLASS = "dx-row";
        var FREESPACE_CLASS = "dx-freespace-row";
        var COLUMN_LINES_CLASS = "dx-column-lines";
        var VIRTUAL_ROW_CLASS = "dx-virtual-row";
        var SCROLLING_MODE_INFINITE = "infinite";
        var SCROLLING_MODE_VIRTUAL = "virtual";
        var SCROLLING_MODE_STANDARD = "standard";
        var PIXELS_LIMIT = 25e4;
        var LOAD_TIMEOUT = 300;
        var isVirtualMode = function(that) {
            return that.option("scrolling.mode") === SCROLLING_MODE_VIRTUAL
        };
        var isAppendMode = function(that) {
            return that.option("scrolling.mode") === SCROLLING_MODE_INFINITE
        };
        var isVirtualRowRendering = function(that) {
            var rowRenderingMode = that.option("scrolling.rowRenderingMode");
            if (rowRenderingMode === SCROLLING_MODE_VIRTUAL) {
                return true
            } else {
                if (rowRenderingMode === SCROLLING_MODE_STANDARD) {
                    return false
                }
            }
        };
        var _correctCount = function(items, count, fromEnd, isItemCountableFunc) {
            var countCorrection = fromEnd ? 0 : 1;
            for (var i = 0; i < count + countCorrection; i++) {
                var item = items[fromEnd ? items.length - 1 - i : i];
                if (item && !isItemCountableFunc(item, i === count)) {
                    count++
                }
            }
            return count
        };
        var VirtualScrollingDataSourceAdapterExtender = function() {
            var _updateLoading = function(that) {
                var beginPageIndex = that._virtualScrollController.beginPageIndex(-1);
                if (isVirtualMode(that)) {
                    if (beginPageIndex < 0 || that.viewportSize() >= 0 && that.getViewportItemIndex() >= 0 && (beginPageIndex * that.pageSize() > that.getViewportItemIndex() || beginPageIndex * that.pageSize() + that.itemsCount() < that.getViewportItemIndex() + that.viewportSize()) && that._dataSource.isLoading()) {
                        if (!that._isLoading) {
                            that._isLoading = true;
                            that.loadingChanged.fire(true)
                        }
                    } else {
                        if (that._isLoading) {
                            that._isLoading = false;
                            that.loadingChanged.fire(false)
                        }
                    }
                }
            };
            var result = {
                init: function(dataSource) {
                    var that = this;
                    that.callBase.apply(that, arguments);
                    that._items = [];
                    that._isLoaded = true;
                    that._virtualScrollController = new _uiGrid_core2.default.VirtualScrollController(that.component, {
                        pageSize: function() {
                            return that.pageSize()
                        },
                        totalItemsCount: function() {
                            return that.totalItemsCount()
                        },
                        hasKnownLastPage: function() {
                            return that.hasKnownLastPage()
                        },
                        pageIndex: function(index) {
                            return dataSource.pageIndex(index)
                        },
                        isLoading: function() {
                            return dataSource.isLoading() && !that.isCustomLoading()
                        },
                        pageCount: function() {
                            return that.pageCount()
                        },
                        load: function() {
                            return dataSource.load()
                        },
                        updateLoading: function() {
                            _updateLoading(that)
                        },
                        itemsCount: function() {
                            return that.itemsCount(true)
                        },
                        items: function() {
                            return dataSource.items()
                        },
                        viewportItems: function(items) {
                            if (items) {
                                that._items = items
                            }
                            return that._items
                        },
                        onChanged: function(e) {
                            that.changed.fire(e)
                        },
                        changingDuration: function(e) {
                            if (that.isLoading()) {
                                return LOAD_TIMEOUT
                            }
                            return that._renderTime || 0
                        }
                    })
                },
                _handleLoadingChanged: function(isLoading) {
                    var that = this;
                    if (!isVirtualMode(that)) {
                        that._isLoading = isLoading;
                        that.callBase.apply(that, arguments)
                    }
                    if (isLoading) {
                        that._startLoadTime = new Date
                    } else {
                        that._startLoadTime = void 0
                    }
                },
                _handleLoadError: function() {
                    var that = this;
                    that._isLoading = false;
                    that.loadingChanged.fire(false);
                    that.callBase.apply(that, arguments)
                },
                _handleDataChanged: function(e) {
                    var callBase = this.callBase.bind(this);
                    this._virtualScrollController.handleDataChanged(callBase, e)
                },
                _customizeRemoteOperations: function(options, isReload, operationTypes) {
                    var that = this;
                    if (!that.option("legacyRendering") && isVirtualMode(that) && !(operationTypes.reload || isReload) && operationTypes.skip && that._renderTime < that.option("scrolling.renderingThreshold")) {
                        options.delay = void 0
                    }
                    that.callBase.apply(that, arguments)
                },
                items: function() {
                    return this._items
                },
                itemsCount: function(isBase) {
                    if (isBase) {
                        return this.callBase()
                    }
                    return this._virtualScrollController.itemsCount()
                },
                load: function(loadOptions) {
                    if (loadOptions) {
                        return this.callBase(loadOptions)
                    }
                    return this._virtualScrollController.load()
                },
                isLoading: function() {
                    return this._isLoading
                },
                isLoaded: function() {
                    return this._dataSource.isLoaded() && this._isLoaded
                },
                resetPagesCache: function(isLiveUpdate) {
                    if (!isLiveUpdate) {
                        this._virtualScrollController.reset(true)
                    }
                    this.callBase.apply(this, arguments)
                },
                _changeRowExpandCore: function() {
                    var result = this.callBase.apply(this, arguments);
                    this.resetPagesCache();
                    _updateLoading(this);
                    return result
                },
                reload: function() {
                    this._dataSource.pageIndex(this.pageIndex());
                    var virtualScrollController = this._virtualScrollController;
                    if (virtualScrollController) {
                        var d = new _deferred.Deferred;
                        this.callBase.apply(this, arguments).done(function(r) {
                            var delayDeferred = virtualScrollController._delayDeferred;
                            if (delayDeferred) {
                                delayDeferred.done(d.resolve).fail(d.reject)
                            } else {
                                d.resolve(r)
                            }
                        }).fail(d.reject);
                        return d
                    } else {
                        return this.callBase.apply(this, arguments)
                    }
                },
                refresh: function(options, isReload, operationTypes) {
                    var that = this;
                    var storeLoadOptions = options.storeLoadOptions;
                    var dataSource = that._dataSource;
                    if (isReload || operationTypes.reload) {
                        that._virtualScrollController.reset();
                        dataSource.items().length = 0;
                        that._isLoaded = false;
                        _updateLoading(that);
                        that._isLoaded = true;
                        if (isAppendMode(that)) {
                            that.pageIndex(0);
                            dataSource.pageIndex(0);
                            storeLoadOptions.pageIndex = 0;
                            options.pageIndex = 0;
                            storeLoadOptions.skip = 0
                        } else {
                            dataSource.pageIndex(that.pageIndex());
                            if (dataSource.paginate()) {
                                options.pageIndex = that.pageIndex();
                                storeLoadOptions.skip = that.pageIndex() * that.pageSize()
                            }
                        }
                    } else {
                        if (isAppendMode(that) && storeLoadOptions.skip) {
                            storeLoadOptions.skip += that._skipCorrection
                        }
                    }
                    return that.callBase.apply(that, arguments)
                },
                dispose: function() {
                    this._virtualScrollController.dispose();
                    this.callBase.apply(this, arguments)
                }
            };
            ["virtualItemsCount", "getContentOffset", "getVirtualContentSize", "setContentSize", "setViewportPosition", "getViewportItemIndex", "setViewportItemIndex", "getItemIndexByPosition", "viewportSize", "viewportItemSize", "getItemSize", "getItemSizes", "pageIndex", "beginPageIndex", "endPageIndex", "loadIfNeed"].forEach(function(name) {
                result[name] = function() {
                    var virtualScrollController = this._virtualScrollController;
                    return virtualScrollController[name].apply(virtualScrollController, arguments)
                }
            });
            return result
        }();
        var VirtualScrollingRowsViewExtender = function() {
            var removeEmptyRows = function($emptyRows, className) {
                var getRowParent = function(row) {
                    return (0, _renderer2.default)(row).parent("." + className).get(0)
                };
                var tBodies = $emptyRows.toArray().map(getRowParent).filter(function(row) {
                    return row
                });
                if (tBodies.length) {
                    $emptyRows = (0, _renderer2.default)(tBodies)
                }
                var rowCount = className === FREESPACE_CLASS ? $emptyRows.length - 1 : $emptyRows.length;
                for (var i = 0; i < rowCount; i++) {
                    $emptyRows.eq(i).remove()
                }
            };
            return {
                init: function() {
                    var that = this;
                    var dataController = that.getController("data");
                    that.callBase();
                    dataController.pageChanged.add(function() {
                        that.scrollToPage(dataController.pageIndex())
                    });
                    if (!that.option("legacyRendering") && dataController.pageIndex() > 0) {
                        var resizeHandler = function resizeHandler() {
                            that.resizeCompleted.remove(resizeHandler);
                            that.scrollToPage(dataController.pageIndex())
                        };
                        that.resizeCompleted.add(resizeHandler)
                    }
                },
                scrollToPage: function(pageIndex) {
                    var that = this;
                    var dataController = that._dataController;
                    var pageSize = dataController ? dataController.pageSize() : 0;
                    var scrollPosition;
                    if (isVirtualMode(that) || isAppendMode(that)) {
                        var itemSize = dataController.getItemSize();
                        var itemSizes = dataController.getItemSizes();
                        var itemIndex = pageIndex * pageSize;
                        scrollPosition = itemIndex * itemSize;
                        for (var index in itemSizes) {
                            if (index <= itemIndex) {
                                scrollPosition += itemSizes[index] - itemSize
                            }
                        }
                    } else {
                        scrollPosition = 0
                    }
                    that.scrollTo({
                        y: scrollPosition,
                        x: that._scrollLeft
                    })
                },
                renderDelayedTemplates: function(e) {
                    this._updateContentPosition(true);
                    this.callBase.apply(this, arguments)
                },
                _renderCore: function(e) {
                    var that = this;
                    var startRenderTime = new Date;
                    that.callBase.apply(that, arguments);
                    var dataSource = that._dataController._dataSource;
                    if (dataSource && e) {
                        var itemCount = e.items ? e.items.length : 20;
                        var viewportSize = that._dataController.viewportSize() || 20;
                        if (isVirtualRowRendering(that)) {
                            dataSource._renderTime = (new Date - startRenderTime) * viewportSize / itemCount
                        } else {
                            dataSource._renderTime = new Date - startRenderTime
                        }
                    }
                },
                _getRowElements: function(tableElement) {
                    var $rows = this.callBase(tableElement);
                    return $rows && $rows.not("." + VIRTUAL_ROW_CLASS)
                },
                _renderContent: function(contentElement, tableElement) {
                    var that = this;
                    var virtualItemsCount = that._dataController.virtualItemsCount();
                    if (virtualItemsCount && that.option("legacyRendering")) {
                        if ((0, _window.hasWindow)()) {
                            tableElement.addClass(that.addWidgetPrefix(TABLE_CONTENT_CLASS))
                        }
                        if (!contentElement.children().length) {
                            contentElement.append(tableElement)
                        } else {
                            contentElement.children().first().replaceWith(tableElement)
                        }
                        if (1 === contentElement.children("table").length) {
                            contentElement.append(that._createTable());
                            that._contentHeight = 0
                        }
                        return contentElement
                    }
                    return that.callBase.apply(that, arguments)
                },
                _removeRowsElements: function(contentTable, removeCount, changeType) {
                    var rowElements = this._getRowElements(contentTable).toArray();
                    if ("append" === changeType) {
                        rowElements = rowElements.slice(0, removeCount)
                    } else {
                        rowElements = rowElements.slice(-removeCount)
                    }
                    var errorHandlingController = this.getController("errorHandling");
                    rowElements.map(function(rowElement) {
                        var $rowElement = (0, _renderer2.default)(rowElement);
                        errorHandlingController && errorHandlingController.removeErrorRow($rowElement.next());
                        $rowElement.remove()
                    })
                },
                _restoreErrorRow: function(contentTable) {
                    var editingController = this.getController("editing");
                    editingController && editingController.hasChanges() && this._getRowElements(contentTable).each(function(_, item) {
                        var rowOptions = (0, _renderer2.default)(item).data("options");
                        if (rowOptions) {
                            var editData = editingController.getEditDataByKey(rowOptions.key);
                            editData && editingController._showErrorRow(editData)
                        }
                    })
                },
                _updateContent: function(tableElement, change) {
                    var that = this;
                    var $freeSpaceRowElements;
                    var contentElement = that._findContentElement();
                    var changeType = change && change.changeType;
                    if ("append" === changeType || "prepend" === changeType) {
                        var contentTable = contentElement.children().first();
                        var $tBodies = that._getBodies(tableElement);
                        if (!that.option("legacyRendering") && 1 === $tBodies.length) {
                            that._getBodies(contentTable)["append" === changeType ? "append" : "prepend"]($tBodies.children())
                        } else {
                            $tBodies["append" === changeType ? "appendTo" : "prependTo"](contentTable)
                        }
                        tableElement.remove();
                        $freeSpaceRowElements = that._getFreeSpaceRowElements(contentTable);
                        removeEmptyRows($freeSpaceRowElements, FREESPACE_CLASS);
                        if (change.removeCount) {
                            that._removeRowsElements(contentTable, change.removeCount, changeType)
                        }
                        that._restoreErrorRow(contentTable)
                    } else {
                        that.callBase.apply(that, arguments)
                    }
                    that._updateBottomLoading()
                },
                _addVirtualRow: function($table, isFixed, location, position) {
                    if (!position) {
                        return
                    }
                    var $virtualRow = this._createEmptyRow(VIRTUAL_ROW_CLASS, isFixed, position);
                    $virtualRow = this._wrapRowIfNeed($table, $virtualRow);
                    this._appendEmptyRow($table, $virtualRow, location)
                },
                _updateContentPosition: function(isRender) {
                    var that = this;
                    var dataController = that._dataController;
                    var rowHeight = that._rowHeight || 20;
                    dataController.viewportItemSize(rowHeight);
                    if (!that.option("legacyRendering") && (isVirtualMode(that) || isVirtualRowRendering(that))) {
                        if (!isRender) {
                            var rowHeights = that._getRowElements(that._tableElement).toArray().map(function(row) {
                                return (0, _position.getBoundingRect)(row).height
                            });
                            dataController.setContentSize(rowHeights)
                        }
                        var top = dataController.getContentOffset("begin");
                        var bottom = dataController.getContentOffset("end");
                        var $tables = that.getTableElements();
                        var $virtualRows = $tables.children("tbody").children("." + VIRTUAL_ROW_CLASS);
                        removeEmptyRows($virtualRows, VIRTUAL_ROW_CLASS);
                        $tables.each(function(index) {
                            var isFixed = index > 0;
                            that._isFixedTableRendering = isFixed;
                            that._addVirtualRow((0, _renderer2.default)(this), isFixed, "top", top);
                            that._addVirtualRow((0, _renderer2.default)(this), isFixed, "bottom", bottom);
                            that._isFixedTableRendering = false
                        });
                        !isRender && that._updateScrollTopPosition(top)
                    } else {
                        (0, _common.deferUpdate)(function() {
                            that._updateContentPositionCore()
                        })
                    }
                },
                _updateScrollTopPosition: function(top) {
                    if (this._scrollTop < top && !this._isScrollByEvent && this._dataController.pageIndex() > 0) {
                        this.scrollTo({
                            top: top,
                            left: this._scrollLeft
                        })
                    }
                },
                _updateContentPositionCore: function() {
                    var that = this;
                    var contentHeight;
                    var $tables;
                    var $contentTable;
                    var rowHeight = that._rowHeight || 20;
                    var virtualItemsCount = that._dataController.virtualItemsCount();
                    if (virtualItemsCount) {
                        var contentElement = that._findContentElement();
                        $tables = contentElement.children();
                        $contentTable = $tables.eq(0);
                        var virtualTable = $tables.eq(1);
                        that._contentTableHeight = $contentTable[0].offsetHeight;
                        that._dataController.viewportItemSize(rowHeight);
                        that._dataController.setContentSize(that._contentTableHeight);
                        contentHeight = that._dataController.getVirtualContentSize();
                        var top = that._dataController.getContentOffset();
                        (0, _common.deferRender)(function() {
                            _translator2.default.move($contentTable, {
                                left: 0,
                                top: top
                            });
                            var isRenderVirtualTableContentRequired = that._contentHeight !== contentHeight || 0 === contentHeight || !that._isTableLinesDisplaysCorrect(virtualTable) || !that._isColumnElementsEqual($contentTable.find("col"), virtualTable.find("col"));
                            if (isRenderVirtualTableContentRequired) {
                                that._contentHeight = contentHeight;
                                that._renderVirtualTableContent(virtualTable, contentHeight)
                            }
                            that._updateScrollTopPosition(top)
                        })
                    }
                },
                _isTableLinesDisplaysCorrect: function(table) {
                    var hasColumnLines = table.find("." + COLUMN_LINES_CLASS).length > 0;
                    return hasColumnLines === this.option("showColumnLines")
                },
                _isColumnElementsEqual: function($columns, $virtualColumns) {
                    var result = $columns.length === $virtualColumns.length;
                    if (result) {
                        (0, _iterator.each)($columns, function(index, element) {
                            if (element.style.width !== $virtualColumns[index].style.width) {
                                result = false;
                                return result
                            }
                        })
                    }
                    return result
                },
                _renderVirtualTableContent: function(container, height) {
                    var that = this;
                    var columns = that._columnsController.getVisibleColumns();
                    var html = that._createColGroup(columns).prop("outerHTML");
                    var freeSpaceCellsHtml = "";
                    var columnLinesClass = that.option("showColumnLines") ? COLUMN_LINES_CLASS : "";
                    var createFreeSpaceRowHtml = function(height) {
                        return "<tr style='height:" + height + "px;' class='" + FREESPACE_CLASS + " " + ROW_CLASS + " " + columnLinesClass + "' >" + freeSpaceCellsHtml + "</tr>"
                    };
                    for (var i = 0; i < columns.length; i++) {
                        var classes = that._getCellClasses(columns[i]);
                        var classString = classes.length ? " class='" + classes.join(" ") + "'" : "";
                        freeSpaceCellsHtml += "<td" + classString + "/>"
                    }
                    while (height > PIXELS_LIMIT) {
                        html += createFreeSpaceRowHtml(PIXELS_LIMIT);
                        height -= PIXELS_LIMIT
                    }
                    html += createFreeSpaceRowHtml(height);
                    container.addClass(that.addWidgetPrefix(TABLE_CLASS));
                    container.html(html)
                },
                _getCellClasses: function(column) {
                    var classes = [];
                    var cssClass = column.cssClass;
                    var isExpandColumn = "expand" === column.command;
                    cssClass && classes.push(cssClass);
                    isExpandColumn && classes.push(this.addWidgetPrefix(GROUP_SPACE_CLASS));
                    return classes
                },
                _findBottomLoadPanel: function($contentElement) {
                    var $element = $contentElement || this.element();
                    var $bottomLoadPanel = $element && $element.find("." + this.addWidgetPrefix(BOTTOM_LOAD_PANEL_CLASS));
                    if ($bottomLoadPanel && $bottomLoadPanel.length) {
                        return $bottomLoadPanel
                    }
                },
                _updateBottomLoading: function() {
                    var that = this;
                    var scrollingMode = that.option("scrolling.mode");
                    var virtualMode = scrollingMode === SCROLLING_MODE_VIRTUAL;
                    var appendMode = scrollingMode === SCROLLING_MODE_INFINITE;
                    var showBottomLoading = !that._dataController.hasKnownLastPage() && that._dataController.isLoaded() && (virtualMode || appendMode);
                    var $contentElement = that._findContentElement();
                    var bottomLoadPanelElement = that._findBottomLoadPanel($contentElement);
                    if (showBottomLoading) {
                        if (!bottomLoadPanelElement) {
                            (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(BOTTOM_LOAD_PANEL_CLASS)).append(that._createComponent((0, _renderer2.default)("<div>"), _load_indicator2.default).$element()).appendTo($contentElement)
                        }
                    } else {
                        if (bottomLoadPanelElement) {
                            bottomLoadPanelElement.remove()
                        }
                    }
                },
                _handleScroll: function(e) {
                    var that = this;
                    if (that._hasHeight && that._rowHeight) {
                        that._dataController.setViewportPosition(e.scrollOffset.top)
                    }
                    that.callBase.apply(that, arguments)
                },
                _needUpdateRowHeight: function(itemsCount) {
                    var that = this;
                    return that.callBase.apply(that, arguments) || itemsCount > 0 && that.option("scrolling.mode") === SCROLLING_MODE_INFINITE && that.option("scrolling.rowRenderingMode") !== SCROLLING_MODE_VIRTUAL
                },
                _updateRowHeight: function() {
                    var that = this;
                    that.callBase.apply(that, arguments);
                    if (that._rowHeight) {
                        that._updateContentPosition();
                        var viewportHeight = that._hasHeight ? that.element().outerHeight() : (0, _renderer2.default)((0, _window.getWindow)()).outerHeight();
                        that._dataController.viewportSize(Math.ceil(viewportHeight / that._rowHeight))
                    }
                },
                updateFreeSpaceRowHeight: function() {
                    var result = this.callBase.apply(this, arguments);
                    if (result) {
                        this._updateContentPosition()
                    }
                    return result
                },
                setLoading: function(isLoading, messageText) {
                    var that = this;
                    var callBase = that.callBase;
                    var dataController = that._dataController;
                    var hasBottomLoadPanel = dataController.pageIndex() > 0 && dataController.isLoaded() && !!that._findBottomLoadPanel();
                    if (hasBottomLoadPanel) {
                        isLoading = false
                    }
                    callBase.call(that, isLoading, messageText)
                },
                _resizeCore: function() {
                    var that = this;
                    var $element = that.element();
                    that.callBase();
                    if (that.component.$element() && !that._windowScroll && $element.closest((0, _window.getWindow)().document).length) {
                        that._windowScroll = _uiGrid_core2.default.subscribeToExternalScrollers($element, function(scrollPos) {
                            if (!that._hasHeight && that._rowHeight) {
                                that._dataController.setViewportPosition(scrollPos)
                            }
                        }, that.component.$element());
                        that.on("disposing", function() {
                            that._windowScroll.dispose()
                        })
                    }
                    that.loadIfNeed()
                },
                loadIfNeed: function() {
                    var dataController = this._dataController;
                    if (dataController && dataController.loadIfNeed) {
                        dataController.loadIfNeed()
                    }
                },
                setColumnWidths: function(widths) {
                    var scrollable = this.getScrollable();
                    var $content;
                    this.callBase.apply(this, arguments);
                    if ("virtual" === this.option("scrolling.mode")) {
                        $content = scrollable ? scrollable.$content() : this.element();
                        this.callBase(widths, $content.children("." + this.addWidgetPrefix(CONTENT_CLASS)).children(":not(." + this.addWidgetPrefix(TABLE_CONTENT_CLASS) + ")"))
                    }
                },
                dispose: function() {
                    clearTimeout(this._scrollTimeoutID);
                    this.callBase()
                }
            }
        }();
        module.exports = {
            defaultOptions: function() {
                return {
                    scrolling: {
                        timeout: 300,
                        updateTimeout: 300,
                        minTimeout: 0,
                        renderingThreshold: 100,
                        removeInvisiblePages: true,
                        rowPageSize: 5,
                        mode: "standard",
                        preloadEnabled: false,
                        rowRenderingMode: "standard"
                    }
                }
            },
            extenders: {
                dataSourceAdapter: VirtualScrollingDataSourceAdapterExtender,
                controllers: {
                    data: function() {
                        var members = {
                            _refreshDataSource: function() {
                                var baseResult = this.callBase.apply(this, arguments) || (new _deferred.Deferred).resolve().promise();
                                baseResult.done(this.initVirtualRows.bind(this));
                                return baseResult
                            },
                            getRowPageSize: function() {
                                var rowPageSize = this.option("scrolling.rowPageSize");
                                var pageSize = this.pageSize();
                                return pageSize && pageSize < rowPageSize ? pageSize : rowPageSize
                            },
                            reload: function() {
                                var that = this;
                                var rowsScrollController = that._rowsScrollController || that._dataSource;
                                var itemIndex = rowsScrollController && rowsScrollController.getItemIndexByPosition();
                                var result = this.callBase.apply(this, arguments);
                                return result && result.done(function() {
                                    if (isVirtualMode(that) || isVirtualRowRendering(that)) {
                                        var rowIndexOffset = that.getRowIndexOffset();
                                        var rowIndex = Math.floor(itemIndex) - rowIndexOffset;
                                        var component = that.component;
                                        var scrollable = component.getScrollable && component.getScrollable();
                                        var isSortingOperation = that.dataSource().operationTypes().sorting;
                                        if (scrollable && !that.option("legacyRendering") && !isSortingOperation) {
                                            var rowElement = component.getRowElement(rowIndex);
                                            var $rowElement = rowElement && rowElement[0] && (0, _renderer2.default)(rowElement[0]);
                                            var top = $rowElement && $rowElement.position().top;
                                            var allowedTopOffset = _browser2.default.mozilla || _browser2.default.msie ? 1 : 0;
                                            if (top > allowedTopOffset) {
                                                top = Math.round(top + $rowElement.outerHeight() * (itemIndex % 1));
                                                scrollable.scrollTo({
                                                    y: top
                                                })
                                            }
                                        }
                                    }
                                })
                            },
                            initVirtualRows: function() {
                                var that = this;
                                var virtualRowsRendering = isVirtualRowRendering(that);
                                if ("virtual" !== that.option("scrolling.mode") && true !== virtualRowsRendering || false === virtualRowsRendering || that.option("legacyRendering") || !that.option("scrolling.rowPageSize")) {
                                    that._visibleItems = null;
                                    that._rowsScrollController = null;
                                    return
                                }
                                that._rowPageIndex = Math.ceil(that.pageIndex() * that.pageSize() / that.getRowPageSize());
                                that._visibleItems = [];
                                var isItemCountable = function(item) {
                                    return "data" === item.rowType && !item.isNewRow || "group" === item.rowType && that._dataSource.isGroupItemCountable(item.data)
                                };
                                that._rowsScrollController = new _uiGrid_core2.default.VirtualScrollController(that.component, {
                                    pageSize: function() {
                                        return that.getRowPageSize()
                                    },
                                    totalItemsCount: function() {
                                        return isVirtualMode(that) ? that.totalItemsCount() : that._items.filter(isItemCountable).length
                                    },
                                    hasKnownLastPage: function() {
                                        return true
                                    },
                                    pageIndex: function(index) {
                                        if (void 0 !== index) {
                                            that._rowPageIndex = index
                                        }
                                        return that._rowPageIndex
                                    },
                                    isLoading: function() {
                                        return that.isLoading()
                                    },
                                    pageCount: function pageCount() {
                                        var pageCount = Math.ceil(this.totalItemsCount() / this.pageSize());
                                        return pageCount ? pageCount : 1
                                    },
                                    load: function() {
                                        if (that._rowsScrollController.pageIndex() >= this.pageCount()) {
                                            that._rowPageIndex = this.pageCount() - 1;
                                            that._rowsScrollController.pageIndex(that._rowPageIndex)
                                        }
                                        if (!that._rowsScrollController._dataSource.items().length && this.totalItemsCount()) {
                                            return
                                        }
                                        that._rowsScrollController.handleDataChanged(function(change) {
                                            change = change || {};
                                            change.changeType = change.changeType || "refresh";
                                            change.items = change.items || that._visibleItems;
                                            that._visibleItems.forEach(function(item, index) {
                                                item.rowIndex = index
                                            });
                                            that._fireChanged(change)
                                        })
                                    },
                                    updateLoading: function() {},
                                    itemsCount: function() {
                                        return that._rowsScrollController._dataSource.items().filter(isItemCountable).length
                                    },
                                    correctCount: function(items, count, fromEnd) {
                                        return _correctCount(items, count, fromEnd, isItemCountable)
                                    },
                                    items: function(countableOnly) {
                                        var dataSource = that.dataSource();
                                        var virtualItemsCount = dataSource && dataSource.virtualItemsCount();
                                        var begin = virtualItemsCount ? virtualItemsCount.begin : 0;
                                        var rowPageSize = that.getRowPageSize();
                                        var skip = that._rowPageIndex * rowPageSize - begin;
                                        var take = rowPageSize;
                                        var result = that._items;
                                        if (skip < 0) {
                                            return []
                                        }
                                        if (skip) {
                                            skip = this.correctCount(result, skip);
                                            result = result.slice(skip)
                                        }
                                        if (take) {
                                            take = this.correctCount(result, take);
                                            result = result.slice(0, take)
                                        }
                                        return countableOnly ? result.filter(isItemCountable) : result
                                    },
                                    viewportItems: function(items) {
                                        if (items) {
                                            that._visibleItems = items
                                        }
                                        return that._visibleItems
                                    },
                                    onChanged: function() {},
                                    changingDuration: function(e) {
                                        var dataSource = that.dataSource();
                                        if (dataSource.isLoading()) {
                                            return LOAD_TIMEOUT
                                        }
                                        return (null === dataSource || void 0 === dataSource ? void 0 : dataSource._renderTime) || 0
                                    }
                                }, true);
                                that._rowsScrollController.positionChanged.add(function() {
                                    var _that$_dataSource;
                                    null === (_that$_dataSource = that._dataSource) || void 0 === _that$_dataSource ? void 0 : _that$_dataSource.setViewportItemIndex(that._rowsScrollController.getViewportItemIndex())
                                });
                                if (that.isLoaded()) {
                                    that._rowsScrollController.load()
                                }
                            },
                            _updateItemsCore: function(change) {
                                var _this = this;
                                var delta = this.getRowIndexDelta();
                                this.callBase.apply(this, arguments);
                                var rowsScrollController = this._rowsScrollController;
                                if (rowsScrollController) {
                                    var visibleItems = this._visibleItems;
                                    var isRefresh = "refresh" === change.changeType || change.isLiveUpdate;
                                    if ("append" === change.changeType && change.items && !change.items.length) {
                                        return
                                    }
                                    if (isRefresh || "append" === change.changeType || "prepend" === change.changeType) {
                                        change.cancel = true;
                                        isRefresh && rowsScrollController.reset(true);
                                        rowsScrollController.load()
                                    } else {
                                        if ("update" === change.changeType) {
                                            change.rowIndices.forEach(function(rowIndex, index) {
                                                var changeType = change.changeTypes[index];
                                                var newItem = change.items[index];
                                                if ("update" === changeType) {
                                                    visibleItems[rowIndex] = newItem
                                                } else {
                                                    if ("insert" === changeType) {
                                                        visibleItems.splice(rowIndex, 0, newItem)
                                                    } else {
                                                        if ("remove" === changeType) {
                                                            visibleItems.splice(rowIndex, 1)
                                                        }
                                                    }
                                                }
                                            })
                                        } else {
                                            visibleItems.forEach(function(item, index) {
                                                visibleItems[index] = _this._items[index + delta] || visibleItems[index]
                                            });
                                            change.items = visibleItems
                                        }
                                        visibleItems.forEach(function(item, index) {
                                            item.rowIndex = index
                                        })
                                    }
                                }
                            },
                            _applyChange: function(change) {
                                var that = this;
                                var items = change.items;
                                var changeType = change.changeType;
                                var removeCount = change.removeCount;
                                if (removeCount) {
                                    var fromEnd = "prepend" === changeType;
                                    removeCount = _correctCount(that._items, removeCount, fromEnd, function(item, isNextAfterLast) {
                                        return "data" === item.rowType && !item.isNewRow || "group" === item.rowType && (that._dataSource.isGroupItemCountable(item.data) || isNextAfterLast)
                                    });
                                    change.removeCount = removeCount
                                }
                                switch (changeType) {
                                    case "prepend":
                                        that._items.unshift.apply(that._items, items);
                                        if (removeCount) {
                                            that._items.splice(-removeCount)
                                        }
                                        break;
                                    case "append":
                                        that._items.push.apply(that._items, items);
                                        if (removeCount) {
                                            that._items.splice(0, removeCount)
                                        }
                                        break;
                                    default:
                                        that.callBase(change)
                                }
                            },
                            items: function(allItems) {
                                return allItems ? this._items : this._visibleItems || this._items
                            },
                            getRowIndexDelta: function() {
                                var visibleItems = this._visibleItems;
                                var delta = 0;
                                if (visibleItems && visibleItems[0]) {
                                    delta = this._items.indexOf(visibleItems[0])
                                }
                                return delta < 0 ? 0 : delta
                            },
                            getRowIndexOffset: function() {
                                var offset = 0;
                                var dataSource = this.dataSource();
                                var rowsScrollController = this._rowsScrollController;
                                if (rowsScrollController) {
                                    offset = rowsScrollController.beginPageIndex() * rowsScrollController._dataSource.pageSize()
                                } else {
                                    if ("virtual" === this.option("scrolling.mode") && dataSource) {
                                        offset = dataSource.beginPageIndex() * dataSource.pageSize()
                                    }
                                }
                                return offset
                            },
                            viewportSize: function() {
                                var rowsScrollController = this._rowsScrollController;
                                rowsScrollController && rowsScrollController.viewportSize.apply(rowsScrollController, arguments);
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.viewportSize.apply(dataSource, arguments)
                            },
                            viewportItemSize: function() {
                                var rowsScrollController = this._rowsScrollController;
                                rowsScrollController && rowsScrollController.viewportItemSize.apply(rowsScrollController, arguments);
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.viewportItemSize.apply(dataSource, arguments)
                            },
                            setViewportPosition: function() {
                                var rowsScrollController = this._rowsScrollController;
                                var dataSource = this._dataSource;
                                if (rowsScrollController) {
                                    rowsScrollController.setViewportPosition.apply(rowsScrollController, arguments)
                                } else {
                                    null === dataSource || void 0 === dataSource ? void 0 : dataSource.setViewportPosition.apply(dataSource, arguments)
                                }
                            },
                            setContentSize: function(sizes) {
                                var rowsScrollController = this._rowsScrollController;
                                rowsScrollController && rowsScrollController.setContentSize(sizes);
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.setContentSize(sizes)
                            },
                            loadIfNeed: function() {
                                var rowsScrollController = this._rowsScrollController;
                                rowsScrollController && rowsScrollController.loadIfNeed();
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.loadIfNeed()
                            },
                            getItemSize: function() {
                                var rowsScrollController = this._rowsScrollController;
                                if (rowsScrollController) {
                                    return rowsScrollController.getItemSize.apply(rowsScrollController, arguments)
                                }
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.getItemSize.apply(dataSource, arguments)
                            },
                            getItemSizes: function() {
                                var rowsScrollController = this._rowsScrollController;
                                if (rowsScrollController) {
                                    return rowsScrollController.getItemSizes.apply(rowsScrollController, arguments)
                                }
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.getItemSizes.apply(dataSource, arguments)
                            },
                            getContentOffset: function() {
                                var rowsScrollController = this._rowsScrollController;
                                if (rowsScrollController) {
                                    return rowsScrollController.getContentOffset.apply(rowsScrollController, arguments)
                                }
                                var dataSource = this._dataSource;
                                return dataSource && dataSource.getContentOffset.apply(dataSource, arguments)
                            },
                            dispose: function() {
                                var rowsScrollController = this._rowsScrollController;
                                rowsScrollController && rowsScrollController.dispose();
                                this.callBase.apply(this, arguments)
                            }
                        };
                        _uiGrid_core4.default.proxyMethod(members, "virtualItemsCount");
                        _uiGrid_core4.default.proxyMethod(members, "getVirtualContentSize");
                        _uiGrid_core4.default.proxyMethod(members, "setViewportItemIndex");
                        return members
                    }(),
                    resizing: {
                        resize: function() {
                            var that = this;
                            var callBase = that.callBase;
                            var result;
                            if (!that.option("legacyRendering") && (isVirtualMode(that) || isVirtualRowRendering(that))) {
                                clearTimeout(that._resizeTimeout);
                                var diff = new Date - that._lastTime;
                                var updateTimeout = that.option("scrolling.updateTimeout");
                                if (that._lastTime && diff < updateTimeout) {
                                    result = new _deferred.Deferred;
                                    that._resizeTimeout = setTimeout(function() {
                                        callBase.apply(that).done(result.resolve).fail(result.reject);
                                        that._lastTime = new Date
                                    }, updateTimeout);
                                    that._lastTime = new Date
                                } else {
                                    result = callBase.apply(that);
                                    if (that._dataController.isLoaded()) {
                                        that._lastTime = new Date
                                    }
                                }
                            } else {
                                result = callBase.apply(that)
                            }
                            return result
                        },
                        dispose: function() {
                            this.callBase.apply(this, arguments);
                            clearTimeout(this._resizeTimeout)
                        }
                    }
                },
                views: {
                    rowsView: VirtualScrollingRowsViewExtender
                }
            }
        }
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.virtual_scrolling_core.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _position2 = _interopRequireDefault(_position);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCROLLING_MODE_INFINITE = "infinite";
        var SCROLLING_MODE_VIRTUAL = "virtual";
        var isVirtualMode = function(that) {
            return that.option("scrolling.mode") === SCROLLING_MODE_VIRTUAL || that._isVirtual
        };
        var isAppendMode = function(that) {
            return that.option("scrolling.mode") === SCROLLING_MODE_INFINITE && !that._isVirtual
        };
        exports.getPixelRatio = function(window) {
            return window.devicePixelRatio || 1
        };
        exports.getContentHeightLimit = function(browser) {
            if (browser.msie) {
                return 4e6
            } else {
                if (browser.mozilla) {
                    return 8e6
                }
            }
            return 15e6 / exports.getPixelRatio((0, _window.getWindow)())
        };
        exports.subscribeToExternalScrollers = function($element, scrollChangedHandler, $targetElement) {
            var $scrollElement;
            var scrollableArray = [];
            var scrollToArray = [];
            var disposeArray = [];
            $targetElement = $targetElement || $element;

            function getElementOffset(scrollable) {
                var $scrollableElement = scrollable.element ? scrollable.$element() : scrollable;
                var scrollableOffset = _position2.default.offset($scrollableElement);
                if (!scrollableOffset) {
                    return $element.offset().top
                }
                return scrollable.scrollTop() - (scrollableOffset.top - $element.offset().top)
            }

            function createWindowScrollHandler(scrollable) {
                return function() {
                    var scrollTop = scrollable.scrollTop() - getElementOffset(scrollable);
                    scrollTop = scrollTop > 0 ? scrollTop : 0;
                    scrollChangedHandler(scrollTop)
                }
            }
            var widgetScrollStrategy = {
                on: function(scrollable, eventName, handler) {
                    scrollable.on("scroll", handler)
                },
                off: function(scrollable, eventName, handler) {
                    scrollable.off("scroll", handler)
                }
            };

            function subscribeToScrollEvents($scrollElement) {
                var isDocument = "#document" === $scrollElement.get(0).nodeName;
                var scrollable = $scrollElement.data("dxScrollable");
                var eventsStrategy = widgetScrollStrategy;
                if (!scrollable) {
                    scrollable = isDocument && (0, _renderer2.default)((0, _window.getWindow)()) || "auto" === $scrollElement.css("overflowY") && $scrollElement;
                    eventsStrategy = _events_engine2.default;
                    if (!scrollable) {
                        return
                    }
                }
                var handler = createWindowScrollHandler(scrollable);
                eventsStrategy.on(scrollable, "scroll", handler);
                scrollToArray.push(function(pos) {
                    var topOffset = getElementOffset(scrollable);
                    var scrollMethod = scrollable.scrollTo ? "scrollTo" : "scrollTop";
                    if (pos - topOffset >= 0) {
                        scrollable[scrollMethod](pos + topOffset)
                    }
                });
                scrollableArray.push(scrollable);
                disposeArray.push(function() {
                    eventsStrategy.off(scrollable, "scroll", handler)
                })
            }
            for ($scrollElement = $targetElement.parent(); $scrollElement.length; $scrollElement = $scrollElement.parent()) {
                subscribeToScrollEvents($scrollElement)
            }
            return {
                scrollTo: function(pos) {
                    (0, _iterator.each)(scrollToArray, function(_, scrollTo) {
                        scrollTo(pos)
                    })
                },
                dispose: function() {
                    (0, _iterator.each)(disposeArray, function(_, dispose) {
                        dispose()
                    })
                }
            }
        };
        exports.VirtualScrollController = _class2.default.inherit(function() {
            var getViewportPageCount = function(that) {
                var pageSize = that._dataSource.pageSize();
                var preventPreload = that.option("scrolling.preventPreload");
                if (preventPreload) {
                    return 0
                }
                var realViewportSize = that._viewportSize;
                if (isVirtualMode(that) && !that.option("legacyRendering") && that.option("scrolling.removeInvisiblePages")) {
                    realViewportSize = 0;
                    var viewportSize = that._viewportSize * that._viewportItemSize;
                    var offset = that.getContentOffset();
                    var position = that._position || 0;
                    var virtualItemsCount = that.virtualItemsCount();
                    var totalItemsCount = that._dataSource.totalItemsCount();
                    for (var itemIndex = virtualItemsCount.begin; itemIndex < totalItemsCount; itemIndex++) {
                        if (offset >= position + viewportSize) {
                            break
                        }
                        var itemSize = that._itemSizes[itemIndex] || that._viewportItemSize;
                        offset += itemSize;
                        if (offset >= position) {
                            realViewportSize++
                        }
                    }
                }
                return pageSize && realViewportSize > 0 ? Math.ceil(realViewportSize / pageSize) : 1
            };
            var getPreloadPageCount = function(that, previous) {
                var preloadEnabled = that.option("scrolling.preloadEnabled");
                var pageCount = getViewportPageCount(that);
                if (pageCount) {
                    if (previous) {
                        pageCount = preloadEnabled ? 1 : 0
                    } else {
                        if (preloadEnabled) {
                            pageCount++
                        }
                        if (isAppendMode(that)) {
                            pageCount--
                        }
                    }
                }
                return pageCount
            };
            var getPageIndexForLoad = function(that) {
                var result = -1;
                var beginPageIndex = getBeginPageIndex(that);
                var dataSource = that._dataSource;
                if (beginPageIndex < 0) {
                    result = that._pageIndex
                } else {
                    if (!that._cache[that._pageIndex - beginPageIndex]) {
                        result = that._pageIndex
                    } else {
                        if (beginPageIndex >= 0 && that._viewportSize >= 0) {
                            if (beginPageIndex > 0) {
                                var needToLoadPageBeforeLast = getEndPageIndex(that) + 1 === dataSource.pageCount() && that._cache.length < getPreloadPageCount(that) + 1;
                                var needToLoadPrevPage = needToLoadPageBeforeLast || that._pageIndex === beginPageIndex && getPreloadPageCount(that, true);
                                if (needToLoadPrevPage) {
                                    result = beginPageIndex - 1
                                }
                            }
                            if (result < 0) {
                                var needToLoadNextPage = beginPageIndex + that._cache.length <= that._pageIndex + getPreloadPageCount(that);
                                if (needToLoadNextPage) {
                                    result = beginPageIndex + that._cache.length
                                }
                            }
                        }
                    }
                }
                if (that._loadingPageIndexes[result]) {
                    result = -1
                }
                return result
            };

            function getBeginPageIndex(that) {
                return that._cache.length ? that._cache[0].pageIndex : -1
            }

            function getEndPageIndex(that) {
                return that._cache.length ? that._cache[that._cache.length - 1].pageIndex : -1
            }
            var fireChanged = function(that, changed, args) {
                that._isChangedFiring = true;
                changed(args);
                that._isChangedFiring = false
            };
            var processDelayChanged = function(that, changed, args) {
                if (that._isDelayChanged) {
                    that._isDelayChanged = false;
                    fireChanged(that, changed, args);
                    return true
                }
            };
            var processChanged = function(that, changed, changeType, isDelayChanged, removeCacheItem) {
                var dataSource = that._dataSource;
                var items = dataSource.items().slice();
                var change = (0, _type.isObject)(changeType) ? changeType : void 0;
                var isPrepend = "prepend" === changeType;
                var viewportItems = dataSource.viewportItems();
                if (changeType && (0, _type.isString)(changeType) && !that._isDelayChanged) {
                    change = {
                        changeType: changeType,
                        items: items
                    };
                    if (removeCacheItem) {
                        change.removeCount = removeCacheItem.itemsCount;
                        if (change.removeCount && dataSource.correctCount) {
                            change.removeCount = dataSource.correctCount(viewportItems, change.removeCount, isPrepend)
                        }
                    }
                }
                var removeItemCount = removeCacheItem ? removeCacheItem.itemsLength : 0;
                if (removeItemCount && dataSource.correctCount) {
                    removeItemCount = dataSource.correctCount(viewportItems, removeItemCount, isPrepend)
                }
                if ("append" === changeType) {
                    viewportItems.push.apply(viewportItems, items);
                    if (removeCacheItem) {
                        viewportItems.splice(0, removeItemCount)
                    }
                } else {
                    if (isPrepend) {
                        viewportItems.unshift.apply(viewportItems, items);
                        if (removeCacheItem) {
                            viewportItems.splice(-removeItemCount)
                        }
                    } else {
                        that._dataSource.viewportItems(items)
                    }
                }
                dataSource.updateLoading();
                that._lastPageIndex = that.pageIndex();
                that._isDelayChanged = isDelayChanged;
                if (!isDelayChanged) {
                    fireChanged(that, changed, change)
                }
            };
            var loadCore = function(that, pageIndex) {
                var dataSource = that._dataSource;
                if (pageIndex === that.pageIndex() || !dataSource.isLoading() && pageIndex < dataSource.pageCount() || !dataSource.hasKnownLastPage() && pageIndex === dataSource.pageCount()) {
                    dataSource.pageIndex(pageIndex);
                    that._loadingPageIndexes[pageIndex] = true;
                    return (0, _deferred.when)(dataSource.load()).always(function() {
                        that._loadingPageIndexes[pageIndex] = false
                    })
                }
            };
            return {
                ctor: function(component, dataSource, isVirtual) {
                    var that = this;
                    that._dataSource = dataSource;
                    that.component = component;
                    that._pageIndex = that._lastPageIndex = dataSource.pageIndex();
                    that._viewportSize = 0;
                    that._viewportItemSize = 20;
                    that._viewportItemIndex = -1;
                    that._itemSizes = {};
                    that._sizeRatio = 1;
                    that._items = [];
                    that._cache = [];
                    that._isVirtual = isVirtual;
                    that._loadingPageIndexes = {};
                    that.positionChanged = (0, _callbacks2.default)()
                },
                getItemSizes: function() {
                    return this._itemSizes
                },
                option: function() {
                    return this.component.option.apply(this.component, arguments)
                },
                virtualItemsCount: function() {
                    var that = this;
                    var pageIndex;
                    var itemsCount = 0;
                    if (isVirtualMode(that)) {
                        pageIndex = getBeginPageIndex(that);
                        if (pageIndex < 0) {
                            pageIndex = that._dataSource.pageIndex()
                        }
                        var beginItemsCount = pageIndex * that._dataSource.pageSize();
                        itemsCount = that._cache.length * that._dataSource.pageSize();
                        var endItemsCount = Math.max(0, that._dataSource.totalItemsCount() - itemsCount - beginItemsCount);
                        return {
                            begin: beginItemsCount,
                            end: endItemsCount
                        }
                    }
                },
                setViewportPosition: function(position) {
                    var that = this;
                    var result = new _deferred.Deferred;
                    var scrollingTimeout = Math.min(that.option("scrolling.timeout") || 0, that._dataSource.changingDuration());
                    if (scrollingTimeout < that.option("scrolling.renderingThreshold")) {
                        scrollingTimeout = that.option("scrolling.minTimeout") || 0
                    }
                    clearTimeout(that._scrollTimeoutID);
                    if (scrollingTimeout > 0) {
                        that._scrollTimeoutID = setTimeout(function() {
                            that._setViewportPositionCore(position);
                            result.resolve()
                        }, scrollingTimeout)
                    } else {
                        that._setViewportPositionCore(position);
                        result.resolve()
                    }
                    return result.promise()
                },
                getViewportPosition: function() {
                    return this._position || 0
                },
                getItemIndexByPosition: function() {
                    var that = this;
                    var position = that._position;
                    var defaultItemSize = that.getItemSize();
                    var offset = 0;
                    var itemOffset = 0;
                    var itemOffsetsWithSize = Object.keys(that._itemSizes).concat(-1);
                    for (var i = 0; i < itemOffsetsWithSize.length && offset < position; i++) {
                        var itemOffsetWithSize = parseInt(itemOffsetsWithSize[i]);
                        var itemOffsetDiff = (position - offset) / defaultItemSize;
                        if (itemOffsetWithSize < 0 || itemOffset + itemOffsetDiff < itemOffsetWithSize) {
                            itemOffset += itemOffsetDiff;
                            break
                        } else {
                            itemOffsetDiff = itemOffsetWithSize - itemOffset;
                            offset += itemOffsetDiff * defaultItemSize;
                            itemOffset += itemOffsetDiff
                        }
                        var itemSize = that._itemSizes[itemOffsetWithSize];
                        offset += itemSize;
                        itemOffset += offset < position ? 1 : (position - offset + itemSize) / itemSize
                    }
                    return Math.round(50 * itemOffset) / 50
                },
                _setViewportPositionCore: function(position) {
                    this._position = position;
                    var itemIndex = this.getItemIndexByPosition();
                    var result = this.setViewportItemIndex(itemIndex);
                    this.positionChanged.fire();
                    return result
                },
                setContentSize: function(size) {
                    var that = this;
                    var sizes = Array.isArray(size) && size;
                    var virtualItemsCount = that.virtualItemsCount();
                    if (sizes) {
                        size = sizes.reduce(function(a, b) {
                            return a + b
                        }, 0)
                    }
                    that._contentSize = size;
                    if (virtualItemsCount) {
                        if (sizes) {
                            sizes.forEach(function(size, index) {
                                that._itemSizes[virtualItemsCount.begin + index] = size
                            })
                        }
                        var virtualContentSize = (virtualItemsCount.begin + virtualItemsCount.end + that.itemsCount()) * that._viewportItemSize;
                        var contentHeightLimit = exports.getContentHeightLimit(_browser2.default);
                        if (virtualContentSize > contentHeightLimit) {
                            that._sizeRatio = contentHeightLimit / virtualContentSize
                        } else {
                            that._sizeRatio = 1
                        }
                    }
                },
                getItemSize: function() {
                    return this._viewportItemSize * this._sizeRatio
                },
                getItemOffset: function(itemIndex, isEnd) {
                    var that = this;
                    var virtualItemsCount = that.virtualItemsCount();
                    var itemCount = itemIndex;
                    if (!virtualItemsCount) {
                        return 0
                    }
                    var offset = 0;
                    var totalItemsCount = that._dataSource.totalItemsCount();
                    Object.keys(that._itemSizes).forEach(function(currentItemIndex) {
                        if (!itemCount) {
                            return
                        }
                        if (isEnd ? currentItemIndex >= totalItemsCount - itemIndex : currentItemIndex < itemIndex) {
                            offset += that._itemSizes[currentItemIndex];
                            itemCount--
                        }
                    });
                    return Math.floor(offset + itemCount * that._viewportItemSize * that._sizeRatio)
                },
                getContentOffset: function(type) {
                    var isEnd = "end" === type;
                    var virtualItemsCount = this.virtualItemsCount();
                    if (!virtualItemsCount) {
                        return 0
                    }
                    return this.getItemOffset(isEnd ? virtualItemsCount.end : virtualItemsCount.begin, isEnd)
                },
                getVirtualContentSize: function() {
                    var that = this;
                    var virtualItemsCount = that.virtualItemsCount();
                    return virtualItemsCount ? that.getContentOffset("begin") + that.getContentOffset("end") + that._contentSize : 0
                },
                getViewportItemIndex: function() {
                    return this._viewportItemIndex
                },
                setViewportItemIndex: function(itemIndex) {
                    var that = this;
                    var pageSize = that._dataSource.pageSize();
                    var pageCount = that._dataSource.pageCount();
                    var virtualMode = isVirtualMode(that);
                    var appendMode = isAppendMode(that);
                    var totalItemsCount = that._dataSource.totalItemsCount();
                    var newPageIndex;
                    that._viewportItemIndex = itemIndex;
                    if (pageSize && (virtualMode || appendMode) && totalItemsCount >= 0) {
                        if (that._viewportSize && itemIndex + that._viewportSize >= totalItemsCount && !that._isVirtual) {
                            if (that._dataSource.hasKnownLastPage()) {
                                newPageIndex = pageCount - 1;
                                var lastPageSize = totalItemsCount % pageSize;
                                if (newPageIndex > 0 && lastPageSize > 0 && lastPageSize < that._viewportSize) {
                                    newPageIndex--
                                }
                            } else {
                                newPageIndex = pageCount
                            }
                        } else {
                            newPageIndex = Math.floor(itemIndex / pageSize);
                            var maxPageIndex = pageCount - 1;
                            newPageIndex = Math.max(newPageIndex, 0);
                            newPageIndex = Math.min(newPageIndex, maxPageIndex)
                        }
                        that.pageIndex(newPageIndex);
                        return that.load()
                    }
                },
                viewportItemSize: function(size) {
                    if (void 0 !== size) {
                        this._viewportItemSize = size
                    }
                    return this._viewportItemSize
                },
                viewportSize: function(size) {
                    if (void 0 !== size) {
                        this._viewportSize = size
                    }
                    return this._viewportSize
                },
                pageIndex: function(_pageIndex) {
                    if (isVirtualMode(this) || isAppendMode(this)) {
                        if (void 0 !== _pageIndex) {
                            this._pageIndex = _pageIndex
                        }
                        return this._pageIndex
                    } else {
                        return this._dataSource.pageIndex(_pageIndex)
                    }
                },
                beginPageIndex: function beginPageIndex(defaultPageIndex) {
                    var beginPageIndex = getBeginPageIndex(this);
                    if (beginPageIndex < 0) {
                        beginPageIndex = void 0 !== defaultPageIndex ? defaultPageIndex : this.pageIndex()
                    }
                    return beginPageIndex
                },
                endPageIndex: function endPageIndex() {
                    var endPageIndex = getEndPageIndex(this);
                    return endPageIndex > 0 ? endPageIndex : this._lastPageIndex
                },
                pageSize: function() {
                    return this._dataSource.pageSize()
                },
                load: function() {
                    var that = this;
                    var dataSource = that._dataSource;
                    var result;
                    if (isVirtualMode(that) || isAppendMode(that)) {
                        var pageIndexForLoad = getPageIndexForLoad(that);
                        if (pageIndexForLoad >= 0) {
                            var loadResult = loadCore(that, pageIndexForLoad);
                            if (loadResult) {
                                result = new _deferred.Deferred;
                                loadResult.done(function() {
                                    var delayDeferred = that._delayDeferred;
                                    if (delayDeferred) {
                                        delayDeferred.done(result.resolve).fail(result.reject)
                                    } else {
                                        result.resolve()
                                    }
                                }).fail(result.reject);
                                dataSource.updateLoading()
                            }
                        }
                    } else {
                        result = dataSource.load()
                    }
                    if (!result && that._lastPageIndex !== that.pageIndex()) {
                        that._dataSource.onChanged({
                            changeType: "pageIndex"
                        })
                    }
                    return result || (new _deferred.Deferred).resolve()
                },
                loadIfNeed: function() {
                    var that = this;
                    if ((isVirtualMode(that) || isAppendMode(that)) && !that._dataSource.isLoading() && (!that._isChangedFiring || that._isVirtual)) {
                        var position = that.getViewportPosition();
                        if (position > 0) {
                            that._setViewportPositionCore(position)
                        } else {
                            that.load()
                        }
                    }
                },
                handleDataChanged: function(callBase, e) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var lastCacheLength = that._cache.length;
                    var changeType;
                    var removeInvisiblePages;
                    if (e && e.changes) {
                        fireChanged(that, callBase, e)
                    } else {
                        if (isVirtualMode(that) || isAppendMode(that)) {
                            var beginPageIndex = getBeginPageIndex(that);
                            if (beginPageIndex >= 0) {
                                if (isVirtualMode(that) && beginPageIndex + that._cache.length !== dataSource.pageIndex() && beginPageIndex - 1 !== dataSource.pageIndex()) {
                                    lastCacheLength = 0;
                                    that._cache = []
                                }
                                if (isAppendMode(that)) {
                                    if (0 === dataSource.pageIndex()) {
                                        that._cache = []
                                    } else {
                                        if (dataSource.pageIndex() < getEndPageIndex(that)) {
                                            fireChanged(that, callBase, {
                                                changeType: "append",
                                                items: []
                                            });
                                            return
                                        }
                                    }
                                }
                            }
                            var cacheItem = {
                                pageIndex: dataSource.pageIndex(),
                                itemsLength: dataSource.items(true).length,
                                itemsCount: that.itemsCount(true)
                            };
                            if (!that.option("legacyRendering") && that.option("scrolling.removeInvisiblePages") && isVirtualMode(that)) {
                                removeInvisiblePages = that._cache.length > Math.max(getPreloadPageCount(this) + (that.option("scrolling.preloadEnabled") ? 1 : 0), 2)
                            } else {
                                processDelayChanged(that, callBase, {
                                    isDelayed: true
                                })
                            }
                            var removeCacheItem;
                            if (beginPageIndex === dataSource.pageIndex() + 1) {
                                if (removeInvisiblePages) {
                                    removeCacheItem = that._cache.pop()
                                }
                                changeType = "prepend";
                                that._cache.unshift(cacheItem)
                            } else {
                                if (removeInvisiblePages) {
                                    removeCacheItem = that._cache.shift()
                                }
                                changeType = "append";
                                that._cache.push(cacheItem)
                            }
                            var isDelayChanged = isVirtualMode(that) && 0 === lastCacheLength;
                            processChanged(that, callBase, that._cache.length > 1 ? changeType : void 0, isDelayChanged, removeCacheItem);
                            that._delayDeferred = that.load().done(function() {
                                if (processDelayChanged(that, callBase)) {
                                    that.load()
                                }
                            })
                        } else {
                            processChanged(that, callBase, e)
                        }
                    }
                },
                itemsCount: function itemsCount(isBase) {
                    var itemsCount = 0;
                    if (!isBase && isVirtualMode(this)) {
                        (0, _iterator.each)(this._cache, function() {
                            itemsCount += this.itemsCount
                        })
                    } else {
                        itemsCount = this._dataSource.itemsCount()
                    }
                    return itemsCount
                },
                reset: function(isRefresh) {
                    this._loadingPageIndexes = {};
                    this._cache = [];
                    if (!isRefresh) {
                        this._itemSizes = {}
                    }
                },
                subscribeToWindowScrollEvents: function($element) {
                    var that = this;
                    that._windowScroll = that._windowScroll || exports.subscribeToExternalScrollers($element, function(scrollTop) {
                        if (that.viewportItemSize()) {
                            that.setViewportPosition(scrollTop)
                        }
                    })
                },
                dispose: function() {
                    clearTimeout(this._scrollTimeoutID);
                    this._windowScroll && this._windowScroll.dispose();
                    this._windowScroll = null
                },
                scrollTo: function(pos) {
                    this._windowScroll && this._windowScroll.scrollTo(pos)
                }
            }
        }())
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.filter_row.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _menu = __webpack_require__( /*! ../menu */ 373);
        var _menu2 = _interopRequireDefault(_menu);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var OPERATION_ICONS = {
            "=": "filter-operation-equals",
            "<>": "filter-operation-not-equals",
            "<": "filter-operation-less",
            "<=": "filter-operation-less-equal",
            ">": "filter-operation-greater",
            ">=": "filter-operation-greater-equal",
            "default": "filter-operation-default",
            notcontains: "filter-operation-not-contains",
            contains: "filter-operation-contains",
            startswith: "filter-operation-starts-with",
            endswith: "filter-operation-ends-with",
            between: "filter-operation-between"
        };
        var OPERATION_DESCRIPTORS = {
            "=": "equal",
            "<>": "notEqual",
            "<": "lessThan",
            "<=": "lessThanOrEqual",
            ">": "greaterThan",
            ">=": "greaterThanOrEqual",
            startswith: "startsWith",
            contains: "contains",
            notcontains: "notContains",
            endswith: "endsWith",
            between: "between"
        };
        var FILTERING_TIMEOUT = 700;
        var CORRECT_FILTER_RANGE_OVERLAY_WIDTH = 1;
        var FILTER_ROW_CLASS = "filter-row";
        var FILTER_RANGE_OVERLAY_CLASS = "filter-range-overlay";
        var FILTER_RANGE_START_CLASS = "filter-range-start";
        var FILTER_RANGE_END_CLASS = "filter-range-end";
        var MENU_CLASS = "dx-menu";
        var EDITOR_WITH_MENU_CLASS = "dx-editor-with-menu";
        var EDITOR_CONTAINER_CLASS = "dx-editor-container";
        var EDITOR_CELL_CLASS = "dx-editor-cell";
        var FILTER_MENU = "dx-filter-menu";
        var APPLY_BUTTON_CLASS = "dx-apply-button";
        var HIGHLIGHT_OUTLINE_CLASS = "dx-highlight-outline";
        var FOCUSED_CLASS = "dx-focused";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var FILTER_RANGE_CONTENT_CLASS = "dx-filter-range-content";
        var FILTER_MODIFIED_CLASS = "dx-filter-modified";
        var EDITORS_INPUT_SELECTOR = "input:not([type='hidden'])";
        var BETWEEN_OPERATION_DATA_TYPES = ["date", "datetime", "number"];

        function isOnClickApplyFilterMode(that) {
            return "onClick" === that.option("filterRow.applyFilter")
        }
        var ColumnHeadersViewFilterRowExtender = function() {
            var getEditorInstance = function($editorContainer) {
                var $editor = $editorContainer && $editorContainer.children();
                var componentNames = $editor && $editor.data("dxComponents");
                var editor = componentNames && componentNames.length && $editor.data(componentNames[0]);
                if (editor instanceof _editor2.default) {
                    return editor
                }
            };
            var getRangeTextByFilterValue = function(that, column) {
                var result = "";
                var rangeEnd = "";
                var filterValue = getColumnFilterValue(that, column);
                var formatOptions = _uiGrid_core4.default.getFormatOptionsByColumn(column, "filterRow");
                if (Array.isArray(filterValue)) {
                    result = _uiGrid_core4.default.formatValue(filterValue[0], formatOptions);
                    rangeEnd = _uiGrid_core4.default.formatValue(filterValue[1], formatOptions);
                    if ("" !== rangeEnd) {
                        result += " - " + rangeEnd
                    }
                } else {
                    if ((0, _type.isDefined)(filterValue)) {
                        result = _uiGrid_core4.default.formatValue(filterValue, formatOptions)
                    }
                }
                return result
            };

            function getColumnFilterValue(that, column) {
                if (column) {
                    return isOnClickApplyFilterMode(that) && void 0 !== column.bufferedFilterValue ? column.bufferedFilterValue : column.filterValue
                }
            }
            var getColumnSelectedFilterOperation = function(that, column) {
                if (column) {
                    return isOnClickApplyFilterMode(that) && void 0 !== column.bufferedSelectedFilterOperation ? column.bufferedSelectedFilterOperation : column.selectedFilterOperation
                }
            };
            var isValidFilterValue = function(filterValue, column) {
                if (column && BETWEEN_OPERATION_DATA_TYPES.indexOf(column.dataType) >= 0 && Array.isArray(filterValue)) {
                    return false
                }
                return void 0 !== filterValue
            };
            var getFilterValue = function(that, columnIndex, $editorContainer) {
                var column = that._columnsController.columnOption(columnIndex);
                var filterValue = getColumnFilterValue(that, column);
                var isFilterRange = $editorContainer.closest("." + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).length;
                var isRangeStart = $editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS));
                if (filterValue && Array.isArray(filterValue) && "between" === getColumnSelectedFilterOperation(that, column)) {
                    if (isRangeStart) {
                        return filterValue[0]
                    } else {
                        return filterValue[1]
                    }
                }
                return !isFilterRange && isValidFilterValue(filterValue, column) ? filterValue : null
            };
            var normalizeFilterValue = function(that, filterValue, column, $editorContainer) {
                if ("between" === getColumnSelectedFilterOperation(that, column)) {
                    var columnFilterValue = getColumnFilterValue(that, column);
                    if ($editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS))) {
                        return [filterValue, Array.isArray(columnFilterValue) ? columnFilterValue[1] : void 0]
                    } else {
                        return [Array.isArray(columnFilterValue) ? columnFilterValue[0] : columnFilterValue, filterValue]
                    }
                }
                return filterValue
            };
            var updateFilterValue = function(that, options) {
                var value = "" === options.value ? null : options.value;
                var $editorContainer = options.container;
                var column = that._columnsController.columnOption(options.column.index);
                var filterValue = getFilterValue(that, column.index, $editorContainer);
                if (!(0, _type.isDefined)(filterValue) && !(0, _type.isDefined)(value)) {
                    return
                }
                that._applyFilterViewController.setHighLight($editorContainer, filterValue !== value);
                that._columnsController.columnOption(column.index, isOnClickApplyFilterMode(that) ? "bufferedFilterValue" : "filterValue", normalizeFilterValue(that, value, column, $editorContainer), options.notFireEvent)
            };
            return {
                _updateEditorValue: function(column, $editorContainer) {
                    var that = this;
                    var editor = getEditorInstance($editorContainer);
                    editor && editor.option("value", getFilterValue(that, column.index, $editorContainer))
                },
                _columnOptionChanged: function(e) {
                    var that = this;
                    var optionNames = e.optionNames;
                    var $cell;
                    var $editorContainer;
                    var $editorRangeElements;
                    var $menu;
                    if (_uiGrid_core4.default.checkChanges(optionNames, ["filterValue", "bufferedFilterValue", "selectedFilterOperation", "bufferedSelectedFilterOperation"]) && void 0 !== e.columnIndex) {
                        var visibleIndex = that._columnsController.getVisibleIndex(e.columnIndex);
                        var column = that._columnsController.columnOption(e.columnIndex);
                        $cell = that._getCellElement(that.element().find("." + that.addWidgetPrefix(FILTER_ROW_CLASS)).index(), visibleIndex) || (0, _renderer2.default)();
                        $editorContainer = $cell.find("." + EDITOR_CONTAINER_CLASS).first();
                        if (optionNames.filterValue || optionNames.bufferedFilterValue) {
                            that._updateEditorValue(column, $editorContainer);
                            var overlayInstance = $cell.find("." + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).data("dxOverlay");
                            if (overlayInstance) {
                                $editorRangeElements = overlayInstance.$content().find("." + EDITOR_CONTAINER_CLASS);
                                that._updateEditorValue(column, $editorRangeElements.first());
                                that._updateEditorValue(column, $editorRangeElements.last())
                            }
                            if (!overlayInstance || !overlayInstance.option("visible")) {
                                that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column))
                            }
                        }
                        if (optionNames.selectedFilterOperation || optionNames.bufferedSelectedFilterOperation) {
                            if (visibleIndex >= 0 && column) {
                                $menu = $cell.find("." + MENU_CLASS);
                                if ($menu.length) {
                                    that._updateFilterOperationChooser($menu, column, $editorContainer);
                                    if ("between" === getColumnSelectedFilterOperation(that, column)) {
                                        that._renderFilterRangeContent($cell, column)
                                    } else {
                                        if ($editorContainer.find("." + FILTER_RANGE_CONTENT_CLASS).length) {
                                            that._renderEditor($editorContainer, that._getEditorOptions($editorContainer, column));
                                            that._hideFilterRange()
                                        }
                                    }
                                }
                            }
                        }
                        return
                    }
                    that.callBase(e)
                },
                _renderCore: function() {
                    this._filterRangeOverlayInstance = null;
                    this.callBase.apply(this, arguments)
                },
                _resizeCore: function() {
                    this.callBase.apply(this, arguments);
                    this._filterRangeOverlayInstance && this._filterRangeOverlayInstance.repaint()
                },
                isFilterRowVisible: function() {
                    return this._isElementVisible(this.option("filterRow"))
                },
                isVisible: function() {
                    return this.callBase() || this.isFilterRowVisible()
                },
                init: function() {
                    this.callBase();
                    this._applyFilterViewController = this.getController("applyFilter")
                },
                _initFilterRangeOverlay: function($cell, column) {
                    var that = this;
                    var sharedData = {};
                    var $editorContainer = $cell.find(".dx-editor-container");
                    var $overlay = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).appendTo($cell);
                    return that._createComponent($overlay, _overlay2.default, {
                        height: "auto",
                        shading: false,
                        showTitle: false,
                        focusStateEnabled: false,
                        closeOnTargetScroll: false,
                        closeOnOutsideClick: true,
                        animation: false,
                        position: {
                            my: "top",
                            at: "top",
                            of: $editorContainer.length && $editorContainer || $cell,
                            offset: "0 -1"
                        },
                        contentTemplate: function(contentElement) {
                            var editorOptions;
                            var $editor = (0, _renderer2.default)("<div>").addClass(EDITOR_CONTAINER_CLASS + " " + that.addWidgetPrefix(FILTER_RANGE_START_CLASS)).appendTo(contentElement);
                            column = that._columnsController.columnOption(column.index);
                            editorOptions = that._getEditorOptions($editor, column);
                            editorOptions.sharedData = sharedData;
                            that._renderEditor($editor, editorOptions);
                            _events_engine2.default.on($editor.find(EDITORS_INPUT_SELECTOR), "keydown", function(e) {
                                var $prevElement = $cell.find("[tabindex]").not(e.target).first();
                                if ("tab" === (0, _utils.normalizeKeyName)(e) && e.shiftKey) {
                                    e.preventDefault();
                                    that._hideFilterRange();
                                    if (!$prevElement.length) {
                                        $prevElement = $cell.prev().find("[tabindex]").last()
                                    }
                                    _events_engine2.default.trigger($prevElement, "focus")
                                }
                            });
                            $editor = (0, _renderer2.default)("<div>").addClass(EDITOR_CONTAINER_CLASS + " " + that.addWidgetPrefix(FILTER_RANGE_END_CLASS)).appendTo(contentElement);
                            editorOptions = that._getEditorOptions($editor, column);
                            editorOptions.sharedData = sharedData;
                            that._renderEditor($editor, editorOptions);
                            _events_engine2.default.on($editor.find(EDITORS_INPUT_SELECTOR), "keydown", function(e) {
                                if ("tab" === (0, _utils.normalizeKeyName)(e) && !e.shiftKey) {
                                    e.preventDefault();
                                    that._hideFilterRange();
                                    _events_engine2.default.trigger($cell.next().find("[tabindex]").first(), "focus")
                                }
                            });
                            return (0, _renderer2.default)(contentElement).addClass(that.getWidgetContainerClass())
                        },
                        onShown: function(e) {
                            var $editor = e.component.$content().find("." + EDITOR_CONTAINER_CLASS).first();
                            _events_engine2.default.trigger($editor.find(EDITORS_INPUT_SELECTOR), "focus")
                        },
                        onHidden: function() {
                            column = that._columnsController.columnOption(column.index);
                            $cell.find("." + MENU_CLASS).parent().addClass(EDITOR_WITH_MENU_CLASS);
                            if ("between" === getColumnSelectedFilterOperation(that, column)) {
                                that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column));
                                that.component.updateDimensions()
                            }
                        }
                    })
                },
                _updateFilterRangeOverlay: function(options) {
                    var overlayInstance = this._filterRangeOverlayInstance;
                    overlayInstance && overlayInstance.option(options)
                },
                _showFilterRange: function($cell, column) {
                    var that = this;
                    var $overlay = $cell.children("." + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS));
                    var overlayInstance = $overlay.length && $overlay.data("dxOverlay");
                    if (!overlayInstance && column) {
                        overlayInstance = that._initFilterRangeOverlay($cell, column)
                    }
                    if (!overlayInstance.option("visible")) {
                        that._filterRangeOverlayInstance && that._filterRangeOverlayInstance.hide();
                        that._filterRangeOverlayInstance = overlayInstance;
                        that._updateFilterRangeOverlay({
                            width: $cell.outerWidth(true) + CORRECT_FILTER_RANGE_OVERLAY_WIDTH
                        });
                        that._filterRangeOverlayInstance && that._filterRangeOverlayInstance.show()
                    }
                },
                _hideFilterRange: function() {
                    var overlayInstance = this._filterRangeOverlayInstance;
                    overlayInstance && overlayInstance.hide()
                },
                getFilterRangeOverlayInstance: function() {
                    return this._filterRangeOverlayInstance
                },
                _createRow: function(row) {
                    var _this = this;
                    var $row = this.callBase(row);
                    if ("filter" === row.rowType) {
                        $row.addClass(this.addWidgetPrefix(FILTER_ROW_CLASS));
                        if (!this.option("useLegacyKeyboardNavigation")) {
                            _events_engine2.default.on($row, "keydown", function(event) {
                                return (0, _accessibility.selectView)("filterRow", _this, event)
                            })
                        }
                    }
                    return $row
                },
                _getRows: function() {
                    var result = this.callBase();
                    if (this.isFilterRowVisible()) {
                        result.push({
                            rowType: "filter"
                        })
                    }
                    return result
                },
                _renderFilterCell: function(cell, options) {
                    var that = this;
                    var column = options.column;
                    var $cell = (0, _renderer2.default)(cell);
                    if (that.component.option("showColumnHeaders")) {
                        that.setAria("describedby", column.headerId, $cell)
                    }
                    that.setAria("label", _message2.default.format("dxDataGrid-ariaFilterCell"), $cell);
                    $cell.addClass(EDITOR_CELL_CLASS);
                    var $container = (0, _renderer2.default)("<div>").appendTo($cell);
                    var $editorContainer = (0, _renderer2.default)("<div>").addClass(EDITOR_CONTAINER_CLASS).appendTo($container);
                    if ("between" === getColumnSelectedFilterOperation(that, column)) {
                        that._renderFilterRangeContent($cell, column)
                    } else {
                        var editorOptions = that._getEditorOptions($editorContainer, column);
                        that._renderEditor($editorContainer, editorOptions)
                    }
                    if (column.alignment) {
                        $cell.find(EDITORS_INPUT_SELECTOR).first().css("textAlign", column.alignment)
                    }
                    if (column.filterOperations && column.filterOperations.length) {
                        that._renderFilterOperationChooser($container, column, $editorContainer)
                    }
                },
                _renderCellContent: function($cell, options) {
                    var that = this;
                    var column = options.column;
                    if ("filter" === options.rowType) {
                        if (column.command) {
                            $cell.html("&nbsp;")
                        } else {
                            if (column.allowFiltering) {
                                that.renderTemplate($cell, that._renderFilterCell.bind(that), options).done(function() {
                                    that._updateCell($cell, options)
                                });
                                return
                            }
                        }
                    }
                    that.callBase($cell, options)
                },
                _getEditorOptions: function($editorContainer, column) {
                    var that = this;
                    var accessibilityOptions = {
                        editorOptions: {
                            inputAttr: that._getFilterInputAccessibilityAttributes(column)
                        }
                    };
                    var result = (0, _extend.extend)(accessibilityOptions, column, {
                        value: getFilterValue(that, column.index, $editorContainer),
                        parentType: "filterRow",
                        showAllText: that.option("filterRow.showAllText"),
                        updateValueTimeout: "onClick" === that.option("filterRow.applyFilter") ? 0 : FILTERING_TIMEOUT,
                        width: null,
                        setValue: function(value, notFireEvent) {
                            updateFilterValue(that, {
                                column: column,
                                value: value,
                                container: $editorContainer,
                                notFireEvent: notFireEvent
                            })
                        }
                    });
                    if ("between" === getColumnSelectedFilterOperation(that, column)) {
                        if ($editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS))) {
                            result.placeholder = that.option("filterRow.betweenStartText")
                        } else {
                            result.placeholder = that.option("filterRow.betweenEndText")
                        }
                    }
                    return result
                },
                _getFilterInputAccessibilityAttributes: function(column) {
                    var columnAriaLabel = _message2.default.format("dxDataGrid-ariaFilterCell");
                    if (this.component.option("showColumnHeaders")) {
                        return {
                            "aria-label": columnAriaLabel,
                            "aria-describedby": column.headerId
                        }
                    }
                    return {
                        "aria-label": columnAriaLabel
                    }
                },
                _renderEditor: function($editorContainer, options) {
                    $editorContainer.empty();
                    return this.getController("editorFactory").createEditor((0, _renderer2.default)("<div>").appendTo($editorContainer), options)
                },
                _renderFilterRangeContent: function($cell, column) {
                    var that = this;
                    var $editorContainer = $cell.find("." + EDITOR_CONTAINER_CLASS).first();
                    $editorContainer.empty();
                    var $filterRangeContent = (0, _renderer2.default)("<div>").addClass(FILTER_RANGE_CONTENT_CLASS).attr("tabindex", this.option("tabIndex"));
                    _events_engine2.default.on($filterRangeContent, "focusin", function() {
                        that._showFilterRange($cell, column)
                    });
                    $filterRangeContent.appendTo($editorContainer);
                    that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column))
                },
                _updateFilterRangeContent: function($cell, value) {
                    var $filterRangeContent = $cell.find("." + FILTER_RANGE_CONTENT_CLASS);
                    if ($filterRangeContent.length) {
                        if ("" === value) {
                            $filterRangeContent.html("&nbsp;")
                        } else {
                            $filterRangeContent.text(value)
                        }
                    }
                },
                _updateFilterOperationChooser: function($menu, column, $editorContainer) {
                    var that = this;
                    var isCellWasFocused;
                    var restoreFocus = function() {
                        var menu = _menu2.default.getInstance($menu);
                        menu && menu.option("focusedElement", null);
                        isCellWasFocused && that._focusEditor($editorContainer)
                    };
                    that._createComponent($menu, _menu2.default, {
                        integrationOptions: {},
                        activeStateEnabled: false,
                        selectionMode: "single",
                        cssClass: that.getWidgetContainerClass() + " " + CELL_FOCUS_DISABLED_CLASS + " " + FILTER_MENU,
                        showFirstSubmenuMode: "onHover",
                        hideSubmenuOnMouseLeave: true,
                        items: [{
                            disabled: column.filterOperations && column.filterOperations.length ? false : true,
                            icon: OPERATION_ICONS[getColumnSelectedFilterOperation(that, column) || "default"],
                            selectable: false,
                            items: that._getFilterOperationMenuItems(column)
                        }],
                        onItemClick: function(properties) {
                            var selectedFilterOperation = properties.itemData.name;
                            var columnSelectedFilterOperation = getColumnSelectedFilterOperation(that, column);
                            var notFocusEditor = false;
                            var isOnClickMode = isOnClickApplyFilterMode(that);
                            var options = {};
                            if (properties.itemData.items || selectedFilterOperation && selectedFilterOperation === columnSelectedFilterOperation) {
                                return
                            }
                            if (selectedFilterOperation) {
                                options[isOnClickMode ? "bufferedSelectedFilterOperation" : "selectedFilterOperation"] = selectedFilterOperation;
                                if ("between" === selectedFilterOperation || "between" === columnSelectedFilterOperation) {
                                    notFocusEditor = "between" === selectedFilterOperation;
                                    options[isOnClickMode ? "bufferedFilterValue" : "filterValue"] = null
                                }
                            } else {
                                options[isOnClickMode ? "bufferedFilterValue" : "filterValue"] = null;
                                options[isOnClickMode ? "bufferedSelectedFilterOperation" : "selectedFilterOperation"] = column.defaultSelectedFilterOperation || null
                            }
                            that._columnsController.columnOption(column.index, options);
                            that._applyFilterViewController.setHighLight($editorContainer, true);
                            if (!selectedFilterOperation) {
                                var editor = getEditorInstance($editorContainer);
                                if (editor && "dxDateBox" === editor.NAME && !editor.option("isValid")) {
                                    editor.reset();
                                    editor.option("isValid", true)
                                }
                            }
                            if (!notFocusEditor) {
                                that._focusEditor($editorContainer)
                            } else {
                                that._showFilterRange($editorContainer.closest("." + EDITOR_CELL_CLASS), column)
                            }
                        },
                        onSubmenuShown: function() {
                            isCellWasFocused = that._isEditorFocused($editorContainer);
                            that.getController("editorFactory").loseFocus()
                        },
                        onSubmenuHiding: function() {
                            _events_engine2.default.trigger($menu, "blur");
                            restoreFocus()
                        },
                        onContentReady: function(e) {
                            _events_engine2.default.on($menu, "blur", function() {
                                var menu = e.component;
                                menu._hideSubmenu(menu._visibleSubmenu);
                                restoreFocus()
                            })
                        },
                        rtlEnabled: that.option("rtlEnabled")
                    })
                },
                _isEditorFocused: function($container) {
                    return $container.hasClass(FOCUSED_CLASS) || $container.parents("." + FOCUSED_CLASS).length
                },
                _focusEditor: function($container) {
                    this.getController("editorFactory").focus($container);
                    _events_engine2.default.trigger($container.find(EDITORS_INPUT_SELECTOR), "focus")
                },
                _renderFilterOperationChooser: function($container, column, $editorContainer) {
                    var that = this;
                    var $menu;
                    if (that.option("filterRow.showOperationChooser")) {
                        $container.addClass(EDITOR_WITH_MENU_CLASS);
                        $menu = (0, _renderer2.default)("<div>").prependTo($container);
                        that._updateFilterOperationChooser($menu, column, $editorContainer)
                    }
                },
                _getFilterOperationMenuItems: function(column) {
                    var that = this;
                    var result = [{}];
                    var filterRowOptions = that.option("filterRow");
                    var operationDescriptions = filterRowOptions && filterRowOptions.operationDescriptions || {};
                    if (column.filterOperations && column.filterOperations.length) {
                        var availableFilterOperations = column.filterOperations.filter(function(value) {
                            return (0, _type.isDefined)(OPERATION_DESCRIPTORS[value])
                        });
                        result = _iterator2.default.map(availableFilterOperations, function(value) {
                            var descriptionName = OPERATION_DESCRIPTORS[value];
                            return {
                                name: value,
                                selected: (getColumnSelectedFilterOperation(that, column) || column.defaultFilterOperation) === value,
                                text: operationDescriptions[descriptionName],
                                icon: OPERATION_ICONS[value]
                            }
                        });
                        result.push({
                            name: null,
                            text: filterRowOptions && filterRowOptions.resetOperationText,
                            icon: OPERATION_ICONS.default
                        })
                    }
                    return result
                },
                optionChanged: function(args) {
                    var that = this;
                    switch (args.name) {
                        case "filterRow":
                        case "showColumnLines":
                            this._invalidate(true, true);
                            args.handled = true;
                            break;
                        default:
                            that.callBase(args)
                    }
                }
            }
        }();
        var DataControllerFilterRowExtender = {
            skipCalculateColumnFilters: function() {
                return false
            },
            _calculateAdditionalFilter: function() {
                if (this.skipCalculateColumnFilters()) {
                    return this.callBase()
                }
                var filters = [this.callBase()];
                var columns = this._columnsController.getVisibleColumns(null, true);
                _iterator2.default.each(columns, function() {
                    if (this.allowFiltering && this.calculateFilterExpression && (0, _type.isDefined)(this.filterValue)) {
                        var filter = this.createFilterExpression(this.filterValue, this.selectedFilterOperation || this.defaultFilterOperation, "filterRow");
                        filters.push(filter)
                    }
                });
                return _uiGrid_core4.default.combineFilters(filters)
            }
        };
        exports.ApplyFilterViewController = _uiGrid_core2.default.ViewController.inherit({
            _getHeaderPanel: function() {
                if (!this._headerPanel) {
                    this._headerPanel = this.getView("headerPanel")
                }
                return this._headerPanel
            },
            setHighLight: function($element, value) {
                if (isOnClickApplyFilterMode(this)) {
                    $element && $element.toggleClass(HIGHLIGHT_OUTLINE_CLASS, value) && $element.closest("." + EDITOR_CELL_CLASS).toggleClass(FILTER_MODIFIED_CLASS, value);
                    this._getHeaderPanel().enableApplyButton(value)
                }
            },
            applyFilter: function() {
                var columnsController = this.getController("columns");
                var columns = columnsController.getColumns();
                columnsController.beginUpdate();
                for (var i = 0; i < columns.length; i++) {
                    var column = columns[i];
                    if (void 0 !== column.bufferedFilterValue) {
                        columnsController.columnOption(i, "filterValue", column.bufferedFilterValue);
                        column.bufferedFilterValue = void 0
                    }
                    if (void 0 !== column.bufferedSelectedFilterOperation) {
                        columnsController.columnOption(i, "selectedFilterOperation", column.bufferedSelectedFilterOperation);
                        column.bufferedSelectedFilterOperation = void 0
                    }
                }
                columnsController.endUpdate();
                this.removeHighLights()
            },
            removeHighLights: function() {
                if (isOnClickApplyFilterMode(this)) {
                    var columnHeadersViewElement = this.getView("columnHeadersView").element();
                    columnHeadersViewElement.find("." + this.addWidgetPrefix(FILTER_ROW_CLASS) + " ." + HIGHLIGHT_OUTLINE_CLASS).removeClass(HIGHLIGHT_OUTLINE_CLASS);
                    columnHeadersViewElement.find("." + this.addWidgetPrefix(FILTER_ROW_CLASS) + " ." + FILTER_MODIFIED_CLASS).removeClass(FILTER_MODIFIED_CLASS);
                    this._getHeaderPanel().enableApplyButton(false)
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    filterRow: {
                        visible: false,
                        showOperationChooser: true,
                        showAllText: _message2.default.format("dxDataGrid-filterRowShowAllText"),
                        resetOperationText: _message2.default.format("dxDataGrid-filterRowResetOperationText"),
                        applyFilter: "auto",
                        applyFilterText: _message2.default.format("dxDataGrid-applyFilterText"),
                        operationDescriptions: {
                            equal: _message2.default.format("dxDataGrid-filterRowOperationEquals"),
                            notEqual: _message2.default.format("dxDataGrid-filterRowOperationNotEquals"),
                            lessThan: _message2.default.format("dxDataGrid-filterRowOperationLess"),
                            lessThanOrEqual: _message2.default.format("dxDataGrid-filterRowOperationLessOrEquals"),
                            greaterThan: _message2.default.format("dxDataGrid-filterRowOperationGreater"),
                            greaterThanOrEqual: _message2.default.format("dxDataGrid-filterRowOperationGreaterOrEquals"),
                            startsWith: _message2.default.format("dxDataGrid-filterRowOperationStartsWith"),
                            contains: _message2.default.format("dxDataGrid-filterRowOperationContains"),
                            notContains: _message2.default.format("dxDataGrid-filterRowOperationNotContains"),
                            endsWith: _message2.default.format("dxDataGrid-filterRowOperationEndsWith"),
                            between: _message2.default.format("dxDataGrid-filterRowOperationBetween"),
                            isBlank: _message2.default.format("dxFilterBuilder-filterOperationIsBlank"),
                            isNotBlank: _message2.default.format("dxFilterBuilder-filterOperationIsNotBlank")
                        },
                        betweenStartText: _message2.default.format("dxDataGrid-filterRowOperationBetweenStartText"),
                        betweenEndText: _message2.default.format("dxDataGrid-filterRowOperationBetweenEndText")
                    }
                }
            },
            controllers: {
                applyFilter: exports.ApplyFilterViewController
            },
            extenders: {
                controllers: {
                    data: DataControllerFilterRowExtender,
                    columnsResizer: {
                        _startResizing: function() {
                            var that = this;
                            that.callBase.apply(that, arguments);
                            if (that.isResizing()) {
                                var overlayInstance = that._columnHeadersView.getFilterRangeOverlayInstance();
                                if (overlayInstance) {
                                    var cellIndex = overlayInstance.$element().closest("td").index();
                                    if (cellIndex === that._targetPoint.columnIndex || cellIndex === that._targetPoint.columnIndex + 1) {
                                        overlayInstance.$content().hide()
                                    }
                                }
                            }
                        },
                        _endResizing: function() {
                            var that = this;
                            var $cell;
                            if (that.isResizing()) {
                                var overlayInstance = that._columnHeadersView.getFilterRangeOverlayInstance();
                                if (overlayInstance) {
                                    $cell = overlayInstance.$element().closest("td");
                                    that._columnHeadersView._updateFilterRangeOverlay({
                                        width: $cell.outerWidth(true) + CORRECT_FILTER_RANGE_OVERLAY_WIDTH
                                    });
                                    overlayInstance.$content().show()
                                }
                            }
                            that.callBase.apply(that, arguments)
                        }
                    }
                },
                views: {
                    columnHeadersView: ColumnHeadersViewFilterRowExtender,
                    headerPanel: {
                        _getToolbarItems: function() {
                            var items = this.callBase();
                            var filterItem = this._prepareFilterItem(items);
                            return filterItem.concat(items)
                        },
                        _prepareFilterItem: function() {
                            var that = this;
                            var filterItem = [];
                            if (that._isShowApplyFilterButton()) {
                                var hintText = that.option("filterRow.applyFilterText");
                                var columns = that._columnsController.getColumns();
                                var disabled = !columns.filter(function(column) {
                                    return void 0 !== column.bufferedFilterValue
                                }).length;
                                var onInitialized = function(e) {
                                    (0, _renderer2.default)(e.element).addClass(that._getToolbarButtonClass(APPLY_BUTTON_CLASS))
                                };
                                var onClickHandler = function() {
                                    that._applyFilterViewController.applyFilter()
                                };
                                var toolbarItem = {
                                    widget: "dxButton",
                                    options: {
                                        icon: "apply-filter",
                                        disabled: disabled,
                                        onClick: onClickHandler,
                                        hint: hintText,
                                        text: hintText,
                                        onInitialized: onInitialized
                                    },
                                    showText: "inMenu",
                                    name: "applyFilterButton",
                                    location: "after",
                                    locateInMenu: "auto",
                                    sortIndex: 10
                                };
                                filterItem.push(toolbarItem)
                            }
                            return filterItem
                        },
                        _isShowApplyFilterButton: function() {
                            var filterRowOptions = this.option("filterRow");
                            return filterRowOptions && filterRowOptions.visible && "onClick" === filterRowOptions.applyFilter
                        },
                        init: function() {
                            this.callBase();
                            this._dataController = this.getController("data");
                            this._applyFilterViewController = this.getController("applyFilter")
                        },
                        enableApplyButton: function(value) {
                            this.setToolbarItemDisabled("applyFilterButton", !value)
                        },
                        isVisible: function() {
                            return this.callBase() || this._isShowApplyFilterButton()
                        },
                        optionChanged: function(args) {
                            if ("filterRow" === args.name) {
                                this._invalidate();
                                args.handled = true
                            } else {
                                this.callBase(args)
                            }
                        }
                    }
                }
            }
        }
    },
    /*!*****************************************!*\
      !*** ./artifacts/transpiled/ui/menu.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _ui = __webpack_require__( /*! ./menu/ui.menu */ 374);
        var _ui2 = _interopRequireDefault(_ui);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _ui2.default
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/menu/ui.menu.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../overlay/utils */ 236);
        var _utils2 = __webpack_require__( /*! ../../events/utils */ 8);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _hover = __webpack_require__( /*! ../../events/hover */ 156);
        var _hover2 = _interopRequireDefault(_hover);
        var _ui = __webpack_require__( /*! ../context_menu/ui.menu_base */ 344);
        var _ui2 = _interopRequireDefault(_ui);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _ui3 = __webpack_require__( /*! ./ui.submenu */ 653);
        var _ui4 = _interopRequireDefault(_ui3);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _tree_view = __webpack_require__( /*! ../tree_view */ 146);
        var _tree_view2 = _interopRequireDefault(_tree_view);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DX_MENU_CLASS = "dx-menu";
        var DX_MENU_VERTICAL_CLASS = DX_MENU_CLASS + "-vertical";
        var DX_MENU_HORIZONTAL_CLASS = DX_MENU_CLASS + "-horizontal";
        var DX_MENU_ITEM_CLASS = DX_MENU_CLASS + "-item";
        var DX_MENU_ITEMS_CONTAINER_CLASS = DX_MENU_CLASS + "-items-container";
        var DX_MENU_ITEM_EXPANDED_CLASS = DX_MENU_ITEM_CLASS + "-expanded";
        var DX_CONTEXT_MENU_CLASS = "dx-context-menu";
        var DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS = DX_CONTEXT_MENU_CLASS + "-container-border";
        var DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS = "dx-context-menu-content-delimiter";
        var DX_SUBMENU_CLASS = "dx-submenu";
        var DX_STATE_DISABLED_CLASS = "dx-state-disabled";
        var DX_STATE_HOVER_CLASS = "dx-state-hover";
        var DX_STATE_ACTIVE_CLASS = "dx-state-active";
        var DX_ADAPTIVE_MODE_CLASS = DX_MENU_CLASS + "-adaptive-mode";
        var DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS = DX_MENU_CLASS + "-hamburger-button";
        var DX_ADAPTIVE_MODE_OVERLAY_WRAPPER_CLASS = DX_ADAPTIVE_MODE_CLASS + "-overlay-wrapper";
        var FOCUS_UP = "up";
        var FOCUS_DOWN = "down";
        var FOCUS_LEFT = "left";
        var FOCUS_RIGHT = "right";
        var SHOW_SUBMENU_OPERATION = "showSubmenu";
        var NEXTITEM_OPERATION = "nextItem";
        var PREVITEM_OPERATION = "prevItem";
        var DEFAULT_DELAY = {
            show: 50,
            hide: 300
        };
        var ACTIONS = ["onSubmenuShowing", "onSubmenuShown", "onSubmenuHiding", "onSubmenuHidden", "onItemContextMenu", "onItemClick", "onSelectionChanged"];
        var Menu = function(_MenuBase) {
            _inherits(Menu, _MenuBase);
            var _super = _createSuper(Menu);

            function Menu() {
                _classCallCheck(this, Menu);
                return _super.apply(this, arguments)
            }
            _createClass(Menu, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Menu.prototype), "_getDefaultOptions", this).call(this), {
                        orientation: "horizontal",
                        submenuDirection: "auto",
                        showFirstSubmenuMode: {
                            name: "onClick",
                            delay: {
                                show: 50,
                                hide: 300
                            }
                        },
                        hideSubmenuOnMouseLeave: false,
                        onSubmenuShowing: null,
                        onSubmenuShown: null,
                        onSubmenuHiding: null,
                        onSubmenuHidden: null,
                        adaptivityEnabled: false
                    })
                }
            }, {
                key: "_setOptionsByReference",
                value: function() {
                    _get(_getPrototypeOf(Menu.prototype), "_setOptionsByReference", this).call(this);
                    (0, _extend.extend)(this._optionsByReference, {
                        animation: true,
                        selectedItem: true
                    })
                }
            }, {
                key: "_itemElements",
                value: function() {
                    var rootMenuElements = _get(_getPrototypeOf(Menu.prototype), "_itemElements", this).call(this);
                    var submenuElements = this._submenuItemElements();
                    return rootMenuElements.add(submenuElements)
                }
            }, {
                key: "_submenuItemElements",
                value: function() {
                    var elements = [];
                    var itemSelector = ".".concat(DX_MENU_ITEM_CLASS);
                    var currentSubmenu = this._submenus.length && this._submenus[0];
                    if (currentSubmenu && currentSubmenu.itemsContainer()) {
                        elements = currentSubmenu.itemsContainer().find(itemSelector)
                    }
                    return elements
                }
            }, {
                key: "_focusTarget",
                value: function() {
                    return this.$element()
                }
            }, {
                key: "_isMenuHorizontal",
                value: function() {
                    return "horizontal" === this.option("orientation")
                }
            }, {
                key: "_moveFocus",
                value: function(location) {
                    var $items = this._getAvailableItems();
                    var isMenuHorizontal = this._isMenuHorizontal();
                    var $activeItem = this._getActiveItem(true);
                    var argument;
                    var operation;
                    var navigationAction;
                    var $newTarget;
                    switch (location) {
                        case FOCUS_UP:
                            operation = isMenuHorizontal ? SHOW_SUBMENU_OPERATION : this._getItemsNavigationOperation(PREVITEM_OPERATION);
                            argument = isMenuHorizontal ? $activeItem : $items;
                            navigationAction = this._getKeyboardNavigationAction(operation, argument);
                            $newTarget = navigationAction();
                            break;
                        case FOCUS_DOWN:
                            operation = isMenuHorizontal ? SHOW_SUBMENU_OPERATION : this._getItemsNavigationOperation(NEXTITEM_OPERATION);
                            argument = isMenuHorizontal ? $activeItem : $items;
                            navigationAction = this._getKeyboardNavigationAction(operation, argument);
                            $newTarget = navigationAction();
                            break;
                        case FOCUS_RIGHT:
                            operation = isMenuHorizontal ? this._getItemsNavigationOperation(NEXTITEM_OPERATION) : SHOW_SUBMENU_OPERATION;
                            argument = isMenuHorizontal ? $items : $activeItem;
                            navigationAction = this._getKeyboardNavigationAction(operation, argument);
                            $newTarget = navigationAction();
                            break;
                        case FOCUS_LEFT:
                            operation = isMenuHorizontal ? this._getItemsNavigationOperation(PREVITEM_OPERATION) : SHOW_SUBMENU_OPERATION;
                            argument = isMenuHorizontal ? $items : $activeItem;
                            navigationAction = this._getKeyboardNavigationAction(operation, argument);
                            $newTarget = navigationAction();
                            break;
                        default:
                            return _get(_getPrototypeOf(Menu.prototype), "_moveFocus", this).call(this, location)
                    }
                    if ($newTarget && 0 !== $newTarget.length) {
                        this.option("focusedElement", (0, _dom.getPublicElement)($newTarget))
                    }
                }
            }, {
                key: "_getItemsNavigationOperation",
                value: function(operation) {
                    var navOperation = operation;
                    if (this.option("rtlEnabled")) {
                        navOperation = operation === PREVITEM_OPERATION ? NEXTITEM_OPERATION : PREVITEM_OPERATION
                    }
                    return navOperation
                }
            }, {
                key: "_getKeyboardNavigationAction",
                value: function(operation, argument) {
                    var action = _common.noop;
                    switch (operation) {
                        case SHOW_SUBMENU_OPERATION:
                            if (!argument.hasClass(DX_STATE_DISABLED_CLASS)) {
                                action = this._showSubmenu.bind(this, argument)
                            }
                            break;
                        case NEXTITEM_OPERATION:
                            action = this._nextItem.bind(this, argument);
                            break;
                        case PREVITEM_OPERATION:
                            action = this._prevItem.bind(this, argument)
                    }
                    return action
                }
            }, {
                key: "_clean",
                value: function() {
                    _get(_getPrototypeOf(Menu.prototype), "_clean", this).call(this);
                    this.option("templatesRenderAsynchronously") && clearTimeout(this._resizeEventTimer)
                }
            }, {
                key: "_visibilityChanged",
                value: function(visible) {
                    if (visible) {
                        if (!this._menuItemsWidth) {
                            this._updateItemsWidthCache()
                        }
                        this._dimensionChanged()
                    }
                }
            }, {
                key: "_isAdaptivityEnabled",
                value: function() {
                    return this.option("adaptivityEnabled") && "horizontal" === this.option("orientation")
                }
            }, {
                key: "_updateItemsWidthCache",
                value: function() {
                    var $menuItems = this.$element().find("ul").first().children("li").children(".".concat(DX_MENU_ITEM_CLASS));
                    this._menuItemsWidth = this._getSummaryItemsWidth($menuItems, true)
                }
            }, {
                key: "_dimensionChanged",
                value: function() {
                    if (!this._isAdaptivityEnabled()) {
                        return
                    }
                    var containerWidth = this.$element().outerWidth();
                    this._toggleAdaptiveMode(this._menuItemsWidth > containerWidth)
                }
            }, {
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(Menu.prototype), "_init", this).call(this);
                    this._submenus = []
                }
            }, {
                key: "_initActions",
                value: function() {
                    var _this = this;
                    this._actions = {};
                    (0, _iterator.each)(ACTIONS, function(index, action) {
                        _this._actions[action] = _this._createActionByOption(action)
                    })
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this._visibleSubmenu = null;
                    this.$element().addClass(DX_MENU_CLASS);
                    _get(_getPrototypeOf(Menu.prototype), "_initMarkup", this).call(this);
                    this.setAria("role", "menubar")
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(Menu.prototype), "_render", this).call(this);
                    this._initAdaptivity()
                }
            }, {
                key: "_renderHamburgerButton",
                value: function() {
                    this._hamburger = new _button2.default((0, _renderer2.default)("<div>").addClass(DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS), {
                        icon: "menu",
                        activeStateEnabled: false,
                        onClick: this._toggleTreeView.bind(this)
                    });
                    return this._hamburger.$element()
                }
            }, {
                key: "_toggleTreeView",
                value: function(state) {
                    if ((0, _type.isPlainObject)(state)) {
                        state = !this._overlay.option("visible")
                    }
                    this._overlay.option("visible", state);
                    this._toggleHamburgerActiveState(state)
                }
            }, {
                key: "_toggleHamburgerActiveState",
                value: function(state) {
                    this._hamburger && this._hamburger.$element().toggleClass(DX_STATE_ACTIVE_CLASS, state)
                }
            }, {
                key: "_toggleAdaptiveMode",
                value: function(state) {
                    var $menuItemsContainer = this.$element().find(".".concat(DX_MENU_HORIZONTAL_CLASS));
                    var $adaptiveElements = this.$element().find(".".concat(DX_ADAPTIVE_MODE_CLASS));
                    if (state) {
                        this._hideVisibleSubmenu()
                    } else {
                        this._treeView && this._treeView.collapseAll();
                        this._overlay && this._toggleTreeView(state)
                    }
                    $menuItemsContainer.toggle(!state);
                    $adaptiveElements.toggle(state)
                }
            }, {
                key: "_removeAdaptivity",
                value: function() {
                    if (!this._$adaptiveContainer) {
                        return
                    }
                    this._toggleAdaptiveMode(false);
                    this._$adaptiveContainer.remove();
                    this._$adaptiveContainer = null;
                    this._treeView = null;
                    this._hamburger = null;
                    this._overlay = null
                }
            }, {
                key: "_treeviewItemClickHandler",
                value: function(e) {
                    this._actions.onItemClick(e);
                    if (!e.node.children.length) {
                        this._toggleTreeView(false)
                    }
                }
            }, {
                key: "_getAdaptiveOverlayOptions",
                value: function() {
                    var _this2 = this;
                    var rtl = this.option("rtlEnabled");
                    var position = rtl ? "right" : "left";
                    return {
                        maxHeight: function() {
                            return (0, _utils.getElementMaxHeightByWindow)(_this2.$element())
                        },
                        deferRendering: false,
                        shading: false,
                        animation: false,
                        closeOnTargetScroll: true,
                        onHidden: function() {
                            _this2._toggleHamburgerActiveState(false)
                        },
                        height: "auto",
                        closeOnOutsideClick: function(e) {
                            return !(0, _renderer2.default)(e.target).closest(".".concat(DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS)).length
                        },
                        position: {
                            collision: "flipfit",
                            at: "bottom " + position,
                            my: "top " + position,
                            of: this._hamburger.$element()
                        }
                    }
                }
            }, {
                key: "_getTreeViewOptions",
                value: function() {
                    var _this3 = this;
                    var menuOptions = {};
                    var optionsToTransfer = ["rtlEnabled", "width", "accessKey", "activeStateEnabled", "animation", "dataSource", "disabled", "displayExpr", "displayExpr", "focusStateEnabled", "hint", "hoverStateEnabled", "itemsExpr", "items", "itemTemplate", "selectedExpr", "selectionMode", "tabIndex", "visible"];
                    var actionsToTransfer = ["onItemContextMenu", "onSelectionChanged"];
                    (0, _iterator.each)(optionsToTransfer, function(_, option) {
                        menuOptions[option] = _this3.option(option)
                    });
                    (0, _iterator.each)(actionsToTransfer, function(_, actionName) {
                        menuOptions[actionName] = function(e) {
                            _this3._actions[actionName](e)
                        }
                    });
                    return (0, _extend.extend)(menuOptions, {
                        dataSource: this.getDataSource(),
                        animationEnabled: !!this.option("animation"),
                        onItemClick: this._treeviewItemClickHandler.bind(this),
                        onItemExpanded: function(e) {
                            _this3._overlay.repaint();
                            _this3._actions.onSubmenuShown(e)
                        },
                        onItemCollapsed: function(e) {
                            _this3._overlay.repaint();
                            _this3._actions.onSubmenuHidden(e)
                        },
                        selectNodesRecursive: false,
                        selectByClick: this.option("selectByClick"),
                        expandEvent: "click"
                    })
                }
            }, {
                key: "_initAdaptivity",
                value: function() {
                    if (!this._isAdaptivityEnabled()) {
                        return
                    }
                    this._$adaptiveContainer = (0, _renderer2.default)("<div>").addClass(DX_ADAPTIVE_MODE_CLASS);
                    var $hamburger = this._renderHamburgerButton();
                    this._treeView = this._createComponent((0, _renderer2.default)("<div>"), _tree_view2.default, this._getTreeViewOptions());
                    this._overlay = this._createComponent((0, _renderer2.default)("<div>"), _overlay2.default, this._getAdaptiveOverlayOptions());
                    this._overlay.$content().append(this._treeView.$element()).addClass(DX_ADAPTIVE_MODE_CLASS).addClass(this.option("cssClass"));
                    this._overlay._wrapper().addClass(DX_ADAPTIVE_MODE_OVERLAY_WRAPPER_CLASS);
                    this._$adaptiveContainer.append($hamburger);
                    this._$adaptiveContainer.append(this._overlay.$element());
                    this.$element().append(this._$adaptiveContainer);
                    this._updateItemsWidthCache();
                    this._dimensionChanged()
                }
            }, {
                key: "_getDelay",
                value: function(delayType) {
                    var delay = this.option("showFirstSubmenuMode").delay;
                    if (!(0, _type.isDefined)(delay)) {
                        return DEFAULT_DELAY[delayType]
                    } else {
                        return (0, _type.isObject)(delay) ? delay[delayType] : delay
                    }
                }
            }, {
                key: "_keyboardHandler",
                value: function(e) {
                    return _get(_getPrototypeOf(Menu.prototype), "_keyboardHandler", this).call(this, e, !!this._visibleSubmenu)
                }
            }, {
                key: "_renderContainer",
                value: function() {
                    var $wrapper = (0, _renderer2.default)("<div>");
                    $wrapper.appendTo(this.$element()).addClass(this._isMenuHorizontal() ? DX_MENU_HORIZONTAL_CLASS : DX_MENU_VERTICAL_CLASS);
                    return _get(_getPrototypeOf(Menu.prototype), "_renderContainer", this).call(this, $wrapper)
                }
            }, {
                key: "_renderSubmenuItems",
                value: function(node, $itemFrame) {
                    var submenu = this._createSubmenu(node, $itemFrame);
                    this._submenus.push(submenu);
                    this._renderBorderElement($itemFrame);
                    return submenu
                }
            }, {
                key: "_getKeyboardListeners",
                value: function() {
                    return _get(_getPrototypeOf(Menu.prototype), "_getKeyboardListeners", this).call(this).concat(this._submenus)
                }
            }, {
                key: "_createSubmenu",
                value: function(node, $rootItem) {
                    var $submenuContainer = (0, _renderer2.default)("<div>").addClass(DX_CONTEXT_MENU_CLASS).appendTo($rootItem);
                    var items = this._getChildNodes(node);
                    var result = this._createComponent($submenuContainer, _ui4.default, (0, _extend.extend)(this._getSubmenuOptions(), {
                        _dataAdapter: this._dataAdapter,
                        _parentKey: node.internalFields.key,
                        items: items,
                        onHoverStart: this._clearTimeouts.bind(this),
                        position: this.getSubmenuPosition($rootItem)
                    }));
                    this._attachSubmenuHandlers($rootItem, result);
                    return result
                }
            }, {
                key: "_getSubmenuOptions",
                value: function() {
                    var _this4 = this;
                    var $submenuTarget = (0, _renderer2.default)("<div>");
                    var isMenuHorizontal = this._isMenuHorizontal();
                    return {
                        itemTemplate: this.option("itemTemplate"),
                        target: $submenuTarget,
                        orientation: this.option("orientation"),
                        selectionMode: this.option("selectionMode"),
                        cssClass: this.option("cssClass"),
                        selectByClick: this.option("selectByClick"),
                        hoverStateEnabled: this.option("hoverStateEnabled"),
                        activeStateEnabled: this.option("activeStateEnabled"),
                        focusStateEnabled: this.option("focusStateEnabled"),
                        animation: this.option("animation"),
                        showSubmenuMode: this.option("showSubmenuMode"),
                        displayExpr: this.option("displayExpr"),
                        disabledExpr: this.option("disabledExpr"),
                        selectedExpr: this.option("selectedExpr"),
                        itemsExpr: this.option("itemsExpr"),
                        onFocusedItemChanged: function(e) {
                            if (!e.component.option("visible")) {
                                return
                            }
                            _this4.option("focusedElement", e.component.option("focusedElement"))
                        },
                        onSelectionChanged: this._nestedItemOnSelectionChangedHandler.bind(this),
                        onItemClick: this._nestedItemOnItemClickHandler.bind(this),
                        onItemRendered: this.option("onItemRendered"),
                        onLeftFirstItem: isMenuHorizontal ? null : this._moveMainMenuFocus.bind(this, PREVITEM_OPERATION),
                        onLeftLastItem: isMenuHorizontal ? null : this._moveMainMenuFocus.bind(this, NEXTITEM_OPERATION),
                        onCloseRootSubmenu: this._moveMainMenuFocus.bind(this, isMenuHorizontal ? PREVITEM_OPERATION : null),
                        onExpandLastSubmenu: isMenuHorizontal ? this._moveMainMenuFocus.bind(this, NEXTITEM_OPERATION) : null
                    }
                }
            }, {
                key: "_getShowFirstSubmenuMode",
                value: function() {
                    if (!this._isDesktopDevice()) {
                        return "onClick"
                    }
                    var optionValue = this.option("showFirstSubmenuMode");
                    return (0, _type.isObject)(optionValue) ? optionValue.name : optionValue
                }
            }, {
                key: "_moveMainMenuFocus",
                value: function(direction) {
                    var $items = this._getAvailableItems();
                    var itemCount = $items.length;
                    var $currentItem = $items.filter(".".concat(DX_MENU_ITEM_EXPANDED_CLASS)).eq(0);
                    var itemIndex = $items.index($currentItem);
                    this._hideSubmenu(this._visibleSubmenu);
                    itemIndex += direction === PREVITEM_OPERATION ? -1 : 1;
                    if (itemIndex >= itemCount) {
                        itemIndex = 0
                    } else {
                        if (itemIndex < 0) {
                            itemIndex = itemCount - 1
                        }
                    }
                    var $newItem = $items.eq(itemIndex);
                    this.option("focusedElement", (0, _dom.getPublicElement)($newItem))
                }
            }, {
                key: "_nestedItemOnSelectionChangedHandler",
                value: function(args) {
                    var selectedItem = args.addedItems.length && args.addedItems[0];
                    var submenu = _ui4.default.getInstance(args.element);
                    var onSelectionChanged = this._actions.onSelectionChanged;
                    onSelectionChanged(args);
                    selectedItem && this._clearSelectionInSubmenus(selectedItem[0], submenu);
                    this._clearRootSelection();
                    this._setOptionWithoutOptionChange("selectedItem", selectedItem)
                }
            }, {
                key: "_clearSelectionInSubmenus",
                value: function(item, targetSubmenu) {
                    var _this5 = this;
                    var cleanAllSubmenus = !arguments.length;
                    (0, _iterator.each)(this._submenus, function(index, submenu) {
                        var $submenu = submenu._itemContainer();
                        var isOtherItem = !$submenu.is(targetSubmenu && targetSubmenu._itemContainer());
                        var $selectedItem = $submenu.find(".".concat(_this5._selectedItemClass()));
                        if (isOtherItem && $selectedItem.length || cleanAllSubmenus) {
                            $selectedItem.removeClass(_this5._selectedItemClass());
                            var selectedItemData = _this5._getItemData($selectedItem);
                            if (selectedItemData) {
                                selectedItemData.selected = false
                            }
                            submenu._clearSelectedItems()
                        }
                    })
                }
            }, {
                key: "_clearRootSelection",
                value: function() {
                    var $prevSelectedItem = this.$element().find(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS)).first().children().children().filter(".".concat(this._selectedItemClass()));
                    if ($prevSelectedItem.length) {
                        var prevSelectedItemData = this._getItemData($prevSelectedItem);
                        prevSelectedItemData.selected = false;
                        $prevSelectedItem.removeClass(this._selectedItemClass())
                    }
                }
            }, {
                key: "_nestedItemOnItemClickHandler",
                value: function(e) {
                    this._actions.onItemClick(e)
                }
            }, {
                key: "_attachSubmenuHandlers",
                value: function($rootItem, submenu) {
                    var _this6 = this;
                    var $submenuOverlayContent = submenu.getOverlayContent();
                    var submenus = $submenuOverlayContent.find(".".concat(DX_SUBMENU_CLASS));
                    var submenuMouseLeaveName = (0, _utils2.addNamespace)(_hover2.default.end, this.NAME + "_submenu");
                    submenu.option({
                        onShowing: this._submenuOnShowingHandler.bind(this, $rootItem, submenu),
                        onShown: this._submenuOnShownHandler.bind(this, $rootItem, submenu),
                        onHiding: this._submenuOnHidingHandler.bind(this, $rootItem, submenu),
                        onHidden: this._submenuOnHiddenHandler.bind(this, $rootItem, submenu)
                    });
                    (0, _iterator.each)(submenus, function(index, submenu) {
                        _events_engine2.default.off(submenu, submenuMouseLeaveName);
                        _events_engine2.default.on(submenu, submenuMouseLeaveName, null, _this6._submenuMouseLeaveHandler.bind(_this6, $rootItem))
                    })
                }
            }, {
                key: "_submenuOnShowingHandler",
                value: function($rootItem, submenu) {
                    var $border = $rootItem.children(".".concat(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS));
                    this._actions.onSubmenuShowing({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: submenu
                    });
                    $border.show();
                    $rootItem.addClass(DX_MENU_ITEM_EXPANDED_CLASS)
                }
            }, {
                key: "_submenuOnShownHandler",
                value: function($rootItem, submenu) {
                    this._actions.onSubmenuShown({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: submenu
                    })
                }
            }, {
                key: "_submenuOnHidingHandler",
                value: function($rootItem, submenu, eventArgs) {
                    var $border = $rootItem.children(".".concat(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS));
                    var args = eventArgs;
                    args.rootItem = (0, _dom.getPublicElement)($rootItem);
                    args.submenu = submenu;
                    this._actions.onSubmenuHiding(args);
                    eventArgs = args;
                    if (!eventArgs.cancel) {
                        if (this._visibleSubmenu === submenu) {
                            this._visibleSubmenu = null
                        }
                        $border.hide();
                        $rootItem.removeClass(DX_MENU_ITEM_EXPANDED_CLASS)
                    }
                }
            }, {
                key: "_submenuOnHiddenHandler",
                value: function($rootItem, submenu) {
                    this._actions.onSubmenuHidden({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: submenu
                    })
                }
            }, {
                key: "_submenuMouseLeaveHandler",
                value: function($rootItem, eventArgs) {
                    var target = (0, _renderer2.default)(eventArgs.relatedTarget).parents(".".concat(DX_CONTEXT_MENU_CLASS))[0];
                    var contextMenu = this._getSubmenuByRootElement($rootItem).getOverlayContent()[0];
                    if (this.option("hideSubmenuOnMouseLeave") && target !== contextMenu) {
                        this._clearTimeouts();
                        setTimeout(this._hideSubmenuAfterTimeout.bind(this), this._getDelay("hide"))
                    }
                }
            }, {
                key: "_hideSubmenuAfterTimeout",
                value: function() {
                    if (!this._visibleSubmenu) {
                        return
                    }
                    var isRootItemHovered = (0, _renderer2.default)(this._visibleSubmenu.$element().context).hasClass(DX_STATE_HOVER_CLASS);
                    var isSubmenuItemHovered = this._visibleSubmenu.getOverlayContent().find(".".concat(DX_STATE_HOVER_CLASS)).length;
                    var hoveredElementFromSubMenu = this._visibleSubmenu.getOverlayContent().get(0).querySelector(":hover");
                    if (!hoveredElementFromSubMenu && !isSubmenuItemHovered && !isRootItemHovered) {
                        this._visibleSubmenu.hide()
                    }
                }
            }, {
                key: "_getSubmenuByRootElement",
                value: function($rootItem) {
                    if (!$rootItem) {
                        return false
                    }
                    var $submenu = $rootItem.children(".".concat(DX_CONTEXT_MENU_CLASS));
                    return $submenu.length && _ui4.default.getInstance($submenu)
                }
            }, {
                key: "getSubmenuPosition",
                value: function($rootItem) {
                    var isHorizontalMenu = this._isMenuHorizontal();
                    var submenuDirection = this.option("submenuDirection").toLowerCase();
                    var rtlEnabled = this.option("rtlEnabled");
                    var submenuPosition = {
                        collision: "flip",
                        of: $rootItem
                    };
                    switch (submenuDirection) {
                        case "leftortop":
                            submenuPosition.at = "left top";
                            submenuPosition.my = isHorizontalMenu ? "left bottom" : "right top";
                            break;
                        case "rightorbottom":
                            submenuPosition.at = isHorizontalMenu ? "left bottom" : "right top";
                            submenuPosition.my = "left top";
                            break;
                        default:
                            if (isHorizontalMenu) {
                                submenuPosition.at = rtlEnabled ? "right bottom" : "left bottom";
                                submenuPosition.my = rtlEnabled ? "right top" : "left top"
                            } else {
                                submenuPosition.at = rtlEnabled ? "left top" : "right top";
                                submenuPosition.my = rtlEnabled ? "right top" : "left top"
                            }
                    }
                    return submenuPosition
                }
            }, {
                key: "_renderBorderElement",
                value: function($item) {
                    (0, _renderer2.default)("<div>").appendTo($item).addClass(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS).hide()
                }
            }, {
                key: "_itemPointerDownHandler",
                value: function(e) {
                    var $target = (0, _renderer2.default)(e.target);
                    var $closestItem = $target.closest(this._itemElements());
                    if ($closestItem.hasClass("dx-menu-item-has-submenu")) {
                        this.option("focusedElement", null);
                        return
                    }
                    _get(_getPrototypeOf(Menu.prototype), "_itemPointerDownHandler", this).call(this, e)
                }
            }, {
                key: "_hoverStartHandler",
                value: function(e) {
                    var mouseMoveEventName = (0, _utils2.addNamespace)(_pointer2.default.move, this.NAME);
                    var $item = this._getItemElementByEventArgs(e);
                    var node = this._dataAdapter.getNodeByItem(this._getItemData($item));
                    var isSelectionActive = (0, _type.isDefined)(e.buttons) && 1 === e.buttons || !(0, _type.isDefined)(e.buttons) && 1 === e.which;
                    if (this._isItemDisabled($item)) {
                        return
                    }
                    _events_engine2.default.off($item, mouseMoveEventName);
                    if (!this._hasChildren(node)) {
                        this._showSubmenuTimer = setTimeout(this._hideSubmenuAfterTimeout.bind(this), this._getDelay("hide"));
                        return
                    }
                    if ("onHover" === this._getShowFirstSubmenuMode() && !isSelectionActive) {
                        var submenu = this._getSubmenuByElement($item);
                        this._clearTimeouts();
                        if (!submenu.isOverlayVisible()) {
                            _events_engine2.default.on($item, mouseMoveEventName, this._itemMouseMoveHandler.bind(this));
                            this._showSubmenuTimer = this._getDelay("hide")
                        }
                    }
                }
            }, {
                key: "_hoverEndHandler",
                value: function(eventArg) {
                    var _this7 = this;
                    var $item = this._getItemElementByEventArgs(eventArg);
                    var relatedTarget = (0, _renderer2.default)(eventArg.relatedTarget);
                    _get(_getPrototypeOf(Menu.prototype), "_hoverEndHandler", this).call(this, eventArg);
                    this._clearTimeouts();
                    if (this._isItemDisabled($item)) {
                        return
                    }
                    if (relatedTarget.hasClass(DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS)) {
                        return
                    }
                    if (this.option("hideSubmenuOnMouseLeave") && !relatedTarget.hasClass(DX_MENU_ITEMS_CONTAINER_CLASS)) {
                        this._hideSubmenuTimer = setTimeout(function() {
                            _this7._hideSubmenuAfterTimeout()
                        }, this._getDelay("hide"))
                    }
                }
            }, {
                key: "_hideVisibleSubmenu",
                value: function() {
                    if (!this._visibleSubmenu) {
                        return false
                    }
                    this._hideSubmenu(this._visibleSubmenu);
                    return true
                }
            }, {
                key: "_showSubmenu",
                value: function($itemElement) {
                    var submenu = this._getSubmenuByElement($itemElement);
                    if (this._visibleSubmenu !== submenu) {
                        this._hideVisibleSubmenu()
                    }
                    if (submenu) {
                        submenu.show();
                        this.option("focusedElement", submenu.option("focusedElement"))
                    }
                    this._visibleSubmenu = submenu;
                    this._hoveredRootItem = $itemElement
                }
            }, {
                key: "_hideSubmenu",
                value: function(submenu) {
                    submenu && submenu.hide();
                    if (this._visibleSubmenu === submenu) {
                        this._visibleSubmenu = null
                    }
                    this._hoveredRootItem = null
                }
            }, {
                key: "_itemMouseMoveHandler",
                value: function(e) {
                    var _this8 = this;
                    if (e.pointers && e.pointers.length) {
                        return
                    }
                    var $item = (0, _renderer2.default)(e.currentTarget);
                    if (!(0, _type.isDefined)(this._showSubmenuTimer)) {
                        return
                    }
                    this._clearTimeouts();
                    this._showSubmenuTimer = setTimeout(function() {
                        var submenu = _this8._getSubmenuByElement($item);
                        if (submenu && !submenu.isOverlayVisible()) {
                            _this8._showSubmenu($item)
                        }
                    }, this._getDelay("show"))
                }
            }, {
                key: "_clearTimeouts",
                value: function() {
                    clearTimeout(this._hideSubmenuTimer);
                    clearTimeout(this._showSubmenuTimer)
                }
            }, {
                key: "_getSubmenuByElement",
                value: function($itemElement, itemData) {
                    var submenu = this._getSubmenuByRootElement($itemElement);
                    if (submenu) {
                        return submenu
                    } else {
                        itemData = itemData || this._getItemData($itemElement);
                        var node = this._dataAdapter.getNodeByItem(itemData);
                        return this._hasChildren(node) && this._renderSubmenuItems(node, $itemElement)
                    }
                }
            }, {
                key: "_updateSubmenuVisibilityOnClick",
                value: function(actionArgs) {
                    var args = actionArgs.args.length && actionArgs.args[0];
                    if (!args || this._disabledGetter(args.itemData)) {
                        return
                    }
                    var $itemElement = (0, _renderer2.default)(args.itemElement);
                    var currentSubmenu = this._getSubmenuByElement($itemElement, args.itemData);
                    this._updateSelectedItemOnClick(actionArgs);
                    if (this._visibleSubmenu) {
                        if (this._visibleSubmenu === currentSubmenu) {
                            if ("onClick" === this.option("showFirstSubmenuMode")) {
                                this._hideSubmenu(this._visibleSubmenu)
                            }
                            return
                        } else {
                            this._hideSubmenu(this._visibleSubmenu)
                        }
                    }
                    if (!currentSubmenu) {
                        return
                    }
                    if (!currentSubmenu.isOverlayVisible()) {
                        this._showSubmenu($itemElement);
                        return
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "orientation":
                        case "submenuDirection":
                            this._invalidate();
                            break;
                        case "showFirstSubmenuMode":
                        case "hideSubmenuOnMouseLeave":
                            break;
                        case "showSubmenuMode":
                            this._changeSubmenusOption(args.name, args.value);
                            break;
                        case "onSubmenuShowing":
                        case "onSubmenuShown":
                        case "onSubmenuHiding":
                        case "onSubmenuHidden":
                            this._initActions();
                            break;
                        case "adaptivityEnabled":
                            args.value ? this._initAdaptivity() : this._removeAdaptivity();
                            break;
                        case "width":
                            if (this._isAdaptivityEnabled()) {
                                this._treeView.option(args.name, args.value);
                                this._overlay.option(args.name, args.value)
                            }
                            _get(_getPrototypeOf(Menu.prototype), "_optionChanged", this).call(this, args);
                            this._dimensionChanged();
                            break;
                        case "animation":
                            if (this._isAdaptivityEnabled()) {
                                this._treeView.option("animationEnabled", !!args.value)
                            }
                            _get(_getPrototypeOf(Menu.prototype), "_optionChanged", this).call(this, args);
                            break;
                        default:
                            if (this._isAdaptivityEnabled()) {
                                this._treeView.option(args.name, args.value)
                            }
                            _get(_getPrototypeOf(Menu.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_changeSubmenusOption",
                value: function(name, value) {
                    (0, _iterator.each)(this._submenus, function(index, submenu) {
                        submenu.option(name, value)
                    })
                }
            }, {
                key: "selectItem",
                value: function(itemElement) {
                    this._hideSubmenu(this._visibleSubmenu);
                    _get(_getPrototypeOf(Menu.prototype), "selectItem", this).call(this, itemElement)
                }
            }, {
                key: "unselectItem",
                value: function(itemElement) {
                    this._hideSubmenu(this._visibleSubmenu);
                    _get(_getPrototypeOf(Menu.prototype), "selectItem", this).call(this, itemElement)
                }
            }]);
            return Menu
        }(_ui2.default);
        (0, _component_registrator2.default)("dxMenu", Menu);
        module.exports = Menu
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.header_filter.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _filtering = __webpack_require__( /*! ../shared/filtering */ 169);
        var _filtering2 = _interopRequireDefault(_filtering);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _uiGrid_core5 = __webpack_require__( /*! ./ui.grid_core.header_filter_core */ 376);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../../data/data_source/utils */ 64);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _variable_wrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATE_INTERVAL_FORMATS = {
            month: function(value) {
                return _date2.default.getMonthNames()[value - 1]
            },
            quarter: function(value) {
                return _date2.default.format(new Date(2e3, 3 * value - 1), "quarter")
            }
        };
        var HeaderFilterController = _uiGrid_core2.default.ViewController.inherit(function() {
            var getFormatOptions = function(value, column, currentLevel) {
                var groupInterval = _filtering2.default.getGroupInterval(column);
                var result = _uiGrid_core4.default.getFormatOptionsByColumn(column, "headerFilter");
                if (groupInterval) {
                    result.groupInterval = groupInterval[currentLevel];
                    if (_uiGrid_core4.default.isDateType(column.dataType)) {
                        result.format = DATE_INTERVAL_FORMATS[groupInterval[currentLevel]]
                    } else {
                        if ("number" === column.dataType) {
                            result.getDisplayFormat = function() {
                                var formatOptions = {
                                    format: column.format,
                                    target: "headerFilter"
                                };
                                var firstValueText = _uiGrid_core4.default.formatValue(value, formatOptions);
                                var secondValue = value + groupInterval[currentLevel];
                                var secondValueText = _uiGrid_core4.default.formatValue(secondValue, formatOptions);
                                return firstValueText && secondValueText ? firstValueText + " - " + secondValueText : ""
                            }
                        }
                    }
                }
                return result
            };
            return {
                init: function() {
                    this._columnsController = this.getController("columns");
                    this._dataController = this.getController("data");
                    this._headerFilterView = this.getView("headerFilterView")
                },
                _updateSelectedState: function(items, column) {
                    var i = items.length;
                    var isExclude = "exclude" === column.filterType;
                    while (i--) {
                        var item = items[i];
                        if ("items" in items[i]) {
                            this._updateSelectedState(items[i].items, column)
                        }(0, _uiGrid_core5.updateHeaderFilterItemSelectionState)(item, _uiGrid_core4.default.getIndexByKey(items[i].value, column.filterValues, null) > -1, isExclude)
                    }
                },
                _normalizeGroupItem: function(item, currentLevel, options) {
                    var value;
                    var displayValue;
                    var path = options.path;
                    var valueSelector = options.valueSelector;
                    var displaySelector = options.displaySelector;
                    var column = options.column;
                    if (valueSelector && displaySelector) {
                        value = valueSelector(item);
                        displayValue = displaySelector(item)
                    } else {
                        value = item.key;
                        displayValue = value
                    }
                    if (!(0, _type.isObject)(item)) {
                        item = {}
                    } else {
                        item = (0, _extend.extend)({}, item)
                    }
                    path.push(value);
                    if (1 === path.length) {
                        item.value = path[0]
                    } else {
                        item.value = path.join("/")
                    }
                    item.text = this.getHeaderItemText(displayValue, column, currentLevel, options.headerFilterOptions);
                    return item
                },
                getHeaderItemText: function(displayValue, column, currentLevel, headerFilterOptions) {
                    var text = _uiGrid_core4.default.formatValue(displayValue, getFormatOptions(displayValue, column, currentLevel));
                    if (!text) {
                        text = headerFilterOptions.texts.emptyValue
                    }
                    return text
                },
                _processGroupItems: function(groupItems, currentLevel, path, options) {
                    var that = this;
                    var displaySelector;
                    var valueSelector;
                    var column = options.column;
                    var lookup = column.lookup;
                    var level = options.level;
                    path = path || [];
                    currentLevel = currentLevel || 0;
                    if (lookup) {
                        displaySelector = (0, _data.compileGetter)(lookup.displayExpr);
                        valueSelector = (0, _data.compileGetter)(lookup.valueExpr)
                    }
                    for (var i = 0; i < groupItems.length; i++) {
                        groupItems[i] = that._normalizeGroupItem(groupItems[i], currentLevel, {
                            column: options.column,
                            headerFilterOptions: options.headerFilterOptions,
                            displaySelector: displaySelector,
                            valueSelector: valueSelector,
                            path: path
                        });
                        if ("items" in groupItems[i]) {
                            if (currentLevel === level || !(0, _type.isDefined)(groupItems[i].value)) {
                                delete groupItems[i].items
                            } else {
                                that._processGroupItems(groupItems[i].items, currentLevel + 1, path, options)
                            }
                        }
                        path.pop()
                    }
                },
                getDataSource: function(column) {
                    var that = this;
                    var dataSource = that._dataController.dataSource();
                    var group = _uiGrid_core4.default.getHeaderFilterGroupParameters(column, dataSource && dataSource.remoteOperations().grouping);
                    var headerFilterDataSource = column.headerFilter && column.headerFilter.dataSource;
                    var headerFilterOptions = that.option("headerFilter");
                    var isLookup = false;
                    var options = {
                        component: that.component
                    };
                    if (!dataSource) {
                        return
                    }
                    if ((0, _type.isDefined)(headerFilterDataSource) && !(0, _type.isFunction)(headerFilterDataSource)) {
                        options.dataSource = (0, _utils.normalizeDataSourceOptions)(headerFilterDataSource)
                    } else {
                        if (column.lookup) {
                            isLookup = true;
                            var lookupDataSourceOptions;
                            if (column.lookup.items) {
                                lookupDataSourceOptions = column.lookup.items
                            } else {
                                lookupDataSourceOptions = column.lookup.dataSource;
                                if ((0, _type.isFunction)(lookupDataSourceOptions) && !(0, _variable_wrapper.isWrapped)(lookupDataSourceOptions)) {
                                    lookupDataSourceOptions = lookupDataSourceOptions({})
                                }
                            }
                            options.dataSource = (0, _utils.normalizeDataSourceOptions)(lookupDataSourceOptions)
                        } else {
                            var cutoffLevel = Array.isArray(group) ? group.length - 1 : 0;
                            that._currentColumn = column;
                            var filter = that._dataController.getCombinedFilter();
                            that._currentColumn = null;
                            options.dataSource = {
                                filter: filter,
                                group: group,
                                useDefaultSearch: true,
                                load: function(options) {
                                    var d = new _deferred.Deferred;
                                    options.dataField = column.dataField || column.name;
                                    dataSource.load(options).done(function(data) {
                                        that._processGroupItems(data, null, null, {
                                            level: cutoffLevel,
                                            column: column,
                                            headerFilterOptions: headerFilterOptions
                                        });
                                        d.resolve(data)
                                    }).fail(d.reject);
                                    return d
                                }
                            }
                        }
                    }
                    if ((0, _type.isFunction)(headerFilterDataSource)) {
                        headerFilterDataSource.call(column, options)
                    }
                    var origPostProcess = options.dataSource.postProcess;
                    options.dataSource.postProcess = function(data) {
                        var items = data;
                        if (isLookup) {
                            if (0 === this.pageIndex() && !this.searchValue()) {
                                items = items.slice(0);
                                items.unshift(null)
                            }
                            that._processGroupItems(items, null, null, {
                                level: 0,
                                column: column,
                                headerFilterOptions: headerFilterOptions
                            })
                        }
                        items = origPostProcess && origPostProcess.call(this, items) || items;
                        that._updateSelectedState(items, column);
                        return items
                    };
                    return options.dataSource
                },
                getCurrentColumn: function() {
                    return this._currentColumn
                },
                showHeaderFilterMenu: function(columnIndex, isGroupPanel) {
                    var columnsController = this._columnsController;
                    var column = (0, _extend.extend)(true, {}, this._columnsController.getColumns()[columnIndex]);
                    if (column) {
                        var visibleIndex = columnsController.getVisibleIndex(columnIndex);
                        var view = isGroupPanel ? this.getView("headerPanel") : this.getView("columnHeadersView");
                        var $columnElement = $columnElement || view.getColumnElements().eq(isGroupPanel ? column.groupIndex : visibleIndex);
                        this.showHeaderFilterMenuBase({
                            columnElement: $columnElement,
                            column: column,
                            applyFilter: true,
                            apply: function() {
                                columnsController.columnOption(columnIndex, {
                                    filterValues: this.filterValues,
                                    filterType: this.filterType
                                })
                            }
                        })
                    }
                },
                showHeaderFilterMenuBase: function(options) {
                    var _this = this;
                    var that = this;
                    var column = options.column;
                    if (column) {
                        var groupInterval = _filtering2.default.getGroupInterval(column);
                        var dataSource = that._dataController.dataSource();
                        var remoteFiltering = dataSource && dataSource.remoteOperations().filtering;
                        (0, _extend.extend)(options, column, {
                            type: groupInterval && groupInterval.length > 1 ? "tree" : "list",
                            remoteFiltering: remoteFiltering,
                            onShowing: function(e) {
                                var dxResizableInstance = e.component.overlayContent().dxResizable("instance");
                                dxResizableInstance && dxResizableInstance.option("onResizeEnd", function(e) {
                                    var columnsController = that.getController("columns");
                                    var headerFilterByColumn = columnsController.columnOption(options.dataField, "headerFilter");
                                    headerFilterByColumn = headerFilterByColumn || {};
                                    headerFilterByColumn.width = e.width;
                                    headerFilterByColumn.height = e.height;
                                    columnsController.columnOption(options.dataField, "headerFilter", headerFilterByColumn, true)
                                })
                            },
                            onHidden: function() {
                                return (0, _accessibility.restoreFocus)(_this)
                            }
                        });
                        options.dataSource = that.getDataSource(options);
                        if (options.isFilterBuilder) {
                            options.dataSource.filter = null;
                            options.alignment = "right"
                        }
                        that._headerFilterView.showHeaderFilterMenu(options.columnElement, options)
                    }
                },
                hideHeaderFilterMenu: function() {
                    this._headerFilterView.hideHeaderFilterMenu()
                }
            }
        }());
        var ColumnHeadersViewHeaderFilterExtender = (0, _extend.extend)({}, _uiGrid_core5.headerFilterMixin, {
            _renderCellContent: function($cell, options) {
                var that = this;
                var $headerFilterIndicator;
                var column = options.column;
                if (!column.command && (0, _uiGrid_core5.allowHeaderFiltering)(column) && that.option("headerFilter.visible") && "header" === options.rowType) {
                    $headerFilterIndicator = that._applyColumnState({
                        name: "headerFilter",
                        rootElement: $cell,
                        column: column,
                        showColumnLines: that.option("showColumnLines")
                    });
                    $headerFilterIndicator && that._subscribeToIndicatorEvent($headerFilterIndicator, column, "headerFilter")
                }
                that.callBase($cell, options)
            },
            _subscribeToIndicatorEvent: function($indicator, column, indicatorName) {
                var that = this;
                if ("headerFilter" === indicatorName) {
                    _events_engine2.default.on($indicator, _click2.default.name, that.createAction(function(e) {
                        e.event.stopPropagation();
                        that.getController("headerFilter").showHeaderFilterMenu(column.index, false)
                    }))
                }
            },
            _updateIndicator: function($cell, column, indicatorName) {
                var $indicator = this.callBase($cell, column, indicatorName);
                $indicator && this._subscribeToIndicatorEvent($indicator, column, indicatorName)
            },
            _updateHeaderFilterIndicators: function() {
                if (this.option("headerFilter.visible")) {
                    this._updateIndicators("headerFilter")
                }
            },
            _needUpdateFilterIndicators: function() {
                return true
            },
            _columnOptionChanged: function(e) {
                var optionNames = e.optionNames;
                if (_uiGrid_core4.default.checkChanges(optionNames, ["filterValues", "filterType"])) {
                    if (this._needUpdateFilterIndicators()) {
                        this._updateHeaderFilterIndicators()
                    }
                    return
                }
                this.callBase(e)
            }
        });
        var HeaderPanelHeaderFilterExtender = (0, _extend.extend)({}, _uiGrid_core5.headerFilterMixin, {
            _createGroupPanelItem: function($rootElement, groupColumn) {
                var that = this;
                var $item = that.callBase.apply(that, arguments);
                var $headerFilterIndicator;
                if (!groupColumn.command && (0, _uiGrid_core5.allowHeaderFiltering)(groupColumn) && that.option("headerFilter.visible")) {
                    $headerFilterIndicator = that._applyColumnState({
                        name: "headerFilter",
                        rootElement: $item,
                        column: {
                            alignment: (0, _position.getDefaultAlignment)(that.option("rtlEnabled")),
                            filterValues: groupColumn.filterValues,
                            allowHeaderFiltering: true
                        },
                        showColumnLines: true
                    });
                    $headerFilterIndicator && _events_engine2.default.on($headerFilterIndicator, _click2.default.name, that.createAction(function(e) {
                        var event = e.event;
                        event.stopPropagation();
                        that.getController("headerFilter").showHeaderFilterMenu(groupColumn.index, true)
                    }))
                }
                return $item
            }
        });

        function invertFilterExpression(filter) {
            return ["!", filter]
        }
        var DataControllerFilterRowExtender = {
            skipCalculateColumnFilters: function() {
                return false
            },
            _calculateAdditionalFilter: function() {
                if (this.skipCalculateColumnFilters()) {
                    return this.callBase()
                }
                var that = this;
                var filters = [that.callBase()];
                var columns = that._columnsController.getVisibleColumns(null, true);
                var headerFilterController = that.getController("headerFilter");
                var currentColumn = headerFilterController.getCurrentColumn();
                (0, _iterator.each)(columns, function(_, column) {
                    var filter;
                    if (currentColumn && currentColumn.index === column.index) {
                        return
                    }
                    if ((0, _uiGrid_core5.allowHeaderFiltering)(column) && column.calculateFilterExpression && Array.isArray(column.filterValues) && column.filterValues.length) {
                        var filterValues = [];
                        (0, _iterator.each)(column.filterValues, function(_, filterValue) {
                            if (Array.isArray(filterValue)) {
                                filter = filterValue
                            } else {
                                if (column.deserializeValue && !_uiGrid_core4.default.isDateType(column.dataType) && "number" !== column.dataType) {
                                    filterValue = column.deserializeValue(filterValue)
                                }
                                filter = column.createFilterExpression(filterValue, "=", "headerFilter")
                            }
                            if (filter) {
                                filter.columnIndex = column.index
                            }
                            filterValues.push(filter)
                        });
                        filterValues = _uiGrid_core4.default.combineFilters(filterValues, "or");
                        filters.push("exclude" === column.filterType ? ["!", filterValues] : filterValues)
                    }
                });
                return _uiGrid_core4.default.combineFilters(filters)
            }
        };
        module.exports = {
            invertFilterExpression: invertFilterExpression,
            defaultOptions: function() {
                return {
                    headerFilter: {
                        visible: false,
                        width: 252,
                        height: 325,
                        allowSearch: false,
                        searchTimeout: 500,
                        texts: {
                            emptyValue: _message2.default.format("dxDataGrid-headerFilterEmptyValue"),
                            ok: _message2.default.format("dxDataGrid-headerFilterOK"),
                            cancel: _message2.default.format("dxDataGrid-headerFilterCancel")
                        }
                    }
                }
            },
            controllers: {
                headerFilter: HeaderFilterController
            },
            views: {
                headerFilterView: _uiGrid_core5.HeaderFilterView
            },
            extenders: {
                controllers: {
                    data: DataControllerFilterRowExtender
                },
                views: {
                    columnHeadersView: ColumnHeadersViewHeaderFilterExtender,
                    headerPanel: HeaderPanelHeaderFilterExtender
                }
            }
        }
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.header_filter_core.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _tree_view = __webpack_require__( /*! ../tree_view */ 146);
        var _tree_view2 = _interopRequireDefault(_tree_view);
        var _list = __webpack_require__( /*! ../list */ 104);
        var _list2 = _interopRequireDefault(_list);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var HEADER_FILTER_CLASS = "dx-header-filter";
        var HEADER_FILTER_MENU_CLASS = "dx-header-filter-menu";
        var DEFAULT_SEARCH_EXPRESSION = "text";

        function resetChildrenItemSelection(items) {
            items = items || [];
            for (var i = 0; i < items.length; i++) {
                items[i].selected = false;
                resetChildrenItemSelection(items[i].items)
            }
        }

        function updateSelectAllState(e, filterValues) {
            if (e.component.option("searchValue")) {
                return
            }
            var selectAllCheckBox = (0, _renderer2.default)(e.element).find(".dx-list-select-all-checkbox").data("dxCheckBox");
            if (selectAllCheckBox && filterValues && filterValues.length) {
                selectAllCheckBox.option("value", void 0)
            }
        }

        function isSearchEnabled(that, options) {
            var headerFilter = options.headerFilter;
            if (headerFilter && (0, _type.isDefined)(headerFilter.allowSearch)) {
                return headerFilter.allowSearch
            }
            return that.option("headerFilter.allowSearch")
        }
        exports.updateHeaderFilterItemSelectionState = function(item, filterValuesMatch, isExcludeFilter) {
            if (filterValuesMatch ^ isExcludeFilter) {
                item.selected = true;
                if (isExcludeFilter && item.items) {
                    for (var j = 0; j < item.items.length; j++) {
                        if (!item.items[j].selected) {
                            item.selected = void 0;
                            break
                        }
                    }
                }
            } else {
                if (isExcludeFilter || item.selected) {
                    item.selected = false;
                    resetChildrenItemSelection(item.items)
                }
            }
        };
        exports.HeaderFilterView = _uiGrid_core2.default.View.inherit({
            getPopupContainer: function() {
                return this._popupContainer
            },
            getListContainer: function() {
                return this._listContainer
            },
            applyHeaderFilter: function(options) {
                var that = this;
                var list = that.getListContainer();
                var searchValue = list.option("searchValue");
                var isSelectAll = !searchValue && !options.isFilterBuilder && list.$element().find(".dx-checkbox").eq(0).hasClass("dx-checkbox-checked");
                var filterValues = [];
                var fillSelectedItemKeys = function fillSelectedItemKeys(filterValues, items, isExclude) {
                    (0, _iterator.each)(items, function(_, item) {
                        if (void 0 !== item.selected && !!item.selected ^ isExclude) {
                            var node = list._getNode(item);
                            var hasChildren = list._hasChildren(node);
                            var hasChildrenWithSelection = hasChildren && item.items && item.items.some(function(item) {
                                return item.selected
                            });
                            if (!searchValue || !hasChildrenWithSelection) {
                                filterValues.push(item.value);
                                return
                            }
                        }
                        if (item.items && item.items.length) {
                            fillSelectedItemKeys(filterValues, item.items, isExclude)
                        }
                    })
                };
                if (!isSelectAll) {
                    if ("tree" === options.type) {
                        if (options.filterType) {
                            options.filterType = "include"
                        }
                        fillSelectedItemKeys(filterValues, list.option("items"), false);
                        options.filterValues = filterValues
                    }
                } else {
                    if ("tree" === options.type) {
                        options.filterType = "exclude"
                    }
                    if (Array.isArray(options.filterValues)) {
                        options.filterValues = []
                    }
                }
                if (options.filterValues && !options.filterValues.length) {
                    options.filterValues = null
                }
                options.apply();
                that.hideHeaderFilterMenu()
            },
            showHeaderFilterMenu: function($columnElement, options) {
                var that = this;
                if (options) {
                    that._initializePopupContainer(options);
                    var popupContainer = that.getPopupContainer();
                    that.hideHeaderFilterMenu();
                    that.updatePopup($columnElement, options);
                    popupContainer.show()
                }
            },
            hideHeaderFilterMenu: function() {
                var headerFilterMenu = this.getPopupContainer();
                headerFilterMenu && headerFilterMenu.hide()
            },
            updatePopup: function($element, options) {
                var that = this;
                var alignment = "right" === options.alignment ? "left" : "right";
                if (that._popupContainer) {
                    that._cleanPopupContent();
                    that._popupContainer.option("position", {
                        my: alignment + " top",
                        at: alignment + " bottom",
                        of: $element,
                        collision: "flip fit"
                    })
                }
            },
            _getSearchExpr: function(options) {
                var lookup = options.lookup;
                var useDefaultSearchExpr = options.useDefaultSearchExpr;
                var headerFilterDataSource = options.headerFilter && options.headerFilter.dataSource;
                if (useDefaultSearchExpr || (0, _type.isDefined)(headerFilterDataSource) && !(0, _type.isFunction)(headerFilterDataSource)) {
                    return DEFAULT_SEARCH_EXPRESSION
                }
                if (lookup) {
                    return lookup.displayExpr || "this"
                }
                if (options.dataSource) {
                    var group = options.dataSource.group;
                    if (Array.isArray(group) && group.length > 0) {
                        return group[0].selector
                    } else {
                        if ((0, _type.isFunction)(group) && !options.remoteFiltering) {
                            return group
                        }
                    }
                }
                return options.dataField || options.selector
            },
            _cleanPopupContent: function() {
                this._popupContainer && this._popupContainer.$content().empty()
            },
            _initializePopupContainer: function(options) {
                var that = this;
                var $element = that.element();
                var headerFilterOptions = that.option("headerFilter");
                var width = options.headerFilter && options.headerFilter.width || headerFilterOptions && headerFilterOptions.width;
                var height = options.headerFilter && options.headerFilter.height || headerFilterOptions && headerFilterOptions.height;
                var dxPopupOptions = {
                    width: width,
                    height: height,
                    visible: false,
                    shading: false,
                    showTitle: false,
                    showCloseButton: false,
                    closeOnTargetScroll: false,
                    dragEnabled: false,
                    closeOnOutsideClick: true,
                    focusStateEnabled: false,
                    toolbarItems: [{
                        toolbar: "bottom",
                        location: "after",
                        widget: "dxButton",
                        options: {
                            text: headerFilterOptions.texts.ok,
                            onClick: function() {
                                that.applyHeaderFilter(options)
                            }
                        }
                    }, {
                        toolbar: "bottom",
                        location: "after",
                        widget: "dxButton",
                        options: {
                            text: headerFilterOptions.texts.cancel,
                            onClick: function() {
                                that.hideHeaderFilterMenu()
                            }
                        }
                    }],
                    resizeEnabled: true,
                    onShowing: function(e) {
                        e.component.$content().parent().addClass("dx-dropdowneditor-overlay");
                        that._initializeListContainer(options);
                        options.onShowing && options.onShowing(e)
                    },
                    onShown: function() {
                        that.getListContainer().focus()
                    },
                    onHidden: options.onHidden,
                    onInitialized: function(e) {
                        var component = e.component;
                        component.option("animation", component._getDefaultOptions().animation)
                    }
                };
                if (!(0, _type.isDefined)(that._popupContainer)) {
                    that._popupContainer = that._createComponent($element, _popup2.default, dxPopupOptions)
                } else {
                    that._popupContainer.option(dxPopupOptions)
                }
            },
            _initializeListContainer: function(options) {
                var that = this;
                var $content = that._popupContainer.$content();
                var widgetOptions = {
                    searchEnabled: isSearchEnabled(that, options),
                    searchTimeout: that.option("headerFilter.searchTimeout"),
                    searchMode: options.headerFilter && options.headerFilter.searchMode || "",
                    dataSource: options.dataSource,
                    onContentReady: function() {
                        that.renderCompleted.fire()
                    },
                    itemTemplate: function(data, _, element) {
                        var $element = (0, _renderer2.default)(element);
                        if (options.encodeHtml) {
                            return $element.text(data.text)
                        }
                        return $element.html(data.text)
                    }
                };

                function onOptionChanged(e) {
                    if ("searchValue" === e.fullName && !options.isFilterBuilder && false !== that.option("headerFilter.hideSelectAllOnSearch")) {
                        if ("tree" === options.type) {
                            e.component.option("showCheckBoxesMode", e.value ? "normal" : "selectAll")
                        } else {
                            e.component.option("selectionMode", e.value ? "multiple" : "all")
                        }
                    }
                }
                if ("tree" === options.type) {
                    that._listContainer = that._createComponent((0, _renderer2.default)("<div>").appendTo($content), _tree_view2.default, (0, _extend.extend)(widgetOptions, {
                        showCheckBoxesMode: options.isFilterBuilder ? "normal" : "selectAll",
                        onOptionChanged: onOptionChanged,
                        keyExpr: "id"
                    }))
                } else {
                    that._listContainer = that._createComponent((0, _renderer2.default)("<div>").appendTo($content), _list2.default, (0, _extend.extend)(widgetOptions, {
                        searchExpr: that._getSearchExpr(options),
                        pageLoadMode: "scrollBottom",
                        showSelectionControls: true,
                        selectionMode: options.isFilterBuilder ? "multiple" : "all",
                        onOptionChanged: onOptionChanged,
                        onSelectionChanged: function(e) {
                            var items = e.component.option("items");
                            var selectedItems = e.component.option("selectedItems");
                            if (!e.component._selectedItemsUpdating && !e.component.option("searchValue") && !options.isFilterBuilder) {
                                var filterValues = options.filterValues || [];
                                var isExclude = "exclude" === options.filterType;
                                if (0 === selectedItems.length && items.length && (filterValues.length <= 1 || isExclude && filterValues.length === items.length - 1)) {
                                    options.filterType = "include";
                                    options.filterValues = []
                                } else {
                                    if (selectedItems.length === items.length) {
                                        options.filterType = "exclude";
                                        options.filterValues = []
                                    }
                                }
                            }(0, _iterator.each)(items, function(index, item) {
                                var selected = _uiGrid_core4.default.getIndexByKey(item, selectedItems, null) >= 0;
                                var oldSelected = !!item.selected;
                                if (oldSelected !== selected) {
                                    item.selected = selected;
                                    options.filterValues = options.filterValues || [];
                                    var filterValueIndex = _uiGrid_core4.default.getIndexByKey(item.value, options.filterValues, null);
                                    if (filterValueIndex >= 0) {
                                        options.filterValues.splice(filterValueIndex, 1)
                                    }
                                    if (selected ^ "exclude" === options.filterType) {
                                        options.filterValues.push(item.value)
                                    }
                                }
                            });
                            updateSelectAllState(e, options.filterValues)
                        },
                        onContentReady: function(e) {
                            var component = e.component;
                            var items = component.option("items");
                            var selectedItems = [];
                            (0, _iterator.each)(items, function() {
                                if (this.selected) {
                                    selectedItems.push(this)
                                }
                            });
                            component._selectedItemsUpdating = true;
                            component.option("selectedItems", selectedItems);
                            component._selectedItemsUpdating = false;
                            updateSelectAllState(e, options.filterValues)
                        }
                    }))
                }
            },
            _renderCore: function() {
                this.element().addClass(HEADER_FILTER_MENU_CLASS)
            }
        });
        var allowHeaderFiltering = exports.allowHeaderFiltering = function(column) {
            return (0, _type.isDefined)(column.allowHeaderFiltering) ? column.allowHeaderFiltering : column.allowFiltering
        };
        exports.headerFilterMixin = {
            _applyColumnState: function(options) {
                var $headerFilterIndicator;
                var rootElement = options.rootElement;
                var column = options.column;
                if ("headerFilter" === options.name) {
                    rootElement.find("." + HEADER_FILTER_CLASS).remove();
                    if (allowHeaderFiltering(column)) {
                        $headerFilterIndicator = this.callBase(options).toggleClass("dx-header-filter-empty", this._isHeaderFilterEmpty(column));
                        if (!this.option("useLegacyKeyboardNavigation")) {
                            $headerFilterIndicator.attr("tabindex", this.option("tabindex") || 0)
                        }
                    }
                    return $headerFilterIndicator
                }
                return this.callBase(options)
            },
            _isHeaderFilterEmpty: function(column) {
                return !column.filterValues || !column.filterValues.length
            },
            _getIndicatorClassName: function(name) {
                if ("headerFilter" === name) {
                    return HEADER_FILTER_CLASS
                }
                return this.callBase(name)
            },
            _renderIndicator: function(options) {
                var $container = options.container;
                var $indicator = options.indicator;
                if ("headerFilter" === options.name) {
                    var rtlEnabled = this.option("rtlEnabled");
                    if ($container.children().length && (!rtlEnabled && "right" === options.columnAlignment || rtlEnabled && "left" === options.columnAlignment)) {
                        $container.prepend($indicator);
                        return
                    }
                }
                this.callBase(options)
            },
            optionChanged: function(args) {
                if ("headerFilter" === args.name) {
                    var requireReady = "columnHeadersView" === this.name;
                    this._invalidate(requireReady, requireReady);
                    args.handled = true
                } else {
                    this.callBase(args)
                }
            }
        }
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.filter_sync.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _utils = __webpack_require__( /*! ../filter_builder/utils */ 205);
        var _utils2 = _interopRequireDefault(_utils);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _filtering = __webpack_require__( /*! ../shared/filtering */ 169);
        var _filtering2 = _interopRequireDefault(_filtering);
        var _uiGrid_core5 = __webpack_require__( /*! ./ui.grid_core.filter_custom_operations */ 658);
        var _uiGrid_core6 = _interopRequireDefault(_uiGrid_core5);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FILTER_ROW_OPERATIONS = ["=", "<>", "<", "<=", ">", ">=", "notcontains", "contains", "startswith", "endswith", "between"];
        var FILTER_TYPES_INCLUDE = "include";
        var FILTER_TYPES_EXCLUDE = "exclude";

        function getColumnIdentifier(column) {
            return column.dataField || column.name
        }

        function checkForErrors(columns) {
            columns.forEach(function(column) {
                var identifier = getColumnIdentifier(column);
                if (!(0, _type.isDefined)(identifier) && column.allowFiltering) {
                    throw new _ui2.default.Error("E1049", column.caption)
                }
            })
        }
        var FilterSyncController = _uiGrid_core2.default.Controller.inherit(function() {
            var getEmptyFilterValues = function() {
                return {
                    filterType: FILTER_TYPES_INCLUDE,
                    filterValues: void 0
                }
            };
            var canSyncHeaderFilterWithFilterRow = function(column) {
                return !_filtering2.default.getGroupInterval(column) && !(column.headerFilter && column.headerFilter.dataSource)
            };
            var getHeaderFilterFromCondition = function(headerFilterCondition, column) {
                if (!headerFilterCondition) {
                    return getEmptyFilterValues()
                }
                var filterType;
                var selectedFilterOperation = headerFilterCondition[1];
                var value = headerFilterCondition[2];
                var hasArrayValue = Array.isArray(value);
                if (!hasArrayValue) {
                    if (!canSyncHeaderFilterWithFilterRow(column)) {
                        return getEmptyFilterValues()
                    }
                }
                switch (selectedFilterOperation) {
                    case "anyof":
                    case "=":
                        filterType = FILTER_TYPES_INCLUDE;
                        break;
                    case "noneof":
                    case "<>":
                        filterType = FILTER_TYPES_EXCLUDE;
                        break;
                    default:
                        return getEmptyFilterValues()
                }
                return {
                    filterType: filterType,
                    filterValues: hasArrayValue ? value : [value]
                }
            };
            var getConditionFromFilterRow = function(column) {
                var value = column.filterValue;
                if ((0, _type.isDefined)(value)) {
                    var operation = column.selectedFilterOperation || column.defaultFilterOperation || _utils2.default.getDefaultOperation(column);
                    var filter = [getColumnIdentifier(column), operation, column.filterValue];
                    return filter
                } else {
                    return null
                }
            };
            var getConditionFromHeaderFilter = function(column) {
                var selectedOperation;
                var value;
                var filterValues = column.filterValues;
                if (!filterValues) {
                    return null
                }
                if (canSyncHeaderFilterWithFilterRow(column) && 1 === column.filterValues.length && !Array.isArray(filterValues[0])) {
                    column.filterType === FILTER_TYPES_EXCLUDE ? selectedOperation = "<>" : selectedOperation = "=";
                    value = filterValues[0]
                } else {
                    column.filterType === FILTER_TYPES_EXCLUDE ? selectedOperation = "noneof" : selectedOperation = "anyof";
                    value = filterValues
                }
                return [getColumnIdentifier(column), selectedOperation, value]
            };
            var updateHeaderFilterCondition = function(columnsController, column, headerFilterCondition) {
                var headerFilter = getHeaderFilterFromCondition(headerFilterCondition, column);
                columnsController.columnOption(getColumnIdentifier(column), headerFilter)
            };
            var updateFilterRowCondition = function(columnsController, column, condition) {
                var filterRowOptions;
                var selectedFilterOperation = condition && condition[1];
                var filterOperations = column.filterOperations || column.defaultFilterOperations;
                if ((!filterOperations || filterOperations.indexOf(selectedFilterOperation) >= 0 || selectedFilterOperation === column.defaultFilterOperation) && FILTER_ROW_OPERATIONS.indexOf(selectedFilterOperation) >= 0) {
                    if (selectedFilterOperation === column.defaultFilterOperation && !(0, _type.isDefined)(column.selectedFilterOperation)) {
                        selectedFilterOperation = column.selectedFilterOperation
                    }
                    filterRowOptions = {
                        filterValue: condition[2],
                        selectedFilterOperation: selectedFilterOperation
                    }
                } else {
                    filterRowOptions = {
                        filterValue: void 0,
                        selectedFilterOperation: void 0
                    }
                }
                columnsController.columnOption(getColumnIdentifier(column), filterRowOptions)
            };
            return {
                syncFilterValue: function() {
                    var that = this;
                    var columnsController = that.getController("columns");
                    var columns = columnsController.getFilteringColumns();
                    this._skipSyncColumnOptions = true;
                    columns.forEach(function(column) {
                        var filterConditions = _utils2.default.getMatchedConditions(that.option("filterValue"), getColumnIdentifier(column));
                        if (1 === filterConditions.length) {
                            var filterCondition = filterConditions[0];
                            updateHeaderFilterCondition(columnsController, column, filterCondition);
                            updateFilterRowCondition(columnsController, column, filterCondition)
                        } else {
                            (0, _type.isDefined)(column.filterValues) && updateHeaderFilterCondition(columnsController, column);
                            (0, _type.isDefined)(column.filterValue) && updateFilterRowCondition(columnsController, column)
                        }
                    });
                    this._skipSyncColumnOptions = false
                },
                _initSync: function() {
                    var columns = this.getController("columns").getColumns();
                    var dataController = this.getController("data");
                    var pageIndex = dataController.pageIndex();
                    checkForErrors(columns);
                    if (!this.option("filterValue")) {
                        var filteringColumns = this.getController("columns").getFilteringColumns();
                        var filterValue = this.getFilterValueFromColumns(filteringColumns);
                        this.option("filterValue", filterValue)
                    }
                    this.syncFilterValue();
                    dataController.pageIndex(pageIndex)
                },
                init: function() {
                    var _this = this;
                    var dataController = this.getController("data");
                    if (dataController.isFilterSyncActive()) {
                        if (this.getController("columns").isAllDataTypesDefined()) {
                            this._initSync()
                        } else {
                            dataController.dataSourceChanged.add(function() {
                                return _this._initSync()
                            })
                        }
                    }
                },
                _getSyncFilterRow: function(filterValue, column) {
                    var filter = getConditionFromFilterRow(column);
                    if ((0, _type.isDefined)(filter)) {
                        return _utils2.default.syncFilters(filterValue, filter)
                    } else {
                        return _utils2.default.removeFieldConditionsFromFilter(filterValue, getColumnIdentifier(column))
                    }
                },
                _getSyncHeaderFilter: function(filterValue, column) {
                    var filter = getConditionFromHeaderFilter(column);
                    if (filter) {
                        return _utils2.default.syncFilters(filterValue, filter)
                    } else {
                        return _utils2.default.removeFieldConditionsFromFilter(filterValue, getColumnIdentifier(column))
                    }
                },
                getFilterValueFromColumns: function(columns) {
                    if (!this.getController("data").isFilterSyncActive()) {
                        return null
                    }
                    var filterValue = ["and"];
                    columns && columns.forEach(function(column) {
                        var headerFilter = getConditionFromHeaderFilter(column);
                        var filterRow = getConditionFromFilterRow(column);
                        headerFilter && _utils2.default.addItem(headerFilter, filterValue);
                        filterRow && _utils2.default.addItem(filterRow, filterValue)
                    });
                    return _utils2.default.getNormalizedFilter(filterValue)
                },
                syncFilterRow: function(column, value) {
                    this.option("filterValue", this._getSyncFilterRow(this.option("filterValue"), column))
                },
                syncHeaderFilter: function(column) {
                    this.option("filterValue", this._getSyncHeaderFilter(this.option("filterValue"), column))
                },
                getCustomFilterOperations: function() {
                    var filterBuilderCustomOperations = this.option("filterBuilder.customOperations") || [];
                    return [_uiGrid_core6.default.anyOf(this.component), _uiGrid_core6.default.noneOf(this.component)].concat(filterBuilderCustomOperations)
                },
                publicMethods: function() {
                    return ["getCustomFilterOperations"]
                }
            }
        }());
        var DataControllerFilterSyncExtender = {
            isFilterSyncActive: function() {
                var filterSyncEnabledValue = this.option("filterSyncEnabled");
                return "auto" === filterSyncEnabledValue ? this.option("filterPanel.visible") : filterSyncEnabledValue
            },
            skipCalculateColumnFilters: function() {
                return (0, _type.isDefined)(this.option("filterValue")) && this.isFilterSyncActive()
            },
            _calculateAdditionalFilter: function() {
                var that = this;
                if (false === that.option("filterPanel.filterEnabled")) {
                    return that.callBase()
                }
                var filters = [that.callBase()];
                var columns = that.getController("columns").getFilteringColumns();
                var filterValue = that.option("filterValue");
                if (that.isFilterSyncActive()) {
                    var currentColumn = that.getController("headerFilter").getCurrentColumn();
                    if (currentColumn && filterValue) {
                        filterValue = _utils2.default.removeFieldConditionsFromFilter(filterValue, getColumnIdentifier(currentColumn))
                    }
                }
                var customOperations = that.getController("filterSync").getCustomFilterOperations();
                var calculatedFilterValue = _utils2.default.getFilterExpression(filterValue, columns, customOperations, "filterBuilder");
                if (calculatedFilterValue) {
                    filters.push(calculatedFilterValue)
                }
                return _uiGrid_core4.default.combineFilters(filters)
            },
            _parseColumnPropertyName: function(fullName) {
                var matched = fullName.match(/.*\.(.*)/);
                return matched[1]
            },
            clearFilter: function(filterName) {
                this.component.beginUpdate();
                if (arguments.length > 0) {
                    if ("filterValue" === filterName) {
                        this.option("filterValue", null)
                    }
                    this.callBase(filterName)
                } else {
                    this.option("filterValue", null);
                    this.callBase()
                }
                this.component.endUpdate()
            },
            optionChanged: function(args) {
                switch (args.name) {
                    case "filterValue":
                        this._applyFilter();
                        this.isFilterSyncActive() && this.getController("filterSync").syncFilterValue();
                        args.handled = true;
                        break;
                    case "filterSyncEnabled":
                        args.handled = true;
                        break;
                    case "columns":
                        if (this.isFilterSyncActive()) {
                            var column = this.getController("columns").getColumnByPath(args.fullName);
                            var filterSyncController = this.getController("filterSync");
                            if (column && !filterSyncController._skipSyncColumnOptions) {
                                var propertyName = this._parseColumnPropertyName(args.fullName);
                                filterSyncController._skipSyncColumnOptions = true;
                                if ("filterType" === propertyName) {
                                    if (FILTER_TYPES_EXCLUDE === args.value || FILTER_TYPES_EXCLUDE === args.previousValue) {
                                        filterSyncController.syncHeaderFilter(column)
                                    }
                                } else {
                                    if ("filterValues" === propertyName) {
                                        filterSyncController.syncHeaderFilter(column)
                                    } else {
                                        if (["filterValue", "selectedFilterOperation"].indexOf(propertyName) > -1) {
                                            filterSyncController.syncFilterRow(column, column.filterValue)
                                        }
                                    }
                                }
                                filterSyncController._skipSyncColumnOptions = false
                            }
                        }
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        };
        var ColumnHeadersViewFilterSyncExtender = {
            _isHeaderFilterEmpty: function(column) {
                if (this.getController("data").isFilterSyncActive()) {
                    return !_utils2.default.filterHasField(this.option("filterValue"), getColumnIdentifier(column))
                }
                return this.callBase(column)
            },
            _needUpdateFilterIndicators: function() {
                return !this.getController("data").isFilterSyncActive()
            },
            optionChanged: function(args) {
                if ("filterValue" === args.name) {
                    this._updateHeaderFilterIndicators()
                } else {
                    this.callBase(args)
                }
            }
        };
        module.exports = {
            defaultOptions: function() {
                return {
                    filterValue: null,
                    filterSyncEnabled: "auto"
                }
            },
            controllers: {
                filterSync: FilterSyncController
            },
            extenders: {
                controllers: {
                    data: DataControllerFilterSyncExtender
                },
                views: {
                    columnHeadersView: ColumnHeadersViewFilterSyncExtender
                }
            }
        }
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/filter_builder/filter_builder.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _utils = __webpack_require__( /*! ./utils */ 205);
        var _utils2 = _interopRequireDefault(_utils);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _deferred2 = _interopRequireDefault(_deferred);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _tree_view = __webpack_require__( /*! ../tree_view */ 146);
        var _tree_view2 = _interopRequireDefault(_tree_view);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _utils3 = __webpack_require__( /*! ../overlay/utils */ 236);
        var _ui3 = __webpack_require__( /*! ../shared/ui.editor_factory_mixin */ 367);
        var _ui4 = _interopRequireDefault(_ui3);
        var _utils4 = __webpack_require__( /*! ../../events/utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FILTER_BUILDER_CLASS = "dx-filterbuilder";
        var FILTER_BUILDER_GROUP_CLASS = FILTER_BUILDER_CLASS + "-group";
        var FILTER_BUILDER_GROUP_ITEM_CLASS = FILTER_BUILDER_GROUP_CLASS + "-item";
        var FILTER_BUILDER_GROUP_CONTENT_CLASS = FILTER_BUILDER_GROUP_CLASS + "-content";
        var FILTER_BUILDER_GROUP_OPERATIONS_CLASS = FILTER_BUILDER_GROUP_CLASS + "-operations";
        var FILTER_BUILDER_GROUP_OPERATION_CLASS = FILTER_BUILDER_GROUP_CLASS + "-operation";
        var FILTER_BUILDER_ACTION_CLASS = FILTER_BUILDER_CLASS + "-action";
        var FILTER_BUILDER_IMAGE_CLASS = FILTER_BUILDER_ACTION_CLASS + "-icon";
        var FILTER_BUILDER_IMAGE_ADD_CLASS = "dx-icon-plus";
        var FILTER_BUILDER_IMAGE_REMOVE_CLASS = "dx-icon-remove";
        var FILTER_BUILDER_ITEM_TEXT_CLASS = FILTER_BUILDER_CLASS + "-text";
        var FILTER_BUILDER_ITEM_TEXT_PART_CLASS = FILTER_BUILDER_ITEM_TEXT_CLASS + "-part";
        var FILTER_BUILDER_ITEM_TEXT_SEPARATOR_CLASS = FILTER_BUILDER_ITEM_TEXT_CLASS + "-separator";
        var FILTER_BUILDER_ITEM_TEXT_SEPARATOR_EMPTY_CLASS = FILTER_BUILDER_ITEM_TEXT_SEPARATOR_CLASS + "-empty";
        var FILTER_BUILDER_ITEM_FIELD_CLASS = FILTER_BUILDER_CLASS + "-item-field";
        var FILTER_BUILDER_ITEM_OPERATION_CLASS = FILTER_BUILDER_CLASS + "-item-operation";
        var FILTER_BUILDER_ITEM_VALUE_CLASS = FILTER_BUILDER_CLASS + "-item-value";
        var FILTER_BUILDER_ITEM_VALUE_TEXT_CLASS = FILTER_BUILDER_CLASS + "-item-value-text";
        var FILTER_BUILDER_OVERLAY_CLASS = FILTER_BUILDER_CLASS + "-overlay";
        var FILTER_BUILDER_FILTER_OPERATIONS_CLASS = FILTER_BUILDER_CLASS + "-operations";
        var FILTER_BUILDER_FIELDS_CLASS = FILTER_BUILDER_CLASS + "-fields";
        var FILTER_BUILDER_ADD_CONDITION_CLASS = FILTER_BUILDER_CLASS + "-add-condition";
        var ACTIVE_CLASS = "dx-state-active";
        var FILTER_BUILDER_MENU_CUSTOM_OPERATION_CLASS = FILTER_BUILDER_CLASS + "-menu-custom-operation";
        var SOURCE = "filterBuilder";
        var DISABLED_STATE_CLASS = "dx-state-disabled";
        var TAB_KEY = "tab";
        var ENTER_KEY = "enter";
        var ESCAPE_KEY = "escape";
        var ACTIONS = [{
            name: "onEditorPreparing",
            config: {
                excludeValidators: ["disabled", "readOnly"],
                category: "rendering"
            }
        }, {
            name: "onEditorPrepared",
            config: {
                excludeValidators: ["disabled", "readOnly"],
                category: "rendering"
            }
        }, {
            name: "onValueChanged",
            config: {
                excludeValidators: ["disabled", "readOnly"]
            }
        }];
        var OPERATORS = {
            and: "and",
            or: "or",
            notAnd: "!and",
            notOr: "!or"
        };
        var EditorFactory = _class2.default.inherit(_ui4.default);
        var renderValueText = function($container, value, customOperation) {
            if (Array.isArray(value)) {
                var lastItemIndex = value.length - 1;
                $container.empty();
                value.forEach(function(t, i) {
                    (0, _renderer2.default)("<span>").addClass(FILTER_BUILDER_ITEM_TEXT_PART_CLASS).text(t).appendTo($container);
                    if (i !== lastItemIndex) {
                        (0, _renderer2.default)("<span>").addClass(FILTER_BUILDER_ITEM_TEXT_SEPARATOR_CLASS).text(customOperation && customOperation.valueSeparator ? customOperation.valueSeparator : "|").addClass(FILTER_BUILDER_ITEM_TEXT_SEPARATOR_EMPTY_CLASS).appendTo($container)
                    }
                })
            } else {
                if (value) {
                    $container.text(value)
                } else {
                    $container.text(_message2.default.format("dxFilterBuilder-enterValueText"))
                }
            }
        };
        var FilterBuilder = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    onEditorPreparing: null,
                    onEditorPrepared: null,
                    onValueChanged: null,
                    fields: [],
                    defaultGroupOperation: "and",
                    groupOperations: ["and", "or", "notAnd", "notOr"],
                    maxGroupLevel: void 0,
                    value: null,
                    allowHierarchicalFields: false,
                    groupOperationDescriptions: {
                        and: _message2.default.format("dxFilterBuilder-and"),
                        or: _message2.default.format("dxFilterBuilder-or"),
                        notAnd: _message2.default.format("dxFilterBuilder-notAnd"),
                        notOr: _message2.default.format("dxFilterBuilder-notOr")
                    },
                    customOperations: [],
                    closePopupOnTargetScroll: true,
                    filterOperationDescriptions: {
                        between: _message2.default.format("dxFilterBuilder-filterOperationBetween"),
                        equal: _message2.default.format("dxFilterBuilder-filterOperationEquals"),
                        notEqual: _message2.default.format("dxFilterBuilder-filterOperationNotEquals"),
                        lessThan: _message2.default.format("dxFilterBuilder-filterOperationLess"),
                        lessThanOrEqual: _message2.default.format("dxFilterBuilder-filterOperationLessOrEquals"),
                        greaterThan: _message2.default.format("dxFilterBuilder-filterOperationGreater"),
                        greaterThanOrEqual: _message2.default.format("dxFilterBuilder-filterOperationGreaterOrEquals"),
                        startsWith: _message2.default.format("dxFilterBuilder-filterOperationStartsWith"),
                        contains: _message2.default.format("dxFilterBuilder-filterOperationContains"),
                        notContains: _message2.default.format("dxFilterBuilder-filterOperationNotContains"),
                        endsWith: _message2.default.format("dxFilterBuilder-filterOperationEndsWith"),
                        isBlank: _message2.default.format("dxFilterBuilder-filterOperationIsBlank"),
                        isNotBlank: _message2.default.format("dxFilterBuilder-filterOperationIsNotBlank")
                    }
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "closePopupOnTargetScroll":
                        break;
                    case "onEditorPreparing":
                    case "onEditorPrepared":
                    case "onValueChanged":
                        this._initActions();
                        break;
                    case "customOperations":
                        this._initCustomOperations();
                        this._invalidate();
                        break;
                    case "fields":
                    case "defaultGroupOperation":
                    case "maxGroupLevel":
                    case "groupOperations":
                    case "allowHierarchicalFields":
                    case "groupOperationDescriptions":
                    case "filterOperationDescriptions":
                        this._invalidate();
                        break;
                    case "value":
                        if (args.value !== args.previousValue) {
                            var disableInvalidateForValue = this._disableInvalidateForValue;
                            if (!disableInvalidateForValue) {
                                this._initModel();
                                this._invalidate()
                            }
                            this._disableInvalidateForValue = false;
                            this.executeAction("onValueChanged", {
                                value: args.value,
                                previousValue: args.previousValue
                            });
                            this._disableInvalidateForValue = disableInvalidateForValue
                        }
                        break;
                    default:
                        this.callBase(args)
                }
            },
            getFilterExpression: function() {
                var fields = this._getNormalizedFields();
                var value = (0, _extend.extend)(true, [], this._model);
                return _utils2.default.getFilterExpression(_utils2.default.getNormalizedFilter(value), fields, this._customOperations, SOURCE)
            },
            _getNormalizedFields: function() {
                return _utils2.default.getNormalizedFields(this.option("fields"))
            },
            _updateFilter: function() {
                this._disableInvalidateForValue = true;
                var value = (0, _extend.extend)(true, [], this._model);
                var normalizedValue = _utils2.default.getNormalizedFilter(value);
                var oldValue = _utils2.default.getNormalizedFilter(this._getModel(this.option("value")));
                if (JSON.stringify(oldValue) !== JSON.stringify(normalizedValue)) {
                    this.option("value", normalizedValue)
                }
                this._disableInvalidateForValue = false;
                this._fireContentReadyAction()
            },
            _init: function() {
                this._initCustomOperations();
                this._initModel();
                this._initEditorFactory();
                this._initActions();
                this.callBase()
            },
            _initEditorFactory: function() {
                this._editorFactory = new EditorFactory
            },
            _initCustomOperations: function() {
                this._customOperations = _utils2.default.getMergedOperations(this.option("customOperations"), this.option("filterOperationDescriptions.between"), this)
            },
            _getModel: function(value) {
                return _utils2.default.convertToInnerStructure(value, this._customOperations)
            },
            _initModel: function() {
                this._model = this._getModel(this.option("value"))
            },
            _initActions: function() {
                var that = this;
                that._actions = {};
                ACTIONS.forEach(function(action) {
                    that._actions[action.name] = that._createActionByOption(action.name, action.config)
                })
            },
            executeAction: function(actionName, options) {
                var action = this._actions[actionName];
                return action && action(options)
            },
            _initMarkup: function() {
                this.$element().addClass(FILTER_BUILDER_CLASS);
                this.callBase();
                this._createGroupElementByCriteria(this._model).appendTo(this.$element())
            },
            _createConditionElement: function(condition, parent) {
                return (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_GROUP_CLASS).append(this._createConditionItem(condition, parent))
            },
            _createGroupElementByCriteria: function(criteria, parent) {
                var groupLevel = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
                var $group = this._createGroupElement(criteria, parent, groupLevel);
                var $groupContent = $group.find("." + FILTER_BUILDER_GROUP_CONTENT_CLASS);
                var groupCriteria = _utils2.default.getGroupCriteria(criteria);
                for (var i = 0; i < groupCriteria.length; i++) {
                    var innerCriteria = groupCriteria[i];
                    if (_utils2.default.isGroup(innerCriteria)) {
                        this._createGroupElementByCriteria(innerCriteria, groupCriteria, groupLevel + 1).appendTo($groupContent)
                    } else {
                        if (_utils2.default.isCondition(innerCriteria)) {
                            this._createConditionElement(innerCriteria, groupCriteria).appendTo($groupContent)
                        }
                    }
                }
                return $group
            },
            _createGroupElement: function(criteria, parent, groupLevel) {
                var _this = this;
                var $groupItem = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_GROUP_ITEM_CLASS);
                var $groupContent = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_GROUP_CONTENT_CLASS);
                var $group = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_GROUP_CLASS).append($groupItem).append($groupContent);
                if (null != parent) {
                    this._createRemoveButton(function() {
                        _utils2.default.removeItem(parent, criteria);
                        $group.remove();
                        _this._updateFilter()
                    }).appendTo($groupItem)
                }
                this._createGroupOperationButton(criteria).appendTo($groupItem);
                this._createAddButton(function() {
                    var newGroup = _utils2.default.createEmptyGroup(_this.option("defaultGroupOperation"));
                    _utils2.default.addItem(newGroup, criteria);
                    _this._createGroupElement(newGroup, criteria, groupLevel + 1).appendTo($groupContent);
                    _this._updateFilter()
                }, function() {
                    var field = _this.option("fields")[0];
                    var newCondition = _utils2.default.createCondition(field, _this._customOperations);
                    _utils2.default.addItem(newCondition, criteria);
                    _this._createConditionElement(newCondition, criteria).appendTo($groupContent);
                    _this._updateFilter()
                }, groupLevel).appendTo($groupItem);
                return $group
            },
            _createButton: function(caption) {
                return (0, _renderer2.default)("<div>").text(caption)
            },
            _createGroupOperationButton: function(criteria) {
                var _this2 = this;
                var groupOperations = this._getGroupOperations(criteria);
                var groupMenuItem = _utils2.default.getGroupMenuItem(criteria, groupOperations);
                var caption = groupMenuItem.text;
                var $operationButton = groupOperations && groupOperations.length < 2 ? this._createButton(caption).addClass(DISABLED_STATE_CLASS) : this._createButtonWithMenu({
                    caption: caption,
                    menu: {
                        items: groupOperations,
                        displayExpr: "text",
                        keyExpr: "value",
                        onItemClick: function(e) {
                            if (groupMenuItem !== e.itemData) {
                                _utils2.default.setGroupValue(criteria, e.itemData.value);
                                $operationButton.html(e.itemData.text);
                                groupMenuItem = e.itemData;
                                _this2._updateFilter()
                            }
                        },
                        onContentReady: function(e) {
                            e.component.selectItem(groupMenuItem)
                        },
                        cssClass: FILTER_BUILDER_GROUP_OPERATIONS_CLASS
                    }
                });
                return $operationButton.addClass(FILTER_BUILDER_ITEM_TEXT_CLASS).addClass(FILTER_BUILDER_GROUP_OPERATION_CLASS).attr("tabindex", 0)
            },
            _createButtonWithMenu: function(options) {
                var that = this;
                var removeMenu = function() {
                    that.$element().find("." + ACTIVE_CLASS).removeClass(ACTIVE_CLASS);
                    that.$element().find(".dx-overlay .dx-treeview").remove();
                    that.$element().find(".dx-overlay").remove()
                };
                var rtlEnabled = this.option("rtlEnabled");
                var menuOnItemClickWrapper = function(handler) {
                    return function(e) {
                        handler(e);
                        if ("dxclick" === e.event.type) {
                            removeMenu()
                        }
                    }
                };
                var position = rtlEnabled ? "right" : "left";
                var $button = this._createButton(options.caption);
                (0, _extend.extend)(options.menu, {
                    focusStateEnabled: true,
                    selectionMode: "single",
                    onItemClick: menuOnItemClickWrapper(options.menu.onItemClick),
                    onHiding: function(e) {
                        $button.removeClass(ACTIVE_CLASS)
                    },
                    position: {
                        my: position + " top",
                        at: position + " bottom",
                        offset: "0 1",
                        of: $button,
                        collision: "flip"
                    },
                    animation: null,
                    onHidden: function() {
                        removeMenu()
                    },
                    cssClass: FILTER_BUILDER_OVERLAY_CLASS + " " + options.menu.cssClass,
                    rtlEnabled: rtlEnabled
                });
                options.popup = {
                    onShown: function(info) {
                        var treeViewElement = (0, _renderer2.default)(info.component.content()).find(".dx-treeview");
                        var treeView = treeViewElement.dxTreeView("instance");
                        _events_engine2.default.on(treeViewElement, "keyup keydown", function(e) {
                            var keyName = (0, _utils4.normalizeKeyName)(e);
                            if ("keydown" === e.type && keyName === TAB_KEY || "keyup" === e.type && (keyName === ESCAPE_KEY || keyName === ENTER_KEY)) {
                                info.component.hide();
                                _events_engine2.default.trigger(options.menu.position.of, "focus")
                            }
                        });
                        treeView.focus();
                        treeView.option("focusedElement", null)
                    }
                };
                this._subscribeOnClickAndEnterKey($button, function() {
                    removeMenu();
                    that._createPopupWithTreeView(options, that.$element());
                    $button.addClass(ACTIVE_CLASS)
                });
                return $button
            },
            _hasValueButton: function(condition) {
                var customOperation = _utils2.default.getCustomOperation(this._customOperations, condition[1]);
                return customOperation ? false !== customOperation.hasValue : null !== condition[2]
            },
            _createOperationButtonWithMenu: function(condition, field) {
                var _this3 = this;
                var that = this;
                var availableOperations = _utils2.default.getAvailableOperations(field, this.option("filterOperationDescriptions"), this._customOperations);
                var currentOperation = _utils2.default.getOperationFromAvailable(_utils2.default.getOperationValue(condition), availableOperations);
                var $operationButton = this._createButtonWithMenu({
                    caption: currentOperation.text,
                    menu: {
                        items: availableOperations,
                        displayExpr: "text",
                        onItemRendered: function(e) {
                            e.itemData.isCustom && (0, _renderer2.default)(e.itemElement).addClass(FILTER_BUILDER_MENU_CUSTOM_OPERATION_CLASS)
                        },
                        onContentReady: function(e) {
                            e.component.selectItem(currentOperation)
                        },
                        onItemClick: function(e) {
                            if (currentOperation !== e.itemData) {
                                currentOperation = e.itemData;
                                _utils2.default.updateConditionByOperation(condition, currentOperation.value, that._customOperations);
                                var $valueButton = $operationButton.siblings().filter("." + FILTER_BUILDER_ITEM_VALUE_CLASS);
                                if (that._hasValueButton(condition)) {
                                    if (0 !== $valueButton.length) {
                                        $valueButton.remove()
                                    }
                                    that._createValueButton(condition, field).appendTo($operationButton.parent())
                                } else {
                                    $valueButton.remove()
                                }
                                $operationButton.html(currentOperation.text);
                                _this3._updateFilter()
                            }
                        },
                        cssClass: FILTER_BUILDER_FILTER_OPERATIONS_CLASS
                    }
                }).addClass(FILTER_BUILDER_ITEM_TEXT_CLASS).addClass(FILTER_BUILDER_ITEM_OPERATION_CLASS).attr("tabindex", 0);
                return $operationButton
            },
            _createOperationAndValueButtons: function(condition, field, $item) {
                this._createOperationButtonWithMenu(condition, field).appendTo($item);
                if (this._hasValueButton(condition)) {
                    this._createValueButton(condition, field).appendTo($item)
                }
            },
            _createFieldButtonWithMenu: function(fields, condition, field) {
                var _this4 = this;
                var that = this;
                var allowHierarchicalFields = this.option("allowHierarchicalFields");
                var items = _utils2.default.getItems(fields, allowHierarchicalFields);
                var item = _utils2.default.getField(field.name || field.dataField, items);
                var getFullCaption = function(item, items) {
                    return allowHierarchicalFields ? _utils2.default.getCaptionWithParents(item, items) : item.caption
                };
                var $fieldButton = this._createButtonWithMenu({
                    caption: getFullCaption(item, items),
                    menu: {
                        items: items,
                        dataStructure: "plain",
                        keyExpr: "id",
                        parentId: "parentId",
                        displayExpr: "caption",
                        onItemClick: function(e) {
                            if (item !== e.itemData) {
                                item = e.itemData;
                                condition[0] = item.name || item.dataField;
                                condition[2] = "object" === item.dataType ? null : "";
                                _utils2.default.updateConditionByOperation(condition, _utils2.default.getDefaultOperation(item), that._customOperations);
                                $fieldButton.siblings().filter("." + FILTER_BUILDER_ITEM_TEXT_CLASS).remove();
                                that._createOperationAndValueButtons(condition, item, $fieldButton.parent());
                                var caption = getFullCaption(item, e.component.option("items"));
                                $fieldButton.html(caption);
                                _this4._updateFilter()
                            }
                        },
                        onContentReady: function(e) {
                            e.component.selectItem(item)
                        },
                        cssClass: FILTER_BUILDER_FIELDS_CLASS
                    }
                }).addClass(FILTER_BUILDER_ITEM_TEXT_CLASS).addClass(FILTER_BUILDER_ITEM_FIELD_CLASS).attr("tabindex", 0);
                return $fieldButton
            },
            _createConditionItem: function(condition, parent) {
                var _this5 = this;
                var $item = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_GROUP_ITEM_CLASS);
                var fields = this._getNormalizedFields();
                var field = _utils2.default.getField(condition[0], fields);
                this._createRemoveButton(function() {
                    _utils2.default.removeItem(parent, condition);
                    var isSingleChild = 1 === $item.parent().children().length;
                    if (isSingleChild) {
                        $item.parent().remove()
                    } else {
                        $item.remove()
                    }
                    _this5._updateFilter()
                }).appendTo($item);
                this._createFieldButtonWithMenu(fields, condition, field).appendTo($item);
                this._createOperationAndValueButtons(condition, field, $item);
                return $item
            },
            _getGroupOperations: function(criteria) {
                var groupOperations = this.option("groupOperations");
                var groupOperationDescriptions = this.option("groupOperationDescriptions");
                if (!groupOperations || !groupOperations.length) {
                    groupOperations = [_utils2.default.getGroupValue(criteria).replace("!", "not")]
                }
                return groupOperations.map(function(operation) {
                    return {
                        text: groupOperationDescriptions[operation],
                        value: OPERATORS[operation]
                    }
                })
            },
            _createRemoveButton: function(handler) {
                var $removeButton = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_IMAGE_CLASS).addClass(FILTER_BUILDER_IMAGE_REMOVE_CLASS).addClass(FILTER_BUILDER_ACTION_CLASS).attr("tabindex", 0);
                this._subscribeOnClickAndEnterKey($removeButton, handler);
                return $removeButton
            },
            _createAddButton: function(addGroupHandler, addConditionHandler, groupLevel) {
                var $button;
                var maxGroupLevel = this.option("maxGroupLevel");
                if ((0, _type.isDefined)(maxGroupLevel) && groupLevel >= maxGroupLevel) {
                    $button = this._createButton();
                    this._subscribeOnClickAndEnterKey($button, addConditionHandler)
                } else {
                    $button = this._createButtonWithMenu({
                        menu: {
                            items: [{
                                caption: _message2.default.format("dxFilterBuilder-addCondition"),
                                click: addConditionHandler
                            }, {
                                caption: _message2.default.format("dxFilterBuilder-addGroup"),
                                click: addGroupHandler
                            }],
                            displayExpr: "caption",
                            onItemClick: function(e) {
                                e.itemData.click()
                            },
                            cssClass: FILTER_BUILDER_ADD_CONDITION_CLASS
                        }
                    })
                }
                return $button.addClass(FILTER_BUILDER_IMAGE_CLASS).addClass(FILTER_BUILDER_IMAGE_ADD_CLASS).addClass(FILTER_BUILDER_ACTION_CLASS).attr("tabindex", 0)
            },
            _createValueText: function(item, field, $container) {
                var that = this;
                var $text = (0, _renderer2.default)("<div>").html("&nbsp;").addClass(FILTER_BUILDER_ITEM_VALUE_TEXT_CLASS).attr("tabindex", 0).appendTo($container);
                var value = item[2];
                var customOperation = _utils2.default.getCustomOperation(that._customOperations, item[1]);
                if (!customOperation && field.lookup) {
                    _utils2.default.getCurrentLookupValueText(field, value, function(result) {
                        renderValueText($text, result)
                    })
                } else {
                    _deferred2.default.when(_utils2.default.getCurrentValueText(field, value, customOperation)).done(function(result) {
                        renderValueText($text, result, customOperation)
                    })
                }
                that._subscribeOnClickAndEnterKey($text, function(e) {
                    if ("keyup" === e.type) {
                        e.stopPropagation()
                    }
                    that._createValueEditorWithEvents(item, field, $container)
                });
                return $text
            },
            _updateConditionValue: function(item, value, callback) {
                var areValuesDifferent = item[2] !== value;
                if (areValuesDifferent) {
                    item[2] = value
                }
                callback();
                this._updateFilter()
            },
            _addDocumentKeyUp: function($editor, handler) {
                var isComposing = false;
                var hasCompositionJustEnded = false;
                var document = _dom_adapter2.default.getDocument();
                var documentKeyUpHandler = function(e) {
                    if (isComposing || hasCompositionJustEnded) {
                        hasCompositionJustEnded = false;
                        return
                    }
                    handler(e)
                };
                _events_engine2.default.on(document, "keyup", documentKeyUpHandler);
                var input = $editor.find("input");
                _events_engine2.default.on(input, "compositionstart", function() {
                    isComposing = true
                });
                _events_engine2.default.on(input, "compositionend", function() {
                    isComposing = false;
                    hasCompositionJustEnded = true
                });
                _events_engine2.default.on(input, "keydown", function(event) {
                    if (229 !== event.which) {
                        hasCompositionJustEnded = false
                    }
                });
                this._documentKeyUpHandler = documentKeyUpHandler
            },
            _addDocumentClick: function($editor, closeEditorFunc) {
                var _this6 = this;
                var document = _dom_adapter2.default.getDocument();
                var documentClickHandler = function(e) {
                    if (!_this6._isFocusOnEditorParts($editor, e.target)) {
                        _events_engine2.default.trigger($editor.find("input"), "change");
                        closeEditorFunc()
                    }
                };
                _events_engine2.default.on(document, "dxpointerdown", documentClickHandler);
                this._documentClickHandler = documentClickHandler
            },
            _isFocusOnEditorParts: function($editor, target) {
                var activeElement = target || _dom_adapter2.default.getActiveElement();
                return (0, _renderer2.default)(activeElement).closest($editor.children()).length || (0, _renderer2.default)(activeElement).closest(".dx-dropdowneditor-overlay").length
            },
            _removeEvents: function() {
                var document = _dom_adapter2.default.getDocument();
                (0, _type.isDefined)(this._documentKeyUpHandler) && _events_engine2.default.off(document, "keyup", this._documentKeyUpHandler);
                (0, _type.isDefined)(this._documentClickHandler) && _events_engine2.default.off(document, "dxpointerdown", this._documentClickHandler)
            },
            _dispose: function() {
                this._removeEvents();
                this.callBase()
            },
            _createValueEditorWithEvents: function(item, field, $container) {
                var _this7 = this;
                var value = item[2];
                var createValueText = function() {
                    $container.empty();
                    _this7._removeEvents();
                    return _this7._createValueText(item, field, $container)
                };
                var closeEditor = function() {
                    _this7._updateConditionValue(item, value, function() {
                        createValueText()
                    })
                };
                var options = {
                    value: "" === value ? null : value,
                    filterOperation: _utils2.default.getOperationValue(item),
                    setValue: function(data) {
                        value = null === data ? "" : data
                    },
                    closeEditor: closeEditor,
                    text: $container.text()
                };
                $container.empty();
                var $editor = this._createValueEditor($container, field, options);
                _events_engine2.default.trigger($editor.find("input").not(":hidden").eq(0), "focus");
                this._removeEvents();
                this._addDocumentClick($editor, closeEditor);
                this._addDocumentKeyUp($editor, function(e) {
                    var keyName = (0, _utils4.normalizeKeyName)(e);
                    if (keyName === TAB_KEY) {
                        if (_this7._isFocusOnEditorParts($editor)) {
                            return
                        }
                        _this7._updateConditionValue(item, value, function() {
                            createValueText();
                            if (e.shiftKey) {
                                _events_engine2.default.trigger($container.prev(), "focus")
                            }
                        })
                    }
                    if (keyName === ESCAPE_KEY) {
                        _events_engine2.default.trigger(createValueText(), "focus")
                    }
                    if (keyName === ENTER_KEY) {
                        _this7._updateConditionValue(item, value, function() {
                            _events_engine2.default.trigger(createValueText(), "focus")
                        })
                    }
                });
                this._fireContentReadyAction()
            },
            _createValueButton: function(item, field) {
                var $valueButton = (0, _renderer2.default)("<div>").addClass(FILTER_BUILDER_ITEM_TEXT_CLASS).addClass(FILTER_BUILDER_ITEM_VALUE_CLASS);
                this._createValueText(item, field, $valueButton);
                return $valueButton
            },
            _createValueEditor: function($container, field, options) {
                var $editor = (0, _renderer2.default)("<div>").attr("tabindex", 0).appendTo($container);
                var customOperation = _utils2.default.getCustomOperation(this._customOperations, options.filterOperation);
                var editorTemplate = customOperation && customOperation.editorTemplate ? customOperation.editorTemplate : field.editorTemplate;
                if (editorTemplate) {
                    var template = this._getTemplate(editorTemplate);
                    template.render({
                        model: (0, _extend.extend)({
                            field: field
                        }, options),
                        container: $editor
                    })
                } else {
                    this._editorFactory.createEditor.call(this, $editor, (0, _extend.extend)({}, field, options, {
                        parentType: SOURCE
                    }))
                }
                return $editor
            },
            _createPopupWithTreeView: function(options, $container) {
                var that = this;
                var $popup = (0, _renderer2.default)("<div>").addClass(options.menu.cssClass).appendTo($container);
                this._createComponent($popup, _popup2.default, {
                    onHiding: options.menu.onHiding,
                    onHidden: options.menu.onHidden,
                    rtlEnabled: options.menu.rtlEnabled,
                    position: options.menu.position,
                    animation: options.menu.animation,
                    contentTemplate: function(contentElement) {
                        var $menuContainer = (0, _renderer2.default)("<div>").appendTo(contentElement);
                        that._createComponent($menuContainer, _tree_view2.default, options.menu);
                        this.repaint()
                    },
                    maxHeight: function() {
                        return (0, _utils3.getElementMaxHeightByWindow)(options.menu.position.of)
                    },
                    visible: true,
                    focusStateEnabled: false,
                    closeOnTargetScroll: this.option("closePopupOnTargetScroll"),
                    closeOnOutsideClick: true,
                    onShown: options.popup.onShown,
                    shading: false,
                    width: "auto",
                    height: "auto",
                    showTitle: false
                })
            },
            _subscribeOnClickAndEnterKey: function($button, handler) {
                _events_engine2.default.on($button, "dxclick", handler);
                _events_engine2.default.on($button, "keyup", function(e) {
                    if ((0, _utils4.normalizeKeyName)(e) === ENTER_KEY) {
                        handler(e)
                    }
                })
            }
        });
        (0, _component_registrator2.default)("dxFilterBuilder", FilterBuilder);
        module.exports = FilterBuilder;
        module.exports.renderValueText = renderValueText
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.filter_builder.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _filter_builder = __webpack_require__( /*! ./../filter_builder */ 380);
        var _filter_builder2 = _interopRequireDefault(_filter_builder);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _scroll_view = __webpack_require__( /*! ./../scroll_view */ 107);
        var _scroll_view2 = _interopRequireDefault(_scroll_view);
        var _popup = __webpack_require__( /*! ./../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FilterBuilderView = _uiGrid_core2.default.View.inherit({
            _renderCore: function() {
                this._updatePopupOptions()
            },
            _updatePopupOptions: function() {
                if (this.option("filterBuilderPopup.visible")) {
                    this._initPopup()
                } else {
                    if (this._filterBuilderPopup) {
                        this._filterBuilderPopup.hide()
                    }
                }
            },
            _disposePopup: function() {
                if (this._filterBuilderPopup) {
                    this._filterBuilderPopup.dispose();
                    this._filterBuilderPopup = void 0
                }
                if (this._filterBuilder) {
                    this._filterBuilder.dispose();
                    this._filterBuilder = void 0
                }
            },
            _initPopup: function() {
                var that = this;
                that._disposePopup();
                that._filterBuilderPopup = that._createComponent(that.element(), _popup2.default, (0, _extend.extend)({
                    title: _message2.default.format("dxDataGrid-filterBuilderPopupTitle"),
                    contentTemplate: function($contentElement) {
                        return that._getPopupContentTemplate($contentElement)
                    },
                    onOptionChanged: function(args) {
                        if ("visible" === args.name) {
                            that.option("filterBuilderPopup.visible", args.value)
                        }
                    },
                    toolbarItems: that._getPopupToolbarItems()
                }, that.option("filterBuilderPopup"), {
                    onHidden: function(e) {
                        (0, _accessibility.restoreFocus)(that);
                        that._disposePopup()
                    }
                }))
            },
            _getPopupContentTemplate: function(contentElement) {
                var $contentElement = (0, _renderer2.default)(contentElement);
                var $filterBuilderContainer = (0, _renderer2.default)("<div>").appendTo((0, _renderer2.default)(contentElement));
                this._filterBuilder = this._createComponent($filterBuilderContainer, _filter_builder2.default, (0, _extend.extend)({
                    value: this.option("filterValue"),
                    fields: this.getController("columns").getFilteringColumns()
                }, this.option("filterBuilder"), {
                    customOperations: this.getController("filterSync").getCustomFilterOperations()
                }));
                this._createComponent($contentElement, _scroll_view2.default, {
                    direction: "both"
                })
            },
            _getPopupToolbarItems: function() {
                var that = this;
                return [{
                    toolbar: "bottom",
                    location: "after",
                    widget: "dxButton",
                    options: {
                        text: _message2.default.format("OK"),
                        onClick: function(e) {
                            var filter = that._filterBuilder.option("value");
                            that.option("filterValue", filter);
                            that._filterBuilderPopup.hide()
                        }
                    }
                }, {
                    toolbar: "bottom",
                    location: "after",
                    widget: "dxButton",
                    options: {
                        text: _message2.default.format("Cancel"),
                        onClick: function(e) {
                            that._filterBuilderPopup.hide()
                        }
                    }
                }]
            },
            optionChanged: function(args) {
                switch (args.name) {
                    case "filterBuilder":
                    case "filterBuilderPopup":
                        this._invalidate();
                        args.handled = true;
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    filterBuilder: {
                        groupOperationDescriptions: {
                            and: _message2.default.format("dxFilterBuilder-and"),
                            or: _message2.default.format("dxFilterBuilder-or"),
                            notAnd: _message2.default.format("dxFilterBuilder-notAnd"),
                            notOr: _message2.default.format("dxFilterBuilder-notOr")
                        },
                        filterOperationDescriptions: {
                            between: _message2.default.format("dxFilterBuilder-filterOperationBetween"),
                            equal: _message2.default.format("dxFilterBuilder-filterOperationEquals"),
                            notEqual: _message2.default.format("dxFilterBuilder-filterOperationNotEquals"),
                            lessThan: _message2.default.format("dxFilterBuilder-filterOperationLess"),
                            lessThanOrEqual: _message2.default.format("dxFilterBuilder-filterOperationLessOrEquals"),
                            greaterThan: _message2.default.format("dxFilterBuilder-filterOperationGreater"),
                            greaterThanOrEqual: _message2.default.format("dxFilterBuilder-filterOperationGreaterOrEquals"),
                            startsWith: _message2.default.format("dxFilterBuilder-filterOperationStartsWith"),
                            contains: _message2.default.format("dxFilterBuilder-filterOperationContains"),
                            notContains: _message2.default.format("dxFilterBuilder-filterOperationNotContains"),
                            endsWith: _message2.default.format("dxFilterBuilder-filterOperationEndsWith"),
                            isBlank: _message2.default.format("dxFilterBuilder-filterOperationIsBlank"),
                            isNotBlank: _message2.default.format("dxFilterBuilder-filterOperationIsNotBlank")
                        }
                    },
                    filterBuilderPopup: {}
                }
            },
            views: {
                filterBuilderView: FilterBuilderView
            }
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/filter_builder.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./filter_builder/filter_builder */ 378)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.filter_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _check_box = __webpack_require__( /*! ../check_box */ 120);
        var _check_box2 = _interopRequireDefault(_check_box);
        var _utils = __webpack_require__( /*! ../filter_builder/utils */ 205);
        var _utils2 = _interopRequireDefault(_utils);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _uiGrid_core5 = __webpack_require__( /*! ./ui.grid_core.accessibility */ 245);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FILTER_PANEL_CLASS = "filter-panel";
        var FILTER_PANEL_TEXT_CLASS = FILTER_PANEL_CLASS + "-text";
        var FILTER_PANEL_CHECKBOX_CLASS = FILTER_PANEL_CLASS + "-checkbox";
        var FILTER_PANEL_CLEAR_FILTER_CLASS = FILTER_PANEL_CLASS + "-clear-filter";
        var FILTER_PANEL_LEFT_CONTAINER = FILTER_PANEL_CLASS + "-left";
        var FILTER_PANEL_TARGET = "filterPanel";
        var FilterPanelView = _uiGrid_core2.default.View.inherit({
            isVisible: function() {
                return this.option("filterPanel.visible") && this.getController("data").dataSource()
            },
            init: function() {
                var _this = this;
                this.getController("data").dataSourceChanged.add(function() {
                    return _this.render()
                })
            },
            _renderCore: function() {
                var that = this;
                var $element = that.element();
                $element.empty().addClass(that.addWidgetPrefix(FILTER_PANEL_CLASS));
                var $leftContainer = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FILTER_PANEL_LEFT_CONTAINER)).appendTo($element);
                if (that.option("filterValue") || that._filterValueBuffer) {
                    $leftContainer.append(that._getCheckElement()).append(that._getFilterElement()).append(that._getTextElement());
                    $element.append(that._getRemoveButtonElement())
                } else {
                    $leftContainer.append(that._getFilterElement()).append(that._getTextElement())
                }
            },
            _getCheckElement: function() {
                var that = this;
                var $element = (0, _renderer2.default)("<div>").addClass(this.addWidgetPrefix(FILTER_PANEL_CHECKBOX_CLASS));
                that._createComponent($element, _check_box2.default, {
                    value: that.option("filterPanel.filterEnabled"),
                    onValueChanged: function(e) {
                        that.option("filterPanel.filterEnabled", e.value)
                    }
                });
                $element.attr("title", this.option("filterPanel.texts.filterEnabledHint"));
                return $element
            },
            _getFilterElement: function() {
                var that = this;
                var $element = (0, _renderer2.default)("<div>").addClass("dx-icon-filter");
                _events_engine2.default.on($element, "click", function() {
                    return that._showFilterBuilder()
                });
                (0, _uiGrid_core5.registerKeyboardAction)("filterPanel", that, $element, void 0, function() {
                    return that._showFilterBuilder()
                });
                that._addTabIndexToElement($element);
                return $element
            },
            _getTextElement: function() {
                var that = this;
                var $textElement = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FILTER_PANEL_TEXT_CLASS));
                var filterText;
                var filterValue = that.option("filterValue");
                if (filterValue) {
                    (0, _deferred.when)(that.getFilterText(filterValue, that.getController("filterSync").getCustomFilterOperations())).done(function(filterText) {
                        var customizeText = that.option("filterPanel.customizeText");
                        if (customizeText) {
                            var customText = customizeText({
                                component: that.component,
                                filterValue: filterValue,
                                text: filterText
                            });
                            if ("string" === typeof customText) {
                                filterText = customText
                            }
                        }
                        $textElement.text(filterText)
                    })
                } else {
                    filterText = that.option("filterPanel.texts.createFilter");
                    $textElement.text(filterText)
                }
                _events_engine2.default.on($textElement, "click", function() {
                    return that._showFilterBuilder()
                });
                (0, _uiGrid_core5.registerKeyboardAction)("filterPanel", that, $textElement, void 0, function() {
                    return that._showFilterBuilder()
                });
                that._addTabIndexToElement($textElement);
                return $textElement
            },
            _showFilterBuilder: function() {
                this.option("filterBuilderPopup.visible", true)
            },
            _getRemoveButtonElement: function() {
                var that = this;
                var clearFilterValue = function() {
                    return that.option("filterValue", null)
                };
                var $element = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(FILTER_PANEL_CLEAR_FILTER_CLASS)).text(that.option("filterPanel.texts.clearFilter"));
                _events_engine2.default.on($element, "click", clearFilterValue);
                (0, _uiGrid_core5.registerKeyboardAction)("filterPanel", this, $element, void 0, clearFilterValue);
                that._addTabIndexToElement($element);
                return $element
            },
            _addTabIndexToElement: function($element) {
                if (!this.option("useLegacyKeyboardNavigation")) {
                    var tabindex = this.option("tabindex") || 0;
                    $element.attr("tabindex", tabindex)
                }
            },
            optionChanged: function(args) {
                switch (args.name) {
                    case "filterValue":
                        this._invalidate();
                        this.option("filterPanel.filterEnabled", true);
                        args.handled = true;
                        break;
                    case "filterPanel":
                        this._invalidate();
                        args.handled = true;
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getConditionText: function(fieldText, operationText, valueText) {
                var result = "[".concat(fieldText, "] ").concat(operationText);
                if ((0, _type.isDefined)(valueText)) {
                    result += valueText
                }
                return result
            },
            _getValueMaskedText: function(value) {
                return Array.isArray(value) ? "('".concat(value.join("', '"), "')") : " '".concat(value, "'")
            },
            _getValueText: function(field, customOperation, value) {
                var _this2 = this;
                var deferred = new _deferred.Deferred;
                var hasCustomOperation = customOperation && customOperation.customizeText;
                if ((0, _type.isDefined)(value) || hasCustomOperation) {
                    if (!hasCustomOperation && field.lookup) {
                        _utils2.default.getCurrentLookupValueText(field, value, function(data) {
                            deferred.resolve(_this2._getValueMaskedText(data))
                        })
                    } else {
                        var displayValue = Array.isArray(value) ? value : _uiGrid_core4.default.getDisplayValue(field, value);
                        (0, _deferred.when)(_utils2.default.getCurrentValueText(field, displayValue, customOperation, FILTER_PANEL_TARGET)).done(function(data) {
                            deferred.resolve(_this2._getValueMaskedText(data))
                        })
                    }
                } else {
                    deferred.resolve("")
                }
                return deferred.promise()
            },
            getConditionText: function(filterValue, options) {
                var that = this;
                var operation = filterValue[1];
                var deferred = new _deferred.Deferred;
                var customOperation = _utils2.default.getCustomOperation(options.customOperations, operation);
                var operationText;
                var field = _utils2.default.getField(filterValue[0], options.columns);
                var fieldText = field.caption || "";
                var value = filterValue[2];
                if (customOperation) {
                    operationText = customOperation.caption || _inflector2.default.captionize(customOperation.name)
                } else {
                    if (null === value) {
                        operationText = _utils2.default.getCaptionByOperation("=" === operation ? "isblank" : "isnotblank", options.filterOperationDescriptions)
                    } else {
                        operationText = _utils2.default.getCaptionByOperation(operation, options.filterOperationDescriptions)
                    }
                }
                this._getValueText(field, customOperation, value).done(function(valueText) {
                    deferred.resolve(that._getConditionText(fieldText, operationText, valueText))
                });
                return deferred
            },
            getGroupText: function(filterValue, options, isInnerGroup) {
                var that = this;
                var result = new _deferred.Deferred;
                var textParts = [];
                var groupValue = _utils2.default.getGroupValue(filterValue);
                filterValue.forEach(function(item) {
                    if (_utils2.default.isCondition(item)) {
                        textParts.push(that.getConditionText(item, options))
                    } else {
                        if (_utils2.default.isGroup(item)) {
                            textParts.push(that.getGroupText(item, options, true))
                        }
                    }
                });
                _deferred.when.apply(this, textParts).done(function() {
                    var text;
                    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
                        args[_key] = arguments[_key]
                    }
                    if ("!" === groupValue[0]) {
                        var groupText = options.groupOperationDescriptions["not" + groupValue.substring(1, 2).toUpperCase() + groupValue.substring(2)].split(" ");
                        text = "".concat(groupText[0], " ").concat(args[0])
                    } else {
                        text = args.join(" ".concat(options.groupOperationDescriptions[groupValue], " "))
                    }
                    if (isInnerGroup) {
                        text = "(".concat(text, ")")
                    }
                    result.resolve(text)
                });
                return result
            },
            getFilterText: function(filterValue, customOperations) {
                var that = this;
                var options = {
                    customOperations: customOperations,
                    columns: that.getController("columns").getFilteringColumns(),
                    filterOperationDescriptions: that.option("filterBuilder.filterOperationDescriptions"),
                    groupOperationDescriptions: that.option("filterBuilder.groupOperationDescriptions")
                };
                return _utils2.default.isCondition(filterValue) ? that.getConditionText(filterValue, options) : that.getGroupText(filterValue, options)
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    filterPanel: {
                        visible: false,
                        filterEnabled: true,
                        texts: {
                            createFilter: _message2.default.format("dxDataGrid-filterPanelCreateFilter"),
                            clearFilter: _message2.default.format("dxDataGrid-filterPanelClearFilter"),
                            filterEnabledHint: _message2.default.format("dxDataGrid-filterPanelFilterEnabledHint")
                        }
                    }
                }
            },
            views: {
                filterPanelView: FilterPanelView
            },
            extenders: {
                controllers: {
                    data: {
                        optionChanged: function(args) {
                            switch (args.name) {
                                case "filterPanel":
                                    this._applyFilter();
                                    args.handled = true;
                                    break;
                                default:
                                    this.callBase(args)
                            }
                        }
                    }
                }
            }
        }
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.search.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SEARCH_PANEL_CLASS = "search-panel";
        var SEARCH_TEXT_CLASS = "search-text";
        var HEADER_PANEL_CLASS = "header-panel";
        var FILTERING_TIMEOUT = 700;

        function allowSearch(column) {
            return (0, _type.isDefined)(column.allowSearch) ? column.allowSearch : column.allowFiltering
        }

        function parseValue(column, text) {
            var lookup = column.lookup;
            if (!column.parseValue) {
                return text
            }
            if (lookup) {
                return column.parseValue.call(lookup, text)
            }
            return column.parseValue(text)
        }
        module.exports = {
            defaultOptions: function() {
                return {
                    searchPanel: {
                        visible: false,
                        width: 160,
                        placeholder: _message2.default.format("dxDataGrid-searchPanelPlaceholder"),
                        highlightSearchText: true,
                        highlightCaseSensitive: false,
                        text: "",
                        searchVisibleColumnsOnly: false
                    }
                }
            },
            extenders: {
                controllers: {
                    data: function() {
                        var calculateSearchFilter = function(that, text) {
                            var i;
                            var column;
                            var columns = that._columnsController.getColumns();
                            var searchVisibleColumnsOnly = that.option("searchPanel.searchVisibleColumnsOnly");
                            var lookup;
                            var filters = [];
                            if (!text) {
                                return null
                            }

                            function onQueryDone(items) {
                                var valueGetter = (0, _data.compileGetter)(lookup.valueExpr);
                                for (var _i = 0; _i < items.length; _i++) {
                                    var value = valueGetter(items[_i]);
                                    filters.push(column.createFilterExpression(value, null, "search"))
                                }
                            }
                            for (i = 0; i < columns.length; i++) {
                                column = columns[i];
                                if (searchVisibleColumnsOnly && !column.visible) {
                                    continue
                                }
                                if (allowSearch(column) && column.calculateFilterExpression) {
                                    lookup = column.lookup;
                                    var filterValue = parseValue(column, text);
                                    if (lookup && lookup.items) {
                                        (0, _query2.default)(lookup.items).filter(column.createFilterExpression.call({
                                            dataField: lookup.displayExpr,
                                            dataType: lookup.dataType,
                                            calculateFilterExpression: column.calculateFilterExpression
                                        }, filterValue, null, "search")).enumerate().done(onQueryDone)
                                    } else {
                                        if (void 0 !== filterValue) {
                                            filters.push(column.createFilterExpression(filterValue, null, "search"))
                                        }
                                    }
                                }
                            }
                            return (0, _uiGrid_core.combineFilters)(filters, "or")
                        };
                        return {
                            publicMethods: function() {
                                return this.callBase().concat(["searchByText"])
                            },
                            _calculateAdditionalFilter: function() {
                                var that = this;
                                var filter = that.callBase();
                                var searchFilter = calculateSearchFilter(that, that.option("searchPanel.text"));
                                return (0, _uiGrid_core.combineFilters)([filter, searchFilter])
                            },
                            searchByText: function(text) {
                                this.option("searchPanel.text", text)
                            },
                            optionChanged: function(args) {
                                var that = this;
                                switch (args.fullName) {
                                    case "searchPanel.text":
                                    case "searchPanel":
                                        that._applyFilter();
                                        args.handled = true;
                                        break;
                                    default:
                                        that.callBase(args)
                                }
                            }
                        }
                    }()
                },
                views: {
                    headerPanel: function() {
                        var getSearchPanelOptions = function(that) {
                            return that.option("searchPanel")
                        };
                        return {
                            _getToolbarItems: function() {
                                var items = this.callBase();
                                return this._prepareSearchItem(items)
                            },
                            _prepareSearchItem: function(items) {
                                var that = this;
                                var dataController = that.getController("data");
                                var searchPanelOptions = getSearchPanelOptions(that);
                                if (searchPanelOptions && searchPanelOptions.visible) {
                                    var toolbarItem = {
                                        template: function(data, index, container) {
                                            var $search = (0, _renderer2.default)("<div>").addClass(that.addWidgetPrefix(SEARCH_PANEL_CLASS)).appendTo(container);
                                            that.getController("editorFactory").createEditor($search, {
                                                width: searchPanelOptions.width,
                                                placeholder: searchPanelOptions.placeholder,
                                                parentType: "searchPanel",
                                                value: that.option("searchPanel.text"),
                                                updateValueTimeout: FILTERING_TIMEOUT,
                                                setValue: function(value) {
                                                    dataController.searchByText(value)
                                                },
                                                editorOptions: {
                                                    inputAttr: {
                                                        "aria-label": _message2.default.format("dxDataGrid-ariaSearchInGrid")
                                                    }
                                                }
                                            });
                                            that.resize()
                                        },
                                        name: "searchPanel",
                                        location: "after",
                                        locateInMenu: "never",
                                        sortIndex: 40
                                    };
                                    items.push(toolbarItem)
                                }
                                return items
                            },
                            getSearchTextEditor: function() {
                                var that = this;
                                var $element = that.element();
                                var $searchPanel = $element.find("." + that.addWidgetPrefix(SEARCH_PANEL_CLASS)).filter(function() {
                                    return (0, _renderer2.default)(this).closest("." + that.addWidgetPrefix(HEADER_PANEL_CLASS)).is($element)
                                });
                                if ($searchPanel.length) {
                                    return $searchPanel.dxTextBox("instance")
                                }
                                return null
                            },
                            isVisible: function() {
                                var searchPanelOptions = getSearchPanelOptions(this);
                                return this.callBase() || searchPanelOptions && searchPanelOptions.visible
                            },
                            optionChanged: function(args) {
                                if ("searchPanel" === args.name) {
                                    if ("searchPanel.text" === args.fullName) {
                                        var editor = this.getSearchTextEditor();
                                        if (editor) {
                                            editor.option("value", args.value)
                                        }
                                    } else {
                                        this._invalidate()
                                    }
                                    args.handled = true
                                } else {
                                    this.callBase(args)
                                }
                            }
                        }
                    }(),
                    rowsView: {
                        init: function() {
                            this.callBase.apply(this, arguments);
                            this._searchParams = []
                        },
                        _getFormattedSearchText: function(column, searchText) {
                            var value = parseValue(column, searchText);
                            var formatOptions = (0, _uiGrid_core.getFormatOptionsByColumn)(column, "search");
                            return (0, _uiGrid_core.formatValue)(value, formatOptions)
                        },
                        _getStringNormalizer: function() {
                            var isCaseSensitive = this.option("searchPanel.highlightCaseSensitive");
                            return function(str) {
                                return isCaseSensitive ? str : str.toLowerCase()
                            }
                        },
                        _findHighlightingTextNodes: function(column, cellElement, searchText) {
                            var that = this;
                            var $parent = cellElement.parent();
                            var $items;
                            var stringNormalizer = this._getStringNormalizer();
                            var normalizedSearchText = stringNormalizer(searchText);
                            if (!$parent.length) {
                                $parent = (0, _renderer2.default)("<div>").append(cellElement)
                            } else {
                                if (column) {
                                    if (column.groupIndex >= 0 && !column.showWhenGrouped) {
                                        $items = cellElement
                                    } else {
                                        var columnIndex = that._columnsController.getVisibleIndex(column.index);
                                        $items = $parent.children("td").eq(columnIndex).find("*")
                                    }
                                }
                            }
                            $items = $items && $items.length ? $items : $parent.find("*");
                            $items = $items.filter(function(_, element) {
                                var $contents = (0, _renderer2.default)(element).contents();
                                for (var i = 0; i < $contents.length; i++) {
                                    var node = $contents.get(i);
                                    if (3 === node.nodeType) {
                                        return stringNormalizer(node.textContent || node.nodeValue).indexOf(normalizedSearchText) > -1
                                    }
                                    return false
                                }
                            });
                            return $items
                        },
                        _highlightSearchTextCore: function($textNode, searchText) {
                            var that = this;
                            var $searchTextSpan = (0, _renderer2.default)("<span>").addClass(that.addWidgetPrefix(SEARCH_TEXT_CLASS));
                            var text = $textNode.text();
                            var firstContentElement = $textNode[0];
                            var stringNormalizer = this._getStringNormalizer();
                            var index = stringNormalizer(text).indexOf(stringNormalizer(searchText));
                            if (index >= 0) {
                                if (firstContentElement.textContent) {
                                    firstContentElement.textContent = text.substr(0, index)
                                } else {
                                    firstContentElement.nodeValue = text.substr(0, index)
                                }
                                $textNode.after($searchTextSpan.text(text.substr(index, searchText.length)));
                                $textNode = (0, _renderer2.default)(_dom_adapter2.default.createTextNode(text.substr(index + searchText.length))).insertAfter($searchTextSpan);
                                return that._highlightSearchTextCore($textNode, searchText)
                            }
                        },
                        _highlightSearchText: function(cellElement, isEquals, column) {
                            var that = this;
                            var stringNormalizer = this._getStringNormalizer();
                            var searchText = that.option("searchPanel.text");
                            if (isEquals && column) {
                                searchText = searchText && that._getFormattedSearchText(column, searchText)
                            }
                            if (searchText && that.option("searchPanel.highlightSearchText")) {
                                var textNodes = that._findHighlightingTextNodes(column, cellElement, searchText);
                                (0, _iterator.each)(textNodes, function(_, element) {
                                    (0, _iterator.each)((0, _renderer2.default)(element).contents(), function(_, textNode) {
                                        if (isEquals) {
                                            if (stringNormalizer((0, _renderer2.default)(textNode).text()) === stringNormalizer(searchText)) {
                                                (0, _renderer2.default)(this).replaceWith((0, _renderer2.default)("<span>").addClass(that.addWidgetPrefix(SEARCH_TEXT_CLASS)).text((0, _renderer2.default)(textNode).text()))
                                            }
                                        } else {
                                            that._highlightSearchTextCore((0, _renderer2.default)(textNode), searchText)
                                        }
                                    })
                                })
                            }
                        },
                        _renderCore: function() {
                            this.callBase.apply(this, arguments);
                            if (this.option("rowTemplate")) {
                                if (this.option("templatesRenderAsynchronously")) {
                                    clearTimeout(this._highlightTimer);
                                    this._highlightTimer = setTimeout(function() {
                                        this._highlightSearchText(this._getTableElement())
                                    }.bind(this))
                                } else {
                                    this._highlightSearchText(this._getTableElement())
                                }
                            }
                        },
                        _updateCell: function($cell, parameters) {
                            var column = parameters.column;
                            var dataType = column.lookup && column.lookup.dataType || column.dataType;
                            var isEquals = "string" !== dataType;
                            if (allowSearch(column)) {
                                if (this.option("templatesRenderAsynchronously")) {
                                    if (!this._searchParams.length) {
                                        clearTimeout(this._highlightTimer);
                                        this._highlightTimer = setTimeout(function() {
                                            this._searchParams.forEach(function(params) {
                                                this._highlightSearchText.apply(this, params)
                                            }.bind(this));
                                            this._searchParams = []
                                        }.bind(this))
                                    }
                                    this._searchParams.push([$cell, isEquals, column])
                                } else {
                                    this._highlightSearchText($cell, isEquals, column)
                                }
                            }
                            this.callBase($cell, parameters)
                        },
                        dispose: function() {
                            clearTimeout(this._highlightTimer);
                            this.callBase()
                        }
                    }
                }
            }
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.pager.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _pager = __webpack_require__( /*! ../pager */ 663);
        var _pager2 = _interopRequireDefault(_pager);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PAGER_CLASS = "pager";
        var MAX_PAGES_COUNT = 10;
        var getPageIndex = function(dataController) {
            return 1 + (parseInt(dataController.pageIndex()) || 0)
        };
        var PagerView = _uiGrid_core2.default.View.inherit({
            init: function() {
                var that = this;
                var dataController = that.getController("data");
                that._isVisible = false;
                dataController.changed.add(function(e) {
                    if (e && e.repaintChangesOnly) {
                        var pager = that._getPager();
                        if (pager) {
                            pager.option({
                                pageIndex: getPageIndex(dataController),
                                pageSize: dataController.pageSize(),
                                pageCount: dataController.pageCount(),
                                totalCount: dataController.totalCount(),
                                hasKnownLastPage: dataController.hasKnownLastPage()
                            })
                        } else {
                            that.render()
                        }
                    } else {
                        if (!e || "update" !== e.changeType && "updateSelection" !== e.changeType) {
                            that.render()
                        }
                    }
                })
            },
            _getPager: function() {
                var $element = this.element();
                return $element && $element.data("dxPager")
            },
            _renderCore: function() {
                var that = this;
                var $element = that.element().addClass(that.addWidgetPrefix(PAGER_CLASS));
                var pagerOptions = that.option("pager") || {};
                var dataController = that.getController("data");
                var keyboardController = that.getController("keyboardNavigation");
                var options = {
                    maxPagesCount: MAX_PAGES_COUNT,
                    pageIndex: getPageIndex(dataController),
                    pageCount: dataController.pageCount(),
                    pageSize: dataController.pageSize(),
                    showPageSizes: pagerOptions.showPageSizeSelector,
                    showInfo: pagerOptions.showInfo,
                    pagesNavigatorVisible: pagerOptions.visible,
                    showNavigationButtons: pagerOptions.showNavigationButtons,
                    pageSizes: that.getPageSizes(),
                    totalCount: dataController.totalCount(),
                    hasKnownLastPage: dataController.hasKnownLastPage(),
                    pageIndexChanged: function(pageIndex) {
                        if (dataController.pageIndex() !== pageIndex - 1) {
                            setTimeout(function() {
                                dataController.pageIndex(pageIndex - 1)
                            })
                        }
                    },
                    pageSizeChanged: function(pageSize) {
                        setTimeout(function() {
                            dataController.pageSize(pageSize)
                        })
                    },
                    onKeyDown: function(e) {
                        return keyboardController && keyboardController.executeAction("onKeyDown", e)
                    },
                    useLegacyKeyboardNavigation: this.option("useLegacyKeyboardNavigation"),
                    useKeyboard: this.option("keyboardNavigation.enabled")
                };
                if ((0, _type.isDefined)(pagerOptions.infoText)) {
                    options.infoText = pagerOptions.infoText
                }
                that._createComponent($element, _pager2.default, options)
            },
            getPageSizes: function() {
                var that = this;
                var dataController = that.getController("data");
                var pagerOptions = that.option("pager");
                var allowedPageSizes = pagerOptions && pagerOptions.allowedPageSizes;
                var pageSize = dataController.pageSize();
                if (!(0, _type.isDefined)(that._pageSizes) || (0, _array.inArray)(pageSize, that._pageSizes) === -1) {
                    that._pageSizes = [];
                    if (pagerOptions) {
                        if (Array.isArray(allowedPageSizes)) {
                            that._pageSizes = allowedPageSizes
                        } else {
                            if (allowedPageSizes && pageSize > 1) {
                                that._pageSizes = [Math.floor(pageSize / 2), pageSize, 2 * pageSize]
                            }
                        }
                    }
                }
                return that._pageSizes
            },
            isVisible: function() {
                var that = this;
                var dataController = that.getController("data");
                var pagerOptions = that.option("pager");
                var pagerVisible = pagerOptions && pagerOptions.visible;
                var scrolling = that.option("scrolling");
                if (that._isVisible) {
                    return true
                }
                if ("auto" === pagerVisible) {
                    if (scrolling && ("virtual" === scrolling.mode || "infinite" === scrolling.mode)) {
                        pagerVisible = false
                    } else {
                        pagerVisible = dataController.pageCount() > 1 || dataController.isLoaded() && !dataController.hasKnownLastPage()
                    }
                }
                that._isVisible = pagerVisible;
                return pagerVisible
            },
            getHeight: function() {
                return this.getElementHeight()
            },
            optionChanged: function(args) {
                var that = this;
                var name = args.name;
                var isPager = "pager" === name;
                var isPaging = "paging" === name;
                var isDataSource = "dataSource" === name;
                var isScrolling = "scrolling" === name;
                var dataController = that.getController("data");
                if (isPager || isPaging || isScrolling || isDataSource) {
                    args.handled = true;
                    if (dataController.skipProcessingPagingChange(args.fullName)) {
                        return
                    }
                    if (isPager || isPaging) {
                        that._pageSizes = null
                    }
                    if (isPager || isPaging || isScrolling) {
                        that._isVisible = false
                    }
                    if (!isDataSource) {
                        that._invalidate();
                        if ((0, _window.hasWindow)() && isPager && that.component) {
                            that.component.resize()
                        }
                    }
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    pager: {
                        visible: "auto",
                        showPageSizeSelector: false,
                        allowedPageSizes: "auto"
                    }
                }
            },
            views: {
                pagerView: PagerView
            }
        }
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.columns_resizing_reordering.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _drag = __webpack_require__( /*! ../../events/drag */ 69);
        var _drag2 = _interopRequireDefault(_drag);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _swatch_container = __webpack_require__( /*! ../widget/swatch_container */ 157);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLUMNS_SEPARATOR_CLASS = "columns-separator";
        var COLUMNS_SEPARATOR_TRANSPARENT = "columns-separator-transparent";
        var DRAGGING_HEADER_CLASS = "drag-header";
        var CELL_CONTENT_CLASS = "text-content";
        var HEADERS_DRAG_ACTION_CLASS = "drag-action";
        var TRACKER_CLASS = "tracker";
        var HEADERS_DROP_HIGHLIGHT_CLASS = "drop-highlight";
        var BLOCK_SEPARATOR_CLASS = "dx-block-separator";
        var HEADER_ROW_CLASS = "dx-header-row";
        var WIDGET_CLASS = "dx-widget";
        var DRAGGING_COMMAND_CELL_CLASS = "dx-drag-command-cell";
        var MODULE_NAMESPACE = "dxDataGridResizingReordering";
        var COLUMNS_SEPARATOR_TOUCH_TRACKER_WIDTH = 10;
        var DRAGGING_DELTA = 5;
        var COLUMN_OPACITY = .5;
        var allowResizing = function(that) {
            return that.option("allowColumnResizing") || that.getController("columns").isColumnOptionUsed("allowResizing")
        };
        var allowReordering = function(that) {
            return that.option("allowColumnReordering") || that.getController("columns").isColumnOptionUsed("allowReordering")
        };
        var TrackerView = _uiGrid_core2.default.View.inherit({
            _renderCore: function() {
                this.callBase();
                this.element().addClass(this.addWidgetPrefix(TRACKER_CLASS));
                this.hide()
            },
            _unsubscribeFromCallback: function() {
                if (this._positionChanged) {
                    this._tablePositionController.positionChanged.remove(this._positionChanged)
                }
            },
            _subscribeToCallback: function() {
                var that = this;
                that._positionChanged = function(position) {
                    var $element = that.element();
                    if ($element && $element.hasClass(that.addWidgetPrefix(TRACKER_CLASS))) {
                        $element.css({
                            top: position.top
                        });
                        $element.height(position.height)
                    }
                };
                this._tablePositionController.positionChanged.add(that._positionChanged)
            },
            optionChanged: function(args) {
                if ("allowColumnResizing" === args.name) {
                    this._unsubscribeFromCallback();
                    if (args.value) {
                        this._subscribeToCallback();
                        this._invalidate()
                    }
                }
                this.callBase(args)
            },
            init: function() {
                this.callBase();
                this._tablePositionController = this.getController("tablePosition");
                this._subscribeToCallback()
            },
            isVisible: function() {
                return allowResizing(this)
            },
            show: function() {
                this.element().show()
            },
            hide: function() {
                this.element() && this.element().hide()
            },
            setHeight: function(value) {
                this.element().height(value)
            },
            dispose: function() {
                this._unsubscribeFromCallback();
                this.callBase()
            }
        });
        var SeparatorView = _uiGrid_core2.default.View.inherit({
            _renderSeparator: function() {},
            _renderCore: function(options) {
                this.callBase(options);
                this._isShown = true;
                this._renderSeparator();
                this.hide()
            },
            show: function() {
                this._isShown = true
            },
            hide: function() {
                this._isShown = false
            },
            height: function(value) {
                var $element = this.element();
                if ($element) {
                    if (_type2.default.isDefined(value)) {
                        $element.height(value)
                    } else {
                        return $element.height()
                    }
                }
            },
            width: function(value) {
                var $element = this.element();
                if ($element) {
                    if (_type2.default.isDefined(value)) {
                        $element.width(value)
                    } else {
                        return $element.width()
                    }
                }
            }
        });
        var ColumnsSeparatorView = SeparatorView.inherit({
            _renderSeparator: function() {
                this.callBase();
                var $element = this.element();
                $element.addClass(this.addWidgetPrefix(COLUMNS_SEPARATOR_CLASS))
            },
            _subscribeToCallback: function() {
                var that = this;
                var $element;
                that._positionChanged = function(position) {
                    $element = that.element();
                    if ($element) {
                        $element.css({
                            top: position.top
                        });
                        $element.height(position.height)
                    }
                };
                that._tablePositionController.positionChanged.add(that._positionChanged)
            },
            _unsubscribeFromCallback: function() {
                this._positionChanged && this._tablePositionController.positionChanged.remove(this._positionChanged)
            },
            _init: function() {
                this._isTransparent = allowResizing(this);
                if (this.isVisible()) {
                    this._subscribeToCallback()
                }
            },
            isVisible: function() {
                return this.option("showColumnHeaders") && (allowReordering(this) || allowResizing(this))
            },
            optionChanged: function(args) {
                if ("allowColumnResizing" === args.name) {
                    if (args.value) {
                        this._init();
                        this._invalidate();
                        this.hide(true)
                    } else {
                        this._unsubscribeFromCallback();
                        this._isTransparent = allowResizing(this);
                        this.hide(true)
                    }
                }
                this.callBase(args)
            },
            init: function() {
                this.callBase();
                this._tablePositionController = this.getController("tablePosition");
                this._init()
            },
            show: function() {
                var that = this;
                var $element = this.element();
                if ($element && !that._isShown) {
                    if (that._isTransparent) {
                        $element.removeClass(that.addWidgetPrefix(COLUMNS_SEPARATOR_TRANSPARENT))
                    } else {
                        $element.show()
                    }
                }
                this.callBase()
            },
            hide: function(force) {
                var $element = this.element();
                var columnsSeparatorTransparent = this.addWidgetPrefix(COLUMNS_SEPARATOR_TRANSPARENT);
                if ($element && (this._isShown || force)) {
                    if (this._isTransparent) {
                        $element.addClass(columnsSeparatorTransparent);
                        $element.css("left", "");
                        $element.show()
                    } else {
                        if ($element.hasClass(columnsSeparatorTransparent)) {
                            $element.removeClass(columnsSeparatorTransparent)
                        }
                        $element.hide()
                    }
                }
                this.callBase()
            },
            moveByX: function(outerX) {
                var $element = this.element();
                if ($element) {
                    $element.css("left", outerX - this._parentElement().offset().left);
                    this._testPosX = outerX
                }
            },
            changeCursor: function(cursorName) {
                cursorName = _type2.default.isDefined(cursorName) ? cursorName : "";
                var $element = this.element();
                if ($element) {
                    $element.css("cursor", cursorName);
                    this._testCursorName = cursorName
                }
            },
            dispose: function() {
                this._unsubscribeFromCallback();
                this.callBase()
            }
        });
        var BlockSeparatorView = SeparatorView.inherit({
            init: function() {
                var that = this;
                this.callBase();
                this.getController("data").loadingChanged.add(function(isLoading) {
                    if (!isLoading) {
                        that.hide()
                    }
                })
            },
            _renderSeparator: function() {
                this.callBase();
                this.element().addClass(BLOCK_SEPARATOR_CLASS).html("&nbsp;")
            },
            hide: function() {
                var that = this;
                var $parent = this._parentElement();
                var $element = this.element();
                if ($element && this._isShown) {
                    $element.css("display", "none")
                }
                if ($parent && !$parent.children("." + BLOCK_SEPARATOR_CLASS).length) {
                    $parent.prepend(that.element())
                }
                that.callBase()
            },
            isVisible: function() {
                var groupPanelOptions = this.option("groupPanel");
                var columnChooserOptions = this.option("columnChooser");
                return groupPanelOptions && groupPanelOptions.visible || columnChooserOptions && columnChooserOptions.enabled
            },
            show: function(targetLocation) {
                var that = this;
                var $element = this.element();
                var startAnimate = function(toOptions) {
                    _fx2.default.stop($element, true);
                    _fx2.default.animate($element, {
                        type: "slide",
                        from: {
                            width: 0,
                            display: toOptions.display
                        },
                        to: toOptions,
                        duration: 300,
                        easing: "swing"
                    })
                };
                if ($element && !that._isShown) {
                    switch (targetLocation) {
                        case "group":
                            startAnimate({
                                width: "50px",
                                display: "inline-block"
                            });
                            break;
                        case "columnChooser":
                            startAnimate({
                                width: "100%",
                                display: "block"
                            });
                            break;
                        default:
                            $element.css("display", "")
                    }
                }
                that.callBase()
            }
        });
        var DraggingHeaderView = _uiGrid_core2.default.View.inherit({
            _isDragging: false,
            isDragging: function() {
                return this._isDragging
            },
            _getDraggingPanelByPos: function(pos) {
                var that = this;
                var result;
                (0, _iterator.each)(that._dragOptions.draggingPanels, function(index, draggingPanel) {
                    if (draggingPanel) {
                        var boundingRect = draggingPanel.getBoundingRect();
                        if (boundingRect && (void 0 === boundingRect.bottom || pos.y < boundingRect.bottom) && (void 0 === boundingRect.top || pos.y > boundingRect.top) && (void 0 === boundingRect.left || pos.x > boundingRect.left) && (void 0 === boundingRect.right || pos.x < boundingRect.right)) {
                            result = draggingPanel;
                            return false
                        }
                    }
                });
                return result
            },
            _renderCore: function() {
                this.element().addClass(this.addWidgetPrefix(DRAGGING_HEADER_CLASS) + " " + this.addWidgetPrefix(CELL_CONTENT_CLASS) + " " + WIDGET_CLASS).hide()
            },
            _resetTargetColumnOptions: function() {
                var params = this._dropOptions;
                params.targetColumnIndex = -1;
                delete params.targetColumnElement;
                delete params.isLast;
                delete params.posX;
                delete params.posY
            },
            _getVisibleIndexObject: function(rowIndex, visibleIndex) {
                if (_type2.default.isDefined(rowIndex)) {
                    return {
                        columnIndex: visibleIndex,
                        rowIndex: rowIndex
                    }
                }
                return visibleIndex
            },
            dispose: function() {
                var element = this.element();
                this._dragOptions = null;
                element && element.parent().find("." + this.addWidgetPrefix(DRAGGING_HEADER_CLASS)).remove()
            },
            isVisible: function() {
                var columnsController = this.getController("columns");
                var commonColumnSettings = columnsController.getCommonSettings();
                return this.option("showColumnHeaders") && (allowReordering(this) || commonColumnSettings.allowGrouping || commonColumnSettings.allowHiding)
            },
            init: function() {
                var that = this;
                this.callBase();
                this._controller = this.getController("draggingHeader");
                this._columnsResizerViewController = this.getController("columnsResizer");
                this.getController("data").loadingChanged.add(function(isLoading) {
                    var element = that.element();
                    if (!isLoading && element) {
                        element.hide()
                    }
                })
            },
            dragHeader: function(options) {
                var that = this;
                var columnElement = options.columnElement;
                var isCommandColumn = !!options.sourceColumn.type;
                that._isDragging = true;
                that._dragOptions = options;
                that._dropOptions = {
                    sourceIndex: options.index,
                    sourceColumnIndex: that._getVisibleIndexObject(options.rowIndex, options.columnIndex),
                    sourceColumnElement: options.columnElement,
                    sourceLocation: options.sourceLocation
                };
                var document = _dom_adapter2.default.getDocument();
                that._onSelectStart = document.onselectstart;
                document.onselectstart = function() {
                    return false
                };
                that._controller.drag(that._dropOptions);
                that.element().css({
                    textAlign: columnElement && columnElement.css("textAlign"),
                    height: columnElement && (isCommandColumn && columnElement.get(0).clientHeight || columnElement.height()),
                    width: columnElement && (isCommandColumn && columnElement.get(0).clientWidth || columnElement.width()),
                    whiteSpace: columnElement && columnElement.css("whiteSpace")
                }).addClass(that.addWidgetPrefix(HEADERS_DRAG_ACTION_CLASS)).toggleClass(DRAGGING_COMMAND_CELL_CLASS, isCommandColumn).text(isCommandColumn ? "" : options.sourceColumn.caption);
                that.element().appendTo((0, _swatch_container.getSwatchContainer)(columnElement))
            },
            moveHeader: function(args) {
                var e = args.event;
                var that = e.data.that;
                var eventData = (0, _utils.eventData)(e);
                var isResizing = that._columnsResizerViewController ? that._columnsResizerViewController.isResizing() : false;
                var dragOptions = that._dragOptions;
                if (that._isDragging && !isResizing) {
                    var $element = that.element();
                    var moveDeltaX = Math.abs(eventData.x - dragOptions.columnElement.offset().left - dragOptions.deltaX);
                    var moveDeltaY = Math.abs(eventData.y - dragOptions.columnElement.offset().top - dragOptions.deltaY);
                    if ($element.is(":visible") || moveDeltaX > DRAGGING_DELTA || moveDeltaY > DRAGGING_DELTA) {
                        $element.show();
                        var newLeft = eventData.x - dragOptions.deltaX;
                        var newTop = eventData.y - dragOptions.deltaY;
                        $element.css({
                            left: newLeft,
                            top: newTop
                        });
                        that.dockHeader(eventData)
                    }
                    e.preventDefault()
                }
            },
            dockHeader: function(eventData) {
                var that = this;
                var targetDraggingPanel = that._getDraggingPanelByPos(eventData);
                var controller = that._controller;
                var params = that._dropOptions;
                var dragOptions = that._dragOptions;
                if (targetDraggingPanel) {
                    var rtlEnabled = that.option("rtlEnabled");
                    var isVerticalOrientation = "columnChooser" === targetDraggingPanel.getName();
                    var axisName = isVerticalOrientation ? "y" : "x";
                    var targetLocation = targetDraggingPanel.getName();
                    var rowIndex = "headers" === targetLocation ? dragOptions.rowIndex : void 0;
                    var sourceColumn = dragOptions.sourceColumn;
                    var columnElements = targetDraggingPanel.getColumnElements(rowIndex, sourceColumn && sourceColumn.ownerBand) || [];
                    var pointsByTarget = dragOptions.pointsByTarget = dragOptions.pointsByTarget || {};
                    var pointsByColumns = "columnChooser" === targetLocation ? [] : pointsByTarget[targetLocation] || controller._generatePointsByColumns((0, _extend.extend)({}, dragOptions, {
                        targetDraggingPanel: targetDraggingPanel,
                        columns: targetDraggingPanel.getColumns(rowIndex),
                        columnElements: columnElements,
                        isVerticalOrientation: isVerticalOrientation,
                        startColumnIndex: "headers" === targetLocation && (0, _renderer2.default)(columnElements[0]).index()
                    }));
                    pointsByTarget[targetLocation] = pointsByColumns;
                    this._testPointsByColumns = pointsByColumns;
                    params.targetLocation = targetLocation;
                    if (pointsByColumns.length > 0) {
                        for (var i = 0; i < pointsByColumns.length; i++) {
                            var centerPosition = pointsByColumns[i + 1] && (pointsByColumns[i][axisName] + pointsByColumns[i + 1][axisName]) / 2;
                            if (void 0 === centerPosition || (rtlEnabled && "x" === axisName ? eventData[axisName] > centerPosition : eventData[axisName] < centerPosition)) {
                                params.targetColumnIndex = that._getVisibleIndexObject(rowIndex, pointsByColumns[i].columnIndex);
                                if (columnElements[i]) {
                                    params.targetColumnElement = columnElements.eq(i);
                                    params.isLast = false
                                } else {
                                    params.targetColumnElement = columnElements.last();
                                    params.isLast = true
                                }
                                params.posX = pointsByColumns[i].x;
                                params.posY = pointsByColumns[i].y;
                                controller.dock(params);
                                break
                            }
                        }
                    } else {
                        that._resetTargetColumnOptions();
                        controller.dock(params)
                    }
                }
            },
            dropHeader: function(args) {
                var e = args.event;
                var that = e.data.that;
                var controller = that._controller;
                that.element().hide();
                if (controller && that._isDragging) {
                    controller.drop(that._dropOptions)
                }
                that.element().appendTo(that._parentElement());
                that._dragOptions = null;
                that._dropOptions = null;
                that._isDragging = false;
                _dom_adapter2.default.getDocument().onselectstart = that._onSelectStart || null
            }
        });
        var isNextColumnResizingMode = function(that) {
            return "widget" !== that.option("columnResizingMode")
        };
        var ColumnsResizerViewController = _uiGrid_core2.default.ViewController.inherit({
            _isHeadersRowArea: function(posY) {
                if (this._columnHeadersView) {
                    var element = this._columnHeadersView.element();
                    if (element) {
                        var offsetTop = element.offset().top;
                        var headersRowHeight = this._columnHeadersView.getHeadersRowHeight();
                        return posY >= offsetTop && posY <= offsetTop + headersRowHeight
                    }
                }
                return false
            },
            _isRtlParentStyle: function() {
                var _this$_$parentContain;
                return this.option("rtlEnabled") && "rtl" === (null === (_this$_$parentContain = this._$parentContainer) || void 0 === _this$_$parentContain ? void 0 : _this$_$parentContain.parent().css("direction"))
            },
            _pointCreated: function(point, cellsLength, columns) {
                var isNextColumnMode = isNextColumnResizingMode(this);
                var rtlEnabled = this.option("rtlEnabled");
                var isRtlParentStyle = this._isRtlParentStyle();
                var firstPointColumnIndex = !isNextColumnMode && rtlEnabled && !isRtlParentStyle ? 0 : 1;
                if (point.index >= firstPointColumnIndex && point.index < cellsLength + (!isNextColumnMode && (!rtlEnabled || isRtlParentStyle) ? 1 : 0)) {
                    point.columnIndex -= firstPointColumnIndex;
                    var currentColumn = columns[point.columnIndex] || {};
                    var nextColumn = columns[point.columnIndex + 1] || {};
                    return !(isNextColumnMode ? currentColumn.allowResizing && nextColumn.allowResizing : currentColumn.allowResizing)
                }
                return true
            },
            _getTargetPoint: function(pointsByColumns, currentX, deltaX) {
                if (pointsByColumns) {
                    for (var i = 0; i < pointsByColumns.length; i++) {
                        if (pointsByColumns[i].x === pointsByColumns[0].x && pointsByColumns[i + 1] && pointsByColumns[i].x === pointsByColumns[i + 1].x) {
                            continue
                        }
                        if (pointsByColumns[i].x - deltaX <= currentX && currentX <= pointsByColumns[i].x + deltaX) {
                            return pointsByColumns[i]
                        }
                    }
                }
                return null
            },
            _moveSeparator: function(args) {
                var e = args.event;
                var that = e.data;
                var columnsSeparatorWidth = that._columnsSeparatorView.width();
                var isNextColumnMode = isNextColumnResizingMode(that);
                var deltaX = columnsSeparatorWidth / 2;
                var parentOffset = that._$parentContainer.offset();
                var parentOffsetLeft = parentOffset.left;
                var eventData = (0, _utils.eventData)(e);
                var rtlEnabled = that.option("rtlEnabled");
                var isRtlParentStyle = this._isRtlParentStyle();
                if (that._isResizing && that._resizingInfo) {
                    if ((parentOffsetLeft <= eventData.x || !isNextColumnMode && isRtlParentStyle) && (!isNextColumnMode || eventData.x <= parentOffsetLeft + that._$parentContainer.width())) {
                        if (that._updateColumnsWidthIfNeeded(eventData.x)) {
                            var $cell = that._columnHeadersView.getColumnElements().eq(that._resizingInfo.currentColumnIndex);
                            that._columnsSeparatorView.moveByX($cell.offset().left + ((isNextColumnMode || isRtlParentStyle) && rtlEnabled ? 0 : $cell.outerWidth()));
                            that._tablePositionController.update(that._targetPoint.y);
                            e.preventDefault()
                        }
                    }
                } else {
                    if (that._isHeadersRowArea(eventData.y)) {
                        if (that._previousParentOffset) {
                            if (that._previousParentOffset.left !== parentOffset.left || that._previousParentOffset.top !== parentOffset.top) {
                                that.pointsByColumns(null)
                            }
                        }
                        that._targetPoint = that._getTargetPoint(that.pointsByColumns(), eventData.x, columnsSeparatorWidth);
                        that._previousParentOffset = parentOffset;
                        that._isReadyResizing = false;
                        if (that._targetPoint) {
                            that._columnsSeparatorView.changeCursor("col-resize");
                            that._columnsSeparatorView.moveByX(that._targetPoint.x - deltaX);
                            that._tablePositionController.update(that._targetPoint.y);
                            that._isReadyResizing = true;
                            e.preventDefault()
                        } else {
                            that._columnsSeparatorView.changeCursor()
                        }
                    } else {
                        that.pointsByColumns(null);
                        that._isReadyResizing = false;
                        that._columnsSeparatorView.changeCursor()
                    }
                }
            },
            _endResizing: function(args) {
                var e = args.event;
                var that = e.data;
                if (that._isResizing) {
                    that.pointsByColumns(null);
                    that._resizingInfo = null;
                    that._columnsSeparatorView.hide();
                    that._columnsSeparatorView.changeCursor();
                    that._trackerView.hide();
                    that._isReadyResizing = false;
                    that._isResizing = false
                }
            },
            _getNextColumnIndex: function(currentColumnIndex) {
                return currentColumnIndex + 1
            },
            _setupResizingInfo: function(posX) {
                var that = this;
                var currentColumnIndex = that._targetPoint.columnIndex;
                var nextColumnIndex = that._getNextColumnIndex(currentColumnIndex);
                var currentHeader = that._columnHeadersView.getHeaderElement(currentColumnIndex);
                var nextHeader = that._columnHeadersView.getHeaderElement(nextColumnIndex);
                that._resizingInfo = {
                    startPosX: posX,
                    currentColumnIndex: currentColumnIndex,
                    currentColumnWidth: currentHeader && currentHeader.length > 0 ? (0, _position.getBoundingRect)(currentHeader[0]).width : 0,
                    nextColumnIndex: nextColumnIndex,
                    nextColumnWidth: nextHeader && nextHeader.length > 0 ? (0, _position.getBoundingRect)(nextHeader[0]).width : 0
                }
            },
            _startResizing: function(args) {
                var e = args.event;
                var that = e.data;
                var eventData = (0, _utils.eventData)(e);
                var editingController = that.getController("editing");
                var editingMode = that.option("editing.mode");
                var isCellEditing = editingController.isEditing() && ("batch" === editingMode || "cell" === editingMode);
                if ((0, _utils.isTouchEvent)(e)) {
                    if (that._isHeadersRowArea(eventData.y)) {
                        that._targetPoint = that._getTargetPoint(that.pointsByColumns(), eventData.x, COLUMNS_SEPARATOR_TOUCH_TRACKER_WIDTH);
                        if (that._targetPoint) {
                            that._columnsSeparatorView.moveByX(that._targetPoint.x - that._columnsSeparatorView.width() / 2);
                            that._isReadyResizing = true
                        }
                    } else {
                        that._isReadyResizing = false
                    }
                }
                if (that._isReadyResizing && !isCellEditing) {
                    if (that._targetPoint) {
                        that._testColumnIndex = that._targetPoint.columnIndex
                    }
                    that._setupResizingInfo(eventData.x);
                    that._isResizing = true;
                    that._tablePositionController.update(that._targetPoint.y);
                    that._columnsSeparatorView.show();
                    that._trackerView.show();
                    var scrollable = that.component.getScrollable();
                    if (scrollable && that._isRtlParentStyle()) {
                        that._scrollRight = scrollable.$content().width() - scrollable._container().width() - scrollable.scrollLeft()
                    }
                    e.preventDefault();
                    e.stopPropagation()
                }
                if (this.isResizing()) {
                    this.getController("editorFactory").loseFocus()
                }
            },
            _generatePointsByColumns: function() {
                var that = this;
                var columns = that._columnsController ? that._columnsController.getVisibleColumns() : [];
                var cells = that._columnHeadersView.getColumnElements();
                var pointsByColumns = [];
                if (cells && cells.length > 0) {
                    pointsByColumns = _uiGrid_core4.default.getPointsByColumns(cells, function(point) {
                        return that._pointCreated(point, cells.length, columns)
                    })
                }
                that._pointsByColumns = pointsByColumns
            },
            _unsubscribeFromEvents: function() {
                this._moveSeparatorHandler && _events_engine2.default.off(_dom_adapter2.default.getDocument(), (0, _utils.addNamespace)(_pointer2.default.move, MODULE_NAMESPACE), this._moveSeparatorHandler);
                this._startResizingHandler && _events_engine2.default.off(this._$parentContainer, (0, _utils.addNamespace)(_pointer2.default.down, MODULE_NAMESPACE), this._startResizingHandler);
                if (this._endResizingHandler) {
                    _events_engine2.default.off(this._columnsSeparatorView.element(), (0, _utils.addNamespace)(_pointer2.default.up, MODULE_NAMESPACE), this._endResizingHandler);
                    _events_engine2.default.off(_dom_adapter2.default.getDocument(), (0, _utils.addNamespace)(_pointer2.default.up, MODULE_NAMESPACE), this._endResizingHandler)
                }
            },
            _subscribeToEvents: function() {
                this._moveSeparatorHandler = this.createAction(this._moveSeparator);
                this._startResizingHandler = this.createAction(this._startResizing);
                this._endResizingHandler = this.createAction(this._endResizing);
                _events_engine2.default.on(_dom_adapter2.default.getDocument(), (0, _utils.addNamespace)(_pointer2.default.move, MODULE_NAMESPACE), this, this._moveSeparatorHandler);
                _events_engine2.default.on(this._$parentContainer, (0, _utils.addNamespace)(_pointer2.default.down, MODULE_NAMESPACE), this, this._startResizingHandler);
                _events_engine2.default.on(this._columnsSeparatorView.element(), (0, _utils.addNamespace)(_pointer2.default.up, MODULE_NAMESPACE), this, this._endResizingHandler);
                _events_engine2.default.on(_dom_adapter2.default.getDocument(), (0, _utils.addNamespace)(_pointer2.default.up, MODULE_NAMESPACE), this, this._endResizingHandler)
            },
            _updateColumnsWidthIfNeeded: function(posX) {
                var deltaX;
                var needUpdate = false;
                var nextCellWidth;
                var resizingInfo = this._resizingInfo;
                var columnsController = this._columnsController;
                var visibleColumns = columnsController.getVisibleColumns();
                var columnsSeparatorWidth = this._columnsSeparatorView.width();
                var contentWidth = this._rowsView.contentWidth();
                var isNextColumnMode = isNextColumnResizingMode(this);
                var adaptColumnWidthByRatio = isNextColumnMode && this.option("adaptColumnWidthByRatio") && !this.option("columnAutoWidth");
                var minWidth;
                var nextColumn;
                var cellWidth;
                var rtlEnabled = this.option("rtlEnabled");
                var isRtlParentStyle = this._isRtlParentStyle();

                function isPercentWidth(width) {
                    return _type2.default.isString(width) && "%" === width.slice(-1)
                }

                function setColumnWidth(column, columnWidth, contentWidth, adaptColumnWidthByRatio) {
                    if (column) {
                        var oldColumnWidth = column.width;
                        if (oldColumnWidth) {
                            adaptColumnWidthByRatio = isPercentWidth(oldColumnWidth)
                        }
                        if (adaptColumnWidthByRatio) {
                            column && columnsController.columnOption(column.index, "visibleWidth", columnWidth);
                            column && columnsController.columnOption(column.index, "width", (columnWidth / contentWidth * 100).toFixed(3) + "%")
                        } else {
                            column && columnsController.columnOption(column.index, "visibleWidth", null);
                            column && columnsController.columnOption(column.index, "width", columnWidth)
                        }
                    }
                }

                function correctContentWidth(contentWidth, visibleColumns) {
                    var allColumnsHaveWidth = visibleColumns.every(function(column) {
                        return column.width
                    });
                    if (allColumnsHaveWidth) {
                        var totalPercent = visibleColumns.reduce(function(sum, column) {
                            if (isPercentWidth(column.width)) {
                                sum += parseFloat(column.width)
                            }
                            return sum
                        }, 0);
                        if (totalPercent > 100) {
                            contentWidth = contentWidth / totalPercent * 100
                        }
                    }
                    return contentWidth
                }
                deltaX = posX - resizingInfo.startPosX;
                if ((isNextColumnMode || isRtlParentStyle) && rtlEnabled) {
                    deltaX = -deltaX
                }
                cellWidth = resizingInfo.currentColumnWidth + deltaX;
                var column = visibleColumns[resizingInfo.currentColumnIndex];
                minWidth = column && column.minWidth || columnsSeparatorWidth;
                needUpdate = cellWidth >= minWidth;
                if (isNextColumnMode) {
                    nextCellWidth = resizingInfo.nextColumnWidth - deltaX;
                    nextColumn = visibleColumns[resizingInfo.nextColumnIndex];
                    minWidth = nextColumn && nextColumn.minWidth || columnsSeparatorWidth;
                    needUpdate = needUpdate && nextCellWidth >= minWidth
                }
                if (needUpdate) {
                    columnsController.beginUpdate();
                    cellWidth = Math.floor(cellWidth);
                    contentWidth = correctContentWidth(contentWidth, visibleColumns);
                    setColumnWidth(column, cellWidth, contentWidth, adaptColumnWidthByRatio);
                    if (isNextColumnMode) {
                        nextCellWidth = Math.floor(nextCellWidth);
                        setColumnWidth(nextColumn, nextCellWidth, contentWidth, adaptColumnWidthByRatio)
                    } else {
                        var columnWidths = this._columnHeadersView.getColumnWidths();
                        columnWidths[resizingInfo.currentColumnIndex] = cellWidth;
                        var hasScroll = columnWidths.reduce(function(totalWidth, width) {
                            return totalWidth + width
                        }, 0) > this._rowsView.contentWidth();
                        if (!hasScroll) {
                            var lastColumnIndex = _uiGrid_core4.default.getLastResizableColumnIndex(visibleColumns);
                            if (lastColumnIndex >= 0) {
                                columnsController.columnOption(visibleColumns[lastColumnIndex].index, "visibleWidth", "auto")
                            }
                        }
                        for (var i = 0; i < columnWidths.length; i++) {
                            if (visibleColumns[i] && visibleColumns[i] !== column && void 0 === visibleColumns[i].width) {
                                columnsController.columnOption(visibleColumns[i].index, "width", columnWidths[i])
                            }
                        }
                    }
                    columnsController.endUpdate();
                    if (!isNextColumnMode) {
                        this.component.updateDimensions();
                        var scrollable = this.component.getScrollable();
                        if (scrollable && isRtlParentStyle) {
                            var left = scrollable.$content().width() - scrollable._container().width() - this._scrollRight;
                            scrollable.scrollTo({
                                left: left
                            })
                        }
                    }
                }
                return needUpdate
            },
            _subscribeToCallback: function(callback, handler) {
                callback.add(handler);
                this._subscribesToCallbacks.push({
                    callback: callback,
                    handler: handler
                })
            },
            _unsubscribeFromCallbacks: function() {
                for (var i = 0; i < this._subscribesToCallbacks.length; i++) {
                    var subscribe = this._subscribesToCallbacks[i];
                    subscribe.callback.remove(subscribe.handler)
                }
                this._subscribesToCallbacks = []
            },
            _unsubscribes: function() {
                this._unsubscribeFromEvents();
                this._unsubscribeFromCallbacks()
            },
            _init: function() {
                var that = this;
                var generatePointsByColumnsHandler = function() {
                    if (!that._isResizing) {
                        that.pointsByColumns(null)
                    }
                };
                var generatePointsByColumnsScrollHandler = function(offset) {
                    if (that._scrollLeft !== offset.left) {
                        that._scrollLeft = offset.left;
                        that.pointsByColumns(null)
                    }
                };
                that._columnsSeparatorView = that.getView("columnsSeparatorView");
                that._columnHeadersView = that.getView("columnHeadersView");
                that._trackerView = that.getView("trackerView");
                that._rowsView = that.getView("rowsView");
                that._columnsController = that.getController("columns");
                that._tablePositionController = that.getController("tablePosition");
                that._$parentContainer = that.component.$element();
                that._subscribeToCallback(that._columnHeadersView.renderCompleted, generatePointsByColumnsHandler);
                that._subscribeToCallback(that._columnHeadersView.resizeCompleted, generatePointsByColumnsHandler);
                that._subscribeToCallback(that._columnsSeparatorView.renderCompleted, function() {
                    that._unsubscribeFromEvents();
                    that._subscribeToEvents()
                });
                that._subscribeToCallback(that._rowsView.renderCompleted, function() {
                    that._rowsView.scrollChanged.remove(generatePointsByColumnsScrollHandler);
                    that._rowsView.scrollChanged.add(generatePointsByColumnsScrollHandler)
                });
                var previousScrollbarVisibility = 0 !== that._rowsView.getScrollbarWidth();
                var previousTableHeight = 0;
                that._subscribeToCallback(that.getController("tablePosition").positionChanged, function(e) {
                    if (that._isResizing && !that._rowsView.isResizing) {
                        var scrollbarVisibility = 0 !== that._rowsView.getScrollbarWidth();
                        if (previousScrollbarVisibility !== scrollbarVisibility || previousTableHeight && previousTableHeight !== e.height) {
                            previousScrollbarVisibility = scrollbarVisibility;
                            previousTableHeight = e.height;
                            that.component.updateDimensions()
                        } else {
                            that._rowsView.updateFreeSpaceRowHeight()
                        }
                    }
                    previousTableHeight = e.height
                })
            },
            optionChanged: function(args) {
                this.callBase(args);
                if ("allowColumnResizing" === args.name) {
                    if (args.value) {
                        this._init();
                        this._subscribeToEvents()
                    } else {
                        this._unsubscribes()
                    }
                }
            },
            isResizing: function() {
                return this._isResizing
            },
            init: function() {
                this._subscribesToCallbacks = [];
                if (allowResizing(this)) {
                    this._init()
                }
            },
            pointsByColumns: function(value) {
                if (void 0 !== value) {
                    this._pointsByColumns = value
                } else {
                    if (!this._pointsByColumns) {
                        this._generatePointsByColumns()
                    }
                    return this._pointsByColumns
                }
            },
            dispose: function() {
                this._unsubscribes();
                this.callBase()
            }
        });
        var TablePositionViewController = _uiGrid_core2.default.ViewController.inherit({
            update: function(top) {
                var that = this;
                var params = {};
                var $element = that._columnHeadersView.element();
                var offset = $element && $element.offset();
                var offsetTop = offset && offset.top || 0;
                var diffOffsetTop = _type2.default.isDefined(top) ? Math.abs(top - offsetTop) : 0;
                var columnsHeadersHeight = that._columnHeadersView ? that._columnHeadersView.getHeight() : 0;
                var scrollBarWidth = that._rowsView.getScrollbarWidth(true);
                var rowsHeight = that._rowsView ? that._rowsView.height() - scrollBarWidth : 0;
                var columnsResizerController = that.component.getController("columnsResizer");
                var draggingHeaderView = that.component.getView("draggingHeaderView");
                params.height = columnsHeadersHeight;
                var isDraggingOrResizing = false !== columnsResizerController.isResizing() || draggingHeaderView.isDragging();
                if (isDraggingOrResizing) {
                    params.height += rowsHeight - diffOffsetTop
                }
                if (null !== top && $element && $element.length) {
                    params.top = $element[0].offsetTop + diffOffsetTop
                }
                that.positionChanged.fire(params)
            },
            init: function() {
                var that = this;
                that.callBase();
                that._columnHeadersView = this.getView("columnHeadersView");
                that._rowsView = this.getView("rowsView");
                that._pagerView = this.getView("pagerView");
                that._rowsView.resizeCompleted.add(function() {
                    if (that.option("allowColumnResizing")) {
                        var targetPoint = that.getController("columnsResizer")._targetPoint;
                        that.update(targetPoint ? targetPoint.y : null)
                    }
                })
            },
            ctor: function(component) {
                this.callBase(component);
                this.positionChanged = (0, _callbacks2.default)()
            }
        });
        var DraggingHeaderViewController = _uiGrid_core2.default.ViewController.inherit({
            _generatePointsByColumns: function(options) {
                var that = this;
                return _uiGrid_core4.default.getPointsByColumns(options.columnElements, function(point) {
                    return that._pointCreated(point, options.columns, options.targetDraggingPanel.getName(), options.sourceColumn)
                }, options.isVerticalOrientation, options.startColumnIndex)
            },
            _pointCreated: function(point, columns, location, sourceColumn) {
                var targetColumn = columns[point.columnIndex];
                var prevColumn = columns[point.columnIndex - 1];
                switch (location) {
                    case "columnChooser":
                        return true;
                    case "headers":
                        return sourceColumn && !sourceColumn.allowReordering || (!targetColumn || !targetColumn.allowReordering) && (!prevColumn || !prevColumn.allowReordering);
                    default:
                        return 0 === columns.length
                }
            },
            _subscribeToEvents: function(draggingHeader, draggingPanels) {
                var that = this;
                (0, _iterator.each)(draggingPanels, function(_, draggingPanel) {
                    if (draggingPanel) {
                        var columns;
                        var rowCount = draggingPanel.getRowCount ? draggingPanel.getRowCount() : 1;
                        var nameDraggingPanel = draggingPanel.getName();
                        var subscribeToEvents = function(index, columnElement) {
                            if (!columnElement) {
                                return
                            }
                            var $columnElement = (0, _renderer2.default)(columnElement);
                            var column = columns[index];
                            if (draggingPanel.allowDragging(column, nameDraggingPanel, draggingPanels)) {
                                $columnElement.addClass(that.addWidgetPrefix(HEADERS_DRAG_ACTION_CLASS));
                                _events_engine2.default.on($columnElement, (0, _utils.addNamespace)(_drag2.default.start, MODULE_NAMESPACE), that.createAction(function(args) {
                                    var e = args.event;
                                    var eventData = (0, _utils.eventData)(e);
                                    draggingHeader.dragHeader({
                                        deltaX: eventData.x - (0, _renderer2.default)(e.currentTarget).offset().left,
                                        deltaY: eventData.y - (0, _renderer2.default)(e.currentTarget).offset().top,
                                        sourceColumn: column,
                                        index: column.index,
                                        columnIndex: index,
                                        columnElement: $columnElement,
                                        sourceLocation: nameDraggingPanel,
                                        draggingPanels: draggingPanels,
                                        rowIndex: that._columnsController.getRowIndex(column.index, true)
                                    })
                                }));
                                _events_engine2.default.on($columnElement, (0, _utils.addNamespace)(_drag2.default.move, MODULE_NAMESPACE), {
                                    that: draggingHeader
                                }, that.createAction(draggingHeader.moveHeader));
                                _events_engine2.default.on($columnElement, (0, _utils.addNamespace)(_drag2.default.end, MODULE_NAMESPACE), {
                                    that: draggingHeader
                                }, that.createAction(draggingHeader.dropHeader))
                            }
                        };
                        for (var i = 0; i < rowCount; i++) {
                            var columnElements = draggingPanel.getColumnElements(i) || [];
                            if (columnElements.length) {
                                columns = draggingPanel.getColumns(i) || [];
                                (0, _iterator.each)(columnElements, subscribeToEvents)
                            }
                        }
                    }
                })
            },
            _unsubscribeFromEvents: function(draggingHeader, draggingPanels) {
                var that = this;
                (0, _iterator.each)(draggingPanels, function(_, draggingPanel) {
                    if (draggingPanel) {
                        var columnElements = draggingPanel.getColumnElements() || [];
                        (0, _iterator.each)(columnElements, function(index, columnElement) {
                            var $columnElement = (0, _renderer2.default)(columnElement);
                            _events_engine2.default.off($columnElement, (0, _utils.addNamespace)(_drag2.default.start, MODULE_NAMESPACE));
                            _events_engine2.default.off($columnElement, (0, _utils.addNamespace)(_drag2.default.move, MODULE_NAMESPACE));
                            _events_engine2.default.off($columnElement, (0, _utils.addNamespace)(_drag2.default.end, MODULE_NAMESPACE));
                            $columnElement.removeClass(that.addWidgetPrefix(HEADERS_DRAG_ACTION_CLASS))
                        })
                    }
                })
            },
            _getSeparator: function(targetLocation) {
                return "headers" === targetLocation ? this._columnsSeparatorView : this._blockSeparatorView
            },
            hideSeparators: function(type) {
                var blockSeparator = this._blockSeparatorView;
                var columnsSeparator = this._columnsSeparatorView;
                this._animationColumnIndex = null;
                blockSeparator && blockSeparator.hide();
                "block" !== type && columnsSeparator && columnsSeparator.hide()
            },
            init: function() {
                var that = this;
                that.callBase();
                that._columnsController = that.getController("columns");
                that._columnHeadersView = that.getView("columnHeadersView");
                that._columnsSeparatorView = that.getView("columnsSeparatorView");
                that._draggingHeaderView = that.getView("draggingHeaderView");
                that._rowsView = that.getView("rowsView");
                that._blockSeparatorView = that.getView("blockSeparatorView");
                that._headerPanelView = that.getView("headerPanel");
                that._columnChooserView = that.getView("columnChooserView");
                var subscribeToEvents = function() {
                    if (that._draggingHeaderView) {
                        var draggingPanels = [that._columnChooserView, that._columnHeadersView, that._headerPanelView];
                        that._unsubscribeFromEvents(that._draggingHeaderView, draggingPanels);
                        that._subscribeToEvents(that._draggingHeaderView, draggingPanels)
                    }
                };
                that._columnHeadersView.renderCompleted.add(subscribeToEvents);
                that._headerPanelView && that._headerPanelView.renderCompleted.add(subscribeToEvents);
                that._columnChooserView && that._columnChooserView.renderCompleted.add(subscribeToEvents)
            },
            allowDrop: function(parameters) {
                return this._columnsController.allowMoveColumn(parameters.sourceColumnIndex, parameters.targetColumnIndex, parameters.sourceLocation, parameters.targetLocation)
            },
            drag: function(parameters) {
                var sourceIndex = parameters.sourceIndex;
                var sourceLocation = parameters.sourceLocation;
                var sourceColumnElement = parameters.sourceColumnElement;
                var headersView = this._columnHeadersView;
                var rowsView = this._rowsView;
                if (sourceColumnElement) {
                    sourceColumnElement.css({
                        opacity: COLUMN_OPACITY
                    });
                    if ("headers" === sourceLocation) {
                        headersView && headersView.setRowsOpacity(sourceIndex, COLUMN_OPACITY);
                        rowsView && rowsView.setRowsOpacity(sourceIndex, COLUMN_OPACITY)
                    }
                }
            },
            dock: function(parameters) {
                var that = this;
                var targetColumnIndex = _type2.default.isObject(parameters.targetColumnIndex) ? parameters.targetColumnIndex.columnIndex : parameters.targetColumnIndex;
                var sourceLocation = parameters.sourceLocation;
                var targetLocation = parameters.targetLocation;
                var separator = that._getSeparator(targetLocation);
                var hasTargetVisibleIndex = targetColumnIndex >= 0;
                var showSeparator = function() {
                    if (that._animationColumnIndex !== targetColumnIndex) {
                        that.hideSeparators();
                        separator.element()[parameters.isLast ? "insertAfter" : "insertBefore"](parameters.targetColumnElement);
                        that._animationColumnIndex = targetColumnIndex;
                        separator.show(targetLocation)
                    }
                };
                that._columnHeadersView.element().find("." + HEADER_ROW_CLASS).toggleClass(that.addWidgetPrefix(HEADERS_DROP_HIGHLIGHT_CLASS), "headers" !== sourceLocation && "headers" === targetLocation && !hasTargetVisibleIndex);
                if (separator) {
                    if (that.allowDrop(parameters) && hasTargetVisibleIndex) {
                        if ("group" === targetLocation || "columnChooser" === targetLocation) {
                            showSeparator()
                        } else {
                            that.hideSeparators("block");
                            that.getController("tablePosition").update(parameters.posY);
                            separator.moveByX(parameters.posX - separator.width());
                            separator.show()
                        }
                    } else {
                        that.hideSeparators()
                    }
                }
            },
            drop: function(parameters) {
                var sourceColumnElement = parameters.sourceColumnElement;
                if (sourceColumnElement) {
                    sourceColumnElement.css({
                        opacity: ""
                    });
                    this._columnHeadersView.setRowsOpacity(parameters.sourceIndex, "");
                    this._rowsView.setRowsOpacity(parameters.sourceIndex, "");
                    this._columnHeadersView.element().find("." + HEADER_ROW_CLASS).removeClass(this.addWidgetPrefix(HEADERS_DROP_HIGHLIGHT_CLASS))
                }
                if (this.allowDrop(parameters)) {
                    var separator = this._getSeparator(parameters.targetLocation);
                    if (separator) {
                        separator.hide()
                    }
                    this._columnsController.moveColumn(parameters.sourceColumnIndex, parameters.targetColumnIndex, parameters.sourceLocation, parameters.targetLocation)
                }
            },
            dispose: function() {
                if (this._draggingHeaderView) {
                    this._unsubscribeFromEvents(this._draggingHeaderView, [this._columnChooserView, this._columnHeadersView, this._headerPanelView])
                }
            }
        });
        module.exports = {
            views: {
                columnsSeparatorView: ColumnsSeparatorView,
                blockSeparatorView: BlockSeparatorView,
                draggingHeaderView: DraggingHeaderView,
                trackerView: TrackerView
            },
            controllers: {
                draggingHeader: DraggingHeaderViewController,
                tablePosition: TablePositionViewController,
                columnsResizer: ColumnsResizerViewController
            },
            extenders: {
                views: {
                    rowsView: {
                        _needUpdateRowHeight: function(itemCount) {
                            var wordWrapEnabled = this.option("wordWrapEnabled");
                            var columnsResizerController = this.getController("columnsResizer");
                            var isResizing = columnsResizerController.isResizing();
                            return this.callBase.apply(this, arguments) || itemCount > 0 && wordWrapEnabled && isResizing
                        }
                    }
                },
                controllers: {
                    editorFactory: {
                        renderFocusOverlay: function() {
                            if (this.getController("columnsResizer").isResizing()) {
                                return
                            }
                            return this.callBase.apply(this, arguments)
                        }
                    }
                }
            }
        }
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.keyboard_navigation.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);
        var accessibility = _interopRequireWildcard(_accessibility);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _short = __webpack_require__( /*! ../../events/short */ 116);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ROWS_VIEW_CLASS = "rowsview";
        var EDIT_FORM_CLASS = "edit-form";
        var GROUP_FOOTER_CLASS = "group-footer";
        var ROW_CLASS = "dx-row";
        var DATA_ROW_CLASS = "dx-data-row";
        var GROUP_ROW_CLASS = "dx-group-row";
        var HEADER_ROW_CLASS = "dx-header-row";
        var EDIT_FORM_ITEM_CLASS = "edit-form-item";
        var MASTER_DETAIL_ROW_CLASS = "dx-master-detail-row";
        var FREESPACE_ROW_CLASS = "dx-freespace-row";
        var VIRTUAL_ROW_CLASS = "dx-virtual-row";
        var MASTER_DETAIL_CELL_CLASS = "dx-master-detail-cell";
        var EDITOR_CELL_CLASS = "dx-editor-cell";
        var EDIT_ROW_CLASS = "dx-edit-row";
        var DROPDOWN_EDITOR_OVERLAY_CLASS = "dx-dropdowneditor-overlay";
        var COMMAND_EXPAND_CLASS = "dx-command-expand";
        var COMMAND_SELECT_CLASS = "dx-command-select";
        var COMMAND_CELL_SELECTOR = "[class^=dx-command]";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var DATEBOX_WIDGET_NAME = "dxDateBox";
        var FOCUS_STATE_CLASS = "dx-state-focused";
        var WIDGET_CLASS = "dx-widget";
        var FAST_EDITING_DELETE_KEY = "delete";
        var INTERACTIVE_ELEMENTS_SELECTOR = "input:not([type='hidden']), textarea, a, select, [tabindex]";
        var EDIT_MODE_ROW = "row";
        var EDIT_MODE_FORM = "form";
        var EDIT_MODE_BATCH = "batch";
        var EDIT_MODE_CELL = "cell";
        var FOCUS_TYPE_ROW = "row";
        var FOCUS_TYPE_CELL = "cell";
        var COLUMN_HEADERS_VIEW = "columnHeadersView";

        function isGroupRow($row) {
            return $row && $row.hasClass(GROUP_ROW_CLASS)
        }

        function isDetailRow($row) {
            return $row && $row.hasClass(MASTER_DETAIL_ROW_CLASS)
        }

        function isDataRow($row) {
            return $row && !isGroupRow($row) && !isDetailRow($row)
        }

        function isNotFocusedRow($row) {
            return !$row || $row.hasClass(FREESPACE_ROW_CLASS) || $row.hasClass(VIRTUAL_ROW_CLASS)
        }

        function isCellElement($element) {
            return $element.length && "TD" === $element[0].tagName
        }

        function isEditorCell(that, $cell) {
            return !that._isRowEditMode() && $cell && !$cell.hasClass(COMMAND_SELECT_CLASS) && $cell.hasClass(EDITOR_CELL_CLASS)
        }

        function isElementDefined($element) {
            return (0, _type.isDefined)($element) && $element.length > 0
        }

        function isMobile() {
            return "desktop" !== _devices2.default.current().deviceType
        }

        function isCellInHeaderRow($cell) {
            return !!$cell.parent(".".concat(HEADER_ROW_CLASS)).length
        }
        var KeyboardNavigationController = _uiGrid_core2.default.ViewController.inherit({
            init: function() {
                var that = this;
                if (that.isKeyboardEnabled()) {
                    accessibility.subscribeVisibilityChange();
                    that._dataController = that.getController("data");
                    that._selectionController = that.getController("selection");
                    that._editingController = that.getController("editing");
                    that._headerPanel = that.getView("headerPanel");
                    that._columnsController = that.getController("columns");
                    that._fastEditingStarted = false;
                    that._focusedCellPosition = {};
                    that._canceledCellPosition = null;
                    that.getController("editorFactory").focused.add(function($element) {
                        that.setupFocusedView();
                        if (that._isNeedScroll) {
                            if ($element.is(":visible") && that._focusedView && that._focusedView.getScrollable) {
                                that._focusedView._scrollToElement($element);
                                that._isNeedScroll = false
                            }
                        }
                    });
                    that._initViewHandlers();
                    that._initDocumentHandlers();
                    that.createAction("onKeyDown")
                }
            },
            _initViewHandlers: function() {
                var that = this;
                var pointerEventAction = that.createAction(that._pointerEventHandler);
                var rowsView = that.getView("rowsView");
                rowsView.renderCompleted.add(function(e) {
                    var $rowsView = rowsView.element();
                    var isFullUpdate = !e || "refresh" === e.changeType;
                    var isFocusedViewCorrect = that._focusedView && that._focusedView.name === rowsView.name;
                    var needUpdateFocus = false;
                    var isAppend = e && ("append" === e.changeType || "prepend" === e.changeType);
                    var clickSelector = ".".concat(ROW_CLASS, " > td, .").concat(ROW_CLASS);
                    var $focusedElement = (0, _renderer2.default)(":focus");
                    var isFocusedElementCorrect = !$focusedElement.length || $focusedElement.closest($rowsView).length || _browser2.default.msie && $focusedElement.is("body");
                    var pointerEventName = !isMobile() ? _pointer2.default.down : _click2.default.name;
                    _events_engine2.default.off($rowsView, eventUtils.addNamespace(pointerEventName, "dxDataGridKeyboardNavigation"), pointerEventAction);
                    _events_engine2.default.on($rowsView, eventUtils.addNamespace(pointerEventName, "dxDataGridKeyboardNavigation"), clickSelector, pointerEventAction);
                    that._initKeyDownHandler($rowsView, function(e) {
                        return that._keyDownHandler(e)
                    });
                    that._setRowsViewAttributes($rowsView);
                    if (isFocusedViewCorrect && isFocusedElementCorrect) {
                        needUpdateFocus = that._isNeedFocus ? !isAppend : that._isHiddenFocus && isFullUpdate;
                        needUpdateFocus && that._updateFocus(true)
                    }
                })
            },
            _initDocumentHandlers: function() {
                var that = this;
                var document = _dom_adapter2.default.getDocument();
                that._documentClickHandler = that.createAction(function(e) {
                    var $target = (0, _renderer2.default)(e.event.target);
                    var isCurrentRowsViewClick = that._isEventInCurrentGrid(e.event) && $target.closest(".".concat(that.addWidgetPrefix(ROWS_VIEW_CLASS))).length;
                    var isEditorOverlay = $target.closest(".".concat(DROPDOWN_EDITOR_OVERLAY_CLASS)).length;
                    if (!isCurrentRowsViewClick && !isEditorOverlay) {
                        that._resetFocusedCell()
                    }
                });
                _events_engine2.default.on(document, eventUtils.addNamespace(_pointer2.default.down, "dxDataGridKeyboardNavigation"), that._documentClickHandler)
            },
            _setRowsViewAttributes: function($rowsView) {
                var isGridEmpty = !this._dataController.getVisibleRows().length;
                if (isGridEmpty) {
                    this._applyTabIndexToElement($rowsView)
                }
            },
            _initKeyDownHandler: function(element, handler) {
                _short.keyboard.off(this._keyDownListener);
                this._keyDownListener = _short.keyboard.on(element, null, handler)
            },
            dispose: function() {
                this.callBase();
                this._focusedView = null;
                _short.keyboard.off(this._keyDownListener);
                _events_engine2.default.off(_dom_adapter2.default.getDocument(), eventUtils.addNamespace(_pointer2.default.down, "dxDataGridKeyboardNavigation"), this._documentClickHandler);
                accessibility.unsubscribeVisibilityChange()
            },
            optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "keyboardNavigation":
                    case "useLegacyKeyboardNavigation":
                        args.handled = true;
                        break;
                    default:
                        that.callBase(args)
                }
            },
            isRowFocusType: function() {
                return this.focusType === FOCUS_TYPE_ROW
            },
            isCellFocusType: function() {
                return this.focusType === FOCUS_TYPE_CELL
            },
            setRowFocusType: function() {
                if (this.option("focusedRowEnabled")) {
                    this.focusType = FOCUS_TYPE_ROW
                }
            },
            setCellFocusType: function() {
                this.focusType = FOCUS_TYPE_CELL
            },
            _keyDownHandler: function(e) {
                var isEditing = this._editingController.isEditing();
                var needStopPropagation = true;
                var originalEvent = e.originalEvent;
                var isHandled = this._processOnKeyDown(e);
                if (originalEvent.isDefaultPrevented()) {
                    return
                }
                this._isNeedFocus = true;
                this._isNeedScroll = true;
                this._updateFocusedCellPositionByTarget(originalEvent.target);
                if (!isHandled) {
                    switch (e.keyName) {
                        case "leftArrow":
                        case "rightArrow":
                            this._leftRightKeysHandler(e, isEditing);
                            break;
                        case "upArrow":
                        case "downArrow":
                            if (e.ctrl) {
                                accessibility.selectView("rowsView", this, originalEvent)
                            } else {
                                this._upDownKeysHandler(e, isEditing)
                            }
                            break;
                        case "pageUp":
                        case "pageDown":
                            this._pageUpDownKeyHandler(e);
                            break;
                        case "space":
                            this._spaceKeyHandler(e, isEditing);
                            break;
                        case "A":
                            if (e.ctrl) {
                                this._ctrlAKeyHandler(e, isEditing)
                            } else {
                                this._beginFastEditing(e.originalEvent)
                            }
                            break;
                        case "tab":
                            this._tabKeyHandler(e, isEditing);
                            break;
                        case "enter":
                            this._enterKeyHandler(e, isEditing);
                            break;
                        case "escape":
                            this._escapeKeyHandler(e, isEditing);
                            break;
                        case "F":
                            if (e.ctrl) {
                                this._ctrlFKeyHandler(e)
                            } else {
                                this._beginFastEditing(e.originalEvent)
                            }
                            break;
                        case "F2":
                            this._f2KeyHandler();
                            break;
                        case "del":
                        case "backspace":
                            if (this._isFastEditingAllowed() && !this._isFastEditingStarted()) {
                                this._beginFastEditing(originalEvent, true)
                            }
                            break;
                        default:
                            if (!this._beginFastEditing(originalEvent)) {
                                this._isNeedFocus = false;
                                this._isNeedScroll = false;
                                needStopPropagation = false
                            }
                    }
                    if (needStopPropagation) {
                        originalEvent.stopPropagation()
                    }
                }
            },
            _processOnKeyDown: function(eventArgs) {
                var originalEvent = eventArgs.originalEvent;
                var args = {
                    handled: false,
                    event: originalEvent
                };
                this.executeAction("onKeyDown", args);
                eventArgs.ctrl = originalEvent.ctrlKey;
                eventArgs.alt = originalEvent.altKey;
                eventArgs.shift = originalEvent.shiftKey;
                return !!args.handled
            },
            _closeEditCell: function() {
                var _this = this;
                setTimeout(function() {
                    _this._editingController.closeEditCell()
                })
            },
            _leftRightKeysHandler: function(eventArgs, isEditing) {
                var rowIndex = this.getVisibleRowIndex();
                var $event = eventArgs.originalEvent;
                var $row = this._focusedView && this._focusedView.getRow(rowIndex);
                var directionCode = this._getDirectionCodeByKey(eventArgs.keyName);
                var isEditingNavigationMode = this._isFastEditingStarted();
                var allowNavigate = (!isEditing || isEditingNavigationMode) && isDataRow($row);
                if (allowNavigate) {
                    this.setCellFocusType();
                    isEditingNavigationMode && this._closeEditCell();
                    var $cell = this._getNextCell(directionCode);
                    if (isElementDefined($cell)) {
                        this._arrowKeysHandlerFocusCell($event, $cell)
                    }
                    $event && $event.preventDefault()
                }
            },
            _upDownKeysHandler: function(eventArgs, isEditing) {
                var rowIndex = this.getVisibleRowIndex();
                var $row = this._focusedView && this._focusedView.getRow(rowIndex);
                var $event = eventArgs.originalEvent;
                var isUpArrow = "upArrow" === eventArgs.keyName;
                var dataSource = this._dataController.dataSource();
                var isEditingNavigationMode = this._isFastEditingStarted();
                var allowNavigate = (!isEditing || isEditingNavigationMode) && $row && !isDetailRow($row);
                if (allowNavigate) {
                    isEditingNavigationMode && this._closeEditCell();
                    if (!this._navigateNextCell($event, eventArgs.keyName)) {
                        if (this._isVirtualScrolling() && isUpArrow && dataSource && !dataSource.isLoading()) {
                            var rowHeight = $row.outerHeight();
                            rowIndex = this._focusedCellPosition.rowIndex - 1;
                            this._scrollBy(-rowHeight, rowIndex, $event)
                        }
                    }
                    $event && $event.preventDefault()
                }
            },
            _pageUpDownKeyHandler: function(eventArgs) {
                var pageIndex = this._dataController.pageIndex();
                var pageCount = this._dataController.pageCount();
                var pagingEnabled = this.option("paging.enabled");
                var isPageUp = "pageUp" === eventArgs.keyName;
                var pageStep = isPageUp ? -1 : 1;
                var scrollable = this.getView("rowsView").getScrollable();
                if (pagingEnabled && !this._isVirtualScrolling()) {
                    if ((isPageUp ? pageIndex > 0 : pageIndex < pageCount - 1) && !this._isVirtualScrolling()) {
                        this._dataController.pageIndex(pageIndex + pageStep);
                        eventArgs.originalEvent.preventDefault()
                    }
                } else {
                    if (scrollable && scrollable._container().height() < scrollable.$content().height()) {
                        this._scrollBy(scrollable._container().height() * pageStep);
                        eventArgs.originalEvent.preventDefault()
                    }
                }
            },
            _spaceKeyHandler: function(eventArgs, isEditing) {
                var rowIndex = this.getVisibleRowIndex();
                var $target = (0, _renderer2.default)(eventArgs.originalEvent && eventArgs.originalEvent.target);
                if (this.option("selection") && "none" !== this.option("selection").mode && !isEditing) {
                    var isFocusedRowElement = "row" === this._getElementType($target) && this.isRowFocusType() && isDataRow($target);
                    var isFocusedSelectionCell = $target.hasClass(COMMAND_SELECT_CLASS);
                    if (isFocusedSelectionCell && "onClick" === this.option("selection.showCheckBoxesMode")) {
                        this._selectionController.startSelectionWithCheckboxes()
                    }
                    if (isFocusedRowElement || $target.parent().hasClass(DATA_ROW_CLASS) || $target.hasClass(this.addWidgetPrefix(ROWS_VIEW_CLASS))) {
                        this._selectionController.changeItemSelection(rowIndex, {
                            shift: eventArgs.shift,
                            control: eventArgs.ctrl
                        });
                        eventArgs.originalEvent.preventDefault()
                    }
                } else {
                    this._beginFastEditing(eventArgs.originalEvent)
                }
            },
            _ctrlAKeyHandler: function(eventArgs, isEditing) {
                if (!isEditing && eventArgs.ctrl && !eventArgs.alt && "multiple" === this.option("selection.mode") && this.option("selection.allowSelectAll")) {
                    this._selectionController.selectAll();
                    eventArgs.originalEvent.preventDefault()
                }
            },
            _tabKeyHandler: function(eventArgs, isEditing) {
                var editingOptions = this.option("editing");
                var direction = eventArgs.shift ? "previous" : "next";
                var isOriginalHandlerRequired = !eventArgs.shift && this._isLastValidCell(this._focusedCellPosition) || eventArgs.shift && this._isFirstValidCell(this._focusedCellPosition);
                var eventTarget = eventArgs.originalEvent.target;
                var focusedViewElement = this._focusedView && this._focusedView.element();
                if (this._handleTabKeyOnMasterDetailCell(eventTarget, direction)) {
                    return
                }(0, _renderer2.default)(focusedViewElement).addClass(FOCUS_STATE_CLASS);
                if (editingOptions && eventTarget && !isOriginalHandlerRequired) {
                    if ((0, _renderer2.default)(eventTarget).hasClass(this.addWidgetPrefix(ROWS_VIEW_CLASS))) {
                        this._resetFocusedCell()
                    }
                    if (isEditing) {
                        if (!this._editingCellTabHandler(eventArgs, direction)) {
                            return
                        }
                    } else {
                        if (this._targetCellTabHandler(eventArgs, direction)) {
                            isOriginalHandlerRequired = true
                        }
                    }
                }
                if (isOriginalHandlerRequired) {
                    this.getController("editorFactory").loseFocus();
                    if (this._editingController.isEditing() && !this._isRowEditMode()) {
                        this._resetFocusedCell();
                        this._editingController.closeEditCell()
                    }
                } else {
                    eventArgs.originalEvent.preventDefault()
                }
            },
            _editingCellTabHandler: function(eventArgs, direction) {
                var eventTarget = eventArgs.originalEvent.target;
                var $cell = this._getCellElementFromTarget(eventTarget);
                var isEditingAllowed;
                var $event = eventArgs.originalEvent;
                var elementType = this._getElementType(eventTarget);
                if ($cell.is(COMMAND_CELL_SELECTOR)) {
                    return !this._targetCellTabHandler(eventArgs, direction)
                }
                this._updateFocusedCellPosition($cell);
                var nextCellInfo = this._getNextCellByTabKey($event, direction, elementType);
                $cell = nextCellInfo.$cell;
                if (!$cell || this._handleTabKeyOnMasterDetailCell($cell, direction)) {
                    return false
                }
                var column = this._columnsController.getVisibleColumns()[this.getView("rowsView").getCellIndex($cell)];
                var row = this._dataController.items()[this._getRowIndex($cell && $cell.parent())];
                if (column.allowEditing) {
                    var _isDataRow = !row || "data" === row.rowType;
                    isEditingAllowed = this._editingController.allowUpdating({
                        row: row
                    }) ? _isDataRow : row && row.isNewRow
                }
                if (!isEditingAllowed) {
                    this._closeEditCell()
                }
                if (this._focusCell($cell, !nextCellInfo.isHighlighted)) {
                    if (!this._isRowEditMode() && isEditingAllowed) {
                        this._editingController.editCell(this.getVisibleRowIndex(), this._focusedCellPosition.columnIndex)
                    } else {
                        this._focusInteractiveElement($cell, eventArgs.shift)
                    }
                }
                return true
            },
            _targetCellTabHandler: function(eventArgs, direction) {
                var $event = eventArgs.originalEvent;
                var eventTarget = $event.target;
                var $cell = this._getCellElementFromTarget(eventTarget);
                var $lastInteractiveElement = this._getInteractiveElement($cell, !eventArgs.shift);
                var isOriginalHandlerRequired = false;
                var elementType;
                if (!isEditorCell(this, $cell) && $lastInteractiveElement.length && eventTarget !== $lastInteractiveElement.get(0)) {
                    isOriginalHandlerRequired = true
                } else {
                    if (void 0 === this._focusedCellPosition.rowIndex && (0, _renderer2.default)(eventTarget).hasClass(ROW_CLASS)) {
                        this._updateFocusedCellPosition($cell)
                    }
                    elementType = this._getElementType(eventTarget);
                    if (this.isRowFocusType()) {
                        this.setCellFocusType();
                        if ("row" === elementType && isDataRow((0, _renderer2.default)(eventTarget))) {
                            eventTarget = this.getFirstValidCellInRow((0, _renderer2.default)(eventTarget));
                            elementType = this._getElementType(eventTarget)
                        }
                    }
                    var nextCellInfo = this._getNextCellByTabKey($event, direction, elementType);
                    $cell = nextCellInfo.$cell;
                    if (!$cell) {
                        return false
                    }
                    $cell = this._checkNewLineTransition($event, $cell);
                    if (!$cell) {
                        return false
                    }
                    this._focusCell($cell, !nextCellInfo.isHighlighted);
                    if (!isEditorCell(this, $cell)) {
                        this._focusInteractiveElement($cell, eventArgs.shift)
                    }
                }
                return isOriginalHandlerRequired
            },
            _getNextCellByTabKey: function($event, direction, elementType) {
                var $cell = this._getNextCell(direction, elementType);
                var args = $cell && this._fireFocusedCellChanging($event, $cell, true);
                if (!args || args.cancel) {
                    return {}
                }
                if (args.$newCellElement) {
                    $cell = args.$newCellElement
                }
                return {
                    $cell: $cell,
                    isHighlighted: args.isHighlighted
                }
            },
            _checkNewLineTransition: function($event, $cell) {
                var rowIndex = this.getVisibleRowIndex();
                var $row = $cell.parent();
                if (rowIndex !== this._getRowIndex($row)) {
                    var cellPosition = this._getCellPosition($cell);
                    var args = this._fireFocusedRowChanging($event, $row);
                    if (args.cancel) {
                        return
                    }
                    if (args.rowIndexChanged) {
                        this.setFocusedColumnIndex(cellPosition.columnIndex);
                        $cell = this._getFocusedCell()
                    }
                }
                return $cell
            },
            _enterKeyHandler: function(eventArgs, isEditing) {
                var $cell = this._getFocusedCell();
                var rowIndex = this.getVisibleRowIndex();
                var $row = this._focusedView && this._focusedView.getRow(rowIndex);
                if (this.option("grouping.allowCollapsing") && isGroupRow($row) || this.option("masterDetail.enabled") && $cell && $cell.hasClass(COMMAND_EXPAND_CLASS)) {
                    var key = this._dataController.getKeyByRowIndex(rowIndex);
                    var item = this._dataController.items()[rowIndex];
                    if (void 0 !== key && item && item.data && !item.data.isContinuation) {
                        this._dataController.changeRowExpand(key)
                    }
                } else {
                    this._processEnterKeyForDataCell(eventArgs, isEditing)
                }
            },
            _processEnterKeyForDataCell: function(eventArgs, isEditing) {
                var direction = this._getEnterKeyDirection(eventArgs);
                var allowEditingOnEnterKey = this._allowEditingOnEnterKey();
                if (isEditing || !allowEditingOnEnterKey && direction) {
                    this._handleEnterKeyEditingCell(eventArgs.originalEvent);
                    if ("next" === direction || "previous" === direction) {
                        this._targetCellTabHandler(eventArgs, direction)
                    } else {
                        if ("upArrow" === direction || "downArrow" === direction) {
                            this._navigateNextCell(eventArgs.originalEvent, direction)
                        }
                    }
                } else {
                    if (allowEditingOnEnterKey) {
                        this._startEditing(eventArgs)
                    }
                }
            },
            _getEnterKeyDirection: function(eventArgs) {
                var enterKeyDirection = this.option("keyboardNavigation.enterKeyDirection");
                var isShift = eventArgs.shift;
                if ("column" === enterKeyDirection) {
                    return isShift ? "upArrow" : "downArrow"
                }
                if ("row" === enterKeyDirection) {
                    return isShift ? "previous" : "next"
                }
            },
            _handleEnterKeyEditingCell: function(event) {
                var target = event.target;
                var $cell = this._getCellElementFromTarget(target);
                var isRowEditMode = this._isRowEditMode();
                this._updateFocusedCellPosition($cell);
                if (isRowEditMode) {
                    this._focusEditFormCell($cell);
                    setTimeout(this._editingController.saveEditData.bind(this._editingController))
                } else {
                    _events_engine2.default.trigger((0, _renderer2.default)(target), "change");
                    this._closeEditCell();
                    event.preventDefault()
                }
            },
            _escapeKeyHandler: function(eventArgs, isEditing) {
                var $cell = this._getCellElementFromTarget(eventArgs.originalEvent.target);
                if (isEditing) {
                    this._updateFocusedCellPosition($cell);
                    if (!this._isRowEditMode()) {
                        if ("cell" === this._editingController.getEditMode()) {
                            this._editingController.cancelEditData()
                        } else {
                            this._editingController.closeEditCell()
                        }
                    } else {
                        this._focusEditFormCell($cell);
                        this._editingController.cancelEditData()
                    }
                    eventArgs.originalEvent.preventDefault()
                }
            },
            _ctrlFKeyHandler: function(eventArgs) {
                if (this.option("searchPanel.visible")) {
                    var searchTextEditor = this._headerPanel.getSearchTextEditor();
                    if (searchTextEditor) {
                        searchTextEditor.focus();
                        eventArgs.originalEvent.preventDefault()
                    }
                }
            },
            _f2KeyHandler: function() {
                var isEditing = this._editingController.isEditing();
                var rowIndex = this.getVisibleRowIndex();
                var $row = this._focusedView && this._focusedView.getRow(rowIndex);
                if (!isEditing && isDataRow($row)) {
                    this._startEditing()
                }
            },
            _navigateNextCell: function($event, keyCode) {
                var $cell = this._getNextCell(keyCode);
                if ($cell && this._isCellValid($cell)) {
                    return this._arrowKeysHandlerFocusCell($event, $cell, true)
                }
                return false
            },
            _arrowKeysHandlerFocusCell: function($event, $cell, upDown) {
                var args = this._fireFocusChangingEvents($event, $cell, upDown, true);
                $cell = args.$newCellElement;
                if (!args.cancel && this._isCellValid($cell)) {
                    this._focus($cell, !args.isHighlighted);
                    return true
                }
                return false
            },
            _beginFastEditing: function(originalEvent, isDeleting) {
                if (!this._isFastEditingAllowed() || originalEvent.altKey || originalEvent.ctrlKey || this._editingController.isEditing()) {
                    return false
                }
                if (isDeleting) {
                    this._startEditing(originalEvent, FAST_EDITING_DELETE_KEY)
                } else {
                    var key = originalEvent.key;
                    var keyCode = originalEvent.keyCode || originalEvent.which;
                    var fastEditingKey = key || keyCode && String.fromCharCode(keyCode);
                    if (fastEditingKey && (1 === fastEditingKey.length || fastEditingKey === FAST_EDITING_DELETE_KEY)) {
                        this._startEditing(originalEvent, fastEditingKey)
                    }
                }
                return true
            },
            _pointerEventHandler: function(e) {
                var event = e.event || e;
                var $target = (0, _renderer2.default)(event.currentTarget);
                var rowsView = this.getView("rowsView");
                var focusedViewElement = rowsView && rowsView.element();
                var $parent = $target.parent();
                var isEditingRow = $parent.hasClass(EDIT_ROW_CLASS);
                var isInteractiveElement = (0, _renderer2.default)(event.target).is(INTERACTIVE_ELEMENTS_SELECTOR);
                if (this._isEventInCurrentGrid(event) && this._isCellValid($target, !isInteractiveElement)) {
                    $target = this._isInsideEditForm($target) ? (0, _renderer2.default)(event.target) : $target;
                    this._focusView();
                    (0, _renderer2.default)(focusedViewElement).removeClass(FOCUS_STATE_CLASS);
                    if ($parent.hasClass(FREESPACE_ROW_CLASS)) {
                        this._updateFocusedCellPosition($target);
                        this._applyTabIndexToElement(this._focusedView.element());
                        this._focusedView.focus()
                    } else {
                        if (!this._isMasterDetailCell($target) && !isEditingRow) {
                            this._clickTargetCellHandler(event, $target)
                        } else {
                            this._updateFocusedCellPosition($target)
                        }
                    }
                } else {
                    if ($target.is("td")) {
                        this._resetFocusedCell()
                    }
                }
            },
            _clickTargetCellHandler: function(event, $cell) {
                var columnIndex = this.getView("rowsView").getCellIndex($cell);
                var column = this._columnsController.getVisibleColumns()[columnIndex];
                var isCellEditMode = this._isCellEditMode();
                this.setCellFocusType();
                var args = this._fireFocusChangingEvents(event, $cell, true);
                $cell = args.$newCellElement;
                if (!args.cancel) {
                    if (args.resetFocusedRow) {
                        this.getController("focus")._resetFocusedRow();
                        return
                    }
                    if (args.rowIndexChanged) {
                        $cell = this._getFocusedCell()
                    }
                    if (!args.isHighlighted && !isCellEditMode) {
                        this.setRowFocusType()
                    }
                    this._updateFocusedCellPosition($cell);
                    if (this._allowRowUpdating() && isCellEditMode && column && column.allowEditing) {
                        this._isNeedFocus = false;
                        this._isHiddenFocus = false
                    } else {
                        var $target = event && (0, _renderer2.default)(event.target).closest(INTERACTIVE_ELEMENTS_SELECTOR + ", td");
                        var isInteractiveTarget = $target && $target.not($cell).is(INTERACTIVE_ELEMENTS_SELECTOR);
                        var isEditor = !column.command && $cell.hasClass(EDITOR_CELL_CLASS);
                        var isDisabled = !isEditor && (!args.isHighlighted || isInteractiveTarget);
                        this._focus($cell, isDisabled, isInteractiveTarget)
                    }
                } else {
                    this.setRowFocusType();
                    this.setFocusedRowIndex(args.prevRowIndex);
                    $cell = this._getFocusedCell();
                    if (this._editingController.isEditing() && isCellEditMode) {
                        this._editingController.closeEditCell()
                    }
                }
            },
            _allowRowUpdating: function() {
                var rowIndex = this.getVisibleRowIndex();
                var row = this._dataController.items()[rowIndex];
                return this._editingController.allowUpdating({
                    row: row
                }, "click")
            },
            focus: function(element) {
                var activeElementSelector;
                var focusedRowEnabled = this.option("focusedRowEnabled");
                var isHighlighted = isCellElement((0, _renderer2.default)(element));
                if (!element) {
                    activeElementSelector = ".dx-datagrid-rowsview .dx-row[tabindex]";
                    if (!focusedRowEnabled) {
                        activeElementSelector += ", .dx-datagrid-rowsview .dx-row > td[tabindex]"
                    }
                    element = this.component.$element().find(activeElementSelector).first()
                }
                element && this._focusElement((0, _renderer2.default)(element), isHighlighted)
            },
            getFocusedView: function() {
                return this._focusedView
            },
            setupFocusedView: function() {
                if (this.isKeyboardEnabled() && !(0, _type.isDefined)(this._focusedView)) {
                    this._focusView()
                }
            },
            _focusElement: function($element, isHighlighted) {
                var rowsViewElement = (0, _renderer2.default)(this._getRowsViewElement());
                var $focusedView = $element.closest(rowsViewElement);
                var isRowFocusType = this.isRowFocusType();
                var args = {};
                if (!$focusedView.length || isCellElement($element) && !this._isCellValid($element)) {
                    return
                }
                this._focusView();
                this._isNeedFocus = true;
                this._isNeedScroll = true;
                if (isCellElement($element) || isGroupRow($element)) {
                    this.setCellFocusType();
                    args = this._fireFocusChangingEvents(null, $element, false, isHighlighted);
                    $element = args.$newCellElement;
                    if (isRowFocusType && !args.isHighlighted) {
                        this.setRowFocusType()
                    }
                }
                this._focus($element, !args.isHighlighted);
                this._focusInteractiveElement($element)
            },
            _getFocusedViewByElement: function($element) {
                var view = this.getFocusedView();
                var $view = view && (0, _renderer2.default)(view.element());
                return $element && 0 !== $element.closest($view).length
            },
            _focusView: function() {
                this._focusedView = this.getView("rowsView")
            },
            _focusInteractiveElement: function($cell, isLast) {
                if (!$cell) {
                    return
                }
                var $focusedElement = this._getInteractiveElement($cell, isLast);
                this._testInteractiveElement = $focusedElement;
                (0, _uiGrid_core3.focusAndSelectElement)(this, $focusedElement)
            },
            _focus: function($cell, disableFocus, isInteractiveElement) {
                var $row = $cell && !$cell.hasClass(ROW_CLASS) ? $cell.closest(".".concat(ROW_CLASS)) : $cell;
                if ($row && isNotFocusedRow($row)) {
                    return
                }
                var focusedView = this._focusedView;
                var $focusViewElement = focusedView && focusedView.element();
                var $focusElement;
                this._isHiddenFocus = disableFocus;
                if (isGroupRow($row) || this.isRowFocusType()) {
                    $focusElement = $row;
                    if (focusedView) {
                        this.setFocusedRowIndex(this._getRowIndex($row))
                    }
                } else {
                    if (isCellElement($cell)) {
                        $focusElement = $cell;
                        this._updateFocusedCellPosition($cell)
                    }
                }
                if ($focusElement) {
                    if ($focusViewElement) {
                        $focusViewElement.find(".dx-row[tabIndex], .dx-row > td[tabindex]").not($focusElement).removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr("tabIndex")
                    }
                    _events_engine2.default.one($focusElement, "blur", function(e) {
                        if (e.relatedTarget) {
                            $focusElement.removeClass(CELL_FOCUS_DISABLED_CLASS)
                        }
                    });
                    if (!isInteractiveElement) {
                        this._applyTabIndexToElement($focusElement);
                        _events_engine2.default.trigger($focusElement, "focus")
                    }
                    if (disableFocus) {
                        $focusElement.addClass(CELL_FOCUS_DISABLED_CLASS)
                    } else {
                        this.getController("editorFactory").focus($focusElement)
                    }
                }
            },
            _updateFocus: function(isRenderView) {
                var that = this;
                setTimeout(function() {
                    var $cell = that._getFocusedCell();
                    var isEditing = that.getController("editing").isEditing();
                    if ($cell && !(that._isMasterDetailCell($cell) && !that._isRowEditMode())) {
                        if (that._hasSkipRow($cell.parent())) {
                            var direction = that._focusedCellPosition && that._focusedCellPosition.rowIndex > 0 ? "upArrow" : "downArrow";
                            $cell = that._getNextCell(direction)
                        }
                        if (isElementDefined($cell)) {
                            if (isRenderView && !isEditing && that._checkCellOverlapped($cell)) {
                                return
                            }
                            if ($cell.is("td") || $cell.hasClass(that.addWidgetPrefix(EDIT_FORM_ITEM_CLASS))) {
                                var isCommandCell = $cell.is(COMMAND_CELL_SELECTOR);
                                if (!isCommandCell && that.getController("editorFactory").focus()) {
                                    that._focus($cell)
                                } else {
                                    if (that._isCellEditMode()) {
                                        that._focus($cell, that._isHiddenFocus)
                                    } else {
                                        if (that._isHiddenFocus) {
                                            that._focus($cell, true)
                                        }
                                    }
                                }
                                if (isEditing) {
                                    that._focusInteractiveElement.bind(that)($cell)
                                }
                            } else {
                                _events_engine2.default.trigger($cell, "focus")
                            }
                        }
                    }
                })
            },
            _checkCellOverlapped: function($cell) {
                var cellOffset = $cell.offset();
                var hasScrollable = this.component.getScrollable && this.component.getScrollable();
                var isOverlapped = false;
                if (hasScrollable) {
                    if (cellOffset.left < 0) {
                        isOverlapped = $cell.width() + cellOffset.left <= 0
                    } else {
                        if (cellOffset.top < 0) {
                            isOverlapped = $cell.height() + cellOffset.top <= 0
                        }
                    }
                }
                return isOverlapped
            },
            _getFocusedCell: function() {
                return (0, _renderer2.default)(this._getCell(this._focusedCellPosition))
            },
            _updateFocusedCellPositionByTarget: function(target) {
                var _this$_focusedCellPos;
                var elementType = this._getElementType(target);
                if ("row" === elementType && (0, _type.isDefined)(null === (_this$_focusedCellPos = this._focusedCellPosition) || void 0 === _this$_focusedCellPos ? void 0 : _this$_focusedCellPos.columnIndex)) {
                    var $row = (0, _renderer2.default)(target);
                    this._focusedView && isGroupRow($row) && this.setFocusedRowIndex(this._getRowIndex($row))
                } else {
                    this._updateFocusedCellPosition(this._getCellElementFromTarget(target))
                }
            },
            _updateFocusedCellPosition: function($cell, direction) {
                var position = this._getCellPosition($cell, direction);
                if (position) {
                    if (!$cell.length || position.rowIndex >= 0 && position.columnIndex >= 0) {
                        this.setFocusedCellPosition(position.rowIndex, position.columnIndex)
                    }
                }
                return position
            },
            _getCellPosition: function($cell, direction) {
                var that = this;
                var columnIndex;
                var $row = isElementDefined($cell) && $cell.closest("tr");
                var rowsView = this.getView("rowsView");
                if (isElementDefined($row)) {
                    var rowIndex = that._getRowIndex($row);
                    columnIndex = rowsView.getCellIndex($cell, rowIndex);
                    if (direction) {
                        columnIndex = "previous" === direction ? columnIndex - 1 : columnIndex + 1;
                        columnIndex = that._applyColumnIndexBoundaries(columnIndex)
                    }
                    return {
                        rowIndex: rowIndex,
                        columnIndex: columnIndex
                    }
                }
            },
            _focusCell: function($cell, isDisabled) {
                if (this._isCellValid($cell)) {
                    this._focus($cell, isDisabled);
                    return true
                }
            },
            _focusEditFormCell: function($cell) {
                if ($cell.hasClass(MASTER_DETAIL_CELL_CLASS)) {
                    this.getController("editorFactory").focus($cell, true)
                }
            },
            _resetFocusedCell: function() {
                var that = this;
                var $cell = that._getFocusedCell();
                $cell && $cell.removeAttr("tabIndex");
                that._focusedView && that._focusedView.renderFocusState && that._focusedView.renderFocusState();
                that._isNeedFocus = false;
                that._isNeedScroll = false;
                that._focusedCellPosition = {}
            },
            restoreFocusableElement: function(rowIndex, $event) {
                var that = this;
                var args;
                var $rowElement;
                var isUpArrow = (0, _type.isDefined)(rowIndex);
                var rowsView = that.getView("rowsView");
                var $rowsViewElement = rowsView.element();
                var columnIndex = that._focusedCellPosition.columnIndex;
                var rowIndexOffset = that._dataController.getRowIndexOffset();
                rowIndex = isUpArrow ? rowIndex : rowsView.getTopVisibleItemIndex() + rowIndexOffset;
                if (!isUpArrow) {
                    that.getController("editorFactory").loseFocus();
                    that._applyTabIndexToElement($rowsViewElement);
                    _events_engine2.default.trigger($rowsViewElement, "focus")
                } else {
                    $rowElement = rowsView.getRow(rowIndex - rowIndexOffset);
                    args = that._fireFocusedRowChanging($event, $rowElement);
                    if (!args.cancel && args.rowIndexChanged) {
                        rowIndex = args.newRowIndex
                    }
                }
                if (!isUpArrow || !args.cancel) {
                    that.setFocusedCellPosition(rowIndex, columnIndex)
                }
                isUpArrow && that._updateFocus()
            },
            _getNewPositionByCode: function(cellPosition, elementType, code) {
                var columnIndex = cellPosition.columnIndex;
                var rowIndex = cellPosition.rowIndex;
                var visibleColumnsCount;
                if (void 0 === cellPosition.rowIndex && "next" === code) {
                    return {
                        columnIndex: 0,
                        rowIndex: 0
                    }
                }
                switch (code) {
                    case "nextInRow":
                    case "next":
                        visibleColumnsCount = this._getVisibleColumnCount();
                        if (columnIndex < visibleColumnsCount - 1 && !this._isLastValidCell({
                                columnIndex: columnIndex,
                                rowIndex: rowIndex
                            }) && "row" !== elementType) {
                            columnIndex++
                        } else {
                            if (!this._isLastRow(rowIndex) && "next" === code) {
                                columnIndex = 0;
                                rowIndex++
                            }
                        }
                        break;
                    case "previousInRow":
                    case "previous":
                        if (columnIndex > 0 && !this._isFirstValidCell({
                                columnIndex: columnIndex,
                                rowIndex: rowIndex
                            }) && "row" !== elementType) {
                            columnIndex--
                        } else {
                            if (rowIndex > 0 && "previous" === code) {
                                rowIndex--;
                                visibleColumnsCount = this._getVisibleColumnCount();
                                columnIndex = visibleColumnsCount - 1
                            }
                        }
                        break;
                    case "upArrow":
                        rowIndex = rowIndex > 0 ? rowIndex - 1 : rowIndex;
                        break;
                    case "downArrow":
                        rowIndex = !this._isLastRow(rowIndex) ? rowIndex + 1 : rowIndex
                }
                return {
                    columnIndex: columnIndex,
                    rowIndex: rowIndex
                }
            },
            setFocusedCellPosition: function(rowIndex, columnIndex) {
                this.setFocusedRowIndex(rowIndex);
                this.setFocusedColumnIndex(columnIndex)
            },
            setFocusedRowIndex: function(rowIndex) {
                if (!this._focusedCellPosition) {
                    this._focusedCellPosition = {}
                }
                this._focusedCellPosition.rowIndex = rowIndex
            },
            setFocusedColumnIndex: function(columnIndex) {
                if (!this._focusedCellPosition) {
                    this._focusedCellPosition = {}
                }
                this._focusedCellPosition.columnIndex = columnIndex
            },
            getVisibleRowIndex: function() {
                if (this._focusedCellPosition) {
                    if (!this._focusedCellPosition.rowIndex) {
                        return this._focusedCellPosition.rowIndex
                    }
                    return this._focusedCellPosition.rowIndex - this._dataController.getRowIndexOffset()
                }
                return null
            },
            getVisibleColumnIndex: function() {
                if (this._focusedCellPosition) {
                    return (0, _type.isDefined)(this._focusedCellPosition.columnIndex) ? this._focusedCellPosition.columnIndex : -1
                }
                return -1
            },
            getFocusedColumnIndex: function() {
                return this._focusedCellPosition ? this._focusedCellPosition.columnIndex : null
            },
            _applyColumnIndexBoundaries: function(columnIndex) {
                var visibleColumnsCount = this._getVisibleColumnCount();
                if (columnIndex < 0) {
                    columnIndex = 0
                } else {
                    if (columnIndex >= visibleColumnsCount) {
                        columnIndex = visibleColumnsCount - 1
                    }
                }
                return columnIndex
            },
            _isCellByPositionValid: function(cellPosition) {
                var $cell = (0, _renderer2.default)(this._getCell(cellPosition));
                return this._isCellValid($cell)
            },
            _isLastRow: function(rowIndex) {
                if (this._isVirtualScrolling()) {
                    return rowIndex >= this._dataController.totalItemsCount() - 1
                }
                return rowIndex === this.getController("data").items().length - 1
            },
            _isFirstValidCell: function(cellPosition) {
                var isFirstValidCell = false;
                if (0 === cellPosition.rowIndex && cellPosition.columnIndex >= 0) {
                    isFirstValidCell = isFirstValidCell || !this._haveValidCellBeforePosition(cellPosition)
                }
                return isFirstValidCell
            },
            _haveValidCellBeforePosition: function(cellPosition) {
                var columnIndex = cellPosition.columnIndex;
                var hasValidCells = false;
                while (columnIndex > 0 && !hasValidCells) {
                    var checkingPosition = {
                        columnIndex: --columnIndex,
                        rowIndex: cellPosition.rowIndex
                    };
                    hasValidCells = this._isCellByPositionValid(checkingPosition)
                }
                return hasValidCells
            },
            _isLastValidCell: function(cellPosition) {
                var nextColumnIndex = cellPosition.columnIndex >= 0 ? cellPosition.columnIndex + 1 : 0;
                var rowIndex = cellPosition.rowIndex;
                var checkingPosition = {
                    columnIndex: nextColumnIndex,
                    rowIndex: rowIndex
                };
                var visibleRows = this.getController("data").getVisibleRows();
                var row = visibleRows && visibleRows[rowIndex];
                var isLastRow = this._isLastRow(rowIndex);
                if (!isLastRow) {
                    return false
                }
                if (row && "group" === row.rowType && cellPosition.columnIndex > 0) {
                    return true
                }
                if (cellPosition.columnIndex === this._getVisibleColumnCount() - 1) {
                    return true
                }
                if (this._isCellByPositionValid(checkingPosition)) {
                    return false
                }
                return this._isLastValidCell(checkingPosition)
            },
            _isCellValid: function($cell, isClick) {
                if (isElementDefined($cell) && this._columnsController) {
                    var rowsView = this.getView("rowsView");
                    var $row = $cell.parent();
                    var visibleColumns = this._columnsController.getVisibleColumns();
                    var columnIndex = rowsView.getCellIndex($cell);
                    var column = visibleColumns[columnIndex];
                    var visibleColumnCount = this._getVisibleColumnCount();
                    var editingController = this._editingController;
                    var isMasterDetailRow = isDetailRow($row);
                    var isShowWhenGrouped = column && column.showWhenGrouped;
                    var isDataCell = column && !$cell.hasClass(COMMAND_EXPAND_CLASS) && isDataRow($row);
                    var isValidGroupSpaceColumn = function() {
                        return !isMasterDetailRow && column && (!(0, _type.isDefined)(column.groupIndex) || isShowWhenGrouped && isDataCell) || parseInt($cell.attr("colspan")) > 1
                    };
                    if (this._isMasterDetailCell($cell)) {
                        return true
                    }
                    if (visibleColumnCount > columnIndex && isValidGroupSpaceColumn()) {
                        var rowItems = this._dataController.items();
                        var visibleRowIndex = rowsView.getRowIndex($row);
                        var row = rowItems[visibleRowIndex];
                        var isCellEditing = editingController && this._isCellEditMode() && editingController.isEditing();
                        var isRowEditingInCurrentRow = editingController && editingController.isEditRow(visibleRowIndex);
                        var isEditing = isRowEditingInCurrentRow || isCellEditing;
                        if (column.command) {
                            if (this._isLegacyNavigation()) {
                                return !isEditing && "expand" === column.command
                            }
                            if (isCellEditing) {
                                return !column.command
                            }
                            if (isRowEditingInCurrentRow) {
                                return "select" !== column.command
                            }
                            return !isEditing
                        }
                        if (isCellEditing && row && "data" !== row.rowType) {
                            return false
                        }
                        return !isEditing || column.allowEditing || isClick
                    }
                }
            },
            getFirstValidCellInRow: function($row, columnIndex) {
                var that = this;
                var $cells = $row.find("> td");
                var $cell;
                var $result;
                columnIndex = columnIndex || 0;
                for (var i = columnIndex; i < $cells.length; ++i) {
                    $cell = $cells.eq(i);
                    if (that._isCellValid($cell)) {
                        $result = $cell;
                        break
                    }
                }
                return $result
            },
            _getNextCell: function(keyCode, elementType, cellPosition) {
                var focusedCellPosition = cellPosition || this._focusedCellPosition;
                var isRowFocusType = this.isRowFocusType();
                var includeCommandCells = isRowFocusType || (0, _array.inArray)(keyCode, ["next", "previous"]) > -1;
                var isLastCellOnDirection = "previous" === keyCode ? this._isFirstValidCell(focusedCellPosition) : this._isLastValidCell(focusedCellPosition);
                var $cell;
                var $row;
                if (this._focusedView && focusedCellPosition) {
                    var newFocusedCellPosition = this._getNewPositionByCode(focusedCellPosition, elementType, keyCode);
                    $cell = (0, _renderer2.default)(this._getCell(newFocusedCellPosition));
                    if (isElementDefined($cell) && !this._isCellValid($cell) && this._isCellInRow(newFocusedCellPosition, includeCommandCells) && !isLastCellOnDirection) {
                        if (isRowFocusType) {
                            $cell = this.getFirstValidCellInRow($cell.parent(), newFocusedCellPosition.columnIndex)
                        } else {
                            $cell = this._getNextCell(keyCode, "cell", newFocusedCellPosition)
                        }
                    }
                    $row = isElementDefined($cell) && $cell.parent();
                    if (this._hasSkipRow($row)) {
                        var rowIndex = this._getRowIndex($row);
                        if (!this._isLastRow(rowIndex)) {
                            $cell = this._getNextCell(keyCode, "row", {
                                columnIndex: focusedCellPosition.columnIndex,
                                rowIndex: rowIndex
                            })
                        } else {
                            return null
                        }
                    }
                    return isElementDefined($cell) ? $cell : null
                }
                return null
            },
            _startEditing: function(eventArgs, fastEditingKey) {
                var focusedCellPosition = this._focusedCellPosition;
                var rowIndex = this.getVisibleRowIndex();
                var row = this._dataController.items()[rowIndex];
                var column = this._columnsController.getVisibleColumns()[focusedCellPosition.columnIndex];
                if (this._isAllowEditing(row, column)) {
                    if (this._isRowEditMode()) {
                        this._editingController.editRow(rowIndex)
                    } else {
                        if (focusedCellPosition) {
                            this._startEditingCell(eventArgs, fastEditingKey)
                        }
                    }
                }
            },
            _isAllowEditing: function(row, column) {
                return this.getController("editing").allowUpdating({
                    row: row
                }) && column && column.allowEditing
            },
            _startEditingCell: function(eventArgs, fastEditingKey) {
                var that = this;
                var rowIndex = this.getVisibleRowIndex();
                var colIndex = this._focusedCellPosition.columnIndex;
                this._fastEditingStarted = (0, _type.isDefined)(fastEditingKey);
                var deferred = this._editingController.editCell(rowIndex, colIndex);
                if (this._isFastEditingStarted()) {
                    if (true === deferred) {
                        that._editingCellHandler(eventArgs, fastEditingKey)
                    } else {
                        if (deferred && deferred.done) {
                            var editorValue = fastEditingKey !== FAST_EDITING_DELETE_KEY ? fastEditingKey : "";
                            deferred.done(function() {
                                return that._editingCellHandler(eventArgs, editorValue)
                            })
                        }
                    }
                }
            },
            _editingCellHandler: function(eventArgs, editorValue) {
                var $input = this._getFocusedCell().find(".dx-texteditor-input").eq(0);
                var keyDownEvent = eventUtils.createEvent(eventArgs, {
                    type: "keydown",
                    target: $input.get(0)
                });
                var keyPressEvent = eventUtils.createEvent(eventArgs, {
                    type: "keypress",
                    target: $input.get(0)
                });
                var inputEvent = eventUtils.createEvent(eventArgs, {
                    type: "input",
                    target: $input.get(0)
                });
                _events_engine2.default.trigger($input, keyDownEvent);
                if (!keyDownEvent.isDefaultPrevented()) {
                    _events_engine2.default.trigger($input, keyPressEvent);
                    if (!keyPressEvent.isDefaultPrevented()) {
                        var timeout = _browser2.default.mozilla ? 25 : 0;
                        setTimeout(function() {
                            $input.val(editorValue);
                            var $widgetContainer = $input.closest(".".concat(WIDGET_CLASS));
                            _events_engine2.default.off($widgetContainer, "focusout");
                            _events_engine2.default.one($widgetContainer, "focusout", function() {
                                _events_engine2.default.trigger($input, "change")
                            });
                            _events_engine2.default.trigger($input, inputEvent)
                        }, timeout)
                    }
                }
            },
            _fireFocusChangingEvents: function($event, $cell, fireRowEvent, isHighlighted) {
                var args = {};
                var cellPosition = this._getCellPosition($cell) || {};
                if (this.isCellFocusType()) {
                    args = this._fireFocusedCellChanging($event, $cell, isHighlighted);
                    if (!args.cancel) {
                        cellPosition.columnIndex = args.newColumnIndex;
                        cellPosition.rowIndex = args.newRowIndex;
                        isHighlighted = args.isHighlighted;
                        $cell = (0, _renderer2.default)(this._getCell(cellPosition))
                    }
                }
                if (!args.cancel && fireRowEvent && $cell) {
                    args = this._fireFocusedRowChanging($event, $cell.parent());
                    if (!args.cancel) {
                        cellPosition.rowIndex = args.newRowIndex;
                        args.isHighlighted = isHighlighted
                    }
                }
                args.$newCellElement = (0, _renderer2.default)(this._getCell(cellPosition));
                if (!args.$newCellElement.length) {
                    args.$newCellElement = $cell
                }
                return args
            },
            _fireFocusedCellChanging: function($event, $cellElement, isHighlighted) {
                var that = this;
                var prevCellIndex = that.option("focusedColumnIndex");
                var prevRowIndex = that.option("focusedRowIndex");
                var cellPosition = that._getCellPosition($cellElement);
                var columnIndex = cellPosition ? cellPosition.columnIndex : -1;
                var rowIndex = cellPosition ? cellPosition.rowIndex : -1;
                var args = {
                    cellElement: $cellElement,
                    prevColumnIndex: prevCellIndex,
                    prevRowIndex: prevRowIndex,
                    newColumnIndex: columnIndex,
                    newRowIndex: rowIndex,
                    rows: that.getController("data").getVisibleRows(),
                    columns: that.getController("columns").getVisibleColumns(),
                    event: $event,
                    isHighlighted: isHighlighted || false,
                    cancel: false
                };
                this._canceledCellPosition = null;
                that.executeAction("onFocusedCellChanging", args);
                if (args.newColumnIndex !== columnIndex || args.newRowIndex !== rowIndex) {
                    args.$newCellElement = (0, _renderer2.default)(this._getCell({
                        columnIndex: args.newColumnIndex,
                        rowIndex: args.newRowIndex
                    }))
                }
                if (args.cancel) {
                    this._canceledCellPosition = {
                        rowIndex: rowIndex,
                        columnIndex: columnIndex
                    }
                }
                return args
            },
            _fireFocusedCellChanged: function($cellElement, prevCellIndex, prevRowIndex) {
                var that = this;
                var dataController = that.getController("data");
                var columnIndex = that.getView("rowsView").getCellIndex($cellElement);
                var rowIndex = this._getRowIndex($cellElement && $cellElement.parent());
                var localRowIndex = Math.min(rowIndex - dataController.getRowIndexOffset(), dataController.items().length - 1);
                var isEditingCell = that.getController("editing").isEditCell(localRowIndex, columnIndex);
                var row = dataController.items()[localRowIndex];
                if (!isEditingCell && (prevCellIndex !== columnIndex || prevRowIndex !== rowIndex)) {
                    dataController = that.getController("data");
                    that.executeAction("onFocusedCellChanged", {
                        cellElement: $cellElement,
                        columnIndex: columnIndex,
                        rowIndex: rowIndex,
                        row: row,
                        column: that.getController("columns").getVisibleColumns()[columnIndex]
                    })
                }
            },
            _fireFocusedRowChanging: function(eventArgs, $newFocusedRow) {
                var newRowIndex = this._getRowIndex($newFocusedRow);
                var dataController = this.getController("data");
                var prevFocusedRowIndex = this.option("focusedRowIndex");
                var loadingOperationTypes = dataController.loadingOperationTypes();
                var args = {
                    rowElement: $newFocusedRow,
                    prevRowIndex: prevFocusedRowIndex,
                    newRowIndex: newRowIndex,
                    event: eventArgs,
                    rows: this.getController("data").getVisibleRows(),
                    cancel: false
                };
                if (!dataController || dataController.isLoading() && (loadingOperationTypes.reload || loadingOperationTypes.paging)) {
                    args.cancel = true;
                    return args
                }
                if (this.option("focusedRowEnabled")) {
                    this.executeAction("onFocusedRowChanging", args);
                    if (!args.cancel && args.newRowIndex !== newRowIndex) {
                        args.resetFocusedRow = args.newRowIndex < 0;
                        if (!args.resetFocusedRow) {
                            this.setFocusedRowIndex(args.newRowIndex)
                        }
                        args.rowIndexChanged = true
                    }
                }
                return args
            },
            _fireFocusedRowChanged: function($rowElement) {
                var row;
                var focusedRowKey = this.option("focusedRowKey");
                var focusController = this.getController("focus");
                var focusedRowIndex = null === focusController || void 0 === focusController ? void 0 : focusController.getFocusedRowIndexByKey(focusedRowKey);
                if (this.option("focusedRowEnabled")) {
                    if (focusedRowIndex >= 0) {
                        var dataController = this.getController("data");
                        row = focusedRowIndex >= 0 && dataController.getVisibleRows()[focusedRowIndex - dataController.getRowIndexOffset()]
                    }
                    this.executeAction("onFocusedRowChanged", {
                        rowElement: $rowElement,
                        rowIndex: focusedRowIndex,
                        row: row
                    })
                }
            },
            _isEventInCurrentGrid: function(event) {
                return (0, _uiGrid_core3.isElementInCurrentGrid)(this, (0, _renderer2.default)(event.target))
            },
            _isRowEditMode: function() {
                var editMode = this.getController("editing").getEditMode();
                return editMode === EDIT_MODE_ROW || editMode === EDIT_MODE_FORM
            },
            _isCellEditMode: function() {
                var editMode = this.getController("editing").getEditMode();
                return editMode === EDIT_MODE_CELL || editMode === EDIT_MODE_BATCH
            },
            _isFastEditingAllowed: function() {
                return this._isCellEditMode() && this.option("keyboardNavigation.editOnKeyPress")
            },
            _getInteractiveElement: function($cell, isLast) {
                var $focusedElement = $cell.find(INTERACTIVE_ELEMENTS_SELECTOR).filter(":visible");
                return isLast ? $focusedElement.last() : $focusedElement.first()
            },
            _applyTabIndexToElement: function($element) {
                var tabIndex = this.option("tabIndex") || 0;
                $element.attr("tabindex", (0, _type.isDefined)(tabIndex) ? tabIndex : 0)
            },
            _getCell: function(cellPosition) {
                if (this._focusedView && this._dataController && cellPosition) {
                    return this._focusedView.getCell({
                        rowIndex: cellPosition.rowIndex - this._dataController.getRowIndexOffset(),
                        columnIndex: cellPosition.columnIndex
                    })
                }
            },
            _getRowIndex: function($row) {
                var rowsView = this.getView("rowsView");
                var rowIndex = rowsView.getRowIndex($row);
                if (rowIndex >= 0) {
                    rowIndex += this.getController("data").getRowIndexOffset()
                }
                return rowIndex
            },
            _hasSkipRow: function($row) {
                var row = $row && $row.get(0);
                return row && ("none" === row.style.display || $row.hasClass(this.addWidgetPrefix(GROUP_FOOTER_CLASS)) || isDetailRow($row) && !$row.hasClass(this.addWidgetPrefix(EDIT_FORM_CLASS)))
            },
            _allowEditingOnEnterKey: function() {
                return "startEdit" === this.option("keyboardNavigation.enterKeyAction")
            },
            _isLegacyNavigation: function() {
                return this.option("useLegacyKeyboardNavigation")
            },
            _getDirectionCodeByKey: function(key) {
                var directionCode;
                if (this.option("rtlEnabled")) {
                    directionCode = "leftArrow" === key ? "nextInRow" : "previousInRow"
                } else {
                    directionCode = "leftArrow" === key ? "previousInRow" : "nextInRow"
                }
                return directionCode
            },
            _isVirtualScrolling: function() {
                var scrollingMode = this.option("scrolling.mode");
                return "virtual" === scrollingMode || "infinite" === scrollingMode
            },
            _scrollBy: function(top, rowIndex, $event) {
                var that = this;
                var scrollable = this.getView("rowsView").getScrollable();
                if (that._focusedCellPosition) {
                    var scrollHandler = function scrollHandler() {
                        scrollable.off("scroll", scrollHandler);
                        setTimeout(that.restoreFocusableElement.bind(that, rowIndex, $event))
                    };
                    scrollable.on("scroll", scrollHandler)
                }
                scrollable.scrollBy({
                    left: 0,
                    top: top
                })
            },
            _isInsideEditForm: function(element) {
                return (0, _renderer2.default)(element).closest("." + this.addWidgetPrefix(EDIT_FORM_CLASS)).length > 0
            },
            _isMasterDetailCell: function(element) {
                var $masterDetailCell = (0, _renderer2.default)(element).closest("." + MASTER_DETAIL_CELL_CLASS);
                var $masterDetailGrid = $masterDetailCell.closest("." + this.getWidgetContainerClass()).parent();
                return $masterDetailCell.length && $masterDetailGrid.is(this.component.$element())
            },
            _processNextCellInMasterDetail: function($nextCell) {
                if (!this._isInsideEditForm($nextCell) && $nextCell) {
                    this._applyTabIndexToElement($nextCell)
                }
            },
            _handleTabKeyOnMasterDetailCell: function(target, direction) {
                if (this._isMasterDetailCell(target)) {
                    this._updateFocusedCellPosition((0, _renderer2.default)(target), direction);
                    var $nextCell = this._getNextCell(direction, "row");
                    this._processNextCellInMasterDetail($nextCell);
                    return true
                }
                return false
            },
            _getElementType: function(target) {
                return (0, _renderer2.default)(target).is("tr") ? "row" : "cell"
            },
            _isFastEditingStarted: function() {
                return this._isFastEditingAllowed() && this._fastEditingStarted
            },
            _getVisibleColumnCount: function() {
                return this.getController("columns").getVisibleColumns().length
            },
            _isCellInRow: function(cellPosition, includeCommandCells) {
                var columnIndex = cellPosition.columnIndex;
                var visibleColumnsCount = this._getVisibleColumnCount();
                return includeCommandCells ? columnIndex >= 0 && columnIndex <= visibleColumnsCount - 1 : columnIndex > 0 && columnIndex < visibleColumnsCount - 1
            },
            _getCellElementFromTarget: function(target) {
                var elementType = this._getElementType(target);
                var $targetElement = (0, _renderer2.default)(target);
                var $cell;
                if ("cell" === elementType) {
                    $cell = $targetElement.closest(".".concat(ROW_CLASS, " > td"))
                } else {
                    $cell = $targetElement.children().not("." + COMMAND_EXPAND_CLASS).first()
                }
                return $cell
            },
            _getRowsViewElement: function() {
                var rowsView = this.getView("rowsView");
                return rowsView && rowsView.element()
            },
            isKeyboardEnabled: function() {
                return this.option("keyboardNavigation.enabled")
            },
            _processCanceledEditCellPosition: function(rowIndex, columnIndex) {
                if (this._canceledCellPosition) {
                    var isCanceled = this._canceledCellPosition.rowIndex === rowIndex && this._canceledCellPosition.columnIndex === columnIndex;
                    this._canceledCellPosition = null;
                    return isCanceled
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    useLegacyKeyboardNavigation: false,
                    keyboardNavigation: {
                        enabled: true,
                        enterKeyAction: "startEdit",
                        enterKeyDirection: "none",
                        editOnKeyPress: false
                    }
                }
            },
            controllers: {
                keyboardNavigation: KeyboardNavigationController
            },
            extenders: {
                views: {
                    rowsView: {
                        _rowClick: function(e) {
                            var editRowIndex = this.getController("editing").getEditRowIndex();
                            var keyboardController = this.getController("keyboardNavigation");
                            if (editRowIndex === e.rowIndex) {
                                keyboardController.setCellFocusType()
                            }
                            var needTriggerPointerEventHandler = isMobile() && this.option("focusedRowEnabled");
                            if (needTriggerPointerEventHandler) {
                                this._triggerPointerDownEventHandler(e)
                            }
                            this.callBase.apply(this, arguments)
                        },
                        _triggerPointerDownEventHandler: function(e) {
                            var originalEvent = e.event.originalEvent;
                            if (originalEvent) {
                                var keyboardController = this.getController("keyboardNavigation");
                                var $cell = (0, _renderer2.default)(originalEvent.target);
                                var columnIndex = this.getCellIndex($cell);
                                var column = this.getController("columns").getVisibleColumns()[columnIndex];
                                var row = this.getController("data").items()[e.rowIndex];
                                if (keyboardController._isAllowEditing(row, column)) {
                                    var eventArgs = eventUtils.createEvent(originalEvent, {
                                        currentTarget: originalEvent.target
                                    });
                                    keyboardController._pointerEventHandler(eventArgs)
                                }
                            }
                        },
                        renderFocusState: function() {
                            var dataController = this._dataController;
                            var rowIndex = this.option("focusedRowIndex") || 0;
                            var $rowsView = this.element();
                            if ($rowsView && !(0, _selectors.focused)($rowsView)) {
                                $rowsView.attr("tabIndex", null)
                            }
                            if (rowIndex < 0 || rowIndex >= dataController.getVisibleRows().length) {
                                rowIndex = 0
                            }
                            var cellElements = this.getCellElements(rowIndex);
                            if (this.getController("keyboardNavigation").isKeyboardEnabled() && cellElements) {
                                this.updateFocusElementTabIndex(cellElements)
                            }
                        },
                        updateFocusElementTabIndex: function(cellElements) {
                            var keyboardController = this.getController("keyboardNavigation");
                            var $row = cellElements.eq(0).parent();
                            var columnIndex = this.option("focusedColumnIndex");
                            if (!columnIndex || columnIndex < 0) {
                                columnIndex = 0
                            }
                            if (isGroupRow($row)) {
                                keyboardController._applyTabIndexToElement($row)
                            } else {
                                this._updateFocusedCellTabIndex(cellElements, columnIndex)
                            }
                        },
                        _updateFocusedCellTabIndex: function(cellElements, columnIndex) {
                            var $cell;
                            var keyboardController = this.getController("keyboardNavigation");
                            var oldFocusedView = keyboardController._focusedView;
                            var cellElementsLength = cellElements ? cellElements.length : -1;
                            keyboardController._focusedView = this;
                            if (cellElementsLength > 0) {
                                if (cellElementsLength <= columnIndex) {
                                    columnIndex = cellElementsLength - 1
                                }
                                for (var i = columnIndex; i < cellElementsLength; ++i) {
                                    $cell = (0, _renderer2.default)(cellElements[i]);
                                    if (!keyboardController._isMasterDetailCell($cell)) {
                                        if (keyboardController._isCellValid($cell) && isCellElement($cell)) {
                                            keyboardController._applyTabIndexToElement($cell);
                                            keyboardController.setCellFocusType();
                                            break
                                        }
                                    }
                                }
                            }
                            keyboardController._focusedView = oldFocusedView
                        },
                        renderDelayedTemplates: function(change) {
                            this.callBase.apply(this, arguments);
                            if (!change || !change.repaintChangesOnly) {
                                this.renderFocusState()
                            }
                        },
                        _renderCore: function(change) {
                            this.callBase(change);
                            if (!change || !change.repaintChangesOnly) {
                                this.renderFocusState()
                            }
                        },
                        _editCellPrepared: function($cell) {
                            var editorInstance = this._getEditorInstance($cell);
                            var keyboardController = this.getController("keyboardNavigation");
                            var isEditingNavigationMode = keyboardController && keyboardController._isFastEditingStarted();
                            if (editorInstance && isEditingNavigationMode) {
                                this._handleEditingNavigationMode(editorInstance)
                            }
                            this.callBase.apply(this, arguments)
                        },
                        _handleEditingNavigationMode: function(editorInstance) {
                            ["downArrow", "upArrow"].forEach(function(keyName) {
                                var originalKeyHandler = editorInstance._supportedKeys()[keyName];
                                editorInstance.registerKeyHandler(keyName, function(e) {
                                    var isDropDownOpened = "true" === editorInstance._input().attr("aria-expanded");
                                    if (isDropDownOpened) {
                                        return originalKeyHandler && originalKeyHandler.call(editorInstance, e)
                                    }
                                })
                            });
                            editorInstance.registerKeyHandler("leftArrow", _common.noop);
                            editorInstance.registerKeyHandler("rightArrow", _common.noop);
                            var isDateBoxWithMask = editorInstance.NAME === DATEBOX_WIDGET_NAME && editorInstance.option("useMaskBehavior");
                            if (isDateBoxWithMask) {
                                editorInstance.registerKeyHandler("enter", _common.noop)
                            }
                        },
                        _getEditorInstance: function($cell) {
                            var $editor = $cell.find(".dx-texteditor").eq(0);
                            return (0, _uiGrid_core3.getWidgetInstance)($editor)
                        }
                    }
                },
                controllers: {
                    editing: {
                        editCell: function(rowIndex, columnIndex) {
                            var keyboardController = this.getController("keyboardNavigation");
                            if (keyboardController._processCanceledEditCellPosition(rowIndex, columnIndex)) {
                                return false
                            }
                            var isCellEditing = this.callBase(rowIndex, columnIndex);
                            if (isCellEditing) {
                                keyboardController.setupFocusedView()
                            }
                            return isCellEditing
                        },
                        editRow: function(rowIndex) {
                            var keyboardController = this.getController("keyboardNavigation");
                            var columnIndex = this.option("focusedColumnIndex");
                            var column = this._columnsController.getVisibleColumns()[columnIndex];
                            if (column && column.type || this.option("editing.mode") === EDIT_MODE_FORM) {
                                keyboardController._resetFocusedCell()
                            }
                            this.callBase(rowIndex)
                        },
                        addRow: function(parentKey) {
                            this.getController("keyboardNavigation").setupFocusedView();
                            return this.callBase.apply(this, arguments)
                        },
                        getFocusedCellInRow: function(rowIndex) {
                            var keyboardNavigationController = this.getController("keyboardNavigation");
                            var $cell = this.callBase(rowIndex);
                            if (keyboardNavigationController.isKeyboardEnabled() && keyboardNavigationController._focusedCellPosition.rowIndex === rowIndex) {
                                var $focusedCell = keyboardNavigationController._getFocusedCell();
                                if (isElementDefined($focusedCell) && !$focusedCell.hasClass("dx-command-edit")) {
                                    $cell = $focusedCell
                                }
                            }
                            return $cell
                        },
                        _processCanceledEditingCell: function() {
                            var _this2 = this;
                            this.closeEditCell().done(function() {
                                var keyboardNavigation = _this2.getController("keyboardNavigation");
                                keyboardNavigation._updateFocus()
                            })
                        },
                        init: function() {
                            this.callBase();
                            this._keyboardNavigationController = this.getController("keyboardNavigation")
                        },
                        closeEditCell: function() {
                            var keyboardNavigation = this.getController("keyboardNavigation");
                            keyboardNavigation._fastEditingStarted = false;
                            var result = this.callBase.apply(this, arguments);
                            keyboardNavigation._updateFocus();
                            return result
                        },
                        _delayedInputFocus: function() {
                            this._keyboardNavigationController._isNeedScroll = true;
                            this.callBase.apply(this, arguments)
                        },
                        _isEditingStart: function() {
                            var keyboardNavigation = this.getController("keyboardNavigation");
                            var cancel = this.callBase.apply(this, arguments);
                            if (cancel && !keyboardNavigation._isNeedFocus) {
                                var $cell = keyboardNavigation._getFocusedCell();
                                keyboardNavigation._focus($cell, true)
                            }
                            return cancel
                        }
                    },
                    data: {
                        _correctRowIndices: function(getRowIndexCorrection) {
                            var that = this;
                            var keyboardNavigationController = that.getController("keyboardNavigation");
                            var editorFactory = that.getController("editorFactory");
                            var focusedCellPosition = keyboardNavigationController._focusedCellPosition;
                            that.callBase.apply(that, arguments);
                            if (focusedCellPosition && focusedCellPosition.rowIndex >= 0) {
                                var focusedRowIndexCorrection = getRowIndexCorrection(focusedCellPosition.rowIndex);
                                if (focusedRowIndexCorrection) {
                                    focusedCellPosition.rowIndex += focusedRowIndexCorrection;
                                    editorFactory.focus(editorFactory.focus())
                                }
                            }
                        }
                    },
                    adaptiveColumns: {
                        _showHiddenCellsInView: function(_ref) {
                            var viewName = _ref.viewName,
                                $cells = _ref.$cells,
                                isCommandColumn = _ref.isCommandColumn;
                            this.callBase.apply(this, arguments);
                            viewName === COLUMN_HEADERS_VIEW && !isCommandColumn && $cells.each(function(_, cellElement) {
                                var $cell = (0, _renderer2.default)(cellElement);
                                isCellInHeaderRow($cell) && $cell.attr("tabindex", 0)
                            })
                        },
                        _hideVisibleCellInView: function(_ref2) {
                            var viewName = _ref2.viewName,
                                $cell = _ref2.$cell,
                                isCommandColumn = _ref2.isCommandColumn;
                            this.callBase.apply(this, arguments);
                            if (viewName === COLUMN_HEADERS_VIEW && !isCommandColumn && isCellInHeaderRow($cell)) {
                                $cell.removeAttr("tabindex")
                            }
                        }
                    }
                }
            }
        }
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.column_fixing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _wheel = __webpack_require__( /*! ../../events/core/wheel */ 133);
        var _wheel2 = _interopRequireDefault(_wheel);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var CONTENT_CLASS = "content";
        var CONTENT_FIXED_CLASS = "content-fixed";
        var MASTER_DETAIL_CELL_CLASS = "dx-master-detail-cell";
        var FIRST_CELL_CLASS = "dx-first-cell";
        var LAST_CELL_CLASS = "dx-last-cell";
        var HOVER_STATE_CLASS = "dx-state-hover";
        var FIXED_COL_CLASS = "dx-col-fixed";
        var FIXED_COLUMNS_CLASS = "dx-fixed-columns";
        var POINTER_EVENTS_TARGET_CLASS = "dx-pointer-events-target";
        var POINTER_EVENTS_NONE_CLASS = "dx-pointer-events-none";
        var COMMAND_TRANSPARENT = "transparent";
        var GROUP_ROW_CLASS = "dx-group-row";
        var getTransparentColumnIndex = function(fixedColumns) {
            var transparentColumnIndex = -1;
            (0, _iterator.each)(fixedColumns, function(index, column) {
                if (column.command === COMMAND_TRANSPARENT) {
                    transparentColumnIndex = index;
                    return false
                }
            });
            return transparentColumnIndex
        };
        var normalizeColumnWidths = function(fixedColumns, widths, fixedWidths) {
            var fixedColumnIndex = 0;
            if (fixedColumns && widths && fixedWidths) {
                for (var i = 0; i < fixedColumns.length; i++) {
                    if (fixedColumns[i].command === COMMAND_TRANSPARENT) {
                        fixedColumnIndex += fixedColumns[i].colspan
                    } else {
                        if (widths[fixedColumnIndex] < fixedWidths[i]) {
                            widths[fixedColumnIndex] = fixedWidths[i]
                        }
                        fixedColumnIndex++
                    }
                }
            }
            return widths
        };
        var baseFixedColumns = {
            init: function() {
                this.callBase();
                this._isFixedTableRendering = false;
                this._isFixedColumns = false
            },
            _createCol: function(column) {
                return this.callBase(column).toggleClass(FIXED_COL_CLASS, !!(this._isFixedTableRendering && (column.fixed || column.command && column.command !== COMMAND_TRANSPARENT)))
            },
            _correctColumnIndicesForFixedColumns: function(fixedColumns, change) {
                var transparentColumnIndex = getTransparentColumnIndex(fixedColumns);
                var transparentColspan = fixedColumns[transparentColumnIndex].colspan;
                var columnIndices = change && change.columnIndices;
                if (columnIndices) {
                    change.columnIndices = columnIndices.map(function(columnIndices) {
                        if (columnIndices) {
                            return columnIndices.map(function(columnIndex) {
                                if (columnIndex < transparentColumnIndex) {
                                    return columnIndex
                                } else {
                                    if (columnIndex >= transparentColumnIndex + transparentColspan) {
                                        return columnIndex - transparentColspan + 1
                                    }
                                }
                                return -1
                            }).filter(function(columnIndex) {
                                return columnIndex >= 0
                            })
                        }
                    })
                }
            },
            _renderTable: function(options) {
                var that = this;
                var $fixedTable;
                var fixedColumns = that.getFixedColumns();
                that._isFixedColumns = !!fixedColumns.length;
                var $table = that.callBase(options);
                if (that._isFixedColumns) {
                    that._isFixedTableRendering = true;
                    var change = options && options.change;
                    var columnIndices = change && change.columnIndices;
                    that._correctColumnIndicesForFixedColumns(fixedColumns, change);
                    $fixedTable = that._createTable(fixedColumns);
                    that._renderRows($fixedTable, (0, _extend.extend)({}, options, {
                        columns: fixedColumns
                    }));
                    that._updateContent($fixedTable, change);
                    if (columnIndices) {
                        change.columnIndices = columnIndices
                    }
                    that._isFixedTableRendering = false
                } else {
                    that._fixedTableElement && that._fixedTableElement.parent().remove();
                    that._fixedTableElement = null
                }
                return $table
            },
            _renderRow: function($table, options) {
                var fixedCorrection;
                var cells = options.row.cells;
                this.callBase.apply(this, arguments);
                if (this._isFixedTableRendering && cells && cells.length) {
                    fixedCorrection = 0;
                    var fixedCells = options.row.cells || [];
                    cells = cells.slice();
                    options.row.cells = cells;
                    for (var i = 0; i < fixedCells.length; i++) {
                        if (fixedCells[i].column && fixedCells[i].column.command === COMMAND_TRANSPARENT) {
                            fixedCorrection = (fixedCells[i].column.colspan || 1) - 1;
                            continue
                        }
                        cells[i + fixedCorrection] = fixedCells[i]
                    }
                }
            },
            _createCell: function(options) {
                var that = this;
                var column = options.column;
                var columnCommand = column && column.command;
                var rowType = options.rowType;
                var $cell = that.callBase.apply(that, arguments);
                var fixedColumns;
                var prevFixedColumn;
                var transparentColumnIndex;
                if (that._isFixedTableRendering || "filter" === rowType) {
                    fixedColumns = that.getFixedColumns();
                    transparentColumnIndex = getTransparentColumnIndex(fixedColumns);
                    prevFixedColumn = fixedColumns[transparentColumnIndex - 1]
                }
                if (that._isFixedTableRendering) {
                    if (columnCommand === COMMAND_TRANSPARENT) {
                        $cell.addClass(POINTER_EVENTS_NONE_CLASS).toggleClass(FIRST_CELL_CLASS, 0 === transparentColumnIndex || prevFixedColumn && "expand" === prevFixedColumn.command).toggleClass(LAST_CELL_CLASS, fixedColumns.length && transparentColumnIndex === fixedColumns.length - 1);
                        if ("freeSpace" !== rowType) {
                            _uiGrid_core2.default.setEmptyText($cell)
                        }
                    }
                } else {
                    if ("filter" === rowType) {
                        $cell.toggleClass(FIRST_CELL_CLASS, options.columnIndex === transparentColumnIndex)
                    }
                }
                var isRowAltStyle = that.option("rowAlternationEnabled") && options.isAltRow;
                if (_browser2.default.mozilla && options.column.fixed && "group" !== options.rowType && !isRowAltStyle) {
                    $cell.addClass(FIXED_COL_CLASS)
                }
                return $cell
            },
            _wrapTableInScrollContainer: function() {
                var $scrollContainer = this.callBase.apply(this, arguments);
                if (this._isFixedTableRendering) {
                    $scrollContainer.addClass(this.addWidgetPrefix(CONTENT_FIXED_CLASS) + " " + POINTER_EVENTS_TARGET_CLASS)
                }
                return $scrollContainer
            },
            _renderCellContent: function($cell, options) {
                var that = this;
                var isEmptyCell;
                var column = options.column;
                var isFixedTableRendering = that._isFixedTableRendering;
                var isGroupCell = "group" === options.rowType && (0, _type.isDefined)(column.groupIndex);
                if (isFixedTableRendering && isGroupCell && !column.command && !column.groupCellTemplate) {
                    $cell.css("pointerEvents", "none")
                }
                if (!isFixedTableRendering && that._isFixedColumns) {
                    isEmptyCell = column.fixed || column.command && false !== column.fixed;
                    if (isGroupCell) {
                        isEmptyCell = false;
                        if (options.row.summaryCells && options.row.summaryCells.length) {
                            var columns = that._columnsController.getVisibleColumns();
                            var alignByFixedColumnCellCount = that._getAlignByColumnCellCount ? that._getAlignByColumnCellCount(column.colspan, {
                                columns: columns,
                                row: options.row,
                                isFixed: true
                            }) : 0;
                            if (alignByFixedColumnCellCount > 0) {
                                var transparentColumnIndex = getTransparentColumnIndex(that._columnsController.getFixedColumns());
                                isEmptyCell = columns.length - alignByFixedColumnCellCount < transparentColumnIndex
                            }
                        }
                    }
                    if (isEmptyCell) {
                        if (that.option("legacyRendering") || column.command && "buttons" !== column.type || "group" === options.rowType) {
                            $cell.html("&nbsp;").addClass(column.cssClass);
                            return
                        } else {
                            $cell.addClass("dx-hidden-cell")
                        }
                    }
                }
                if (column.command !== COMMAND_TRANSPARENT) {
                    that.callBase($cell, options)
                }
            },
            _getCellElementsCore: function(rowIndex) {
                var that = this;
                var cellElements = that.callBase(rowIndex);
                var isGroupRow = cellElements.parent().hasClass(GROUP_ROW_CLASS);
                var index = "columnHeadersView" === that.name ? rowIndex : void 0;
                if (that._fixedTableElement && cellElements) {
                    var fixedColumns = that.getFixedColumns(index);
                    var fixedCellElements = that._getRowElements(that._fixedTableElement).eq(rowIndex).children("td");
                    (0, _iterator.each)(fixedCellElements, function(columnIndex, cell) {
                        if (isGroupRow) {
                            if (cellElements[columnIndex] && "hidden" !== cell.style.visibility) {
                                cellElements[columnIndex] = cell
                            }
                        } else {
                            var fixedColumn = fixedColumns[columnIndex];
                            if (fixedColumn) {
                                if (fixedColumn.command === COMMAND_TRANSPARENT) {
                                    if (fixedCellElements.eq(columnIndex).hasClass(MASTER_DETAIL_CELL_CLASS)) {
                                        cellElements[columnIndex] = cell || cellElements[columnIndex]
                                    }
                                } else {
                                    var fixedColumnIndex = that._columnsController.getVisibleIndex(fixedColumn.index, index);
                                    cellElements[fixedColumnIndex] = cell || cellElements[fixedColumnIndex]
                                }
                            }
                        }
                    })
                }
                return cellElements
            },
            getColumnWidths: function() {
                var that = this;
                var fixedWidths;
                var result = that.callBase();
                var fixedColumns = that.getFixedColumns();
                if (that._fixedTableElement && result.length) {
                    fixedWidths = that.callBase(that._fixedTableElement)
                }
                return normalizeColumnWidths(fixedColumns, result, fixedWidths)
            },
            _getTableElement: function() {
                var tableElement = this._isFixedTableRendering ? this._fixedTableElement : this.callBase();
                return tableElement
            },
            _setTableElement: function(tableElement) {
                if (this._isFixedTableRendering) {
                    this._fixedTableElement = tableElement.addClass(POINTER_EVENTS_NONE_CLASS)
                } else {
                    this.callBase(tableElement)
                }
            },
            getColumns: function(rowIndex, $tableElement) {
                $tableElement = $tableElement || this._getTableElement();
                if (this._isFixedTableRendering || $tableElement && $tableElement.closest("table").parent("." + this.addWidgetPrefix(CONTENT_FIXED_CLASS)).length) {
                    return this.getFixedColumns(rowIndex)
                }
                return this.callBase(rowIndex, $tableElement)
            },
            getRowIndex: function($row) {
                var $fixedTable = this._fixedTableElement;
                if ($fixedTable && $fixedTable.find($row).length) {
                    return this._getRowElements($fixedTable).index($row)
                }
                return this.callBase($row)
            },
            getTableElements: function() {
                var result = this.callBase.apply(this, arguments);
                if (this._fixedTableElement) {
                    result = (0, _renderer2.default)([result.get(0), this._fixedTableElement.get(0)])
                }
                return result
            },
            getFixedColumns: function(rowIndex) {
                return this._columnsController.getFixedColumns(rowIndex)
            },
            getFixedColumnsOffset: function() {
                var offset = {
                    left: 0,
                    right: 0
                };
                var $transparentColumn;
                if (this._fixedTableElement) {
                    $transparentColumn = this.getTransparentColumnElement();
                    var positionTransparentColumn = $transparentColumn.position();
                    offset = {
                        left: positionTransparentColumn.left,
                        right: this.element().outerWidth(true) - ($transparentColumn.outerWidth(true) + positionTransparentColumn.left)
                    }
                }
                return offset
            },
            getTransparentColumnElement: function() {
                return this._fixedTableElement && this._fixedTableElement.find("." + POINTER_EVENTS_NONE_CLASS).first()
            },
            getFixedTableElement: function() {
                return this._fixedTableElement
            },
            isFixedColumns: function() {
                return this._isFixedColumns
            },
            _resizeCore: function() {
                this.callBase();
                this.synchronizeRows()
            },
            setColumnWidths: function(options) {
                var columns;
                var visibleColumns = this._columnsController.getVisibleColumns();
                var widths = options.widths;
                var isWidthsSynchronized = widths && widths.length && (0, _type.isDefined)(visibleColumns[0].visibleWidth);
                var optionNames = options.optionNames;
                var isColumnWidthChanged = optionNames && optionNames.width;
                var useVisibleColumns = false;
                this.callBase.apply(this, arguments);
                if (this._fixedTableElement) {
                    if (this.option("legacyRendering")) {
                        useVisibleColumns = widths && widths.length && !this.isScrollbarVisible(true)
                    } else {
                        var hasAutoWidth = widths && widths.some(function(width) {
                            return "auto" === width
                        });
                        useVisibleColumns = hasAutoWidth && (!isWidthsSynchronized || !this.isScrollbarVisible(true))
                    }
                    if (useVisibleColumns) {
                        columns = visibleColumns
                    }
                    this.callBase((0, _extend.extend)({}, options, {
                        $tableElement: this._fixedTableElement,
                        columns: columns,
                        fixed: true
                    }))
                }
                if (isWidthsSynchronized || isColumnWidthChanged && this.option("wordWrapEnabled")) {
                    this.synchronizeRows()
                }
            },
            _createColGroup: function(columns) {
                if (!this.option("legacyRendering") && this._isFixedTableRendering && !this.option("columnAutoWidth")) {
                    var visibleColumns = this._columnsController.getVisibleColumns();
                    var useVisibleColumns = visibleColumns.filter(function(column) {
                        return !column.width
                    }).length;
                    if (useVisibleColumns) {
                        columns = visibleColumns
                    }
                }
                return this.callBase(columns)
            },
            _getClientHeight: function(element) {
                var boundingClientRectElement = element.getBoundingClientRect && (0, _position.getBoundingRect)(element);
                return boundingClientRectElement && boundingClientRectElement.height ? boundingClientRectElement.height : element.clientHeight
            },
            synchronizeRows: function() {
                var that = this;
                var rowHeights = [];
                var fixedRowHeights = [];
                var rowIndex;
                var $rowElements;
                var $fixedRowElements;
                var $contentElement;
                if (that._isFixedColumns && that._tableElement && that._fixedTableElement) {
                    var heightTable = that._getClientHeight(that._tableElement.get(0));
                    var heightFixedTable = that._getClientHeight(that._fixedTableElement.get(0));
                    $rowElements = that._getRowElements(that._tableElement);
                    $fixedRowElements = that._getRowElements(that._fixedTableElement);
                    $contentElement = that._findContentElement();
                    if (heightTable !== heightFixedTable) {
                        $contentElement && $contentElement.css("height", heightTable);
                        $rowElements.css("height", "");
                        $fixedRowElements.css("height", "");
                        for (rowIndex = 0; rowIndex < $rowElements.length; rowIndex++) {
                            rowHeights.push(that._getClientHeight($rowElements.get(rowIndex)));
                            fixedRowHeights.push(that._getClientHeight($fixedRowElements.get(rowIndex)))
                        }
                        for (rowIndex = 0; rowIndex < $rowElements.length; rowIndex++) {
                            var rowHeight = rowHeights[rowIndex];
                            var fixedRowHeight = fixedRowHeights[rowIndex];
                            if (rowHeight > fixedRowHeight) {
                                $fixedRowElements.eq(rowIndex).css("height", rowHeight)
                            } else {
                                if (rowHeight < fixedRowHeight) {
                                    $rowElements.eq(rowIndex).css("height", fixedRowHeight)
                                }
                            }
                        }
                        $contentElement && $contentElement.css("height", "")
                    }
                }
            },
            setScrollerSpacing: function(width) {
                var rtlEnabled = this.option("rtlEnabled");
                this.callBase(width);
                this.element().children("." + this.addWidgetPrefix(CONTENT_FIXED_CLASS)).css({
                    paddingLeft: rtlEnabled ? width : "",
                    paddingRight: !rtlEnabled ? width : ""
                })
            }
        };
        var ColumnHeadersViewFixedColumnsExtender = (0, _extend.extend)({}, baseFixedColumns, {
            _getRowVisibleColumns: function(rowIndex) {
                if (this._isFixedTableRendering) {
                    return this.getFixedColumns(rowIndex)
                }
                return this.callBase(rowIndex)
            },
            getContextMenuItems: function(options) {
                var that = this;
                var column = options.column;
                var columnFixingOptions = that.option("columnFixing");
                var items = that.callBase(options);
                if (options.row && "header" === options.row.rowType) {
                    if (column && column.allowFixing) {
                        var onItemClick = function(params) {
                            switch (params.itemData.value) {
                                case "none":
                                    that._columnsController.columnOption(column.index, "fixed", false);
                                    break;
                                case "left":
                                    that._columnsController.columnOption(column.index, {
                                        fixed: true,
                                        fixedPosition: "left"
                                    });
                                    break;
                                case "right":
                                    that._columnsController.columnOption(column.index, {
                                        fixed: true,
                                        fixedPosition: "right"
                                    })
                            }
                        };
                        items = items || [];
                        items.push({
                            text: columnFixingOptions.texts.fix,
                            beginGroup: true,
                            items: [{
                                text: columnFixingOptions.texts.leftPosition,
                                value: "left",
                                disabled: column.fixed && (!column.fixedPosition || "left" === column.fixedPosition),
                                onItemClick: onItemClick
                            }, {
                                text: columnFixingOptions.texts.rightPosition,
                                value: "right",
                                disabled: column.fixed && "right" === column.fixedPosition,
                                onItemClick: onItemClick
                            }]
                        }, {
                            text: columnFixingOptions.texts.unfix,
                            value: "none",
                            disabled: !column.fixed,
                            onItemClick: onItemClick
                        })
                    }
                }
                return items
            },
            getFixedColumnElements: function(rowIndex) {
                var that = this;
                if ((0, _type.isDefined)(rowIndex)) {
                    return this._fixedTableElement && this._getRowElements(this._fixedTableElement).eq(rowIndex).children()
                }
                var columnElements = that.getColumnElements();
                var $transparentColumnElement = that.getTransparentColumnElement();
                if (columnElements && $transparentColumnElement && $transparentColumnElement.length) {
                    var transparentColumnIndex = getTransparentColumnIndex(that.getFixedColumns());
                    columnElements.splice(transparentColumnIndex, $transparentColumnElement.get(0).colSpan, $transparentColumnElement.get(0))
                }
                return columnElements
            },
            getColumnWidths: function() {
                var that = this;
                var fixedWidths;
                var result = that.callBase();
                var $fixedColumnElements = that.getFixedColumnElements();
                var fixedColumns = that.getFixedColumns();
                if (that._fixedTableElement) {
                    if ($fixedColumnElements && $fixedColumnElements.length) {
                        fixedWidths = that._getWidths($fixedColumnElements)
                    } else {
                        fixedWidths = that.callBase(that._fixedTableElement)
                    }
                }
                return normalizeColumnWidths(fixedColumns, result, fixedWidths)
            }
        });
        var RowsViewFixedColumnsExtender = (0, _extend.extend)({}, baseFixedColumns, {
            _detachHoverEvents: function() {
                this._fixedTableElement && _events_engine2.default.off(this._fixedTableElement, "mouseover mouseout", ".dx-data-row");
                this._tableElement && _events_engine2.default.off(this._tableElement, "mouseover mouseout", ".dx-data-row")
            },
            _attachHoverEvents: function() {
                var that = this;
                var attachHoverEvent = function($table) {
                    _events_engine2.default.on($table, "mouseover mouseout", ".dx-data-row", that.createAction(function(args) {
                        var event = args.event;
                        var rowIndex = that.getRowIndex((0, _renderer2.default)(event.target).closest(".dx-row"));
                        var isHover = "mouseover" === event.type;
                        if (rowIndex >= 0) {
                            that._tableElement && that._getRowElements(that._tableElement).eq(rowIndex).toggleClass(HOVER_STATE_CLASS, isHover);
                            that._fixedTableElement && that._getRowElements(that._fixedTableElement).eq(rowIndex).toggleClass(HOVER_STATE_CLASS, isHover)
                        }
                    }))
                };
                if (that._fixedTableElement && that._tableElement) {
                    attachHoverEvent(that._fixedTableElement);
                    attachHoverEvent(that._tableElement)
                }
            },
            _findContentElement: function() {
                var that = this;
                var $content;
                var scrollTop;
                var contentClass = that.addWidgetPrefix(CONTENT_CLASS);
                var element = that.element();
                var scrollDelay = _browser2.default.mozilla ? 60 : 0;
                if (element && that._isFixedTableRendering) {
                    $content = element.children("." + contentClass);
                    var scrollable = that.getScrollable();
                    if (!$content.length && scrollable) {
                        $content = (0, _renderer2.default)("<div>").addClass(contentClass);
                        _events_engine2.default.on($content, "scroll", function(e) {
                            clearTimeout(that._fixedScrollTimeout);
                            that._fixedScrollTimeout = setTimeout(function() {
                                scrollTop = (0, _renderer2.default)(e.target).scrollTop();
                                scrollable.scrollTo({
                                    y: scrollTop
                                })
                            }, scrollDelay)
                        });
                        _events_engine2.default.on($content, _wheel2.default.name, function(e) {
                            if (scrollable) {
                                scrollTop = scrollable.scrollTop();
                                scrollable.scrollTo({
                                    y: scrollTop - e.delta
                                });
                                if (scrollable.scrollTop() > 0 && scrollable.scrollTop() + scrollable.clientHeight() < scrollable.scrollHeight() + that.getScrollbarWidth()) {
                                    return false
                                }
                            }
                        });
                        $content.appendTo(element)
                    }
                    return $content
                }
                return that.callBase()
            },
            _updateScrollable: function() {
                this.callBase();
                var scrollable = this.getScrollable();
                var scrollTop = scrollable && scrollable.scrollOffset().top;
                this._updateFixedTablePosition(scrollTop)
            },
            _renderContent: function(contentElement, tableElement) {
                if (this._isFixedTableRendering) {
                    return contentElement.empty().addClass(this.addWidgetPrefix(CONTENT_CLASS) + " " + this.addWidgetPrefix(CONTENT_FIXED_CLASS) + " " + POINTER_EVENTS_TARGET_CLASS).append(tableElement)
                }
                return this.callBase(contentElement, tableElement)
            },
            _getGroupCellOptions: function(options) {
                if (this._isFixedTableRendering) {
                    return this.callBase((0, _extend.extend)({}, options, {
                        columns: this._columnsController.getVisibleColumns()
                    }))
                }
                return this.callBase(options)
            },
            _renderGroupedCells: function($row, options) {
                return this.callBase($row, (0, _extend.extend)({}, options, {
                    columns: this._columnsController.getVisibleColumns()
                }))
            },
            _renderGroupSummaryCells: function($row, options) {
                if (this._isFixedTableRendering) {
                    this.callBase($row, (0, _extend.extend)({}, options, {
                        columns: this._columnsController.getVisibleColumns()
                    }))
                } else {
                    this.callBase($row, options)
                }
            },
            _hasAlignByColumnSummaryItems: function(columnIndex, options) {
                var result = this.callBase.apply(this, arguments);
                var column = options.columns[columnIndex];
                if (options.isFixed) {
                    return column.fixed && (result || "right" === column.fixedPosition)
                }
                return result && !column.fixed
            },
            _renderGroupSummaryCellsCore: function($groupCell, options, groupCellColSpan, alignByColumnCellCount) {
                var alignByFixedColumnCellCount;
                if (this._isFixedTableRendering) {
                    options.isFixed = true;
                    alignByFixedColumnCellCount = this._getAlignByColumnCellCount(groupCellColSpan, options);
                    options.isFixed = false;
                    var startColumnIndex = options.columns.length - alignByFixedColumnCellCount;
                    options = (0, _extend.extend)({}, options, {
                        columns: this.getFixedColumns()
                    });
                    var transparentColumnIndex = getTransparentColumnIndex(options.columns);
                    if (startColumnIndex < transparentColumnIndex) {
                        alignByFixedColumnCellCount -= options.columns[transparentColumnIndex].colspan - 1 || 0;
                        groupCellColSpan -= options.columns[transparentColumnIndex].colspan - 1 || 0
                    } else {
                        if (alignByColumnCellCount > 0) {
                            $groupCell.css("visibility", "hidden")
                        }
                    }
                    alignByColumnCellCount = alignByFixedColumnCellCount
                }
                this.callBase($groupCell, options, groupCellColSpan, alignByColumnCellCount)
            },
            _getSummaryCellIndex: function(columnIndex, columns) {
                if (this._isFixedTableRendering) {
                    var transparentColumnIndex = getTransparentColumnIndex(columns);
                    if (columnIndex > transparentColumnIndex) {
                        columnIndex += columns[transparentColumnIndex].colspan - 1
                    }
                    return columnIndex
                }
                return this.callBase.apply(this, arguments)
            },
            _renderCore: function(change) {
                this._detachHoverEvents();
                this.callBase(change);
                var isFixedColumns = this._isFixedColumns;
                this.element().toggleClass(FIXED_COLUMNS_CLASS, isFixedColumns);
                if (this.option("hoverStateEnabled") && isFixedColumns) {
                    this._attachHoverEvents()
                }
            },
            setRowsOpacity: function(columnIndex, value) {
                this.callBase(columnIndex, value);
                var $rows = this._getRowElements(this._fixedTableElement);
                this._setRowsOpacityCore($rows, this.getFixedColumns(), columnIndex, value)
            },
            optionChanged: function(args) {
                var that = this;
                that.callBase(args);
                if ("hoverStateEnabled" === args.name && that._isFixedColumns) {
                    args.value ? this._attachHoverEvents() : this._detachHoverEvents()
                }
            },
            getCellIndex: function($cell) {
                var $fixedTable = this._fixedTableElement;
                var cellIndex = 0;
                if ($fixedTable && $cell.is("td") && $cell.closest($fixedTable).length) {
                    var columns = this.getFixedColumns();
                    (0, _iterator.each)(columns, function(index, column) {
                        if (index === $cell[0].cellIndex) {
                            return false
                        }
                        if (column.colspan) {
                            cellIndex += column.colspan;
                            return
                        }
                        cellIndex++
                    });
                    return cellIndex
                }
                return this.callBase.apply(this, arguments)
            },
            _updateFixedTablePosition: function(scrollTop, needFocus) {
                if (this._fixedTableElement && this._tableElement) {
                    var $focusedElement;
                    var editorFactory = this.getController("editorFactory");
                    this._fixedTableElement.parent().scrollTop(scrollTop);
                    if (needFocus) {
                        $focusedElement = editorFactory.focus();
                        $focusedElement && editorFactory.focus($focusedElement)
                    }
                }
            },
            setScrollerSpacing: function(vWidth, hWidth) {
                var that = this;
                var styles = {
                    marginBottom: 0
                };
                var $fixedContent = that.element().children("." + this.addWidgetPrefix(CONTENT_FIXED_CLASS));
                if ($fixedContent.length && that._fixedTableElement) {
                    $fixedContent.css(styles);
                    that._fixedTableElement.css(styles);
                    styles[that.option("rtlEnabled") ? "marginLeft" : "marginRight"] = vWidth;
                    styles.marginBottom = hWidth;
                    var useNativeScrolling = that._scrollable && that._scrollable.option("useNative");
                    (useNativeScrolling ? $fixedContent : that._fixedTableElement).css(styles)
                }
            },
            _getElasticScrollTop: function(e) {
                var elasticScrollTop = 0;
                var scrollbarWidth = this.getScrollbarWidth(true);
                if (e.scrollOffset.top < 0) {
                    elasticScrollTop = -e.scrollOffset.top
                } else {
                    if (e.reachedBottom) {
                        var scrollableContent = this._findContentElement();
                        var scrollableContainer = e.component._container();
                        var maxScrollTop = Math.max(scrollableContent.height() + scrollbarWidth - scrollableContainer.height(), 0);
                        elasticScrollTop = maxScrollTop - e.scrollOffset.top
                    }
                }
                return elasticScrollTop
            },
            _applyElasticScrolling: function(e) {
                if (this._fixedTableElement) {
                    var elasticScrollTop = this._getElasticScrollTop(e);
                    if (0 !== Math.ceil(elasticScrollTop)) {
                        _translator2.default.move(this._fixedTableElement, {
                            top: elasticScrollTop
                        })
                    } else {
                        this._fixedTableElement.css("transform", "")
                    }
                }
            },
            _handleScroll: function(e) {
                this._updateFixedTablePosition(e.scrollOffset.top, true);
                this._applyElasticScrolling(e);
                this.callBase(e)
            },
            _updateContentPosition: function(isRender) {
                this.callBase.apply(this, arguments);
                if (!isRender) {
                    this._updateFixedTablePosition(this._scrollTop)
                }
            },
            _afterRowPrepared: function(e) {
                if (this._isFixedTableRendering) {
                    return
                }
                this.callBase(e)
            },
            _scrollToElement: function($element) {
                this.callBase($element, this.getFixedColumnsOffset())
            },
            dispose: function() {
                this.callBase.apply(this, arguments);
                clearTimeout(this._fixedScrollTimeout)
            }
        });
        var FooterViewFixedColumnsExtender = baseFixedColumns;
        module.exports = {
            defaultOptions: function() {
                return {
                    columnFixing: {
                        enabled: false,
                        texts: {
                            fix: _message2.default.format("dxDataGrid-columnFixingFix"),
                            unfix: _message2.default.format("dxDataGrid-columnFixingUnfix"),
                            leftPosition: _message2.default.format("dxDataGrid-columnFixingLeftPosition"),
                            rightPosition: _message2.default.format("dxDataGrid-columnFixingRightPosition")
                        }
                    }
                }
            },
            extenders: {
                views: {
                    columnHeadersView: ColumnHeadersViewFixedColumnsExtender,
                    rowsView: RowsViewFixedColumnsExtender,
                    footerView: FooterViewFixedColumnsExtender
                },
                controllers: function() {
                    var normalizeColumnIndicesByPoints = function(columns, fixedColumns, pointsByColumns) {
                        var transparentColumnIndex = getTransparentColumnIndex(fixedColumns);
                        var correctIndex = columns.length - fixedColumns.length;
                        (0, _iterator.each)(pointsByColumns, function(_, point) {
                            if (point.index > transparentColumnIndex) {
                                point.columnIndex += correctIndex;
                                point.index += correctIndex
                            }
                        });
                        return pointsByColumns
                    };
                    return {
                        draggingHeader: {
                            _generatePointsByColumns: function(options) {
                                var visibleColumns = options.columns;
                                var targetDraggingPanel = options.targetDraggingPanel;
                                if (targetDraggingPanel && "headers" === targetDraggingPanel.getName() && targetDraggingPanel.isFixedColumns()) {
                                    if (options.sourceColumn.fixed) {
                                        if (!options.rowIndex) {
                                            options.columnElements = targetDraggingPanel.getFixedColumnElements(0)
                                        }
                                        options.columns = targetDraggingPanel.getFixedColumns(options.rowIndex);
                                        var pointsByColumns = this.callBase(options);
                                        normalizeColumnIndicesByPoints(visibleColumns, options.columns, pointsByColumns);
                                        return pointsByColumns
                                    }
                                }
                                return this.callBase(options)
                            },
                            _pointCreated: function(point, columns, location, sourceColumn) {
                                var result = this.callBase.apply(this, arguments);
                                var $transparentColumn = this._columnHeadersView.getTransparentColumnElement();
                                if (!result && "headers" === location && $transparentColumn && $transparentColumn.length) {
                                    var boundingRect = (0, _position.getBoundingRect)($transparentColumn.get(0));
                                    if (sourceColumn && sourceColumn.fixed) {
                                        return "right" === sourceColumn.fixedPosition ? point.x < boundingRect.right : point.x > boundingRect.left
                                    } else {
                                        return point.x < boundingRect.left || point.x > boundingRect.right
                                    }
                                }
                                return result
                            }
                        },
                        columnsResizer: {
                            _generatePointsByColumns: function() {
                                var that = this;
                                var columnsController = that._columnsController;
                                var columns = columnsController && that._columnsController.getVisibleColumns();
                                var fixedColumns = columnsController && that._columnsController.getFixedColumns();
                                var cells = that._columnHeadersView.getFixedColumnElements();
                                var pointsByFixedColumns = [];
                                that.callBase();
                                if (cells && cells.length > 0) {
                                    pointsByFixedColumns = _uiGrid_core2.default.getPointsByColumns(cells, function(point) {
                                        return that._pointCreated(point, cells.length, fixedColumns)
                                    });
                                    that._pointsByFixedColumns = normalizeColumnIndicesByPoints(columns, fixedColumns, pointsByFixedColumns)
                                }
                            },
                            _pointCreated: function(point, cellsLength, columns) {
                                var isWidgetResizingMode = "widget" === this.option("columnResizingMode");
                                if (point.index > 0 && point.index < cellsLength) {
                                    var currentColumn = columns[point.columnIndex - 1] || {};
                                    var nextColumn = columns[point.columnIndex] || {};
                                    if (currentColumn.fixed || nextColumn.fixed) {
                                        point.columnIndex -= 1;
                                        return !((currentColumn.allowResizing || currentColumn.command === COMMAND_TRANSPARENT) && (isWidgetResizingMode || nextColumn.allowResizing || nextColumn.command === COMMAND_TRANSPARENT))
                                    }
                                }
                                return this.callBase.apply(this, arguments)
                            },
                            _getTargetPoint: function(pointsByColumns, currentX, deltaX) {
                                var $transparentColumn = this._columnHeadersView.getTransparentColumnElement();
                                if ($transparentColumn && $transparentColumn.length) {
                                    var boundingRect = (0, _position.getBoundingRect)($transparentColumn.get(0));
                                    if (currentX <= boundingRect.left || currentX >= boundingRect.right) {
                                        return this.callBase(this._pointsByFixedColumns, currentX, deltaX)
                                    }
                                }
                                return this.callBase(pointsByColumns, currentX, deltaX)
                            }
                        }
                    }
                }()
            }
        }
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.adaptivity.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _form = __webpack_require__( /*! ../form */ 144);
        var _form2 = _interopRequireDefault(_form);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLUMN_HEADERS_VIEW = "columnHeadersView";
        var ROWS_VIEW = "rowsView";
        var FOOTER_VIEW = "footerView";
        var COLUMN_VIEWS = [COLUMN_HEADERS_VIEW, ROWS_VIEW, FOOTER_VIEW];
        var ADAPTIVE_NAMESPACE = "dxDataGridAdaptivity";
        var HIDDEN_COLUMNS_WIDTH = "adaptiveHidden";
        var ADAPTIVE_ROW_TYPE = "detailAdaptive";
        var FORM_ITEM_CONTENT_CLASS = "dx-field-item-content";
        var FORM_ITEM_MODIFIED = "dx-item-modified";
        var HIDDEN_COLUMN_CLASS = "hidden-column";
        var ADAPTIVE_COLUMN_BUTTON_CLASS = "adaptive-more";
        var ADAPTIVE_COLUMN_NAME_CLASS = "dx-command-adaptive";
        var COMMAND_ADAPTIVE_HIDDEN_CLASS = "dx-command-adaptive-hidden";
        var ADAPTIVE_DETAIL_ROW_CLASS = "dx-adaptive-detail-row";
        var ADAPTIVE_ITEM_TEXT_CLASS = "dx-adaptive-item-text";
        var MASTER_DETAIL_CELL_CLASS = "dx-master-detail-cell";
        var LAST_DATA_CELL_CLASS = "dx-last-data-cell";
        var ADAPTIVE_COLUMN_NAME = "adaptive";
        var EDIT_MODE_BATCH = "batch";
        var EDIT_MODE_ROW = "row";
        var EDIT_MODE_FORM = "form";
        var EDIT_MODE_POPUP = "popup";
        var REVERT_TOOLTIP_CLASS = "revert-tooltip";
        var GROUP_CELL_CLASS = "dx-group-cell";

        function getColumnId(that, column) {
            return that._columnsController.getColumnId(column)
        }

        function getDataCellElements($row) {
            return $row.find("td:not(.dx-datagrid-hidden-column):not([class*='dx-command-'])")
        }

        function adaptiveCellTemplate(container, options) {
            var $adaptiveColumnButton;
            var $container = (0, _renderer2.default)(container);
            var adaptiveColumnsController = options.component.getController("adaptiveColumns");
            if ("data" === options.rowType) {
                $adaptiveColumnButton = (0, _renderer2.default)("<span>").addClass(adaptiveColumnsController.addWidgetPrefix(ADAPTIVE_COLUMN_BUTTON_CLASS));
                _events_engine2.default.on($adaptiveColumnButton, eventUtils.addNamespace(_click2.default.name, ADAPTIVE_NAMESPACE), adaptiveColumnsController.createAction(function() {
                    adaptiveColumnsController.toggleExpandAdaptiveDetailRow(options.key)
                }));
                $adaptiveColumnButton.appendTo($container)
            } else {
                _uiGrid_core4.default.setEmptyText($container)
            }
        }
        var AdaptiveColumnsController = _uiGrid_core2.default.ViewController.inherit({
            _isRowEditMode: function() {
                var editMode = this._getEditMode();
                return editMode === EDIT_MODE_ROW
            },
            _isItemModified: function(item, cellOptions) {
                var columnIndex = this._columnsController.getVisibleIndex(item.column.index);
                var rowIndex = this._dataController.getRowIndexByKey(cellOptions.key);
                var row = this._dataController.items()[rowIndex + 1];
                return row && row.modifiedValues && _type2.default.isDefined(row.modifiedValues[columnIndex])
            },
            _renderFormViewTemplate: function(item, cellOptions, $container) {
                var that = this;
                var column = item.column;
                var focusAction = that.createAction(function() {
                    _events_engine2.default.trigger($container, _click2.default.name)
                });
                var value = column.calculateCellValue(cellOptions.data);
                var displayValue = _uiGrid_core4.default.getDisplayValue(column, value, cellOptions.data, cellOptions.rowType);
                var text = _uiGrid_core4.default.formatValue(displayValue, column);
                var isCellOrBatchEditMode = this._editingController.isCellOrBatchEditMode();
                var rowsView = that._rowsView;
                if (column.allowEditing && that.getController("keyboardNavigation").isKeyboardEnabled()) {
                    $container.attr("tabIndex", that.option("tabIndex"));
                    if (isCellOrBatchEditMode) {
                        _events_engine2.default.off($container, "focus", focusAction);
                        _events_engine2.default.on($container, "focus", focusAction)
                    }
                }
                if (column.cellTemplate) {
                    var templateOptions = (0, _extend.extend)({}, cellOptions, {
                        value: value,
                        displayValue: displayValue,
                        text: text,
                        column: column
                    });
                    var isDomElement = !!$container.closest((0, _window.getWindow)().document).length;
                    rowsView.renderTemplate($container, column.cellTemplate, templateOptions, isDomElement).done(function() {
                        rowsView._cellPrepared($container, cellOptions)
                    })
                } else {
                    var container = $container.get(0);
                    if (column.encodeHtml) {
                        container.textContent = text
                    } else {
                        container.innerHTML = text
                    }
                    $container.addClass(ADAPTIVE_ITEM_TEXT_CLASS);
                    if (!_type2.default.isDefined(text) || "" === text) {
                        $container.html("&nbsp;")
                    }
                    if (!that._isRowEditMode()) {
                        if (that._isItemModified(item, cellOptions)) {
                            $container.addClass(FORM_ITEM_MODIFIED)
                        }
                    }
                    rowsView._cellPrepared($container, cellOptions)
                }
            },
            _getTemplate: function(item, cellOptions) {
                var that = this;
                var column = item.column;
                var editingController = this.getController("editing");
                return function(options, container) {
                    var $container = (0, _renderer2.default)(container);
                    var columnIndex = that._columnsController.getVisibleIndex(column.visibleIndex);
                    var templateOptions = (0, _extend.extend)({}, cellOptions);
                    var renderFormTemplate = function() {
                        var isItemEdited = that._isItemEdited(item);
                        templateOptions.value = cellOptions.row.values[columnIndex];
                        if (isItemEdited || column.showEditorAlways) {
                            editingController.renderFormEditTemplate(templateOptions, item, options.component, $container, !isItemEdited)
                        } else {
                            templateOptions.column = column;
                            templateOptions.columnIndex = columnIndex;
                            that._renderFormViewTemplate(item, templateOptions, $container)
                        }
                    };
                    renderFormTemplate();
                    templateOptions.watch && templateOptions.watch(function() {
                        return {
                            isItemEdited: that._isItemEdited(item),
                            value: cellOptions.row.values[columnIndex]
                        }
                    }, function() {
                        $container.contents().remove();
                        $container.removeClass(ADAPTIVE_ITEM_TEXT_CLASS);
                        renderFormTemplate()
                    })
                }
            },
            _isVisibleColumnsValid: function(visibleColumns) {
                var getCommandColumnsCount = function() {
                    var result = 0;
                    for (var j = 0; j < visibleColumns.length; j++) {
                        var visibleColumn = visibleColumns[j];
                        if (visibleColumn.command) {
                            result++
                        }
                    }
                    return result
                };
                if (visibleColumns < 2) {
                    return false
                }
                if (visibleColumns.length - getCommandColumnsCount() <= 1) {
                    return false
                }
                return true
            },
            _calculatePercentWidths: function(widths, visibleColumns) {
                var that = this;
                var percentWidths = 0;
                visibleColumns.forEach(function(item, index) {
                    if (widths[index] !== HIDDEN_COLUMNS_WIDTH) {
                        percentWidths += that._getItemPercentWidth(item)
                    }
                });
                return percentWidths
            },
            _isPercentWidth: function(width) {
                return _type2.default.isString(width) && "%" === width.slice(-1)
            },
            _isColumnHidden: function(column) {
                return this._hiddenColumns.filter(function(hiddenColumn) {
                    return hiddenColumn.index === column.index
                }).length > 0
            },
            _getAverageColumnsWidth: function(containerWidth, columns, columnsCanFit) {
                var that = this;
                var fixedColumnsWidth = 0;
                var columnsWithoutFixedWidthCount = 0;
                columns.forEach(function(column) {
                    if (!that._isColumnHidden(column)) {
                        var width = column.width;
                        if (_type2.default.isDefined(width) && !isNaN(parseFloat(width))) {
                            fixedColumnsWidth += that._isPercentWidth(width) ? that._calculatePercentWidth({
                                visibleIndex: column.visibleIndex,
                                columnsCount: columns.length,
                                columnsCanFit: columnsCanFit,
                                bestFitWidth: column.bestFitWidth,
                                columnWidth: width,
                                containerWidth: containerWidth
                            }) : parseFloat(width)
                        } else {
                            columnsWithoutFixedWidthCount++
                        }
                    }
                });
                return (containerWidth - fixedColumnsWidth) / columnsWithoutFixedWidthCount
            },
            _calculateColumnWidth: function(column, containerWidth, contentColumns, columnsCanFit) {
                var columnId = getColumnId(this, column);
                var widthOption = this._columnsController.columnOption(columnId, "width");
                var bestFitWidth = this._columnsController.columnOption(columnId, "bestFitWidth");
                var columnsCount = contentColumns.length;
                var colWidth;
                if (widthOption && "auto" !== widthOption) {
                    if (this._isPercentWidth(widthOption)) {
                        colWidth = this._calculatePercentWidth({
                            visibleIndex: column.visibleIndex,
                            columnsCount: columnsCount,
                            columnsCanFit: columnsCanFit,
                            bestFitWidth: bestFitWidth,
                            columnWidth: widthOption,
                            containerWidth: containerWidth
                        })
                    } else {
                        return widthOption
                    }
                } else {
                    var columnAutoWidth = this.option("columnAutoWidth");
                    colWidth = columnAutoWidth || !!column.command ? bestFitWidth : this._getAverageColumnsWidth(containerWidth, contentColumns, columnsCanFit)
                }
                return colWidth
            },
            _calculatePercentWidth: function(options) {
                var columnFitted = options.visibleIndex < options.columnsCount - 1 && options.columnsCanFit;
                var partialWidth = options.containerWidth * parseFloat(options.columnWidth) / 100;
                var resultWidth = options.columnsCanFit && partialWidth < options.bestFitWidth ? options.bestFitWidth : partialWidth;
                return columnFitted ? options.containerWidth * parseFloat(options.columnWidth) / 100 : resultWidth
            },
            _getNotTruncatedColumnWidth: function(column, containerWidth, contentColumns, columnsCanFit) {
                var columnId = getColumnId(this, column);
                var widthOption = this._columnsController.columnOption(columnId, "width");
                var bestFitWidth = this._columnsController.columnOption(columnId, "bestFitWidth");
                if (widthOption && "auto" !== widthOption && !this._isPercentWidth(widthOption)) {
                    return parseFloat(widthOption)
                }
                var colWidth = this._calculateColumnWidth(column, containerWidth, contentColumns, columnsCanFit);
                return colWidth < bestFitWidth ? null : colWidth
            },
            _getItemPercentWidth: function(item) {
                var result = 0;
                if (item.width && this._isPercentWidth(item.width)) {
                    result = parseFloat(item.width)
                }
                return result
            },
            _getCommandColumnsWidth: function() {
                var that = this;
                var columns = that._columnsController.getVisibleColumns();
                var colWidth = 0;
                (0, _iterator.each)(columns, function(index, column) {
                    if (column.index < 0 || column.command) {
                        colWidth += that._columnsController.columnOption(getColumnId(that, column), "bestFitWidth") || 0
                    }
                });
                return colWidth
            },
            _isItemEdited: function(item) {
                if (this.isFormEditMode()) {
                    return false
                }
                if (this._isRowEditMode()) {
                    var editRowKey = this._editingController.getEditRowKey();
                    if ((0, _common.equalByValue)(editRowKey, this._dataController.adaptiveExpandedKey())) {
                        return true
                    }
                } else {
                    var rowIndex = this._dataController.getRowIndexByKey(this._dataController.adaptiveExpandedKey()) + 1;
                    var columnIndex = this._columnsController.getVisibleIndex(item.column.index);
                    return this._editingController.isEditCell(rowIndex, columnIndex)
                }
            },
            _getFormItemsByHiddenColumns: function(hiddenColumns) {
                var items = [];
                (0, _iterator.each)(hiddenColumns, function(_, column) {
                    items.push({
                        column: column,
                        name: column.name,
                        dataField: column.dataField,
                        visibleIndex: column.visibleIndex
                    })
                });
                return items
            },
            _getAdaptiveColumnVisibleIndex: function(visibleColumns) {
                for (var i = 0; i < visibleColumns.length; i++) {
                    var column = visibleColumns[i];
                    if (column.command === ADAPTIVE_COLUMN_NAME) {
                        return i
                    }
                }
            },
            _hideAdaptiveColumn: function(resultWidths, visibleColumns) {
                var visibleIndex = this._getAdaptiveColumnVisibleIndex(visibleColumns);
                if (_type2.default.isDefined(visibleIndex)) {
                    resultWidths[visibleIndex] = HIDDEN_COLUMNS_WIDTH;
                    this._hideVisibleColumn({
                        isCommandColumn: true,
                        visibleIndex: visibleIndex
                    })
                }
            },
            _showHiddenCellsInView: function(_ref) {
                var $cells = _ref.$cells,
                    isCommandColumn = _ref.isCommandColumn;
                var cssClassNameToRemove = isCommandColumn ? COMMAND_ADAPTIVE_HIDDEN_CLASS : this.addWidgetPrefix(HIDDEN_COLUMN_CLASS);
                $cells.removeClass(cssClassNameToRemove)
            },
            _showHiddenColumns: function() {
                for (var i = 0; i < COLUMN_VIEWS.length; i++) {
                    var view = this.getView(COLUMN_VIEWS[i]);
                    if (view && view.isVisible() && view.element()) {
                        var viewName = view.name;
                        var $hiddenCommandCells = view.element().find("." + COMMAND_ADAPTIVE_HIDDEN_CLASS);
                        this._showHiddenCellsInView({
                            viewName: viewName,
                            $cells: $hiddenCommandCells,
                            isCommandColumn: true
                        });
                        var $hiddenCells = view.element().find("." + this.addWidgetPrefix(HIDDEN_COLUMN_CLASS));
                        this._showHiddenCellsInView({
                            viewName: viewName,
                            $cells: $hiddenCells
                        })
                    }
                }
            },
            _isCellValid: function($cell) {
                return $cell && $cell.length && !$cell.hasClass(MASTER_DETAIL_CELL_CLASS) && !$cell.hasClass(GROUP_CELL_CLASS)
            },
            _hideVisibleColumn: function(_ref2) {
                var isCommandColumn = _ref2.isCommandColumn,
                    visibleIndex = _ref2.visibleIndex;
                var that = this;
                COLUMN_VIEWS.forEach(function(viewName) {
                    var view = that.getView(viewName);
                    view && that._hideVisibleColumnInView({
                        view: view,
                        isCommandColumn: isCommandColumn,
                        visibleIndex: visibleIndex
                    })
                })
            },
            _hideVisibleColumnInView: function(_ref3) {
                var view = _ref3.view,
                    isCommandColumn = _ref3.isCommandColumn,
                    visibleIndex = _ref3.visibleIndex;
                var viewName = view.name;
                var $cellElement;
                var column = this._columnsController.getVisibleColumns()[visibleIndex];
                var editFormRowIndex = this._editingController && this._editingController.getEditFormRowIndex();
                if (view && view.isVisible() && column) {
                    var rowsCount = view.getRowsCount();
                    var $rowElements = view._getRowElements();
                    for (var rowIndex = 0; rowIndex < rowsCount; rowIndex++) {
                        var cancelClassAdding = rowIndex === editFormRowIndex && viewName === ROWS_VIEW && "popup" !== this.option("editing.mode");
                        if (!cancelClassAdding) {
                            var currentVisibleIndex = viewName === COLUMN_HEADERS_VIEW ? this._columnsController.getVisibleIndex(column.index, rowIndex) : visibleIndex;
                            if (currentVisibleIndex >= 0) {
                                $cellElement = $rowElements.eq(rowIndex).children().eq(currentVisibleIndex);
                                this._isCellValid($cellElement) && this._hideVisibleCellInView({
                                    viewName: viewName,
                                    isCommandColumn: isCommandColumn,
                                    $cell: $cellElement
                                })
                            }
                        }
                    }
                }
            },
            _hideVisibleCellInView: function(_ref4) {
                var $cell = _ref4.$cell,
                    isCommandColumn = _ref4.isCommandColumn;
                var cssClassNameToAdd = isCommandColumn ? COMMAND_ADAPTIVE_HIDDEN_CLASS : this.addWidgetPrefix(HIDDEN_COLUMN_CLASS);
                $cell.addClass(cssClassNameToAdd)
            },
            _getEditMode: function() {
                return this._editingController.getEditMode()
            },
            isFormEditMode: function() {
                var editMode = this._getEditMode();
                return editMode === EDIT_MODE_FORM || editMode === EDIT_MODE_POPUP
            },
            hideRedundantColumns: function(resultWidths, visibleColumns, hiddenQueue) {
                var that = this;
                this._hiddenColumns = [];
                if (that._isVisibleColumnsValid(visibleColumns) && hiddenQueue.length) {
                    var totalWidth = 0;
                    var $rootElement = that.component.$element();
                    var rootElementWidth = $rootElement.width() - that._getCommandColumnsWidth();
                    var getVisibleContentColumns = function() {
                        var _this = this;
                        return visibleColumns.filter(function(item) {
                            return !item.command && 0 === _this._hiddenColumns.filter(function(i) {
                                return i.index === item.index
                            }).length
                        })
                    }.bind(this);
                    var visibleContentColumns = getVisibleContentColumns();
                    var contentColumnsCount = visibleContentColumns.length;
                    var i;
                    var hasHiddenColumns;
                    var needHideColumn;
                    do {
                        needHideColumn = false;
                        totalWidth = 0;
                        var percentWidths = that._calculatePercentWidths(resultWidths, visibleColumns);
                        var columnsCanFit = percentWidths < 100 && 0 !== percentWidths;
                        for (i = 0; i < visibleColumns.length; i++) {
                            var visibleColumn = visibleColumns[i];
                            var columnWidth = that._getNotTruncatedColumnWidth(visibleColumn, rootElementWidth, visibleContentColumns, columnsCanFit);
                            var columnId = getColumnId(that, visibleColumn);
                            var widthOption = that._columnsController.columnOption(columnId, "width");
                            var minWidth = that._columnsController.columnOption(columnId, "minWidth");
                            var columnBestFitWidth = that._columnsController.columnOption(columnId, "bestFitWidth");
                            if (resultWidths[i] === HIDDEN_COLUMNS_WIDTH) {
                                hasHiddenColumns = true;
                                continue
                            }
                            if (!columnWidth && !visibleColumn.command && !visibleColumn.fixed) {
                                needHideColumn = true;
                                break
                            }
                            if (!widthOption || "auto" === widthOption) {
                                columnWidth = Math.max(columnBestFitWidth || 0, minWidth || 0)
                            }
                            if (visibleColumn.command !== ADAPTIVE_COLUMN_NAME || hasHiddenColumns) {
                                totalWidth += columnWidth
                            }
                        }
                        needHideColumn = needHideColumn || totalWidth > $rootElement.width();
                        if (needHideColumn) {
                            var column = hiddenQueue.pop();
                            var visibleIndex = that._columnsController.getVisibleIndex(column.index);
                            rootElementWidth += that._calculateColumnWidth(column, rootElementWidth, visibleContentColumns, columnsCanFit);
                            that._hideVisibleColumn({
                                visibleIndex: visibleIndex
                            });
                            resultWidths[visibleIndex] = HIDDEN_COLUMNS_WIDTH;
                            this._hiddenColumns.push(column);
                            visibleContentColumns = getVisibleContentColumns()
                        }
                    } while (needHideColumn && visibleContentColumns.length > 1 && hiddenQueue.length);
                    if (contentColumnsCount === visibleContentColumns.length) {
                        that._hideAdaptiveColumn(resultWidths, visibleColumns)
                    }
                } else {
                    that._hideAdaptiveColumn(resultWidths, visibleColumns)
                }
            },
            getItemContentByColumnIndex: function(visibleColumnIndex) {
                var $itemContent;
                for (var i = 0; i < this._$itemContents.length; i++) {
                    $itemContent = this._$itemContents.eq(i);
                    var item = $itemContent.data("dx-form-item");
                    if (item && item.column && this._columnsController.getVisibleIndex(item.column.index) === visibleColumnIndex) {
                        return $itemContent
                    }
                }
            },
            toggleExpandAdaptiveDetailRow: function(key, alwaysExpanded) {
                if (!(this.isFormEditMode() && this._editingController.isEditing())) {
                    this.getController("data").toggleExpandAdaptiveDetailRow(key, alwaysExpanded)
                }
            },
            createFormByHiddenColumns: function(container, options) {
                var that = this;
                var $container = (0, _renderer2.default)(container);
                var userFormOptions = {
                    items: that._getFormItemsByHiddenColumns(that._hiddenColumns),
                    formID: "dx-" + new _guid2.default
                };
                var defaultFormOptions = _themes2.default.isMaterial() ? {
                    colCount: 2
                } : {};
                this.executeAction("onAdaptiveDetailRowPreparing", {
                    formOptions: userFormOptions
                });
                that._$itemContents = null;
                that._form = that._createComponent((0, _renderer2.default)("<div>").appendTo($container), _form2.default, (0, _extend.extend)(defaultFormOptions, userFormOptions, {
                    customizeItem: function(item) {
                        var column = item.column || that._columnsController.columnOption(item.name || item.dataField);
                        if (column) {
                            item.label = item.label || {};
                            item.label.text = item.label.text || column.caption;
                            item.column = column;
                            item.template = that._getTemplate(item, options, that.updateForm.bind(that))
                        }
                        userFormOptions.customizeItem && userFormOptions.customizeItem.call(this, item)
                    },
                    onContentReady: function(e) {
                        userFormOptions.onContentReady && userFormOptions.onContentReady.call(this, e);
                        that._$itemContents = $container.find("." + FORM_ITEM_CONTENT_CLASS)
                    }
                }))
            },
            hasAdaptiveDetailRowExpanded: function() {
                return _type2.default.isDefined(this._dataController.adaptiveExpandedKey())
            },
            updateForm: function(hiddenColumns) {
                if (this.hasAdaptiveDetailRowExpanded()) {
                    if (this._form && _type2.default.isDefined(this._form._contentReadyAction)) {
                        if (hiddenColumns && hiddenColumns.length) {
                            this._form.option("items", this._getFormItemsByHiddenColumns(hiddenColumns))
                        } else {
                            this._form.repaint()
                        }
                    }
                }
            },
            updateHidingQueue: function(columns) {
                var that = this;
                var hideableColumns = columns.filter(function(column) {
                    return column.visible && !column.type && !column.fixed && !(_type2.default.isDefined(column.groupIndex) && column.groupIndex >= 0)
                });
                var columnsHasHidingPriority;
                var i;
                that._hidingColumnsQueue = [];
                if (that.option("allowColumnResizing") && "widget" === that.option("columnResizingMode")) {
                    return that._hidingColumnsQueue
                }
                for (i = 0; i < hideableColumns.length; i++) {
                    if (_type2.default.isDefined(hideableColumns[i].hidingPriority) && hideableColumns[i].hidingPriority >= 0) {
                        columnsHasHidingPriority = true;
                        that._hidingColumnsQueue[hideableColumns[i].hidingPriority] = hideableColumns[i]
                    }
                }
                if (columnsHasHidingPriority) {
                    that._hidingColumnsQueue.reverse()
                } else {
                    if (that.option("columnHidingEnabled")) {
                        for (i = 0; i < hideableColumns.length; i++) {
                            var visibleIndex = that._columnsController.getVisibleIndex(hideableColumns[i].index);
                            that._hidingColumnsQueue[visibleIndex] = hideableColumns[i]
                        }
                    }
                }
                that._hidingColumnsQueue = that._hidingColumnsQueue.filter(Object);
                return that._hidingColumnsQueue
            },
            getHiddenColumns: function() {
                return this._hiddenColumns
            },
            hasHiddenColumns: function() {
                return this._hiddenColumns.length > 0
            },
            getHidingColumnsQueue: function() {
                return this._hidingColumnsQueue
            },
            init: function() {
                var that = this;
                that._columnsController = that.getController("columns");
                that._dataController = that.getController("data");
                that._rowsView = that.getView("rowsView");
                that._columnsController.addCommandColumn({
                    type: ADAPTIVE_COLUMN_NAME,
                    command: ADAPTIVE_COLUMN_NAME,
                    visible: true,
                    adaptiveHidden: true,
                    cssClass: ADAPTIVE_COLUMN_NAME_CLASS,
                    alignment: "center",
                    width: "auto",
                    cellTemplate: adaptiveCellTemplate,
                    fixedPosition: "right"
                });
                that._columnsController.columnsChanged.add(function() {
                    var isAdaptiveVisible = !!that.updateHidingQueue(that._columnsController.getColumns()).length;
                    that._columnsController.columnOption("command:adaptive", "adaptiveHidden", !isAdaptiveVisible, true)
                });
                that._editingController = that.getController("editing");
                that._hidingColumnsQueue = [];
                that._hiddenColumns = [];
                that.createAction("onAdaptiveDetailRowPreparing");
                that.callBase()
            },
            optionChanged: function(args) {
                if ("columnHidingEnabled" === args.name) {
                    this._columnsController.columnOption("command:adaptive", "adaptiveHidden", !args.value)
                }
                this.callBase(args)
            },
            publicMethods: function() {
                return ["isAdaptiveDetailRowExpanded", "expandAdaptiveDetailRow", "collapseAdaptiveDetailRow"]
            },
            isAdaptiveDetailRowExpanded: function(key) {
                return this._dataController.adaptiveExpandedKey() && (0, _common.equalByValue)(this._dataController.adaptiveExpandedKey(), key)
            },
            expandAdaptiveDetailRow: function(key) {
                if (!this.hasAdaptiveDetailRowExpanded()) {
                    this.toggleExpandAdaptiveDetailRow(key)
                }
            },
            collapseAdaptiveDetailRow: function() {
                if (this.hasAdaptiveDetailRowExpanded()) {
                    this.toggleExpandAdaptiveDetailRow()
                }
            }
        });
        module.exports = {
            defaultOptions: function() {
                return {
                    columnHidingEnabled: false,
                    onAdaptiveDetailRowPreparing: null
                }
            },
            controllers: {
                adaptiveColumns: AdaptiveColumnsController
            },
            extenders: {
                views: {
                    rowsView: {
                        _getCellTemplate: function(options) {
                            var that = this;
                            var column = options.column;
                            if (options.rowType === ADAPTIVE_ROW_TYPE && "detail" === column.command) {
                                return function(container, options) {
                                    that._adaptiveColumnsController.createFormByHiddenColumns((0, _renderer2.default)(container), options)
                                }
                            }
                            return that.callBase(options)
                        },
                        _createRow: function(row) {
                            var $row = this.callBase(row);
                            if (row && row.rowType === ADAPTIVE_ROW_TYPE && row.key === this._dataController.adaptiveExpandedKey()) {
                                $row.addClass(ADAPTIVE_DETAIL_ROW_CLASS)
                            }
                            return $row
                        },
                        _renderCells: function($row, options) {
                            this.callBase($row, options);
                            var hidingColumnsQueueLength = this._adaptiveColumnsController.getHidingColumnsQueue().length;
                            var hiddenColumnsLength = this._adaptiveColumnsController.getHiddenColumns().length;
                            if (hidingColumnsQueueLength && !hiddenColumnsLength) {
                                getDataCellElements($row).last().addClass(LAST_DATA_CELL_CLASS)
                            }
                        },
                        _getColumnIndexByElementCore: function($element) {
                            var $itemContent = $element.closest("." + FORM_ITEM_CONTENT_CLASS);
                            if ($itemContent.length && $itemContent.closest(this.component.$element()).length) {
                                var formItem = $itemContent.length ? $itemContent.first().data("dx-form-item") : null;
                                return formItem && formItem.column && this._columnsController.getVisibleIndex(formItem.column.index)
                            } else {
                                return this.callBase($element)
                            }
                        },
                        _cellPrepared: function($cell, options) {
                            this.callBase.apply(this, arguments);
                            if (options.row.rowType !== ADAPTIVE_ROW_TYPE && options.column.visibleWidth === HIDDEN_COLUMNS_WIDTH) {
                                $cell.addClass(this.addWidgetPrefix(HIDDEN_COLUMN_CLASS))
                            }
                        },
                        _getCellElement: function(rowIndex, columnIdentifier) {
                            var item = this._dataController.items()[rowIndex];
                            if (item && item.rowType === ADAPTIVE_ROW_TYPE) {
                                return this._adaptiveColumnsController.getItemContentByColumnIndex(columnIdentifier)
                            } else {
                                return this.callBase(rowIndex, columnIdentifier)
                            }
                        },
                        getContextMenuItems: function(options) {
                            if (options.row && "detailAdaptive" === options.row.rowType) {
                                var view = this.component.getView("columnHeadersView");
                                var formItem = (0, _renderer2.default)(options.targetElement).closest(".dx-field-item-label").next().data("dx-form-item");
                                options.column = formItem ? formItem.column : options.column;
                                return view.getContextMenuItems && view.getContextMenuItems(options)
                            }
                            return this.callBase && this.callBase(options)
                        },
                        isClickableElement: function($target) {
                            var isClickable = this.callBase ? this.callBase($target) : false;
                            return isClickable || !!$target.closest("." + ADAPTIVE_COLUMN_NAME_CLASS).length
                        },
                        init: function() {
                            this.callBase();
                            this._adaptiveColumnsController = this.getController("adaptiveColumns")
                        }
                    }
                },
                controllers: {
                    "export": {
                        _updateColumnWidth: function(column, width) {
                            this.callBase(column, column.visibleWidth === HIDDEN_COLUMNS_WIDTH ? column.bestFitWidth : width)
                        }
                    },
                    columnsResizer: {
                        _pointCreated: function(point, cellsLength, columns) {
                            var result = this.callBase(point, cellsLength, columns);
                            var currentColumn = columns[point.columnIndex] || {};
                            var nextColumnIndex = this._getNextColumnIndex(point.columnIndex);
                            var nextColumn = columns[nextColumnIndex] || {};
                            var hasHiddenColumnsOnly = nextColumnIndex !== point.columnIndex + 1 && nextColumn.command;
                            var hasAdaptiveHiddenWidth = currentColumn.visibleWidth === HIDDEN_COLUMNS_WIDTH || hasHiddenColumnsOnly;
                            return result || hasAdaptiveHiddenWidth
                        },
                        _getNextColumnIndex: function(currentColumnIndex) {
                            var visibleColumns = this._columnsController.getVisibleColumns();
                            var index = this.callBase(currentColumnIndex);
                            while (visibleColumns[index] && visibleColumns[index].visibleWidth === HIDDEN_COLUMNS_WIDTH) {
                                index++
                            }
                            return index
                        }
                    },
                    draggingHeader: {
                        _pointCreated: function(point, columns, location, sourceColumn) {
                            var result = this.callBase(point, columns, location, sourceColumn);
                            var column = columns[point.columnIndex - 1] || {};
                            var hasAdaptiveHiddenWidth = column.visibleWidth === HIDDEN_COLUMNS_WIDTH;
                            return result || hasAdaptiveHiddenWidth
                        }
                    },
                    editing: {
                        _isRowEditMode: function() {
                            return this.getEditMode() === EDIT_MODE_ROW
                        },
                        _getFormEditItemTemplate: function(cellOptions, column) {
                            if (this.getEditMode() !== EDIT_MODE_ROW && "detailAdaptive" === cellOptions.rowType) {
                                cellOptions.columnIndex = this._columnsController.getVisibleIndex(column.index);
                                return this.getColumnTemplate(cellOptions)
                            }
                            return this.callBase(cellOptions, column)
                        },
                        _closeEditItem: function($targetElement) {
                            var $itemContents = $targetElement.closest("." + FORM_ITEM_CONTENT_CLASS);
                            var rowIndex = this._dataController.getRowIndexByKey(this._dataController.adaptiveExpandedKey()) + 1;
                            var formItem = $itemContents.length ? $itemContents.first().data("dx-form-item") : null;
                            var columnIndex = formItem && formItem.column && this._columnsController.getVisibleIndex(formItem.column.index);
                            if (!this.isEditCell(rowIndex, columnIndex)) {
                                this.callBase($targetElement)
                            }
                        },
                        _beforeUpdateItems: function(rowIndices, rowIndex) {
                            if (!this._adaptiveController.isFormEditMode() && this._adaptiveController.hasHiddenColumns()) {
                                var items = this._dataController.items();
                                var item = items[rowIndex];
                                var oldExpandRowIndex = _uiGrid_core4.default.getIndexByKey(this._dataController.adaptiveExpandedKey(), items);
                                this._isForceRowAdaptiveExpand = !this._adaptiveController.hasAdaptiveDetailRowExpanded();
                                if (oldExpandRowIndex >= 0 && rowIndex > oldExpandRowIndex) {
                                    this._editRowIndex--
                                }
                                if (oldExpandRowIndex >= 0) {
                                    rowIndices.push(oldExpandRowIndex + 1)
                                }
                                rowIndices.push(rowIndex + 1);
                                this._dataController.adaptiveExpandedKey(item.key)
                            }
                        },
                        _afterInsertRow: function(options) {
                            this.callBase(options);
                            if (this._adaptiveController.hasHiddenColumns()) {
                                this._adaptiveController.toggleExpandAdaptiveDetailRow(options.key, this.isRowEditMode());
                                this._isForceRowAdaptiveExpand = true
                            }
                        },
                        _collapseAdaptiveDetailRow: function() {
                            if (this._isRowEditMode() && this._isForceRowAdaptiveExpand) {
                                this._adaptiveController.collapseAdaptiveDetailRow();
                                this._isForceRowAdaptiveExpand = false
                            }
                        },
                        _cancelEditAdaptiveDetailRow: function() {
                            if (this._adaptiveController.hasHiddenColumns()) {
                                this._collapseAdaptiveDetailRow()
                            }
                        },
                        _afterSaveEditData: function() {
                            var _this2 = this;
                            this.callBase();
                            var deferred = new _deferred.Deferred;
                            if (this._isRowEditMode() && this._adaptiveController.hasHiddenColumns()) {
                                (0, _deferred.when)(this.getController("validating").validate(true)).done(function(isValid) {
                                    if (isValid) {
                                        _this2._cancelEditAdaptiveDetailRow()
                                    }
                                    deferred.resolve()
                                })
                            } else {
                                deferred.resolve()
                            }
                            return deferred.promise()
                        },
                        _beforeCancelEditData: function() {
                            this.callBase();
                            this._cancelEditAdaptiveDetailRow()
                        },
                        _getRowIndicesForCascadeUpdating: function(row) {
                            var rowIndices = this.callBase.apply(this, arguments);
                            if (this._adaptiveController.isAdaptiveDetailRowExpanded(row.key)) {
                                rowIndices.push(row.rowType === ADAPTIVE_ROW_TYPE ? row.rowIndex - 1 : row.rowIndex + 1)
                            }
                            return rowIndices
                        },
                        _beforeCloseEditCellInBatchMode: function(rowIndices) {
                            var expandedKey = this._dataController._adaptiveExpandedKey;
                            if (expandedKey) {
                                var rowIndex = _uiGrid_core4.default.getIndexByKey(expandedKey, this._dataController.items());
                                if (rowIndex > -1) {
                                    rowIndices.unshift(rowIndex)
                                }
                            }
                        },
                        editRow: function(rowIndex) {
                            if (this._adaptiveController.isFormEditMode()) {
                                this._adaptiveController.collapseAdaptiveDetailRow()
                            }
                            this.callBase(rowIndex)
                        },
                        deleteRow: function(rowIndex) {
                            var rowKey = this._dataController.getKeyByRowIndex(rowIndex);
                            if (this.getEditMode() === EDIT_MODE_BATCH && this._adaptiveController.isAdaptiveDetailRowExpanded(rowKey)) {
                                this._adaptiveController.collapseAdaptiveDetailRow()
                            }
                            this.callBase(rowIndex)
                        },
                        init: function() {
                            this.callBase();
                            this._adaptiveController = this.getController("adaptiveColumns")
                        }
                    },
                    resizing: {
                        _needBestFit: function() {
                            return this.callBase() || !!this._adaptiveColumnsController.getHidingColumnsQueue().length
                        },
                        _updateScrollableForIE: function() {
                            var that = this;
                            if (_browser2.default.msie && parseInt(_browser2.default.version) <= 11) {
                                this._updateScrollableTimeoutID = setTimeout(function() {
                                    that.getView("rowsView")._updateScrollable()
                                })
                            }
                        },
                        _correctColumnWidths: function(resultWidths, visibleColumns) {
                            var adaptiveController = this._adaptiveColumnsController;
                            var columnAutoWidth = this.option("columnAutoWidth");
                            var oldHiddenColumns = adaptiveController.getHiddenColumns();
                            var hidingColumnsQueue = adaptiveController.updateHidingQueue(this._columnsController.getColumns());
                            adaptiveController.hideRedundantColumns(resultWidths, visibleColumns, hidingColumnsQueue);
                            var hiddenColumns = adaptiveController.getHiddenColumns();
                            if (adaptiveController.hasAdaptiveDetailRowExpanded()) {
                                if (oldHiddenColumns.length !== hiddenColumns.length) {
                                    adaptiveController.updateForm(hiddenColumns)
                                }
                            }!hiddenColumns.length && adaptiveController.collapseAdaptiveDetailRow();
                            if (columnAutoWidth && hidingColumnsQueue.length && !hiddenColumns.length) {
                                this._updateScrollableForIE()
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _toggleBestFitMode: function(isBestFit) {
                            isBestFit && this._adaptiveColumnsController._showHiddenColumns();
                            this.callBase(isBestFit)
                        },
                        _needStretch: function() {
                            var adaptiveColumnsController = this._adaptiveColumnsController;
                            return this.callBase.apply(this, arguments) || adaptiveColumnsController.getHidingColumnsQueue().length || adaptiveColumnsController.hasHiddenColumns()
                        },
                        init: function() {
                            this._adaptiveColumnsController = this.getController("adaptiveColumns");
                            this.callBase()
                        },
                        dispose: function() {
                            this.callBase.apply(this, arguments);
                            clearTimeout(this._updateScrollableTimeoutID)
                        }
                    },
                    data: {
                        _processItems: function(items, change) {
                            var that = this;
                            var changeType = change.changeType;
                            items = that.callBase.apply(that, arguments);
                            if ("loadingAll" === changeType || !_type2.default.isDefined(that._adaptiveExpandedKey)) {
                                return items
                            }
                            var expandRowIndex = _uiGrid_core4.default.getIndexByKey(that._adaptiveExpandedKey, items);
                            if (expandRowIndex >= 0) {
                                var item = items[expandRowIndex];
                                items.splice(expandRowIndex + 1, 0, {
                                    visible: true,
                                    rowType: ADAPTIVE_ROW_TYPE,
                                    key: item.key,
                                    data: item.data,
                                    node: item.node,
                                    modifiedValues: item.modifiedValues,
                                    isNewRow: item.isNewRow,
                                    values: item.values
                                })
                            } else {
                                if ("refresh" === changeType) {
                                    that._adaptiveExpandedKey = void 0
                                }
                            }
                            return items
                        },
                        _getRowIndicesForExpand: function(key) {
                            var rowIndices = this.callBase.apply(this, arguments);
                            if (this.getController("adaptiveColumns").isAdaptiveDetailRowExpanded(key)) {
                                var lastRowIndex = rowIndices[rowIndices.length - 1];
                                rowIndices.push(lastRowIndex + 1)
                            }
                            return rowIndices
                        },
                        adaptiveExpandedKey: function(value) {
                            if (_type2.default.isDefined(value)) {
                                this._adaptiveExpandedKey = value
                            } else {
                                return this._adaptiveExpandedKey
                            }
                        },
                        toggleExpandAdaptiveDetailRow: function(key, alwaysExpanded) {
                            var that = this;
                            var oldExpandLoadedRowIndex = _uiGrid_core4.default.getIndexByKey(that._adaptiveExpandedKey, that._items);
                            var newExpandLoadedRowIndex = _uiGrid_core4.default.getIndexByKey(key, that._items);
                            if (oldExpandLoadedRowIndex >= 0 && oldExpandLoadedRowIndex === newExpandLoadedRowIndex && !alwaysExpanded) {
                                key = void 0;
                                newExpandLoadedRowIndex = -1
                            }
                            that._adaptiveExpandedKey = key;
                            if (oldExpandLoadedRowIndex >= 0) {
                                oldExpandLoadedRowIndex++
                            }
                            if (newExpandLoadedRowIndex >= 0) {
                                newExpandLoadedRowIndex++
                            }
                            var rowIndexDelta = that.getRowIndexDelta();
                            that.updateItems({
                                allowInvisibleRowIndices: true,
                                changeType: "update",
                                rowIndices: [oldExpandLoadedRowIndex - rowIndexDelta, newExpandLoadedRowIndex - rowIndexDelta]
                            })
                        },
                        init: function() {
                            this.callBase();
                            this._adaptiveExpandedKey = void 0
                        }
                    },
                    editorFactory: {
                        _getFocusCellSelector: function() {
                            return this.callBase() + ", .dx-adaptive-detail-row .dx-field-item > .dx-field-item-content"
                        },
                        _getTooltipsSelector: function() {
                            return this.callBase() + ", .dx-field-item-content ." + this.addWidgetPrefix(REVERT_TOOLTIP_CLASS)
                        }
                    },
                    columns: {
                        _isColumnVisible: function(column) {
                            return this.callBase(column) && !column.adaptiveHidden
                        }
                    },
                    keyboardNavigation: {
                        _isCellValid: function($cell) {
                            return this.callBase.apply(this, arguments) && !$cell.hasClass(this.addWidgetPrefix(HIDDEN_COLUMN_CLASS))
                        },
                        _processNextCellInMasterDetail: function($nextCell) {
                            this.callBase($nextCell);
                            var isCellOrBatchMode = this._editingController.isCellOrBatchEditMode();
                            if (!this._isInsideEditForm($nextCell) && $nextCell && isCellOrBatchMode) {
                                var focusHandler = function focusHandler() {
                                    _events_engine2.default.off($nextCell, "focus", focusHandler);
                                    _events_engine2.default.trigger($nextCell, "dxclick")
                                };
                                _events_engine2.default.on($nextCell, "focus", focusHandler)
                            }
                        },
                        _handleTabKeyOnMasterDetailCell: function(eventTarget, direction) {
                            var result = this.callBase(eventTarget, direction);
                            var $currentCell = this._getFocusedCell();
                            var $row = $currentCell && $currentCell.parent();
                            if (!result && $row && $row.length) {
                                var $dataCells = getDataCellElements($row);
                                var $targetCell = "next" === direction ? $dataCells.last() : $dataCells.first();
                                var rowIndex = $row.get(0).rowIndex;
                                var adaptiveController = this._adaptiveController;
                                var key = this._dataController.getKeyByRowIndex("next" === direction ? rowIndex : rowIndex - 1);
                                var isCellElementsEquals = $currentCell && $targetCell && $currentCell.get(0) === $targetCell.get(0);
                                return adaptiveController.isAdaptiveDetailRowExpanded(key) && isCellElementsEquals
                            }
                            return result
                        },
                        init: function() {
                            this.callBase();
                            this._adaptiveController = this.getController("adaptiveColumns")
                        }
                    }
                }
            }
        }
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.virtual_columns.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.virtual_columns_core */ 389);
        var DEFAULT_COLUMN_WIDTH = 50;
        var VirtualScrollingRowsViewExtender = {
            _resizeCore: function() {
                this.callBase.apply(this, arguments);
                this._columnsController.resize()
            },
            _handleScroll: function(e) {
                var that = this;
                var scrollable = this.getScrollable();
                var left = e.scrollOffset.left;
                that.callBase.apply(that, arguments);
                if (that.option("rtlEnabled") && scrollable) {
                    left = scrollable.$content().width() - scrollable.$element().width() - left
                }
                that._columnsController.setScrollPosition(left)
            }
        };
        var HeaderFooterViewExtender = {
            _renderCore: function() {
                var that = this;
                var scrollLeft = that._scrollLeft;
                that.callBase.apply(that, arguments);
                if (that._columnsController.isVirtualMode() && scrollLeft >= 0) {
                    that._scrollLeft = 0;
                    that.scrollTo({
                        left: scrollLeft
                    })
                }
            }
        };
        var ColumnsControllerExtender = function() {
            var getWidths = function(columns) {
                return columns.map(function(column) {
                    return column.visibleWidth || parseFloat(column.width) || DEFAULT_COLUMN_WIDTH
                })
            };
            var members = {
                init: function() {
                    var that = this;
                    that.callBase();
                    that._beginPageIndex = 0;
                    that._endPageIndex = 0;
                    that._position = 0;
                    that._virtualVisibleColumns = {}
                },
                resetColumnsCache: function() {
                    this.callBase();
                    this._virtualVisibleColumns = {}
                },
                getBeginPageIndex: function(position) {
                    var visibleColumns = this.getVisibleColumns(void 0, true);
                    var widths = getWidths(visibleColumns);
                    var currentPosition = 0;
                    for (var index = 0; index < widths.length; index++) {
                        if (currentPosition >= position) {
                            return Math.floor(index / this.getColumnPageSize())
                        }
                        currentPosition += widths[index]
                    }
                    return 0
                },
                getTotalWidth: function() {
                    var width = this.option("width");
                    if ("number" === typeof width) {
                        return width
                    }
                    return this.getController("resizing")._lastWidth || this.component.$element().outerWidth()
                },
                getEndPageIndex: function(position) {
                    var visibleColumns = this.getVisibleColumns(void 0, true);
                    var widths = getWidths(visibleColumns);
                    var currentPosition = 0;
                    position += this.getTotalWidth();
                    for (var index = 0; index < widths.length; index++) {
                        if (currentPosition >= position) {
                            return Math.ceil(index / this.getColumnPageSize())
                        }
                        currentPosition += widths[index]
                    }
                    return Math.ceil(widths.length / this.getColumnPageSize())
                },
                getColumnPageSize: function() {
                    return this.option("scrolling.columnPageSize")
                },
                _fireColumnsChanged: function() {
                    var date = new Date;
                    this.columnsChanged.fire({
                        optionNames: {
                            all: true,
                            length: 1
                        },
                        changeTypes: {
                            columns: true,
                            length: 1
                        }
                    });
                    this._renderTime = new Date - date
                },
                setScrollPosition: function(position) {
                    var that = this;
                    var renderingThreshold = that.option("scrolling.columnRenderingThreshold");
                    if (that._renderTime > renderingThreshold) {
                        clearTimeout(that._changedTimeout);
                        that._changedTimeout = setTimeout(function() {
                            that._setScrollPositionCore(position)
                        }, that.option("scrolling.timeout"))
                    } else {
                        that._setScrollPositionCore(position)
                    }
                },
                isVirtualMode: function() {
                    return (0, _window.hasWindow)() && "virtual" === this.option("scrolling.columnRenderingMode")
                },
                resize: function() {
                    this._setScrollPositionCore(this._position)
                },
                _setScrollPositionCore: function(position) {
                    var that = this;
                    if (that.isVirtualMode()) {
                        var beginPageIndex = that.getBeginPageIndex(position);
                        var endPageIndex = that.getEndPageIndex(position);
                        var needColumnsChanged = position < that._position ? that._beginPageIndex > beginPageIndex : that._endPageIndex < endPageIndex;
                        that._position = position;
                        if (needColumnsChanged) {
                            that._beginPageIndex = beginPageIndex;
                            that._endPageIndex = endPageIndex;
                            that._fireColumnsChanged()
                        }
                    }
                },
                getFixedColumns: function(rowIndex, isBase) {
                    var fixedColumns = this.callBase(rowIndex);
                    if (this.isVirtualMode() && !isBase && fixedColumns.length) {
                        var transparentColumnIndex = fixedColumns.map(function(c) {
                            return c.command
                        }).indexOf("transparent");
                        fixedColumns[transparentColumnIndex].colspan = this.getVisibleColumns().length - this.callBase().length + 1;
                        return fixedColumns
                    }
                    return fixedColumns
                },
                getVisibleColumns: function(rowIndex, isBase) {
                    if (isBase || !this.isVirtualMode()) {
                        return this.callBase(rowIndex)
                    }
                    if (!this._beginPageIndex && !this._endPageIndex) {
                        this._beginPageIndex = this.getBeginPageIndex(this._position);
                        this._endPageIndex = this.getEndPageIndex(this._position)
                    }
                    var beginPageIndex = this._beginPageIndex;
                    var endPageIndex = this._endPageIndex;
                    var visibleColumnsHash = rowIndex + "-" + beginPageIndex + "-" + endPageIndex;
                    if (this._virtualVisibleColumns[visibleColumnsHash]) {
                        return this._virtualVisibleColumns[visibleColumnsHash]
                    }
                    var visibleColumns = this.callBase();
                    var rowCount = this.getRowCount();
                    var pageSize = this.getColumnPageSize();
                    var startIndex = beginPageIndex * pageSize;
                    var endIndex = endPageIndex * pageSize;
                    var fixedColumns = this.getFixedColumns(void 0, true);
                    var transparentColumnIndex = fixedColumns.map(function(c) {
                        return c.command
                    }).indexOf("transparent");
                    var beginFixedColumnCount = fixedColumns.length ? transparentColumnIndex : 0;
                    var beginFixedColumns = visibleColumns.slice(0, beginFixedColumnCount);
                    var beginColumns = visibleColumns.slice(beginFixedColumnCount, startIndex);
                    var beginWidth = getWidths(beginColumns).reduce(function(a, b) {
                        return a + b
                    }, 0);
                    if (!beginWidth) {
                        startIndex = 0
                    }
                    var endFixedColumnCount = fixedColumns.length ? fixedColumns.length - transparentColumnIndex - 1 : 0;
                    var endFixedColumns = visibleColumns.slice(visibleColumns.length - endFixedColumnCount);
                    var endColumns = visibleColumns.slice(endIndex, visibleColumns.length - endFixedColumnCount);
                    var endWidth = getWidths(endColumns).reduce(function(a, b) {
                        return a + b
                    }, 0);
                    if (!endWidth) {
                        endIndex = visibleColumns.length
                    }
                    if (rowCount > 1 && "number" === typeof rowIndex) {
                        var columnsInfo = [];
                        for (var i = 0; i < rowCount; i++) {
                            columnsInfo.push(this.callBase(i))
                        }
                        beginFixedColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, 0, beginFixedColumns.length)[rowIndex] || [];
                        endFixedColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, visibleColumns.length - endFixedColumns.length, visibleColumns.length)[rowIndex] || [];
                        visibleColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, startIndex, endIndex)[rowIndex] || []
                    } else {
                        visibleColumns = visibleColumns.slice(startIndex, endIndex)
                    }
                    if (beginWidth) {
                        visibleColumns.unshift({
                            command: "virtual",
                            width: beginWidth
                        });
                        visibleColumns = beginFixedColumns.concat(visibleColumns)
                    }
                    if (endWidth) {
                        visibleColumns.push({
                            command: "virtual",
                            width: endWidth
                        });
                        visibleColumns = visibleColumns.concat(endFixedColumns)
                    }
                    this._virtualVisibleColumns[visibleColumnsHash] = visibleColumns;
                    return visibleColumns
                },
                dispose: function() {
                    clearTimeout(this._changedTimeout);
                    this.callBase.apply(this, arguments)
                }
            };
            return members
        }();
        module.exports = {
            defaultOptions: function() {
                return {
                    scrolling: {
                        columnRenderingMode: "standard",
                        columnPageSize: 5,
                        columnRenderingThreshold: 300
                    }
                }
            },
            extenders: {
                controllers: {
                    columns: ColumnsControllerExtender
                },
                views: {
                    columnHeadersView: HeaderFooterViewExtender,
                    footerView: HeaderFooterViewExtender,
                    rowsView: VirtualScrollingRowsViewExtender
                }
            }
        }
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.virtual_columns_core.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function foreachColumnInfo(info, callback, rowIndex, offsets, columnCount, lastProcessedIndexes) {
            rowIndex = rowIndex || 0;
            offsets = offsets || [];
            lastProcessedIndexes = lastProcessedIndexes || [];
            offsets[rowIndex] = offsets[rowIndex] || 0;
            var row = info[rowIndex];
            var startIndex = lastProcessedIndexes[rowIndex] + 1 || 0;
            var processedColumnCount = 0;
            var colIndex;
            if (!row) {
                return
            }
            for (colIndex = startIndex; colIndex < row.length; colIndex++) {
                var cell = row[colIndex];
                var visibleIndex = colIndex + offsets[rowIndex];
                var colspan = cell.colspan || 1;
                foreachColumnInfo(info, callback, rowIndex + (cell.rowspan || 1), offsets, colspan, lastProcessedIndexes);
                offsets[rowIndex] += colspan - 1;
                processedColumnCount += colspan;
                if (cell.rowspan) {
                    for (var i = rowIndex + 1; i < rowIndex + cell.rowspan; i++) {
                        offsets[i] = offsets[i] || 0;
                        offsets[i] += cell.colspan || 1
                    }
                }
                if (false === callback(cell, visibleIndex, rowIndex, colIndex)) {
                    break
                }
                if (void 0 !== columnCount && processedColumnCount >= columnCount) {
                    break
                }
            }
            lastProcessedIndexes[rowIndex] = colIndex
        }

        function createColumnsInfo(info, startIndex, endIndex) {
            var newInfo = [];
            foreachColumnInfo(info, function(columnInfo, visibleIndex, rowIndex) {
                var cell = columnInfo;
                var colspan;
                var cellColspan = cell.colspan || 1;
                var isVisible = visibleIndex + cellColspan - 1 >= startIndex && visibleIndex < endIndex;
                newInfo[rowIndex] = newInfo[rowIndex] || [];
                if (isVisible) {
                    if (visibleIndex < startIndex) {
                        colspan = cellColspan - (startIndex - visibleIndex);
                        visibleIndex = startIndex
                    } else {
                        colspan = cellColspan
                    }
                    if (visibleIndex + colspan > endIndex) {
                        colspan = endIndex - visibleIndex
                    }
                    if (colspan !== cellColspan) {
                        cell = (0, _extend.extend)({}, cell, {
                            colspan: colspan
                        })
                    }
                    newInfo[rowIndex].push(cell)
                } else {
                    if (visibleIndex > endIndex) {
                        return false
                    }
                }
            });
            for (var i = 0; i < newInfo.length; i++) {
                newInfo[i] = newInfo[i] || []
            }
            return newInfo
        }
        exports.foreachColumnInfo = foreachColumnInfo;
        exports.createColumnsInfo = createColumnsInfo
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.export_mixin.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        module.exports = {
            _getEmptyCell: function() {
                return {
                    text: "",
                    value: void 0,
                    colspan: 1,
                    rowspan: 1
                }
            },
            _defaultSetter: function(value) {
                return !value ? 1 : value
            },
            _cloneItem: function(item) {
                return (0, _extend.extend)({}, item, this._getEmptyCell())
            },
            _prepareItems: function(items) {
                var that = this;
                var resultItems = [];
                var cols = (items[0] || []).reduce(function(sum, item) {
                    return sum + that._defaultSetter(item.colspan)
                }, 0);
                var getItem = function(items) {
                    var rowIndex = 0;
                    var cellIndex = 0;
                    return function() {
                        var row = items[rowIndex] || [];
                        var item = row[cellIndex++];
                        if (cellIndex >= row.length) {
                            rowIndex++;
                            cellIndex = 0
                        }
                        if (item) {
                            item.colspan = that._defaultSetter(item.colspan);
                            item.rowspan = that._defaultSetter(item.rowspan)
                        }
                        return item
                    }
                }(items);

                function addItem(rowIndex, cellIndex, item) {
                    var row = resultItems[rowIndex] = resultItems[rowIndex] || [];
                    row[cellIndex] = item;
                    if (item.colspan > 1 || item.rowspan > 1) {
                        var clone = that._cloneItem(item);
                        for (var c = 1; c < item.colspan; c++) {
                            addItem(rowIndex, cellIndex + c, clone)
                        }
                        for (var r = 1; r < item.rowspan; r++) {
                            for (var _c = 0; _c < item.colspan; _c++) {
                                addItem(rowIndex + r, cellIndex + _c, clone)
                            }
                        }
                    }
                }
                var item = getItem();
                var rowIndex = 0;
                while (item) {
                    for (var cellIndex = 0; cellIndex < cols; cellIndex++) {
                        if (!item) {
                            break
                        }
                        if (resultItems[rowIndex] && resultItems[rowIndex][cellIndex]) {
                            continue
                        }
                        addItem(rowIndex, cellIndex, item);
                        cellIndex += item.colspan - 1;
                        item = getItem()
                    }
                    rowIndex++
                }
                return resultItems
            }
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.focus.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.modules */ 39);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiGrid_core3 = __webpack_require__( /*! ./ui.grid_core.utils */ 33);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ROW_FOCUSED_CLASS = "dx-row-focused";
        var FOCUSED_ROW_SELECTOR = ".dx-row." + ROW_FOCUSED_CLASS;
        var TABLE_POSTFIX_CLASS = "table";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        exports.FocusController = _uiGrid_core2.default.ViewController.inherit(function() {
            return {
                init: function() {
                    this._dataController = this.getController("data");
                    this._keyboardController = this.getController("keyboardNavigation");
                    this.component._optionsByReference.focusedRowKey = true
                },
                optionChanged: function(args) {
                    if ("focusedRowIndex" === args.name) {
                        var focusedRowKey = this.option("focusedRowKey");
                        this._focusRowByIndex(args.value);
                        this._triggerFocusedRowChangedIfNeed(focusedRowKey, args.value);
                        args.handled = true
                    } else {
                        if ("focusedRowKey" === args.name) {
                            var focusedRowIndex = this.option("focusedRowIndex");
                            this._focusRowByKey(args.value);
                            this._triggerFocusedRowChangedIfNeed(args.value, focusedRowIndex);
                            args.handled = true
                        } else {
                            if ("focusedColumnIndex" === args.name) {
                                args.handled = true
                            } else {
                                if ("focusedRowEnabled" === args.name) {
                                    args.handled = true
                                } else {
                                    if ("autoNavigateToFocusedRow" === args.name) {
                                        args.handled = true
                                    } else {
                                        this.callBase(args)
                                    }
                                }
                            }
                        }
                    }
                },
                _triggerFocusedRowChangedIfNeed: function(focusedRowKey, focusedRowIndex) {
                    var focusedRowIndexByKey = this.getFocusedRowIndexByKey(focusedRowKey);
                    if (focusedRowIndex === focusedRowIndexByKey) {
                        var rowIndex = this._dataController.getRowIndexByKey(focusedRowKey);
                        if (rowIndex >= 0) {
                            var $rowElement = (0, _renderer2.default)(this.getView("rowsView").getRowElement(rowIndex));
                            this.getController("keyboardNavigation")._fireFocusedRowChanged($rowElement, focusedRowIndex)
                        }
                    }
                },
                isAutoNavigateToFocusedRow: function() {
                    return "infinite" !== this.option("scrolling.mode") && this.option("autoNavigateToFocusedRow")
                },
                _focusRowByIndex: function(index) {
                    if (!this.option("focusedRowEnabled")) {
                        return
                    }
                    index = void 0 !== index ? index : this.option("focusedRowIndex");
                    if (index < 0) {
                        if (this.isAutoNavigateToFocusedRow()) {
                            this._resetFocusedRow()
                        }
                    } else {
                        this._focusRowByIndexCore(index)
                    }
                },
                _focusRowByIndexCore: function(index) {
                    var _this = this;
                    var dataController = this.getController("data");
                    var pageSize = dataController.pageSize();
                    var setKeyByIndex = function() {
                        if (_this._isValidFocusedRowIndex(index)) {
                            var visibleIndex = index - dataController.getRowIndexOffset();
                            var lastItemIndex = dataController._getLastItemIndex();
                            var rowIndex = Math.min(visibleIndex, lastItemIndex);
                            var focusedRowKey = dataController.getKeyByRowIndex(rowIndex);
                            if (void 0 !== focusedRowKey && !_this.isRowFocused(focusedRowKey)) {
                                _this.option("focusedRowKey", focusedRowKey)
                            }
                        }
                    };
                    if (pageSize >= 0) {
                        if (!this._isLocalRowIndex(index)) {
                            var pageIndex = Math.floor(index / dataController.pageSize());
                            (0, _deferred.when)(dataController.pageIndex(pageIndex), dataController.waitReady()).done(function() {
                                setKeyByIndex()
                            })
                        } else {
                            setKeyByIndex()
                        }
                    }
                },
                _isLocalRowIndex: function(index) {
                    var dataController = this.getController("data");
                    var isVirtualScrolling = this.getController("keyboardNavigation")._isVirtualScrolling();
                    if (isVirtualScrolling) {
                        var pageIndex = Math.floor(index / dataController.pageSize());
                        var virtualItems = dataController.virtualItemsCount();
                        var virtualItemsBegin = virtualItems ? virtualItems.begin : -1;
                        var visibleRowsCount = dataController.getVisibleRows().length + dataController.getRowIndexOffset();
                        var visiblePagesCount = Math.ceil(visibleRowsCount / dataController.pageSize());
                        return virtualItemsBegin <= index && visiblePagesCount > pageIndex
                    }
                    return true
                },
                _setFocusedRowKeyByIndex: function(index) {
                    var dataController = this.getController("data");
                    if (this._isValidFocusedRowIndex(index)) {
                        var rowIndex = Math.min(index - dataController.getRowIndexOffset(), dataController.items().length - 1);
                        var focusedRowKey = dataController.getKeyByRowIndex(rowIndex);
                        if (void 0 !== focusedRowKey && !this.isRowFocused(focusedRowKey)) {
                            this.option("focusedRowKey", focusedRowKey)
                        }
                    }
                },
                _focusRowByKey: function(key) {
                    if (void 0 === key) {
                        this._resetFocusedRow()
                    } else {
                        this._navigateToRow(key, true)
                    }
                },
                _resetFocusedRow: function() {
                    if (void 0 === this.option("focusedRowKey") && this.option("focusedRowIndex") < 0) {
                        return
                    }
                    var keyboardController = this.getController("keyboardNavigation");
                    this.option("focusedRowKey", void 0);
                    keyboardController.setFocusedRowIndex(-1);
                    this.option("focusedRowIndex", -1);
                    this.getController("data").updateItems({
                        changeType: "updateFocusedRow",
                        focusedRowKey: void 0
                    });
                    keyboardController._fireFocusedRowChanged(void 0, -1)
                },
                _isValidFocusedRowIndex: function(rowIndex) {
                    var dataController = this.getController("data");
                    var row = dataController.getVisibleRows()[rowIndex];
                    return !row || "data" === row.rowType || "group" === row.rowType
                },
                publicMethods: function() {
                    return ["navigateToRow", "isRowFocused"]
                },
                navigateToRow: function(key) {
                    if (!this.isAutoNavigateToFocusedRow()) {
                        this.option("focusedRowIndex", -1)
                    }
                    this._navigateToRow(key)
                },
                _navigateToRow: function(key, needFocusRow) {
                    var that = this;
                    var dataController = that.getController("data");
                    var isAutoNavigate = that.isAutoNavigateToFocusedRow();
                    var d = new _deferred.Deferred;
                    if (void 0 === key || !dataController.dataSource()) {
                        return d.reject().promise()
                    }
                    var rowIndexByKey = that.getFocusedRowIndexByKey(key);
                    var isPaginate = dataController.getDataSource().paginate();
                    if (!isAutoNavigate && needFocusRow || !isPaginate || rowIndexByKey >= 0) {
                        that._navigateTo(key, d, needFocusRow)
                    } else {
                        dataController.getPageIndexByKey(key).done(function(pageIndex) {
                            if (pageIndex < 0) {
                                d.resolve(-1);
                                return
                            }
                            if (pageIndex === dataController.pageIndex()) {
                                dataController.reload().done(function() {
                                    if (that.isRowFocused(key)) {
                                        d.resolve(that.getFocusedRowIndexByKey(key))
                                    } else {
                                        that._navigateTo(key, d, needFocusRow)
                                    }
                                }).fail(d.reject)
                            } else {
                                dataController.pageIndex(pageIndex).done(function() {
                                    that._navigateTo(key, d, needFocusRow)
                                }).fail(d.reject)
                            }
                        }).fail(d.reject)
                    }
                    return d.promise()
                },
                _navigateTo: function(key, deferred, needFocusRow) {
                    var visibleRowIndex = this.getController("data").getRowIndexByKey(key);
                    var isVirtualRowRenderingMode = "virtual" === this.option("scrolling.rowRenderingMode");
                    var isAutoNavigate = this.isAutoNavigateToFocusedRow();
                    if (isAutoNavigate && isVirtualRowRenderingMode && visibleRowIndex < 0) {
                        this._navigateToVirtualRow(key, deferred, needFocusRow)
                    } else {
                        this._navigateToVisibleRow(key, deferred, needFocusRow)
                    }
                },
                _navigateToVisibleRow: function(key, deferred, needFocusRow) {
                    if (needFocusRow) {
                        this._triggerUpdateFocusedRow(key, deferred)
                    } else {
                        this.getView("rowsView").scrollToRowElement(key)
                    }
                },
                _navigateToVirtualRow: function(key, deferred, needFocusRow) {
                    var that = this;
                    var dataController = this.getController("data");
                    var rowsScrollController = dataController._rowsScrollController;
                    var rowIndex = (0, _uiGrid_core3.getIndexByKey)(key, dataController.items(true));
                    var scrollable = that.getView("rowsView").getScrollable();
                    if (rowsScrollController && scrollable && rowIndex >= 0) {
                        var focusedRowIndex = rowIndex + dataController.getRowIndexOffset() - dataController.getRowIndexDelta();
                        var offset = rowsScrollController.getItemOffset(focusedRowIndex);
                        if (needFocusRow) {
                            var triggerUpdateFocusedRow = function triggerUpdateFocusedRow() {
                                that.component.off("contentReady", triggerUpdateFocusedRow);
                                that._triggerUpdateFocusedRow(key, deferred)
                            };
                            that.component.on("contentReady", triggerUpdateFocusedRow)
                        }
                        scrollable.scrollTo({
                            y: offset
                        })
                    }
                },
                _triggerUpdateFocusedRow: function(key, deferred) {
                    var dataController = this.getController("data");
                    var focusedRowIndex = this.getFocusedRowIndexByKey(key);
                    if (this._isValidFocusedRowIndex(focusedRowIndex)) {
                        if (this.option("focusedRowEnabled")) {
                            dataController.updateItems({
                                changeType: "updateFocusedRow",
                                focusedRowKey: key
                            })
                        } else {
                            this.getView("rowsView").scrollToRowElement(key)
                        }
                        this.getController("keyboardNavigation").setFocusedRowIndex(focusedRowIndex);
                        deferred && deferred.resolve(focusedRowIndex)
                    } else {
                        deferred && deferred.resolve(-1)
                    }
                },
                getFocusedRowIndexByKey: function(key) {
                    var dataController = this.getController("data");
                    var rowIndex = dataController.getRowIndexByKey(key);
                    return rowIndex >= 0 ? rowIndex + dataController.getRowIndexOffset() : -1
                },
                _focusRowByKeyOrIndex: function() {
                    var _this2 = this;
                    var focusedRowKey = this.option("focusedRowKey");
                    var currentFocusedRowIndex = this.option("focusedRowIndex");
                    var keyboardController = this.getController("keyboardNavigation");
                    var dataController = this.getController("data");
                    if (void 0 !== focusedRowKey) {
                        var visibleRowIndex = dataController.getRowIndexByKey(focusedRowKey);
                        if (visibleRowIndex >= 0) {
                            if (keyboardController._isVirtualScrolling()) {
                                currentFocusedRowIndex = visibleRowIndex + dataController.getRowIndexOffset()
                            }
                            keyboardController.setFocusedRowIndex(currentFocusedRowIndex);
                            this._triggerUpdateFocusedRow(focusedRowKey)
                        } else {
                            this._navigateToRow(focusedRowKey, true).done(function(focusedRowIndex) {
                                if (currentFocusedRowIndex >= 0 && focusedRowIndex < 0) {
                                    _this2._focusRowByIndex()
                                }
                            })
                        }
                    } else {
                        if (currentFocusedRowIndex >= 0) {
                            this.getController("focus")._focusRowByIndex(currentFocusedRowIndex)
                        }
                    }
                },
                isRowFocused: function(key) {
                    var focusedRowKey = this.option("focusedRowKey");
                    if (void 0 !== focusedRowKey) {
                        return (0, _common.equalByValue)(key, this.option("focusedRowKey"))
                    }
                },
                updateFocusedRow: function(change) {
                    var that = this;
                    var focusedRowIndex = that._dataController.getRowIndexByKey(change.focusedRowKey);
                    var rowsView = that.getView("rowsView");
                    var $tableElement;
                    (0, _iterator.each)(rowsView.getTableElements(), function(index, element) {
                        var isMainTable = 0 === index;
                        $tableElement = (0, _renderer2.default)(element);
                        that._clearPreviousFocusedRow($tableElement, focusedRowIndex);
                        that._prepareFocusedRow({
                            changedItem: change.items[focusedRowIndex],
                            $tableElement: $tableElement,
                            focusedRowIndex: focusedRowIndex,
                            isMainTable: isMainTable
                        })
                    })
                },
                _clearPreviousFocusedRow: function($tableElement, focusedRowIndex) {
                    var _this3 = this;
                    var isNotMasterDetailFocusedRow = function(_, focusedRow) {
                        var $focusedRowTable = (0, _renderer2.default)(focusedRow).closest(".".concat(_this3.addWidgetPrefix(TABLE_POSTFIX_CLASS)));
                        return $tableElement.is($focusedRowTable)
                    };
                    var $prevRowFocusedElement = $tableElement.find(FOCUSED_ROW_SELECTOR).filter(isNotMasterDetailFocusedRow);
                    $prevRowFocusedElement.removeClass(ROW_FOCUSED_CLASS).removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr("tabindex");
                    $prevRowFocusedElement.children("td").removeAttr("tabindex");
                    if (0 !== focusedRowIndex) {
                        var $firstRow = (0, _renderer2.default)(this.getView("rowsView").getRowElement(0));
                        $firstRow.removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr("tabIndex")
                    }
                },
                _prepareFocusedRow: function(options) {
                    var $row;
                    var changedItem = options.changedItem;
                    if (changedItem && ("data" === changedItem.rowType || "group" === changedItem.rowType)) {
                        var focusedRowIndex = options.focusedRowIndex;
                        var $tableElement = options.$tableElement;
                        var isMainTable = options.isMainTable;
                        var tabIndex = this.option("tabindex") || 0;
                        var rowsView = this.getView("rowsView");
                        $row = (0, _renderer2.default)(rowsView._getRowElements($tableElement).eq(focusedRowIndex));
                        $row.addClass(ROW_FOCUSED_CLASS).attr("tabindex", tabIndex);
                        if (isMainTable) {
                            rowsView.scrollToElementVertically($row)
                        }
                    }
                    return $row
                }
            }
        }());
        module.exports = {
            defaultOptions: function() {
                return {
                    focusedRowEnabled: false,
                    autoNavigateToFocusedRow: true,
                    focusedRowKey: void 0,
                    focusedRowIndex: -1,
                    focusedColumnIndex: -1
                }
            },
            controllers: {
                focus: exports.FocusController
            },
            extenders: {
                controllers: {
                    keyboardNavigation: {
                        init: function() {
                            var rowIndex = this.option("focusedRowIndex");
                            var columnIndex = this.option("focusedColumnIndex");
                            this.createAction("onFocusedRowChanging", {
                                excludeValidators: ["disabled", "readOnly"]
                            });
                            this.createAction("onFocusedRowChanged", {
                                excludeValidators: ["disabled", "readOnly"]
                            });
                            this.createAction("onFocusedCellChanging", {
                                excludeValidators: ["disabled", "readOnly"]
                            });
                            this.createAction("onFocusedCellChanged", {
                                excludeValidators: ["disabled", "readOnly"]
                            });
                            this.callBase();
                            this.setRowFocusType();
                            this._focusedCellPosition = {};
                            if ((0, _type.isDefined)(rowIndex)) {
                                this._focusedCellPosition.rowIndex = this.option("focusedRowIndex")
                            }
                            if ((0, _type.isDefined)(columnIndex)) {
                                this._focusedCellPosition.columnIndex = this.option("focusedColumnIndex")
                            }
                        },
                        setFocusedRowIndex: function(rowIndex) {
                            this.callBase(rowIndex);
                            var visibleRow = this.getController("data").getVisibleRows()[rowIndex];
                            if (!visibleRow || !visibleRow.isNewRow) {
                                this.option("focusedRowIndex", rowIndex)
                            }
                        },
                        setFocusedColumnIndex: function(columnIndex) {
                            this.callBase(columnIndex);
                            this.option("focusedColumnIndex", columnIndex)
                        },
                        _escapeKeyHandler: function(eventArgs, isEditing) {
                            if (isEditing || !this.option("focusedRowEnabled")) {
                                this.callBase(eventArgs, isEditing);
                                return
                            }
                            if (this.isCellFocusType()) {
                                this.setRowFocusType();
                                this._focus(this._getCellElementFromTarget(eventArgs.originalEvent.target), true)
                            }
                        },
                        _updateFocusedCellPosition: function($cell, direction) {
                            var prevRowIndex = this.option("focusedRowIndex");
                            var prevColumnIndex = this.option("focusedColumnIndex");
                            var position = this.callBase($cell, direction);
                            if (position && position.columnIndex >= 0) {
                                this._fireFocusedCellChanged($cell, prevColumnIndex, prevRowIndex)
                            }
                        }
                    },
                    editorFactory: {
                        renderFocusOverlay: function($element, hideBorder) {
                            var keyboardController = this.getController("keyboardNavigation");
                            var focusedRowEnabled = this.option("focusedRowEnabled");
                            var editingController = this.getController("editing");
                            var isRowElement = "row" === keyboardController._getElementType($element);
                            var $cell;
                            if (!focusedRowEnabled || !keyboardController.isRowFocusType() || editingController.isEditing()) {
                                this.callBase($element, hideBorder)
                            } else {
                                if (focusedRowEnabled) {
                                    if (isRowElement && !$element.hasClass(ROW_FOCUSED_CLASS)) {
                                        $cell = keyboardController.getFirstValidCellInRow($element);
                                        keyboardController.focus($cell)
                                    }
                                }
                            }
                        }
                    },
                    columns: {
                        getSortDataSourceParameters: function(_, sortByKey) {
                            var _this4 = this;
                            var result = this.callBase.apply(this, arguments);
                            var dataController = this.getController("data");
                            var dataSource = dataController._dataSource;
                            var store = dataController.store();
                            var key = store && store.key();
                            var remoteOperations = dataSource && dataSource.remoteOperations() || {};
                            var isLocalOperations = Object.keys(remoteOperations).every(function(operationName) {
                                return !remoteOperations[operationName]
                            });
                            if (key && (this.option("focusedRowEnabled") && false !== this.getController("focus").isAutoNavigateToFocusedRow() || sortByKey)) {
                                key = Array.isArray(key) ? key : [key];
                                var notSortedKeys = key.filter(function(key) {
                                    return !_this4.columnOption(key, "sortOrder")
                                });
                                if (notSortedKeys.length) {
                                    result = result || [];
                                    if (isLocalOperations) {
                                        result.push({
                                            selector: dataSource.getDataIndexGetter(),
                                            desc: false
                                        })
                                    } else {
                                        notSortedKeys.forEach(function(notSortedKey) {
                                            return result.push({
                                                selector: notSortedKey,
                                                desc: false
                                            })
                                        })
                                    }
                                }
                            }
                            return result
                        }
                    },
                    data: {
                        _applyChange: function(change) {
                            if (change && "updateFocusedRow" === change.changeType) {
                                return
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _fireChanged: function(e) {
                            this.callBase(e);
                            if (this.option("focusedRowEnabled") && this._dataSource) {
                                var isPartialUpdate = "update" === e.changeType && e.repaintChangesOnly;
                                var isPartialUpdateWithDeleting = isPartialUpdate && e.changeTypes && e.changeTypes.indexOf("remove") >= 0;
                                if ("refresh" === e.changeType && e.items.length || isPartialUpdateWithDeleting) {
                                    this.processUpdateFocusedRow()
                                } else {
                                    if ("append" === e.changeType || "prepend" === e.changeType) {
                                        this._updatePageIndexes()
                                    }
                                }
                            }
                        },
                        _updatePageIndexes: function() {
                            var prevRenderingPageIndex = this._lastRenderingPageIndex || 0;
                            var renderingPageIndex = this._rowsScrollController ? this._rowsScrollController.pageIndex() : 0;
                            this._lastPageIndex = this.pageIndex();
                            this._lastRenderingPageIndex = renderingPageIndex;
                            this._isPagingByRendering = renderingPageIndex !== prevRenderingPageIndex
                        },
                        isPagingByRendering: function() {
                            return this._isPagingByRendering
                        },
                        processUpdateFocusedRow: function() {
                            var prevPageIndex = this._lastPageIndex;
                            this._updatePageIndexes();
                            var pageIndex = this._lastPageIndex;
                            var paging = void 0 !== prevPageIndex && prevPageIndex !== pageIndex;
                            var pagingByRendering = this.isPagingByRendering();
                            var operationTypes = this._dataSource.operationTypes() || {};
                            var focusController = this.getController("focus");
                            var reload = operationTypes.reload;
                            var keyboardController = this.getController("keyboardNavigation");
                            var isVirtualScrolling = keyboardController._isVirtualScrolling();
                            var focusedRowKey = this.option("focusedRowKey");
                            var isAutoNavigate = focusController.isAutoNavigateToFocusedRow();
                            if (reload && void 0 !== focusedRowKey) {
                                focusController._navigateToRow(focusedRowKey, true).done(function(focusedRowIndex) {
                                    if (focusedRowIndex < 0) {
                                        focusController._focusRowByIndex()
                                    }
                                })
                            } else {
                                if (paging) {
                                    if (isAutoNavigate) {
                                        var rowIndexByKey = this.getRowIndexByKey(focusedRowKey);
                                        var isValidRowIndexByKey = rowIndexByKey >= 0;
                                        var focusedRowIndex = this.option("focusedRowIndex");
                                        var needFocusRowByIndex = focusedRowIndex >= 0 && (focusedRowIndex === rowIndexByKey || !isValidRowIndexByKey);
                                        if (!isVirtualScrolling && needFocusRowByIndex) {
                                            focusController._focusRowByIndex()
                                        }
                                    } else {
                                        if (!isVirtualScrolling && this.getRowIndexByKey(focusedRowKey) < 0) {
                                            this.option("focusedRowIndex", -1)
                                        }
                                    }
                                } else {
                                    if (!pagingByRendering) {
                                        focusController._focusRowByKeyOrIndex()
                                    }
                                }
                            }
                        },
                        getPageIndexByKey: function(key) {
                            var that = this;
                            var d = new _deferred.Deferred;
                            that.getGlobalRowIndexByKey(key).done(function(globalIndex) {
                                d.resolve(globalIndex >= 0 ? Math.floor(globalIndex / that.pageSize()) : -1)
                            }).fail(d.reject);
                            return d.promise()
                        },
                        getGlobalRowIndexByKey: function(key) {
                            if (this._dataSource.group()) {
                                return this._calculateGlobalRowIndexByGroupedData(key)
                            }
                            return this._calculateGlobalRowIndexByFlatData(key)
                        },
                        _calculateGlobalRowIndexByFlatData: function(key, groupFilter, useGroup) {
                            var that = this;
                            var deferred = new _deferred.Deferred;
                            var dataSource = that._dataSource;
                            var filter = that._generateFilterByKey(key);
                            dataSource.load({
                                filter: that._concatWithCombinedFilter(filter),
                                skip: 0,
                                take: 1
                            }).done(function(data) {
                                if (data.length > 0) {
                                    filter = that._generateOperationFilterByKey(key, data[0], useGroup);
                                    dataSource.load({
                                        filter: that._concatWithCombinedFilter(filter, groupFilter),
                                        skip: 0,
                                        take: 1,
                                        requireTotalCount: true
                                    }).done(function(_, extra) {
                                        deferred.resolve(extra.totalCount)
                                    })
                                } else {
                                    deferred.resolve(-1)
                                }
                            });
                            return deferred.promise()
                        },
                        _concatWithCombinedFilter: function(filter, groupFilter) {
                            var combinedFilter = this.getCombinedFilter();
                            return (0, _uiGrid_core3.combineFilters)([filter, combinedFilter, groupFilter])
                        },
                        _generateBooleanFilter: function(selector, value, sortInfo) {
                            var result;
                            if (false === value) {
                                result = [selector, "=", sortInfo.desc ? true : null]
                            } else {
                                if (true === value ? !sortInfo.desc : sortInfo.desc) {
                                    result = [selector, "<>", value]
                                }
                            }
                            return result
                        },
                        _generateOperationFilterByKey: function(key, rowData, useGroup) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var filter = that._generateFilterByKey(key, "<");
                            var sort = that._columnsController.getSortDataSourceParameters(!dataSource.remoteOperations().filtering, true);
                            if (useGroup) {
                                var group = that._columnsController.getGroupDataSourceParameters(!dataSource.remoteOperations().filtering);
                                if (group) {
                                    sort = sort ? group.concat(sort) : group
                                }
                            }
                            if (sort) {
                                sort.slice().reverse().forEach(function(sortInfo) {
                                    var selector = sortInfo.selector;
                                    var getter;
                                    if ("function" === typeof selector) {
                                        getter = selector
                                    } else {
                                        getter = that._columnsController.columnOption(selector, "selector")
                                    }
                                    var value = getter ? getter(rowData) : rowData[selector];
                                    filter = [
                                        [selector, "=", value], "and", filter
                                    ];
                                    if (null === value || (0, _type.isBoolean)(value)) {
                                        var booleanFilter = that._generateBooleanFilter(selector, value, sortInfo);
                                        if (booleanFilter) {
                                            filter = [booleanFilter, "or", filter]
                                        }
                                    } else {
                                        filter = [
                                            [selector, sortInfo.desc ? ">" : "<", value], "or", filter
                                        ]
                                    }
                                })
                            }
                            return filter
                        },
                        _generateFilterByKey: function(key, operation) {
                            var dataSourceKey = this._dataSource.key();
                            var filter = [];
                            if (!operation) {
                                operation = "="
                            }
                            if (Array.isArray(dataSourceKey)) {
                                for (var i = 0; i < dataSourceKey.length; ++i) {
                                    var keyPart = key[dataSourceKey[i]];
                                    if (keyPart) {
                                        if (filter.length > 0) {
                                            filter.push("and")
                                        }
                                        filter.push([dataSourceKey[i], operation, keyPart])
                                    }
                                }
                            } else {
                                filter = [dataSourceKey, operation, key]
                            }
                            return filter
                        },
                        _getLastItemIndex: function() {
                            return this.items(true).length - 1
                        }
                    }
                },
                views: {
                    rowsView: {
                        _createRow: function(row) {
                            var $row = this.callBase(row);
                            if (this.option("focusedRowEnabled") && row) {
                                if (this.getController("focus").isRowFocused(row.key)) {
                                    $row.addClass(ROW_FOCUSED_CLASS)
                                }
                            }
                            return $row
                        },
                        _checkRowKeys: function(options) {
                            this.callBase.apply(this, arguments);
                            if (this.option("focusedRowEnabled") && this.option("dataSource")) {
                                var store = this._dataController.store();
                                if (store && !store.key()) {
                                    this._dataController.fireError("E1042", "Row focusing")
                                }
                            }
                        },
                        _update: function(change) {
                            if ("updateFocusedRow" === change.changeType) {
                                if (this.option("focusedRowEnabled")) {
                                    this.getController("focus").updateFocusedRow(change)
                                }
                            } else {
                                this.callBase(change)
                            }
                        },
                        updateFocusElementTabIndex: function($cellElements) {
                            if (this.option("focusedRowEnabled")) {
                                this._setFocusedRowElementTabIndex()
                            } else {
                                this.callBase($cellElements)
                            }
                        },
                        _setFocusedRowElementTabIndex: function() {
                            var that = this;
                            var focusedRowKey = that.option("focusedRowKey");
                            var tabIndex = that.option("tabIndex") || 0;
                            var dataController = that._dataController;
                            var rowIndex = dataController.getRowIndexByKey(focusedRowKey);
                            var columnIndex = that.option("focusedColumnIndex");
                            var $row = that._findRowElementForTabIndex();
                            that._scrollToFocusOnResize = that._scrollToFocusOnResize || function() {
                                that.scrollToElementVertically(that._findRowElementForTabIndex());
                                that.resizeCompleted.remove(that._scrollToFocusOnResize)
                            };
                            $row.attr("tabIndex", tabIndex);
                            if (rowIndex >= 0) {
                                if (columnIndex < 0) {
                                    columnIndex = 0
                                }
                                rowIndex += dataController.getRowIndexOffset();
                                that.getController("keyboardNavigation").setFocusedCellPosition(rowIndex, columnIndex);
                                var dataSource = dataController.dataSource();
                                var operationTypes = dataSource && dataSource.operationTypes();
                                if (operationTypes && !operationTypes.paging && !dataController.isPagingByRendering()) {
                                    that.resizeCompleted.remove(that._scrollToFocusOnResize);
                                    that.resizeCompleted.add(that._scrollToFocusOnResize)
                                }
                            }
                        },
                        _findRowElementForTabIndex: function() {
                            var focusedRowKey = this.option("focusedRowKey");
                            var rowIndex = this._dataController.getRowIndexByKey(focusedRowKey);
                            return (0, _renderer2.default)(this.getRowElement(rowIndex >= 0 ? rowIndex : 0))
                        },
                        scrollToRowElement: function(key) {
                            var rowIndex = this.getController("data").getRowIndexByKey(key);
                            var $row = (0, _renderer2.default)(this.getRow(rowIndex));
                            this.scrollToElementVertically($row)
                        },
                        scrollToElementVertically: function($row) {
                            var scrollable = this.getScrollable();
                            if (scrollable) {
                                var position = scrollable.getScrollElementPosition($row, "vertical");
                                scrollable.scrollTo({
                                    top: position
                                })
                            }
                        }
                    }
                }
            }
        }
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.row_dragging.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _sortable = __webpack_require__( /*! ../sortable */ 230);
        var _sortable2 = _interopRequireDefault(_sortable);
        var _uiGrid_core = __webpack_require__( /*! ./ui.grid_core.utils */ 33);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COMMAND_HANDLE_CLASS = "dx-command-drag";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var HANDLE_ICON_CLASS = "drag-icon";
        var ROWS_VIEW = "rowsview";
        var SORTABLE_WITHOUT_HANDLE_CLASS = "dx-sortable-without-handle";
        var RowDraggingExtender = {
            init: function() {
                this.callBase.apply(this, arguments);
                this._updateHandleColumn()
            },
            _allowReordering: function() {
                var rowDragging = this.option("rowDragging");
                return !!(rowDragging && (rowDragging.allowReordering || rowDragging.allowDropInsideItem || rowDragging.group))
            },
            _updateHandleColumn: function() {
                var rowDragging = this.option("rowDragging");
                var allowReordering = this._allowReordering();
                var columnsController = this._columnsController;
                var isHandleColumnVisible = allowReordering && rowDragging.showDragIcons;
                columnsController && columnsController.addCommandColumn({
                    type: "drag",
                    command: "drag",
                    visibleIndex: -2,
                    alignment: "center",
                    cssClass: COMMAND_HANDLE_CLASS,
                    width: "auto",
                    cellTemplate: this._getHandleTemplate(),
                    visible: isHandleColumnVisible
                });
                columnsController.columnOption("type:drag", "visible", isHandleColumnVisible)
            },
            _renderContent: function() {
                var that = this;
                var rowDragging = this.option("rowDragging");
                var allowReordering = this._allowReordering();
                var $content = that.callBase.apply(that, arguments);
                if (allowReordering && $content.length) {
                    that._sortable = that._createComponent($content, _sortable2.default, (0, _extend.extend)({
                        component: that.component,
                        contentTemplate: null,
                        filter: "> table > tbody > .dx-row:not(.dx-freespace-row):not(.dx-virtual-row)",
                        dragTemplate: that._getDraggableRowTemplate(),
                        handle: rowDragging.showDragIcons && ".".concat(COMMAND_HANDLE_CLASS),
                        dropFeedbackMode: "indicate"
                    }, rowDragging, {
                        onDragStart: function onDragStart(e) {
                            var row = e.component.getVisibleRows()[e.fromIndex];
                            e.itemData = row && row.data;
                            var isDataRow = row && "data" === row.rowType;
                            e.cancel = !isDataRow;
                            var onDragStart = rowDragging.onDragStart;
                            onDragStart && onDragStart(e)
                        }
                    }));
                    $content.toggleClass(SORTABLE_WITHOUT_HANDLE_CLASS, !rowDragging.showDragIcons)
                }
                return $content
            },
            _getDraggableGridOptions: function(options) {
                var gridOptions = this.option();
                var columns = this.getColumns();
                var $rowElement = (0, _renderer2.default)(this.getRowElement(options.rowIndex));
                return {
                    dataSource: [{
                        id: 1,
                        parentId: 0
                    }],
                    showBorders: true,
                    showColumnHeaders: false,
                    scrolling: {
                        useNative: false,
                        showScrollbar: false
                    },
                    pager: {
                        visible: false
                    },
                    loadingTimeout: void 0,
                    columnFixing: gridOptions.columnFixing,
                    columnAutoWidth: gridOptions.columnAutoWidth,
                    showColumnLines: gridOptions.showColumnLines,
                    columns: columns.map(function(column) {
                        return {
                            width: column.width || column.visibleWidth,
                            fixed: column.fixed,
                            fixedPosition: column.fixedPosition
                        }
                    }),
                    onRowPrepared: function(e) {
                        var rowsView = e.component.getView("rowsView");
                        (0, _renderer2.default)(e.rowElement).replaceWith($rowElement.eq(rowsView._isFixedTableRendering ? 1 : 0).clone())
                    }
                }
            },
            _getDraggableRowTemplate: function() {
                var _this = this;
                return function(options) {
                    var $rootElement = _this.component.$element();
                    var $dataGridContainer = (0, _renderer2.default)("<div>").width($rootElement.width());
                    var items = _this._dataController.items();
                    var row = items && items[options.fromIndex];
                    var gridOptions = _this._getDraggableGridOptions(row);
                    _this._createComponent($dataGridContainer, _this.component.NAME, gridOptions);
                    $dataGridContainer.find(".dx-gridbase-container").children(":not(.".concat(_this.addWidgetPrefix(ROWS_VIEW), ")")).hide();
                    return $dataGridContainer
                }
            },
            _getHandleTemplate: function() {
                var _this2 = this;
                return function(container, options) {
                    if ("data" === options.rowType) {
                        (0, _renderer2.default)(container).addClass(CELL_FOCUS_DISABLED_CLASS);
                        return (0, _renderer2.default)("<span>").addClass(_this2.addWidgetPrefix(HANDLE_ICON_CLASS))
                    } else {
                        (0, _uiGrid_core.setEmptyText)((0, _renderer2.default)(container))
                    }
                }
            },
            optionChanged: function(args) {
                if ("rowDragging" === args.name) {
                    this._updateHandleColumn();
                    this._invalidate(true, true);
                    args.handled = true
                }
                this.callBase.apply(this, arguments)
            }
        };
        module.exports = {
            defaultOptions: function() {
                return {
                    rowDragging: {
                        showDragIcons: true,
                        dropFeedbackMode: "indicate",
                        allowReordering: false,
                        allowDropInsideItem: false
                    }
                }
            },
            extenders: {
                views: {
                    rowsView: RowDraggingExtender
                }
            }
        }
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./tree_list/ui.tree_list */ 674)
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.data_source_adapter.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _uiGrid_core3 = __webpack_require__( /*! ../grid_core/ui.grid_core.data_source_adapter */ 350);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _store_helper = __webpack_require__( /*! ../../data/store_helper */ 86);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_KEY_EXPRESSION = "id";
        var isFullBranchFilterMode = function(that) {
            return "fullBranch" === that.option("filterMode")
        };
        var DataSourceAdapterTreeList = _uiGrid_core4.default.inherit(function() {
            var getChildKeys = function(that, keys) {
                var childKeys = [];
                keys.forEach(function(key) {
                    var node = that.getNodeByKey(key);
                    node && node.children.forEach(function(child) {
                        childKeys.push(child.key)
                    })
                });
                return childKeys
            };
            return {
                _createKeyGetter: function() {
                    var keyExpr = this.getKeyExpr();
                    return _data2.default.compileGetter(keyExpr)
                },
                _createKeySetter: function() {
                    var keyExpr = this.getKeyExpr();
                    if (_type2.default.isFunction(keyExpr)) {
                        return keyExpr
                    }
                    return _data2.default.compileSetter(keyExpr)
                },
                _createParentIdGetter: function() {
                    return _data2.default.compileGetter(this.option("parentIdExpr"))
                },
                createParentIdSetter: function() {
                    var parentIdExpr = this.option("parentIdExpr");
                    if (_type2.default.isFunction(parentIdExpr)) {
                        return parentIdExpr
                    }
                    return _data2.default.compileSetter(parentIdExpr)
                },
                _createItemsGetter: function() {
                    return _data2.default.compileGetter(this.option("itemsExpr"))
                },
                _createHasItemsGetter: function() {
                    var hasItemsExpr = this.option("hasItemsExpr");
                    return hasItemsExpr && _data2.default.compileGetter(hasItemsExpr)
                },
                _createHasItemsSetter: function() {
                    var hasItemsExpr = this.option("hasItemsExpr");
                    if (_type2.default.isFunction(hasItemsExpr)) {
                        return hasItemsExpr
                    }
                    return hasItemsExpr && _data2.default.compileSetter(hasItemsExpr)
                },
                _updateIndexByKeyObject: function(items) {
                    var that = this;
                    that._indexByKey = {};
                    (0, _iterator.each)(items, function(index, item) {
                        that._indexByKey[item.key] = index
                    })
                },
                _calculateHasItems: function(node, options) {
                    var that = this;
                    var parentIds = options.storeLoadOptions.parentIds;
                    var hasItems;
                    var isFullBranch = isFullBranchFilterMode(that);
                    if (that._hasItemsGetter && (parentIds || !options.storeLoadOptions.filter || isFullBranch)) {
                        hasItems = that._hasItemsGetter(node.data)
                    }
                    if (void 0 === hasItems) {
                        if (!that._isChildrenLoaded[node.key] && options.remoteOperations.filtering && (parentIds || isFullBranch)) {
                            hasItems = true
                        } else {
                            if (options.loadOptions.filter && !options.remoteOperations.filtering && isFullBranch) {
                                hasItems = node.children.length
                            } else {
                                hasItems = node.hasChildren
                            }
                        }
                    }
                    return !!hasItems
                },
                _createVisibleItemsByNodes: function(nodes, options) {
                    var that = this;
                    var result = [];
                    for (var i = 0; i < nodes.length; i++) {
                        if (nodes[i].visible) {
                            result.push(nodes[i])
                        }
                        if ((that.isRowExpanded(nodes[i].key, options) || !nodes[i].visible) && nodes[i].hasChildren && nodes[i].children.length) {
                            result = result.concat(that._createVisibleItemsByNodes(nodes[i].children, options))
                        }
                    }
                    return result
                },
                _convertItemToNode: function(item, rootValue, nodeByKey) {
                    var key = this._keyGetter(item);
                    var parentId = this._parentIdGetter(item);
                    parentId = _type2.default.isDefined(parentId) ? parentId : rootValue;
                    var parentNode = nodeByKey[parentId] = nodeByKey[parentId] || {
                        key: parentId,
                        children: []
                    };
                    var node = nodeByKey[key] = nodeByKey[key] || {
                        key: key,
                        children: []
                    };
                    node.data = item;
                    node.parent = parentNode;
                    return node
                },
                _createNodesByItems: function(items, visibleItems) {
                    var that = this;
                    var rootValue = that.option("rootValue");
                    var visibleByKey = {};
                    var nodeByKey = that._nodeByKey = {};
                    var i;
                    if (visibleItems) {
                        for (i = 0; i < visibleItems.length; i++) {
                            visibleByKey[this._keyGetter(visibleItems[i])] = true
                        }
                    }
                    for (i = 0; i < items.length; i++) {
                        var node = that._convertItemToNode(items[i], rootValue, nodeByKey);
                        if (void 0 === node.key) {
                            return
                        }
                        node.visible = !visibleItems || !!visibleByKey[node.key];
                        if (node.parent) {
                            node.parent.children.push(node)
                        }
                    }
                    var rootNode = nodeByKey[rootValue] || {
                        key: rootValue,
                        children: []
                    };
                    rootNode.level = -1;
                    return rootNode
                },
                _convertDataToPlainStructure: function(data, parentId, result) {
                    var key;
                    if (this._itemsGetter && !data.isConverted) {
                        result = result || [];
                        for (var i = 0; i < data.length; i++) {
                            var item = _uiGrid_core2.default.createObjectWithChanges(data[i]);
                            key = this._keyGetter(item);
                            if (void 0 === key) {
                                key = result.length + 1;
                                this._keySetter(item, key)
                            }
                            this._parentIdSetter(item, void 0 === parentId ? this.option("rootValue") : parentId);
                            result.push(item);
                            var childItems = this._itemsGetter(item);
                            if (childItems && childItems.length) {
                                this._convertDataToPlainStructure(childItems, key, result);
                                var itemsExpr = this.option("itemsExpr");
                                if (!_type2.default.isFunction(itemsExpr)) {
                                    delete item[itemsExpr]
                                }
                            }
                        }
                        result.isConverted = true;
                        return result
                    }
                    return data
                },
                _createIdFilter: function(field, keys) {
                    var parentIdFilters = [];
                    for (var i = 0; i < keys.length; i++) {
                        parentIdFilters.push([field, "=", keys[i]])
                    }
                    return _uiGrid_core2.default.combineFilters(parentIdFilters, "or")
                },
                _customizeRemoteOperations: function(options, isReload, operationTypes) {
                    this.callBase.apply(this, arguments);
                    options.remoteOperations.paging = false;
                    var expandVisibleNodes = false;
                    if (this.option("autoExpandAll")) {
                        options.remoteOperations.sorting = false;
                        options.remoteOperations.filtering = false;
                        if ((!this._lastLoadOptions || operationTypes.filtering && !options.storeLoadOptions.filter) && !options.isCustomLoading) {
                            expandVisibleNodes = true
                        }
                    }
                    if (!options.isCustomLoading) {
                        this._isReload = this._isReload || isReload || operationTypes.reload;
                        if (!options.cachedStoreData) {
                            this._isChildrenLoaded = {};
                            if (this._isReload) {
                                this._nodeByKey = {}
                            }
                        }
                        if (this.option("expandNodesOnFiltering") && (operationTypes.filtering || this._isReload && options.storeLoadOptions.filter)) {
                            if (options.storeLoadOptions.filter) {
                                expandVisibleNodes = true
                            } else {
                                options.collapseVisibleNodes = true
                            }
                        }
                    }
                    options.expandVisibleNodes = expandVisibleNodes
                },
                _getParentIdsToLoad: function(parentIds) {
                    var parentIdsToLoad = [];
                    for (var i = 0; i < parentIds.length; i++) {
                        var node = this.getNodeByKey(parentIds[i]);
                        if (!node || node.hasChildren && !node.children.length) {
                            parentIdsToLoad.push(parentIds[i])
                        }
                    }
                    return parentIdsToLoad
                },
                _handleDataLoading: function(options) {
                    var rootValue = this.option("rootValue");
                    var parentIdExpr = this.option("parentIdExpr");
                    var parentIds = options.storeLoadOptions.parentIds;
                    if (parentIds) {
                        options.isCustomLoading = false
                    }
                    this.callBase.apply(this, arguments);
                    if (options.remoteOperations.filtering && !options.isCustomLoading) {
                        if (isFullBranchFilterMode(this) && options.cachedStoreData || !options.storeLoadOptions.filter) {
                            var expandedRowKeys = options.collapseVisibleNodes ? [] : this.option("expandedRowKeys");
                            parentIds = [rootValue].concat(expandedRowKeys).concat(parentIds || []);
                            var parentIdsToLoad = options.data ? this._getParentIdsToLoad(parentIds) : parentIds;
                            if (parentIdsToLoad.length) {
                                options.cachedPagingData = void 0;
                                options.data = void 0;
                                options.mergeStoreLoadData = true
                            }
                            options.storeLoadOptions.parentIds = parentIdsToLoad;
                            options.storeLoadOptions.filter = this._createIdFilter(parentIdExpr, parentIdsToLoad)
                        }
                    }
                },
                _generateInfoToLoad: function(data, needChildren) {
                    var that = this;
                    var key;
                    var keyMap = {};
                    var resultKeyMap = {};
                    var resultKeys = [];
                    var rootValue = that.option("rootValue");
                    var i;
                    for (i = 0; i < data.length; i++) {
                        key = needChildren ? that._parentIdGetter(data[i]) : that._keyGetter(data[i]);
                        keyMap[key] = true
                    }
                    for (i = 0; i < data.length; i++) {
                        key = needChildren ? that._keyGetter(data[i]) : that._parentIdGetter(data[i]);
                        var needToLoad = needChildren ? that.isRowExpanded(key) : key !== rootValue;
                        if (!keyMap[key] && !resultKeyMap[key] && needToLoad) {
                            resultKeyMap[key] = true;
                            resultKeys.push(key)
                        }
                    }
                    return {
                        keyMap: resultKeyMap,
                        keys: resultKeys
                    }
                },
                _loadParentsOrChildren: function(data, options, needChildren) {
                    var _this = this;
                    var that = this;
                    var filter;
                    var needLocalFiltering;
                    var _that$_generateInfoTo = that._generateInfoToLoad(data, needChildren),
                        keys = _that$_generateInfoTo.keys,
                        keyMap = _that$_generateInfoTo.keyMap;
                    var d = new _deferred.Deferred;
                    var isRemoteFiltering = options.remoteOperations.filtering;
                    var maxFilterLengthInRequest = that.option("maxFilterLengthInRequest");
                    var loadOptions = isRemoteFiltering ? options.storeLoadOptions : options.loadOptions;

                    function concatLoadedData(loadedData) {
                        if (isRemoteFiltering) {
                            that._cachedStoreData = that._cachedStoreData.concat(loadedData)
                        }
                        return data.concat(loadedData)
                    }
                    if (!keys.length) {
                        return d.resolve(data)
                    }
                    var cachedNodes = keys.map(function(id) {
                        return _this.getNodeByKey(id)
                    }).filter(function(node) {
                        return node && node.data
                    });
                    if (cachedNodes.length === keys.length) {
                        if (needChildren) {
                            cachedNodes = cachedNodes.reduce(function(result, node) {
                                return result.concat(node.children)
                            }, [])
                        }
                        if (cachedNodes.length) {
                            return that._loadParentsOrChildren(concatLoadedData(cachedNodes.map(function(node) {
                                return node.data
                            })), options, needChildren)
                        }
                    }
                    var keyExpr = needChildren ? that.option("parentIdExpr") : that.getKeyExpr();
                    filter = that._createIdFilter(keyExpr, keys);
                    var filterLength = encodeURI(JSON.stringify(filter)).length;
                    if (filterLength > maxFilterLengthInRequest) {
                        filter = function(itemData) {
                            return keyMap[that._keyGetter(itemData)]
                        };
                        needLocalFiltering = isRemoteFiltering
                    }
                    loadOptions = (0, _extend.extend)({}, loadOptions, {
                        filter: !needLocalFiltering ? filter : null
                    });
                    var store = options.fullData ? new _array_store2.default(options.fullData) : that._dataSource.store();
                    that.loadFromStore(loadOptions, store).done(function(loadedData) {
                        if (loadedData.length) {
                            if (needLocalFiltering) {
                                loadedData = (0, _query2.default)(loadedData).filter(filter).toArray()
                            }
                            that._loadParentsOrChildren(concatLoadedData(loadedData), options, needChildren).done(d.resolve).fail(d.reject)
                        } else {
                            d.resolve(data)
                        }
                    }).fail(d.reject);
                    return d
                },
                _loadParents: function(data, options) {
                    return this._loadParentsOrChildren(data, options)
                },
                _loadChildrenIfNeed: function(data, options) {
                    if (isFullBranchFilterMode(this)) {
                        return this._loadParentsOrChildren(data, options, true)
                    }
                    return (0, _deferred.when)(data)
                },
                _updateHasItemsMap: function(options) {
                    var parentIds = options.storeLoadOptions.parentIds;
                    if (parentIds) {
                        for (var i = 0; i < parentIds.length; i++) {
                            this._isChildrenLoaded[parentIds[i]] = true
                        }
                    }
                },
                _getKeyInfo: function() {
                    return {
                        key: function() {
                            return "key"
                        },
                        keyOf: function(data) {
                            return data.key
                        }
                    }
                },
                _applyBatch: function(changes) {
                    var _this2 = this;
                    var baseChanges = [];
                    changes.forEach(function(change) {
                        if ("insert" === change.type) {
                            baseChanges = baseChanges.concat(_this2._applyInsert(change))
                        } else {
                            if ("remove" === change.type) {
                                baseChanges = baseChanges.concat(_this2._applyRemove(change))
                            } else {
                                if ("update" === change.type) {
                                    baseChanges.push({
                                        type: change.type,
                                        key: change.key,
                                        data: {
                                            data: change.data
                                        }
                                    })
                                }
                            }
                        }
                    });
                    this.callBase(baseChanges)
                },
                _setHasItems: function(node, value) {
                    var hasItemsSetter = this._hasItemsSetter;
                    node.hasChildren = value;
                    if (hasItemsSetter && node.data) {
                        hasItemsSetter(node.data, value)
                    }
                },
                _applyInsert: function(change) {
                    var that = this;
                    var baseChanges = [];
                    var parentId = that.parentKeyOf(change.data);
                    var parentNode = that.getNodeByKey(parentId);
                    if (parentNode) {
                        var rootValue = that.option("rootValue");
                        var node = that._convertItemToNode(change.data, rootValue, that._nodeByKey);
                        node.hasChildren = false;
                        node.level = parentNode.level + 1;
                        node.visible = true;
                        parentNode.children.push(node);
                        that._isChildrenLoaded[node.key] = true;
                        that._setHasItems(parentNode, true);
                        if ((!parentNode.parent || that.isRowExpanded(parentNode.key)) && void 0 !== change.index) {
                            var index = that.items().indexOf(parentNode) + 1;
                            index += change.index >= 0 ? Math.min(change.index, parentNode.children.length) : parentNode.children.length;
                            baseChanges.push({
                                type: change.type,
                                data: node,
                                index: index
                            })
                        }
                    }
                    return baseChanges
                },
                _applyRemove: function(change) {
                    var baseChanges = [];
                    var node = this.getNodeByKey(change.key);
                    var parentNode = node && node.parent;
                    if (parentNode) {
                        var index = parentNode.children.indexOf(node);
                        if (index >= 0) {
                            parentNode.children.splice(index, 1);
                            if (!parentNode.children.length) {
                                this._setHasItems(parentNode, false)
                            }
                            baseChanges.push(change);
                            baseChanges = baseChanges.concat(this.getChildNodeKeys(change.key).map(function(key) {
                                return {
                                    type: change.type,
                                    key: key
                                }
                            }))
                        }
                    }
                    return baseChanges
                },
                _handleDataLoaded: function(options) {
                    var data = options.data = this._convertDataToPlainStructure(options.data);
                    if (!options.remoteOperations.filtering && options.loadOptions.filter) {
                        options.fullData = (0, _store_helper.queryByOptions)((0, _query2.default)(options.data), {
                            sort: options.loadOptions && options.loadOptions.sort
                        }).toArray()
                    }
                    this._updateHasItemsMap(options);
                    this.callBase(options);
                    if (data.isConverted && this._cachedStoreData) {
                        this._cachedStoreData.isConverted = true
                    }
                },
                _fillNodes: function(nodes, options, expandedRowKeys, level) {
                    var isFullBranch = isFullBranchFilterMode(this);
                    level = level || 0;
                    for (var i = 0; i < nodes.length; i++) {
                        var node = nodes[i];
                        var needToExpand = false;
                        this._fillNodes(nodes[i].children, options, expandedRowKeys, level + 1);
                        node.level = level;
                        node.hasChildren = this._calculateHasItems(node, options);
                        if (node.visible && node.hasChildren) {
                            if (isFullBranch) {
                                if (node.children.filter(function(node) {
                                        return node.visible
                                    }).length) {
                                    needToExpand = true
                                } else {
                                    if (node.children.length) {
                                        _uiTree_list2.default.foreachNodes(node.children, function(node) {
                                            node.visible = true
                                        })
                                    }
                                }
                            } else {
                                needToExpand = true
                            }
                            if (options.expandVisibleNodes && needToExpand) {
                                expandedRowKeys.push(node.key)
                            }
                        }
                        if (node.visible || node.hasChildren) {
                            node.parent.hasChildren = true
                        }
                    }
                },
                _processTreeStructure: function(options, visibleItems) {
                    var data = options.data;
                    var parentIds = options.storeLoadOptions.parentIds;
                    var expandedRowKeys = [];
                    if (parentIds && parentIds.length || this._isReload) {
                        if (options.fullData && options.fullData.length > options.data.length) {
                            data = options.fullData;
                            visibleItems = visibleItems || options.data
                        }
                        this._rootNode = this._createNodesByItems(data, visibleItems);
                        if (!this._rootNode) {
                            options.data = (new _deferred.Deferred).reject(_ui2.default.Error("E1046", this.getKeyExpr()));
                            return
                        }
                        this._fillNodes(this._rootNode.children, options, expandedRowKeys);
                        this._isNodesInitializing = true;
                        if (options.collapseVisibleNodes || expandedRowKeys.length) {
                            this.option("expandedRowKeys", expandedRowKeys)
                        }
                        this._isReload = false;
                        this.executeAction("onNodesInitialized", {
                            root: this._rootNode
                        });
                        this._isNodesInitializing = false
                    }
                    data = this._createVisibleItemsByNodes(this._rootNode.children, options);
                    options.data = data;
                    this._totalItemsCount = data.length
                },
                _handleDataLoadedCore: function(options) {
                    var that = this;
                    var data = options.data;
                    var callBase = that.callBase;
                    var filter = options.storeLoadOptions.filter || options.loadOptions.filter;
                    var filterMode = that.option("filterMode");
                    var visibleItems;
                    var parentIds = options.storeLoadOptions.parentIds;
                    var needLoadParents = filter && (!parentIds || !parentIds.length) && "standard" !== filterMode;
                    if (!options.isCustomLoading) {
                        if (needLoadParents) {
                            var d = options.data = new _deferred.Deferred;
                            if ("matchOnly" === filterMode) {
                                visibleItems = data
                            }
                            return that._loadParents(data, options).done(function(data) {
                                that._loadChildrenIfNeed(data, options).done(function(data) {
                                    options.data = data;
                                    that._processTreeStructure(options, visibleItems);
                                    callBase.call(that, options);
                                    d.resolve(options.data)
                                })
                            }).fail(d.reject)
                        } else {
                            that._processTreeStructure(options)
                        }
                    }
                    that.callBase(options)
                },
                _handlePush: function(changes) {
                    var reshapeOnPush = this._dataSource._reshapeOnPush;
                    var isNeedReshape = reshapeOnPush && !!changes.length;
                    if (isNeedReshape) {
                        this._isReload = true
                    }
                    this.callBase.apply(this, arguments)
                },
                init: function(dataSource, remoteOperations) {
                    this.callBase.apply(this, arguments);
                    var dataStructure = this.option("dataStructure");
                    this._keyGetter = this._createKeyGetter();
                    this._parentIdGetter = this._createParentIdGetter();
                    this._hasItemsGetter = this._createHasItemsGetter();
                    this._hasItemsSetter = this._createHasItemsSetter();
                    if ("tree" === dataStructure) {
                        this._itemsGetter = this._createItemsGetter();
                        this._keySetter = this._createKeySetter();
                        this._parentIdSetter = this.createParentIdSetter()
                    }
                    this._nodeByKey = {};
                    this._isChildrenLoaded = {};
                    this._totalItemsCount = 0;
                    this.createAction("onNodesInitialized")
                },
                getKeyExpr: function() {
                    var store = this.store();
                    var key = store && store.key();
                    var keyExpr = this.option("keyExpr");
                    if (_type2.default.isDefined(key) && _type2.default.isDefined(keyExpr)) {
                        if (!(0, _common.equalByValue)(key, keyExpr)) {
                            throw _ui2.default.Error("E1044")
                        }
                    }
                    return key || keyExpr || DEFAULT_KEY_EXPRESSION
                },
                keyOf: function(data) {
                    return this._keyGetter && this._keyGetter(data)
                },
                parentKeyOf: function(data) {
                    return this._parentIdGetter && this._parentIdGetter(data)
                },
                getRootNode: function() {
                    return this._rootNode
                },
                totalItemsCount: function() {
                    return this._totalItemsCount
                },
                isRowExpanded: function(key, cache) {
                    if (cache) {
                        var isExpandedByKey = cache.isExpandedByKey;
                        if (!isExpandedByKey) {
                            isExpandedByKey = cache.isExpandedByKey = {};
                            this.option("expandedRowKeys").forEach(function(key) {
                                isExpandedByKey[key] = true
                            })
                        }
                        return !!isExpandedByKey[key]
                    }
                    var indexExpandedNodeKey = _uiGrid_core2.default.getIndexByKey(key, this.option("expandedRowKeys"), null);
                    return indexExpandedNodeKey >= 0
                },
                _changeRowExpandCore: function(key) {
                    var expandedRowKeys = this.option("expandedRowKeys").slice();
                    var indexExpandedNodeKey = _uiGrid_core2.default.getIndexByKey(key, expandedRowKeys, null);
                    if (indexExpandedNodeKey < 0) {
                        expandedRowKeys.push(key)
                    } else {
                        expandedRowKeys.splice(indexExpandedNodeKey, 1)
                    }
                    this.option("expandedRowKeys", expandedRowKeys)
                },
                changeRowExpand: function(key) {
                    this._changeRowExpandCore(key);
                    return this._isNodesInitializing ? (new _deferred.Deferred).resolve() : this.load()
                },
                getNodeByKey: function(key) {
                    if (this._nodeByKey) {
                        return this._nodeByKey[key]
                    }
                },
                getNodeLeafKeys: function() {
                    var that = this;
                    var result = [];
                    var keys = that._rootNode ? [that._rootNode.key] : [];
                    keys.forEach(function(key) {
                        var node = that.getNodeByKey(key);
                        node && _uiTree_list2.default.foreachNodes([node], function(childNode) {
                            !childNode.children.length && result.push(childNode.key)
                        })
                    });
                    return result
                },
                getChildNodeKeys: function(parentKey) {
                    var node = this.getNodeByKey(parentKey);
                    var childrenKeys = [];
                    node && _uiTree_list2.default.foreachNodes(node.children, function(childNode) {
                        childrenKeys.push(childNode.key)
                    });
                    return childrenKeys
                },
                loadDescendants: function(keys, childrenOnly) {
                    var that = this;
                    var d = new _deferred.Deferred;
                    var remoteOperations = that.remoteOperations();
                    if (_type2.default.isDefined(keys)) {
                        keys = Array.isArray(keys) ? keys : [keys]
                    } else {
                        keys = that.getNodeLeafKeys()
                    }
                    if (!remoteOperations.filtering || !keys.length) {
                        return d.resolve()
                    }
                    var loadOptions = that._dataSource._createStoreLoadOptions();
                    loadOptions.parentIds = keys;
                    that.load(loadOptions).done(function() {
                        if (!childrenOnly) {
                            var childKeys = getChildKeys(that, keys);
                            if (childKeys.length) {
                                that.loadDescendants(childKeys, childrenOnly).done(d.resolve).fail(d.reject);
                                return
                            }
                        }
                        d.resolve()
                    }).fail(d.reject);
                    return d.promise()
                },
                forEachNode: function() {
                    var nodes = [];
                    var callback;
                    if (1 === arguments.length) {
                        callback = arguments[0];
                        var rootNode = this.getRootNode();
                        nodes = rootNode && rootNode.children || []
                    } else {
                        if (2 === arguments.length) {
                            callback = arguments[1];
                            nodes = arguments[0];
                            nodes = Array.isArray(nodes) ? nodes : [nodes]
                        }
                    }
                    _uiTree_list2.default.foreachNodes(nodes, callback)
                }
            }
        }());
        module.exports = {
            extend: function(extender) {
                DataSourceAdapterTreeList = DataSourceAdapterTreeList.inherit(extender)
            },
            create: function(component) {
                return new DataSourceAdapterTreeList(component)
            }
        }
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/xmla_store/xmla_store.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);
        var _class = __webpack_require__( /*! ../../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _string = __webpack_require__( /*! ../../../core/utils/string */ 43);
        var _errors = __webpack_require__( /*! ../../../data/errors */ 38);
        var _common = __webpack_require__( /*! ../../../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 4);
        var _array = __webpack_require__( /*! ../../../core/utils/array */ 14);
        var _uiPivot_grid = __webpack_require__( /*! ../ui.pivot_grid.utils */ 81);
        var _deferred = __webpack_require__( /*! ../../../core/utils/deferred */ 6);
        var _language_codes = __webpack_require__( /*! ../../../localization/language_codes */ 298);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var window = (0, _window.getWindow)();
        exports.XmlaStore = _class2.default.inherit(function() {
            var discover = '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><Discover xmlns="urn:schemas-microsoft-com:xml-analysis"><RequestType>{2}</RequestType><Restrictions><RestrictionList><CATALOG_NAME>{0}</CATALOG_NAME><CUBE_NAME>{1}</CUBE_NAME></RestrictionList></Restrictions><Properties><PropertyList><Catalog>{0}</Catalog>{3}</PropertyList></Properties></Discover></Body></Envelope>';
            var execute = '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><Execute xmlns="urn:schemas-microsoft-com:xml-analysis"><Command><Statement>{0}</Statement></Command><Properties><PropertyList><Catalog>{1}</Catalog><ShowHiddenCubes>True</ShowHiddenCubes><SspropInitAppName>Microsoft SQL Server Management Studio</SspropInitAppName><Timeout>3600</Timeout>{2}</PropertyList></Properties></Execute></Body></Envelope>';
            var mdx = "SELECT {2} FROM {0} {1} CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS";
            var mdxFilterSelect = "(SELECT {0} FROM {1})";
            var mdxSubset = "Subset({0}, {1}, {2})";
            var mdxOrder = "Order({0}, {1}, {2})";
            var mdxWith = "{0} {1} as {2}";
            var mdxSlice = "WHERE ({0})";
            var mdxNonEmpty = "NonEmpty({0}, {1})";
            var mdxAxis = "{0} DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME, MEMBER_VALUE ON {1}";
            var mdxCrossJoin = "CrossJoin({0})";
            var mdxSet = "{{0}}";
            var MEASURE_DEMENSION_KEY = "DX_MEASURES";
            var MD_DIMTYPE_MEASURE = "2";

            function execXMLA(requestOptions, data) {
                var deferred = new _deferred.Deferred;
                var beforeSend = requestOptions.beforeSend;
                var ajaxSettings = {
                    url: requestOptions.url,
                    dataType: "text",
                    data: data,
                    headers: {
                        "Content-Type": "text/xml"
                    },
                    xhrFields: {},
                    method: "POST"
                };
                if ((0, _type.isFunction)(beforeSend)) {
                    beforeSend(ajaxSettings)
                }(0, _uiPivot_grid.sendRequest)(ajaxSettings).fail(function() {
                    deferred.reject(arguments)
                }).done(function(text) {
                    var parser = new window.DOMParser;
                    var xml;
                    try {
                        try {
                            xml = parser.parseFromString(text, "text/xml")
                        } catch (e) {
                            xml = void 0
                        }
                        if (!xml || xml.getElementsByTagName("parsererror").length || 0 === xml.childNodes.length) {
                            throw new _errors.errors.Error("E4023", text)
                        }
                    } catch (e) {
                        deferred.reject({
                            statusText: e.message,
                            stack: e.stack,
                            responseText: text
                        })
                    }
                    deferred.resolve(xml)
                });
                return deferred
            }

            function getLocaleIdProperty() {
                var languageId = (0, _language_codes.getLanguageId)();
                if (void 0 !== languageId) {
                    return (0, _string.format)("<LocaleIdentifier>{0}</LocaleIdentifier>", languageId)
                }
                return ""
            }

            function mdxDescendants(level, levelMember, nextLevel) {
                var memberExpression = levelMember ? levelMember : level;
                return "Descendants({" + memberExpression + "}, " + nextLevel + ", SELF_AND_BEFORE)"
            }

            function getAllMember(dimension) {
                return (dimension.hierarchyName || dimension.dataField) + ".[All]"
            }

            function getAllMembers(field) {
                var result = field.dataField + ".allMembers";
                var searchValue = field.searchValue;
                if (searchValue) {
                    searchValue = searchValue.replace(/'/g, "''");
                    result = "Filter(" + result + ", instr(" + field.dataField + ".currentmember.member_caption,'" + searchValue + "') > 0)"
                }
                return result
            }

            function crossJoinElements(elements) {
                var elementsString = elements.join(",");
                return elements.length > 1 ? (0, _string.format)(mdxCrossJoin, elementsString) : elementsString
            }

            function union(elements) {
                var elementsString = elements.join(",");
                return elements.length > 1 ? "Union(" + elementsString + ")" : elementsString
            }

            function generateCrossJoin(path, expandLevel, expandAllCount, expandIndex, slicePath, options, axisName, take) {
                var crossJoinArgs = [];
                var dimensions = options[axisName];
                var fields = [];
                var arg;
                var prevDimension;
                var member;
                for (var i = expandIndex; i <= expandLevel; i++) {
                    var field = dimensions[i];
                    var dataField = field.dataField;
                    var prevHierarchyName = dimensions[i - 1] && dimensions[i - 1].hierarchyName;
                    var hierarchyName = field.hierarchyName;
                    var isLastDimensionInGroup = !hierarchyName || !dimensions[i + 1] || dimensions[i + 1].hierarchyName !== hierarchyName;
                    var expandAllIndex = path.length + expandAllCount + expandIndex;
                    arg = null;
                    fields.push(field);
                    if (i < path.length) {
                        if (isLastDimensionInGroup) {
                            arg = "(" + dataField + "." + preparePathValue(path[i], dataField) + ")"
                        }
                    } else {
                        if (i <= expandAllIndex) {
                            if (0 === i && 0 === expandAllCount) {
                                var allMember = getAllMember(dimensions[expandIndex]);
                                if (!hierarchyName) {
                                    arg = getAllMembers(dimensions[expandIndex])
                                } else {
                                    arg = allMember + "," + dimensions[expandIndex].dataField
                                }
                            } else {
                                if (hierarchyName) {
                                    member = preparePathValue(slicePath[slicePath.length - 1]);
                                    if (isLastDimensionInGroup || i === expandAllIndex) {
                                        if (prevHierarchyName === hierarchyName) {
                                            if (slicePath.length) {
                                                prevDimension = dimensions[slicePath.length - 1]
                                            }
                                            if (!prevDimension || prevDimension.hierarchyName !== hierarchyName) {
                                                prevDimension = dimensions[i - 1];
                                                member = ""
                                            }
                                            arg = mdxDescendants(prevDimension.dataField, member, dataField)
                                        } else {
                                            arg = getAllMembers(field)
                                        }
                                    }
                                } else {
                                    arg = getAllMembers(field)
                                }
                            }
                        } else {
                            var isFirstDimensionInGroup = !hierarchyName || prevHierarchyName !== hierarchyName;
                            if (isFirstDimensionInGroup) {
                                arg = "(" + getAllMember(field) + ")"
                            }
                        }
                    }
                    if (arg) {
                        arg = (0, _string.format)(mdxSet, arg);
                        if (take) {
                            var sortBy = (field.hierarchyName || field.dataField) + ("displayText" === field.sortBy ? ".MEMBER_CAPTION" : ".MEMBER_VALUE");
                            arg = (0, _string.format)(mdxOrder, arg, sortBy, "desc" === field.sortOrder ? "DESC" : "ASC")
                        }
                        crossJoinArgs.push(arg)
                    }
                }
                return crossJoinElements(crossJoinArgs)
            }

            function fillCrossJoins(crossJoins, path, expandLevel, expandIndex, slicePath, options, axisName, cellsString, take, totalsOnly) {
                var expandAllCount = -1;
                var dimensions = options[axisName];
                var dimensionIndex;
                do {
                    expandAllCount++;
                    dimensionIndex = path.length + expandAllCount + expandIndex;
                    var crossJoin = generateCrossJoin(path, expandLevel, expandAllCount, expandIndex, slicePath, options, axisName, take);
                    if (!take && !totalsOnly) {
                        crossJoin = (0, _string.format)(mdxNonEmpty, crossJoin, cellsString)
                    }
                    crossJoins.push(crossJoin)
                } while (dimensions[dimensionIndex] && dimensions[dimensionIndex + 1] && dimensions[dimensionIndex].expanded)
            }

            function declare(expression, withArray, name, type) {
                name = name || "[DX_Set_" + withArray.length + "]";
                type = type || "set";
                withArray.push((0, _string.format)(mdxWith, type, name, expression));
                return name
            }

            function generateAxisMdx(options, axisName, cells, withArray, parseOptions) {
                var dimensions = options[axisName];
                var crossJoins = [];
                var path = [];
                var expandedPaths = [];
                var expandIndex = 0;
                var expandLevel = 0;
                var result = [];
                var cellsString = (0, _string.format)(mdxSet, cells.join(","));
                if (dimensions && dimensions.length) {
                    if (options.headerName === axisName) {
                        path = options.path;
                        expandIndex = path.length
                    } else {
                        if (options.headerName && options.oppositePath) {
                            path = options.oppositePath;
                            expandIndex = path.length
                        } else {
                            expandedPaths = ("columns" === axisName ? options.columnExpandedPaths : options.rowExpandedPaths) || expandedPaths
                        }
                    }
                    expandLevel = (0, _uiPivot_grid.getExpandedLevel)(options, axisName);
                    fillCrossJoins(crossJoins, [], expandLevel, expandIndex, path, options, axisName, cellsString, "rows" === axisName ? options.rowTake : options.columnTake, options.totalsOnly);
                    (0, _iterator.each)(expandedPaths, function(_, expandedPath) {
                        fillCrossJoins(crossJoins, expandedPath, expandLevel, expandIndex, expandedPath, options, axisName, cellsString)
                    });
                    for (var i = expandLevel; i >= path.length; i--) {
                        if (dimensions[i].hierarchyName) {
                            parseOptions.visibleLevels[dimensions[i].hierarchyName] = parseOptions.visibleLevels[dimensions[i].hierarchyName] || [];
                            parseOptions.visibleLevels[dimensions[i].hierarchyName].push(dimensions[i].dataField)
                        }
                    }
                }
                if (crossJoins.length) {
                    var expression = union(crossJoins);
                    if ("rows" === axisName && options.rowTake) {
                        expression = (0, _string.format)(mdxSubset, expression, options.rowSkip > 0 ? options.rowSkip + 1 : 0, options.rowSkip > 0 ? options.rowTake : options.rowTake + 1)
                    }
                    if ("columns" === axisName && options.columnTake) {
                        expression = (0, _string.format)(mdxSubset, expression, options.columnSkip > 0 ? options.columnSkip + 1 : 0, options.columnSkip > 0 ? options.columnTake : options.columnTake + 1)
                    }
                    var axisSet = "[DX_".concat(axisName, "]");
                    result.push(declare(expression, withArray, axisSet));
                    if (options.totalsOnly) {
                        result.push(declare("COUNT(".concat(axisSet, ")"), withArray, "[DX_".concat(axisName, "_count]"), "member"))
                    }
                }
                if ("columns" === axisName && cells.length && !options.skipValues) {
                    result.push(cellsString)
                }
                return (0, _string.format)(mdxAxis, crossJoinElements(result), axisName)
            }

            function generateAxisFieldsFilter(fields) {
                var filterMembers = [];
                (0, _iterator.each)(fields, function(_, field) {
                    var dataField = field.dataField;
                    var filterExpression = [];
                    var filterValues = field.filterValues || [];
                    var filterStringExpression;
                    if (field.hierarchyName && (0, _type.isNumeric)(field.groupIndex)) {
                        return
                    }(0, _iterator.each)(filterValues, function(_, filterValue) {
                        var filterMdx = dataField + "." + preparePathValue(Array.isArray(filterValue) ? filterValue[filterValue.length - 1] : filterValue, dataField);
                        if ("exclude" === field.filterType) {
                            filterExpression.push(filterMdx + ".parent");
                            filterMdx = "Descendants(" + filterMdx + ")"
                        }
                        filterExpression.push(filterMdx)
                    });
                    if (filterValues.length) {
                        filterStringExpression = (0, _string.format)(mdxSet, filterExpression.join(","));
                        if ("exclude" === field.filterType) {
                            filterStringExpression = "Except(" + getAllMembers(field) + "," + filterStringExpression + ")"
                        }
                        filterMembers.push(filterStringExpression)
                    }
                });
                return filterMembers.length ? crossJoinElements(filterMembers) : ""
            }

            function generateFrom(columnsFilter, rowsFilter, filter, cubeName) {
                var from = "[" + cubeName + "]";
                (0, _iterator.each)([columnsFilter, rowsFilter, filter], function(_, filter) {
                    if (filter) {
                        from = (0, _string.format)(mdxFilterSelect, filter + "on 0", from)
                    }
                });
                return from
            }

            function generateMdxCore(axisStrings, withArray, columns, rows, filters, slice, cubeName) {
                var options = arguments.length > 7 && void 0 !== arguments[7] ? arguments[7] : {};
                var mdxString = "";
                var withString = (withArray.length ? "with " + withArray.join(" ") : "") + " ";
                if (axisStrings.length) {
                    var select;
                    if (options.totalsOnly) {
                        var countMembers = [];
                        if (rows.length) {
                            countMembers.push("[DX_rows_count]")
                        }
                        if (columns.length) {
                            countMembers.push("[DX_columns_count]")
                        }
                        select = "{".concat(countMembers.join(","), "} on columns")
                    } else {
                        select = axisStrings.join(",")
                    }
                    mdxString = withString + (0, _string.format)(mdx, generateFrom(generateAxisFieldsFilter(columns), generateAxisFieldsFilter(rows), generateAxisFieldsFilter(filters || []), cubeName), slice.length ? (0, _string.format)(mdxSlice, slice.join(",")) : "", select)
                }
                return mdxString
            }

            function prepareDataFields(withArray, valueFields) {
                return (0, _iterator.map)(valueFields, function(cell) {
                    if ((0, _type.isString)(cell.expression)) {
                        declare(cell.expression, withArray, cell.dataField, "member")
                    }
                    return cell.dataField
                })
            }

            function addSlices(slices, options, headerName, path) {
                (0, _iterator.each)(path, function(index, value) {
                    var dimension = options[headerName][index];
                    if (!dimension.hierarchyName || dimension.hierarchyName !== options[headerName][index + 1].hierarchyName) {
                        slices.push(dimension.dataField + "." + preparePathValue(value, dimension.dataField))
                    }
                })
            }

            function generateMDX(options, cubeName, parseOptions) {
                var columns = options.columns || [];
                var rows = options.rows || [];
                var values = options.values && options.values.length ? options.values : [{
                    dataField: "[Measures]"
                }];
                var slice = [];
                var withArray = [];
                var axisStrings = [];
                var dataFields = prepareDataFields(withArray, values);
                parseOptions.measureCount = options.skipValues ? 1 : values.length;
                parseOptions.visibleLevels = {};
                if (options.headerName && options.path) {
                    addSlices(slice, options, options.headerName, options.path)
                }
                if (options.headerName && options.oppositePath) {
                    addSlices(slice, options, "rows" === options.headerName ? "columns" : "rows", options.oppositePath)
                }
                if (columns.length || dataFields.length) {
                    axisStrings.push(generateAxisMdx(options, "columns", dataFields, withArray, parseOptions))
                }
                if (rows.length) {
                    axisStrings.push(generateAxisMdx(options, "rows", dataFields, withArray, parseOptions))
                }
                return generateMdxCore(axisStrings, withArray, columns, rows, options.filters, slice, cubeName, options)
            }

            function createDrillDownAxisSlice(slice, fields, path) {
                (0, _iterator.each)(path, function(index, value) {
                    var field = fields[index];
                    if (field.hierarchyName && (fields[index + 1] || {}).hierarchyName === field.hierarchyName) {
                        return
                    }
                    slice.push(field.dataField + "." + preparePathValue(value, field.dataField))
                })
            }

            function generateDrillDownMDX(options, cubeName, params) {
                var columns = options.columns || [];
                var rows = options.rows || [];
                var values = options.values && options.values.length ? options.values : [{
                    dataField: "[Measures]"
                }];
                var slice = [];
                var withArray = [];
                var axisStrings = [];
                var dataFields = prepareDataFields(withArray, values);
                var maxRowCount = params.maxRowCount;
                var customColumns = params.customColumns || [];
                var customColumnsString = customColumns.length > 0 ? " return " + customColumns.join(",") : "";
                createDrillDownAxisSlice(slice, columns, params.columnPath || []);
                createDrillDownAxisSlice(slice, rows, params.rowPath || []);
                if (columns.length || columns.length || dataFields.length) {
                    axisStrings.push([(dataFields[params.dataIndex] || dataFields[0]) + " on 0"])
                }
                var coreMDX = generateMdxCore(axisStrings, withArray, columns, rows, options.filters, slice, cubeName);
                return coreMDX ? "drillthrough" + (maxRowCount > 0 ? " maxrows " + maxRowCount : "") + coreMDX + customColumnsString : coreMDX
            }

            function getNumber(str) {
                return parseInt(str, 10)
            }

            function parseValue(valueText) {
                return (0, _type.isNumeric)(valueText) ? parseFloat(valueText) : valueText
            }

            function getFirstChild(node, tagName) {
                return (node.getElementsByTagName(tagName) || [])[0]
            }

            function getFirstChildText(node, childTagName) {
                return getNodeText(getFirstChild(node, childTagName))
            }

            function parseAxes(xml, skipValues) {
                var axes = [];
                (0, _iterator.each)(xml.getElementsByTagName("Axis"), function(_, axisElement) {
                    var name = axisElement.getAttribute("name");
                    var axis = [];
                    var index = 0;
                    if (0 === name.indexOf("Axis") && (0, _type.isNumeric)(getNumber(name.substr(4)))) {
                        axes.push(axis);
                        (0, _iterator.each)(axisElement.getElementsByTagName("Tuple"), function(_, tupleElement) {
                            var tupleMembers = tupleElement.childNodes;
                            var levelSum = 0;
                            var members = [];
                            var membersCount = skipValues ? tupleMembers.length : tupleMembers.length - 1;
                            var isAxisWithMeasure = 1 === axes.length;
                            if (isAxisWithMeasure) {
                                membersCount--
                            }
                            axis.push(members);
                            for (var i = membersCount; i >= 0; i--) {
                                var tuple = tupleMembers[i];
                                var level = getNumber(getFirstChildText(tuple, "LNum"));
                                members[i] = {
                                    caption: getFirstChildText(tuple, "Caption"),
                                    value: parseValue(getFirstChildText(tuple, "MEMBER_VALUE")),
                                    level: level,
                                    index: index++,
                                    hasValue: !levelSum && (!!level || 0 === i),
                                    name: getFirstChildText(tuple, "UName"),
                                    hierarchyName: tupleMembers[i].getAttribute("Hierarchy"),
                                    parentName: getFirstChildText(tuple, "PARENT_UNIQUE_NAME"),
                                    levelName: getFirstChildText(tuple, "LName")
                                };
                                levelSum += level
                            }
                        })
                    }
                });
                while (axes.length < 2) {
                    axes.push([
                        [{
                            level: 0
                        }]
                    ])
                }
                return axes
            }

            function getNodeText(node) {
                return node && node && (node.textContent || node.text || node.innerHTML) || ""
            }

            function parseCells(xml, axes, measureCount) {
                var cells = [];
                var cell = [];
                var index = 0;
                var cellsOriginal = [];
                var cellElements = xml.getElementsByTagName("Cell");
                var errorDictionary = {};
                for (var i = 0; i < cellElements.length; i++) {
                    var xmlCell = cellElements[i];
                    var valueElement = xmlCell.getElementsByTagName("Value")[0];
                    var errorElements = valueElement && valueElement.getElementsByTagName("Error") || [];
                    var text = 0 === errorElements.length ? getNodeText(valueElement) : "#N/A";
                    var value = parseFloat(text);
                    var _isNumeric = text - value + 1 > 0;
                    var cellOrdinal = getNumber(xmlCell.getAttribute("CellOrdinal"));
                    if (errorElements.length) {
                        errorDictionary[getNodeText(errorElements[0].getElementsByTagName("ErrorCode")[0])] = getNodeText(errorElements[0].getElementsByTagName("Description")[0])
                    }
                    cellsOriginal[cellOrdinal] = {
                        value: _isNumeric ? value : text || null
                    }
                }(0, _iterator.each)(axes[1], function() {
                    var row = [];
                    cells.push(row);
                    (0, _iterator.each)(axes[0], function() {
                        var measureIndex = index % measureCount;
                        if (0 === measureIndex) {
                            cell = [];
                            row.push(cell)
                        }
                        cell.push(cellsOriginal[index] ? cellsOriginal[index].value : null);
                        index++
                    })
                });
                Object.keys(errorDictionary).forEach(function(key) {
                    _errors.errors.log("W4002", errorDictionary[key])
                });
                return cells
            }

            function preparePathValue(pathValue, dataField) {
                if (pathValue) {
                    pathValue = (0, _type.isString)(pathValue) && pathValue.indexOf("&") !== -1 ? pathValue : "[" + pathValue + "]";
                    if (dataField && 0 === pathValue.indexOf(dataField + ".")) {
                        pathValue = pathValue.slice(dataField.length + 1, pathValue.length)
                    }
                }
                return pathValue
            }

            function getItem(hash, name, member, index) {
                var item = hash[name];
                if (!item) {
                    item = {};
                    hash[name] = item
                }
                if (!(0, _type.isDefined)(item.value) && member) {
                    item.text = member.caption;
                    item.value = member.value;
                    item.key = name ? name : "";
                    item.levelName = member.levelName;
                    item.hierarchyName = member.hierarchyName;
                    item.parentName = member.parentName;
                    item.index = index;
                    item.level = member.level
                }
                return item
            }

            function getVisibleChildren(item, visibleLevels) {
                var result = [];
                var children = item.children && (item.children.length ? item.children : Object.keys(item.children.grandTotalHash || {}).reduce(function(result, name) {
                    return result.concat(item.children.grandTotalHash[name].children)
                }, []));
                var firstChild = children && children[0];
                if (firstChild && (visibleLevels[firstChild.hierarchyName] && (0, _array.inArray)(firstChild.levelName, visibleLevels[firstChild.hierarchyName]) !== -1 || !visibleLevels[firstChild.hierarchyName] || 0 === firstChild.level)) {
                    var newChildren = children.filter(function(child) {
                        return child.hierarchyName === firstChild.hierarchyName
                    });
                    newChildren.grandTotalHash = children.grandTotalHash;
                    return newChildren
                } else {
                    if (firstChild) {
                        for (var i = 0; i < children.length; i++) {
                            if (children[i].hierarchyName === firstChild.hierarchyName) {
                                result.push.apply(result, getVisibleChildren(children[i], visibleLevels))
                            }
                        }
                    }
                }
                return result
            }

            function processMember(dataIndex, member, parentItem) {
                var children = parentItem.children = parentItem.children || [];
                var hash = children.hash = children.hash || {};
                var grandTotalHash = children.grandTotalHash = children.grandTotalHash || {};
                if (member.parentName) {
                    parentItem = getItem(hash, member.parentName);
                    children = parentItem.children = parentItem.children || []
                }
                var currentItem = getItem(hash, member.name, member, dataIndex);
                if (member.hasValue && !currentItem.added) {
                    currentItem.index = dataIndex;
                    currentItem.added = true;
                    children.push(currentItem)
                }
                if ((!parentItem.value || !parentItem.parentName) && member.parentName) {
                    grandTotalHash[member.parentName] = parentItem
                } else {
                    if (grandTotalHash[parentItem.name]) {
                        delete grandTotalHash[member.parentName]
                    }
                }
                return currentItem
            }

            function getGrandTotalIndex(parentItem, visibleLevels) {
                var grandTotalIndex;
                if (1 === parentItem.children.length && "" === parentItem.children[0].parentName) {
                    grandTotalIndex = parentItem.children[0].index;
                    var grandTotalHash = parentItem.children.grandTotalHash;
                    parentItem.children = parentItem.children[0].children || [];
                    parentItem.children.grandTotalHash = grandTotalHash;
                    parentItem.children = getVisibleChildren(parentItem, visibleLevels)
                } else {
                    if (0 === parentItem.children.length) {
                        grandTotalIndex = 0
                    }
                }
                return grandTotalIndex
            }

            function fillDataSourceAxes(dataSourceAxis, axisTuples, measureCount, visibleLevels) {
                var result = [];
                (0, _iterator.each)(axisTuples, function(tupleIndex, members) {
                    var parentItem = {
                        children: result
                    };
                    var dataIndex = (0, _type.isDefined)(measureCount) ? Math.floor(tupleIndex / measureCount) : tupleIndex;
                    (0, _iterator.each)(members, function(_, member) {
                        parentItem = processMember(dataIndex, member, parentItem)
                    })
                });
                var parentItem = {
                    children: result
                };
                parentItem.children = getVisibleChildren(parentItem, visibleLevels);
                var grandTotalIndex = getGrandTotalIndex(parentItem, visibleLevels);
                (0, _uiPivot_grid.foreachTree)(parentItem.children, function(items) {
                    var item = items[0];
                    var children = getVisibleChildren(item, visibleLevels);
                    if (children.length) {
                        item.children = children
                    } else {
                        delete item.children
                    }
                    delete item.levelName;
                    delete item.hierarchyName;
                    delete item.added;
                    delete item.parentName;
                    delete item.level
                }, true);
                (0, _iterator.each)(parentItem.children || [], function(_, e) {
                    dataSourceAxis.push(e)
                });
                return grandTotalIndex
            }

            function checkError(xml) {
                var faultElementNS = xml.getElementsByTagName("soap:Fault");
                var faultElement = xml.getElementsByTagName("Fault");
                var errorElement = (0, _renderer2.default)([].slice.call(faultElement.length ? faultElement : faultElementNS)).find("Error");
                if (errorElement.length) {
                    var description = errorElement.attr("Description");
                    var error = new _errors.errors.Error("E4000", description);
                    _errors.errors.log("E4000", description);
                    return error
                }
                return null
            }

            function parseResult(xml, parseOptions) {
                var dataSource = {
                    columns: [],
                    rows: []
                };
                var measureCount = parseOptions.measureCount;
                var axes = parseAxes(xml, parseOptions.skipValues);
                dataSource.grandTotalColumnIndex = fillDataSourceAxes(dataSource.columns, axes[0], measureCount, parseOptions.visibleLevels);
                dataSource.grandTotalRowIndex = fillDataSourceAxes(dataSource.rows, axes[1], void 0, parseOptions.visibleLevels);
                dataSource.values = parseCells(xml, axes, measureCount);
                return dataSource
            }

            function parseDiscoverRowSet(xml, schema, dimensions, translatedDisplayFolders) {
                var result = [];
                var isMeasure = "MEASURE" === schema;
                var displayFolderField = isMeasure ? "MEASUREGROUP_NAME" : schema + "_DISPLAY_FOLDER";
                (0, _iterator.each)(xml.getElementsByTagName("row"), function(_, row) {
                    var hierarchyName = "LEVEL" === schema ? getFirstChildText(row, "HIERARCHY_UNIQUE_NAME") : void 0;
                    var levelNumber = getFirstChildText(row, "LEVEL_NUMBER");
                    var displayFolder = getFirstChildText(row, displayFolderField);
                    if (isMeasure) {
                        displayFolder = translatedDisplayFolders[displayFolder] || displayFolder
                    }
                    if (("0" !== levelNumber || "true" !== getFirstChildText(row, schema + "_IS_VISIBLE")) && getFirstChildText(row, "DIMENSION_TYPE") !== MD_DIMTYPE_MEASURE) {
                        var dimension = isMeasure ? MEASURE_DEMENSION_KEY : getFirstChildText(row, "DIMENSION_UNIQUE_NAME");
                        var dataField = getFirstChildText(row, schema + "_UNIQUE_NAME");
                        result.push({
                            dimension: dimensions.names[dimension] || dimension,
                            groupIndex: levelNumber ? getNumber(levelNumber) - 1 : void 0,
                            dataField: dataField,
                            caption: getFirstChildText(row, schema + "_CAPTION"),
                            hierarchyName: hierarchyName,
                            groupName: hierarchyName,
                            displayFolder: displayFolder,
                            isMeasure: isMeasure,
                            isDefault: !!dimensions.defaultHierarchies[dataField]
                        })
                    }
                });
                return result
            }

            function parseMeasureGroupDiscoverRowSet(xml) {
                var measureGroups = {};
                (0, _iterator.each)(xml.getElementsByTagName("row"), function(_, row) {
                    measureGroups[getFirstChildText(row, "MEASUREGROUP_NAME")] = getFirstChildText(row, "MEASUREGROUP_CAPTION")
                });
                return measureGroups
            }

            function parseDimensionsDiscoverRowSet(xml) {
                var result = {
                    names: {},
                    defaultHierarchies: {}
                };
                (0, _iterator.each)((0, _renderer2.default)(xml).find("row"), function() {
                    var $row = (0, _renderer2.default)(this);
                    var type = $row.children("DIMENSION_TYPE").text();
                    var dimensionName = type === MD_DIMTYPE_MEASURE ? MEASURE_DEMENSION_KEY : $row.children("DIMENSION_UNIQUE_NAME").text();
                    result.names[dimensionName] = $row.children("DIMENSION_CAPTION").text();
                    result.defaultHierarchies[$row.children("DEFAULT_HIERARCHY").text()] = true
                });
                return result
            }

            function parseStringWithUnicodeSymbols(str) {
                str = str.replace(/_x(....)_/g, function(whole, group1) {
                    return String.fromCharCode(parseInt(group1, 16))
                });
                var stringArray = str.match(/\[.+?\]/gi);
                if (stringArray && stringArray.length) {
                    str = stringArray[stringArray.length - 1]
                }
                return str.replace(/\[/gi, "").replace(/\]/gi, "").replace(/\$/gi, "").replace(/\./gi, " ")
            }

            function parseDrillDownRowSet(xml) {
                var rows = xml.getElementsByTagName("row");
                var result = [];
                var columnNames = {};
                for (var i = 0; i < rows.length; i++) {
                    var children = rows[i].childNodes;
                    var item = {};
                    for (var j = 0; j < children.length; j++) {
                        var tagName = children[j].tagName;
                        var name = columnNames[tagName] = columnNames[tagName] || parseStringWithUnicodeSymbols(tagName);
                        item[name] = getNodeText(children[j])
                    }
                    result.push(item)
                }
                return result
            }

            function sendQuery(storeOptions, mdxString) {
                mdxString = (0, _renderer2.default)("<div>").text(mdxString).html();
                return execXMLA(storeOptions, (0, _string.format)(execute, mdxString, storeOptions.catalog, getLocaleIdProperty()))
            }

            function processTotalCount(data, options, totalCountXml) {
                var axes = [];
                var columnOptions = options.columns || [];
                var rowOptions = options.rows || [];
                if (columnOptions.length) {
                    axes.push({})
                }
                if (rowOptions.length) {
                    axes.push({})
                }
                var cells = parseCells(totalCountXml, [
                    [{}],
                    [{}, {}]
                ], 1);
                if (!columnOptions.length && rowOptions.length) {
                    data.rowCount = Math.max(cells[0][0][0] - 1, 0)
                }
                if (!rowOptions.length && columnOptions.length) {
                    data.columnCount = Math.max(cells[0][0][0] - 1, 0)
                }
                if (rowOptions.length && columnOptions.length) {
                    data.rowCount = Math.max(cells[0][0][0] - 1, 0);
                    data.columnCount = Math.max(cells[1][0][0] - 1, 0)
                }
                if (void 0 !== data.rowCount && options.rowTake) {
                    data.rows = _toConsumableArray(Array(options.rowSkip)).concat(data.rows);
                    data.rows.length = data.rowCount;
                    for (var i = 0; i < data.rows.length; i++) {
                        data.rows[i] = data.rows[i] || {}
                    }
                }
                if (void 0 !== data.columnCount && options.columnTake) {
                    data.columns = _toConsumableArray(Array(options.columnSkip)).concat(data.columns);
                    data.columns.length = data.columnCount;
                    for (var _i = 0; _i < data.columns.length; _i++) {
                        data.columns[_i] = data.columns[_i] || {}
                    }
                }
            }
            return {
                ctor: function(options) {
                    this._options = options
                },
                getFields: function() {
                    var options = this._options;
                    var catalog = options.catalog;
                    var cube = options.cube;
                    var localeIdProperty = getLocaleIdProperty();
                    var dimensionsRequest = execXMLA(options, (0, _string.format)(discover, catalog, cube, "MDSCHEMA_DIMENSIONS", localeIdProperty));
                    var measuresRequest = execXMLA(options, (0, _string.format)(discover, catalog, cube, "MDSCHEMA_MEASURES", localeIdProperty));
                    var hierarchiesRequest = execXMLA(options, (0, _string.format)(discover, catalog, cube, "MDSCHEMA_HIERARCHIES", localeIdProperty));
                    var levelsRequest = execXMLA(options, (0, _string.format)(discover, catalog, cube, "MDSCHEMA_LEVELS", localeIdProperty));
                    var result = new _deferred.Deferred;
                    (0, _deferred.when)(dimensionsRequest, measuresRequest, hierarchiesRequest, levelsRequest).then(function(dimensionsResponse, measuresResponse, hierarchiesResponse, levelsResponse) {
                        execXMLA(options, (0, _string.format)(discover, catalog, cube, "MDSCHEMA_MEASUREGROUPS", localeIdProperty)).done(function(measureGroupsResponse) {
                            var dimensions = parseDimensionsDiscoverRowSet(dimensionsResponse);
                            var hierarchies = parseDiscoverRowSet(hierarchiesResponse, "HIERARCHY", dimensions);
                            var levels = parseDiscoverRowSet(levelsResponse, "LEVEL", dimensions);
                            var measureGroups = parseMeasureGroupDiscoverRowSet(measureGroupsResponse);
                            var fields = parseDiscoverRowSet(measuresResponse, "MEASURE", dimensions, measureGroups).concat(hierarchies);
                            var levelsByHierarchy = {};
                            (0, _iterator.each)(levels, function(_, level) {
                                levelsByHierarchy[level.hierarchyName] = levelsByHierarchy[level.hierarchyName] || [];
                                levelsByHierarchy[level.hierarchyName].push(level)
                            });
                            (0, _iterator.each)(hierarchies, function(_, hierarchy) {
                                if (levelsByHierarchy[hierarchy.dataField] && levelsByHierarchy[hierarchy.dataField].length > 1) {
                                    hierarchy.groupName = hierarchy.hierarchyName = hierarchy.dataField;
                                    fields.push.apply(fields, levelsByHierarchy[hierarchy.hierarchyName])
                                }
                            });
                            result.resolve(fields)
                        }).fail(result.reject)
                    }).fail(result.reject);
                    return result
                },
                load: function load(options) {
                    var result = new _deferred.Deferred;
                    var storeOptions = this._options;
                    var parseOptions = {
                        skipValues: options.skipValues
                    };
                    var mdxString = generateMDX(options, storeOptions.cube, parseOptions);
                    var rowCountMdx;
                    if (options.rowSkip || options.rowTake || options.columnTake || options.columnSkip) {
                        rowCountMdx = generateMDX((0, _extend.extend)({}, options, {
                            totalsOnly: true,
                            rowSkip: null,
                            rowTake: null,
                            columnSkip: null,
                            columnTake: null
                        }), storeOptions.cube, {})
                    }
                    var load = function() {
                        if (mdxString) {
                            (0, _deferred.when)(sendQuery(storeOptions, mdxString), rowCountMdx && sendQuery(storeOptions, rowCountMdx)).done(function(executeXml, rowCountXml) {
                                var error = checkError(executeXml) || rowCountXml && checkError(rowCountXml);
                                if (!error) {
                                    var response = parseResult(executeXml, parseOptions);
                                    if (rowCountXml) {
                                        processTotalCount(response, options, rowCountXml)
                                    }
                                    result.resolve(response)
                                } else {
                                    result.reject(error)
                                }
                            }).fail(result.reject)
                        } else {
                            result.resolve({
                                columns: [],
                                rows: [],
                                values: [],
                                grandTotalColumnIndex: 0,
                                grandTotalRowIndex: 0
                            })
                        }
                    };
                    if (options.delay) {
                        setTimeout(load, options.delay)
                    } else {
                        load()
                    }
                    return result
                },
                supportPaging: function() {
                    return true
                },
                getDrillDownItems: function(options, params) {
                    var result = new _deferred.Deferred;
                    var storeOptions = this._options;
                    var mdxString = generateDrillDownMDX(options, storeOptions.cube, params);
                    if (mdxString) {
                        (0, _deferred.when)(sendQuery(storeOptions, mdxString)).done(function(executeXml) {
                            var error = checkError(executeXml);
                            if (!error) {
                                result.resolve(parseDrillDownRowSet(executeXml))
                            } else {
                                result.reject(error)
                            }
                        }).fail(result.reject)
                    } else {
                        result.resolve([])
                    }
                    return result
                },
                key: _common.noop,
                filter: _common.noop
            }
        }()).include(_uiPivot_grid.storeDrillDownMixin)
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.field_chooser.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _tree_view = __webpack_require__( /*! ../tree_view */ 146);
        var _tree_view2 = _interopRequireDefault(_tree_view);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _uiPivot_grid2 = __webpack_require__( /*! ./ui.pivot_grid.field_chooser_base */ 249);
        var _uiPivot_grid3 = _interopRequireDefault(_uiPivot_grid2);
        __webpack_require__( /*! ./data_source */ 247);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DIV = "<div>";
        var hasWindow = (0, _window.hasWindow)();
        var FIELDCHOOSER_CLASS = "dx-pivotgridfieldchooser";
        var FIELDCHOOSER_CONTAINER_CLASS = "dx-pivotgridfieldchooser-container";
        var FIELDS_CONTAINER_CLASS = "dx-pivotgrid-fields-container";
        var AREA_DRAG_CLASS = "dx-pivotgrid-drag-action";

        function getDimensionFields(item, fields) {
            var result = [];
            if (item.items) {
                for (var i = 0; i < item.items.length; i++) {
                    result.push.apply(result, getDimensionFields(item.items[i], fields))
                }
            } else {
                if ((0, _type.isDefined)(item.index)) {
                    result.push(fields[item.index])
                }
            }
            return result
        }

        function getFirstItem(item, condition) {
            if (item.items) {
                for (var i = 0; i < item.items.length; i++) {
                    var childrenItem = getFirstItem(item.items[i], condition);
                    if (childrenItem) {
                        return childrenItem
                    }
                }
            }
            if (condition(item)) {
                return item
            }
        }
        var compareOrder = [function(a, b) {
            var aValue = -!!a.isMeasure;
            var bValue = +!!b.isMeasure;
            return aValue + bValue
        }, function(a, b) {
            var aValue = -!!(a.items && a.items.length);
            var bValue = +!!(b.items && b.items.length);
            return aValue + bValue
        }, function(a, b) {
            var aValue = +!!(false === a.isMeasure && a.field && a.field.levels && a.field.levels.length);
            var bValue = -!!(false === b.isMeasure && b.field && b.field.levels && b.field.levels.length);
            return aValue + bValue
        }, (0, _uiPivot_grid.getCompareFunction)(function(item) {
            return item.text
        })];

        function compareItems(a, b) {
            var result = 0;
            var i = 0;
            while (!result && compareOrder[i]) {
                result = compareOrder[i++](a, b)
            }
            return result
        }

        function getScrollable(container) {
            return container.find(".dx-scrollable").dxScrollable("instance")
        }
        var FieldChooser = _uiPivot_grid3.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    height: 400,
                    layout: 0,
                    dataSource: null,
                    onContextMenuPreparing: null,
                    allowSearch: false,
                    searchTimeout: 500,
                    texts: {
                        columnFields: (0, _message.format)("dxPivotGrid-columnFields"),
                        rowFields: (0, _message.format)("dxPivotGrid-rowFields"),
                        dataFields: (0, _message.format)("dxPivotGrid-dataFields"),
                        filterFields: (0, _message.format)("dxPivotGrid-filterFields"),
                        allFields: (0, _message.format)("dxPivotGrid-allFields")
                    }
                })
            },
            _refreshDataSource: function() {
                var that = this;
                that._expandedPaths = [];
                that._changedHandler = that._changedHandler || function() {
                    (0, _iterator.each)(that._dataChangedHandlers, function(_, func) {
                        func()
                    });
                    that._fireContentReadyAction();
                    that._skipStateChange = true;
                    that.option("state", that._dataSource.state());
                    that._skipStateChange = false
                };
                that._disposeDataSource();
                that.callBase();
                that._dataSource && that._dataSource.on("changed", that._changedHandler)
            },
            _disposeDataSource: function() {
                var that = this;
                var dataSource = that._dataSource;
                if (dataSource) {
                    dataSource.off("changed", that._changedHandler);
                    that._dataSource = void 0
                }
            },
            _dispose: function() {
                this._disposeDataSource();
                this.callBase.apply(this, arguments)
            },
            _init: function() {
                this.callBase();
                this._refreshDataSource();
                this._dataChangedHandlers = [];
                this._initActions()
            },
            _initActions: function() {
                this._actions = {
                    onContextMenuPreparing: this._createActionByOption("onContextMenuPreparing")
                }
            },
            _trigger: function(eventName, eventArg) {
                this._actions[eventName](eventArg)
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    dataSource: true
                })
            },
            _optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "dataSource":
                        that._refreshDataSource();
                        that._invalidate();
                        break;
                    case "layout":
                    case "texts":
                    case "allowSearch":
                    case "searchTimeout":
                        that._invalidate();
                        break;
                    case "onContextMenuPreparing":
                        that._actions[args.name] = that._createActionByOption(args.name);
                        break;
                    default:
                        that.callBase(args)
                }
            },
            _clean: function(skipStateSetting) {
                !skipStateSetting && this._dataSource && this.option("state", this._dataSource.state());
                this.$element().children("." + FIELDCHOOSER_CONTAINER_CLASS).remove()
            },
            _renderLayout0: function($container) {
                var that = this;
                $container.addClass("dx-layout-0");
                var $row1 = (0, _renderer2.default)(DIV).addClass("dx-row").appendTo($container);
                var $row2 = (0, _renderer2.default)(DIV).addClass("dx-row").appendTo($container);
                var $col1 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row1);
                var $col2 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row1);
                var $col3 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row2);
                var $col4 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row2);
                that._renderArea($col1, "all");
                that._renderArea($col2, "row");
                that._renderArea($col2, "column");
                that._renderArea($col3, "filter");
                that._renderArea($col4, "data")
            },
            _renderLayout1: function($container) {
                var that = this;
                var $col1 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($container);
                var $col2 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($container);
                that._renderArea($col1, "all");
                that._renderArea($col2, "filter");
                that._renderArea($col2, "row");
                that._renderArea($col2, "column");
                that._renderArea($col2, "data")
            },
            _renderLayout2: function($container) {
                var that = this;
                $container.addClass("dx-layout-2");
                var $row1 = (0, _renderer2.default)(DIV).addClass("dx-row").appendTo($container);
                that._renderArea($row1, "all");
                var $row2 = (0, _renderer2.default)(DIV).addClass("dx-row").appendTo($container);
                var $col1 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row2);
                var $col2 = (0, _renderer2.default)(DIV).addClass("dx-col").appendTo($row2);
                that._renderArea($col1, "filter");
                that._renderArea($col1, "row");
                that._renderArea($col2, "column");
                that._renderArea($col2, "data")
            },
            _initMarkup: function() {
                var that = this;
                var $element = this.$element();
                var $container = (0, _renderer2.default)(DIV).addClass(FIELDCHOOSER_CONTAINER_CLASS).appendTo($element);
                var layout = that.option("layout");
                that.callBase();
                $element.addClass(FIELDCHOOSER_CLASS).addClass(FIELDS_CONTAINER_CLASS);
                that._dataChangedHandlers = [];
                var dataSource = this._dataSource;
                var currentState = "instantly" !== that.option("applyChangesMode") && dataSource && dataSource.state();
                currentState && that.option("state") && dataSource.state(that.option("state"), true);
                if (0 === layout) {
                    that._renderLayout0($container)
                } else {
                    if (1 === layout) {
                        that._renderLayout1($container)
                    } else {
                        that._renderLayout2($container)
                    }
                }
                currentState && dataSource.state(currentState, true)
            },
            _renderContentImpl: function() {
                this.callBase();
                this.renderSortable();
                this._renderContextMenu();
                this.updateDimensions()
            },
            _fireContentReadyAction: function() {
                if (!this._dataSource || !this._dataSource.isLoading()) {
                    this.callBase()
                }
            },
            _getContextMenuArgs: function(dxEvent) {
                var targetFieldElement = (0, _renderer2.default)(dxEvent.target).closest(".dx-area-field");
                var targetGroupElement = (0, _renderer2.default)(dxEvent.target).closest(".dx-area-fields");
                var field;
                var area;
                if (targetFieldElement.length) {
                    var fieldCopy = targetFieldElement.data("field");
                    if (fieldCopy) {
                        field = this.getDataSource().field(fieldCopy.index) || fieldCopy
                    }
                }
                if (targetGroupElement.length) {
                    area = targetGroupElement.attr("group")
                }
                return {
                    event: dxEvent,
                    field: field,
                    area: area,
                    items: []
                }
            },
            _renderContextMenu: function() {
                var that = this;
                var $container = that.$element();
                if (that._contextMenu) {
                    that._contextMenu.$element().remove()
                }
                that._contextMenu = that._createComponent((0, _renderer2.default)(DIV).appendTo($container), _context_menu2.default, {
                    onPositioning: function(actionArgs) {
                        var event = actionArgs.event;
                        if (!event) {
                            return
                        }
                        var args = that._getContextMenuArgs(event);
                        that._trigger("onContextMenuPreparing", args);
                        if (args.items && args.items.length) {
                            actionArgs.component.option("items", args.items)
                        } else {
                            actionArgs.cancel = true
                        }
                    },
                    target: $container,
                    onItemClick: function(params) {
                        params.itemData.onItemClick && params.itemData.onItemClick(params)
                    },
                    cssClass: "dx-pivotgridfieldchooser-context-menu"
                })
            },
            _createTreeItems: function(fields, groupFieldNames, path) {
                var that = this;
                var isMeasure;
                var resultItems = [];
                var groupedItems = [];
                var groupFieldName = groupFieldNames[0];
                var fieldsByGroup = {};
                if (!groupFieldName) {
                    (0, _iterator.each)(fields, function(index, field) {
                        var icon;
                        if (true === field.isMeasure) {
                            icon = "measure"
                        }
                        if (false === field.isMeasure) {
                            icon = field.groupName ? "hierarchy" : "dimension"
                        }
                        resultItems.push({
                            index: field.index,
                            field: field,
                            key: field.dataField,
                            selected: (0, _type.isDefined)(field.area),
                            text: field.caption || field.dataField,
                            icon: icon,
                            isMeasure: field.isMeasure,
                            isDefault: field.isDefault
                        })
                    })
                } else {
                    (0, _iterator.each)(fields, function(index, field) {
                        var groupName = field[groupFieldName] || "";
                        fieldsByGroup[groupName] = fieldsByGroup[groupName] || [];
                        fieldsByGroup[groupName].push(field);
                        if (void 0 === isMeasure) {
                            isMeasure = true
                        }
                        isMeasure = isMeasure && true === field.isMeasure
                    });
                    (0, _iterator.each)(fieldsByGroup, function(groupName, fields) {
                        var currentPath = path ? path + "." + groupName : groupName;
                        var items = that._createTreeItems(fields, groupFieldNames.slice(1), currentPath);
                        if (groupName) {
                            groupedItems.push({
                                key: groupName,
                                text: groupName,
                                path: currentPath,
                                isMeasure: items.isMeasure,
                                expanded: (0, _array.inArray)(currentPath, that._expandedPaths) >= 0,
                                items: items
                            })
                        } else {
                            resultItems = items
                        }
                    });
                    resultItems = groupedItems.concat(resultItems);
                    resultItems.isMeasure = isMeasure
                }
                return resultItems
            },
            _createFieldsDataSource: function(dataSource) {
                var fields = dataSource && dataSource.fields() || [];
                fields = fields.filter(function(field) {
                    return false !== field.visible && !(0, _type.isDefined)(field.groupIndex)
                });
                var treeItems = this._createTreeItems(fields, ["dimension", "displayFolder"]);
                (0, _uiPivot_grid.foreachDataLevel)(treeItems, function(items) {
                    items.sort(compareItems)
                }, 0, "items");
                return treeItems
            },
            _renderFieldsTreeView: function(container) {
                var that = this;
                var dataSource = that._dataSource;
                var treeView = that._createComponent(container, _tree_view2.default, {
                    dataSource: that._createFieldsDataSource(dataSource),
                    showCheckBoxesMode: "normal",
                    expandNodesRecursive: false,
                    searchEnabled: that.option("allowSearch"),
                    searchTimeout: that.option("searchTimeout"),
                    itemTemplate: function(itemData, itemIndex, itemElement) {
                        if (itemData.icon) {
                            (0, _icon.getImageContainer)(itemData.icon).appendTo(itemElement)
                        }(0, _renderer2.default)("<span>").toggleClass("dx-area-field", !itemData.items).data("field", itemData.field).text(itemData.text).appendTo(itemElement)
                    },
                    onItemCollapsed: function(e) {
                        var index = (0, _array.inArray)(e.itemData.path, that._expandedPaths);
                        if (index >= 0) {
                            that._expandedPaths.splice(index, 1)
                        }
                    },
                    onItemExpanded: function(e) {
                        var index = (0, _array.inArray)(e.itemData.path, that._expandedPaths);
                        if (index < 0) {
                            that._expandedPaths.push(e.itemData.path)
                        }
                    },
                    onItemSelectionChanged: function(e) {
                        var data = e.itemData;
                        var field;
                        var fields;
                        var needSelectDefaultItem = true;
                        var area;
                        if (data.items) {
                            if (data.selected) {
                                treeView.unselectItem(data);
                                return
                            }
                            that._processDemandState(function() {
                                fields = getDimensionFields(data, dataSource.fields());
                                for (var i = 0; i < fields.length; i++) {
                                    if (fields[i].area) {
                                        needSelectDefaultItem = false;
                                        break
                                    }
                                }
                            });
                            if (needSelectDefaultItem) {
                                var item = getFirstItem(data, function(item) {
                                    return item.isDefault
                                }) || getFirstItem(data, function(item) {
                                    return (0, _type.isDefined)(item.index)
                                });
                                item && treeView.selectItem(item);
                                return
                            }
                        } else {
                            field = dataSource.fields()[data.index];
                            if (data.selected) {
                                area = field.isMeasure ? "data" : "column"
                            }
                            if (field) {
                                fields = [field]
                            }
                        }
                        that._applyChanges(fields, {
                            area: area,
                            areaIndex: void 0
                        })
                    }
                });
                var dataChanged = function() {
                    var scrollable = getScrollable(container);
                    var scrollTop = scrollable ? scrollable.scrollTop() : 0;
                    treeView.option({
                        dataSource: that._createFieldsDataSource(dataSource)
                    });
                    scrollable = getScrollable(container);
                    if (scrollable) {
                        scrollable.scrollTo({
                            y: scrollTop
                        });
                        scrollable.update()
                    }
                };
                that._dataChangedHandlers.push(dataChanged)
            },
            _renderAreaFields: function($container, area) {
                var that = this;
                var dataSource = that._dataSource;
                var fields = dataSource ? (0, _extend.extend)(true, [], dataSource.getAreaFields(area, true)) : [];
                $container.empty();
                (0, _iterator.each)(fields, function(_, field) {
                    if (false !== field.visible) {
                        that.renderField(field, true).appendTo($container)
                    }
                })
            },
            _renderArea: function(container, area) {
                var that = this;
                var $areaContainer = (0, _renderer2.default)(DIV).addClass("dx-area").appendTo(container);
                var $fieldsHeaderContainer = (0, _renderer2.default)(DIV).addClass("dx-area-fields-header").appendTo($areaContainer);
                var caption = that.option("texts." + area + "Fields");
                var $fieldsContent;
                var render;
                (0, _renderer2.default)("<span>").addClass("dx-area-icon").addClass("dx-area-icon-" + area).appendTo($fieldsHeaderContainer);
                (0, _renderer2.default)("<span>").html("&nbsp;").appendTo($fieldsHeaderContainer);
                (0, _renderer2.default)("<span>").addClass("dx-area-caption").text(caption).appendTo($fieldsHeaderContainer);
                var $fieldsContainer = (0, _renderer2.default)(DIV).addClass("dx-area-fields").addClass(AREA_DRAG_CLASS).appendTo($areaContainer);
                if ("all" !== area) {
                    $fieldsContainer.attr("group", area).attr("allow-scrolling", true);
                    $fieldsContent = (0, _renderer2.default)(DIV).addClass("dx-area-field-container").appendTo($fieldsContainer);
                    render = function() {
                        that._renderAreaFields($fieldsContent, area)
                    };
                    that._dataChangedHandlers.push(render);
                    render();
                    $fieldsContainer.dxScrollable()
                } else {
                    $areaContainer.addClass("dx-all-fields");
                    $fieldsContainer.addClass("dx-treeview-border-visible");
                    that._renderFieldsTreeView($fieldsContainer)
                }
            },
            _getSortableOptions: function() {
                return {}
            },
            _adjustSortableOnChangedArgs: function() {},
            resetTreeView: function() {
                var treeView = this.$element().find(".dx-treeview").dxTreeView("instance");
                if (treeView) {
                    treeView.option("searchValue", "");
                    treeView.collapseAll()
                }
            },
            applyChanges: function() {
                var state = this.option("state");
                if ((0, _type.isDefined)(state)) {
                    this._dataSource.state(state)
                }
            },
            cancelChanges: function() {
                var dataSource = this._dataSource;
                if (!dataSource.isLoading()) {
                    this.option("state", dataSource.state());
                    return true
                }
                return false
            },
            getDataSource: function() {
                return this._dataSource
            },
            updateDimensions: function() {
                var $scrollableElements = this.$element().find(".dx-area .dx-scrollable");
                $scrollableElements.dxScrollable("update")
            },
            _visibilityChanged: function(visible) {
                if (visible && hasWindow) {
                    this.updateDimensions()
                }
            }
        });
        (0, _component_registrator2.default)("dxPivotGridFieldChooser", FieldChooser);
        module.exports = FieldChooser
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/timezones/ui.scheduler.timezones.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var query = __webpack_require__( /*! ../../../data/query */ 45);
        var errors = __webpack_require__( /*! ../../../core/errors */ 22);
        var tzData = __webpack_require__( /*! ./ui.scheduler.timezones_data */ 724);
        var SchedulerTimezones = {
            _displayNames: tzData.displayNames,
            _list: tzData.timezones,
            getTimezones: function() {
                return this._list
            },
            getDisplayNames: function() {
                return this._displayNames
            },
            queryableTimezones: function() {
                return query(this.getTimezones())
            },
            getTimezoneById: function(id) {
                var result;
                var i = 0;
                var tzList = this.getTimezones();
                if (id) {
                    while (!result) {
                        if (!tzList[i]) {
                            errors.log("W0009", id);
                            return
                        }
                        var currentId = tzList[i].id;
                        if (currentId === id) {
                            result = tzList[i]
                        }
                        i++
                    }
                }
                return result
            },
            getTimezoneOffsetById: function(id, dateTimeStamp) {
                var tz = this.getTimezoneById(id);
                var offsets;
                var offsetIndices;
                var untils;
                var result;
                if (tz) {
                    if (tz.link) {
                        var rootTz = this.getTimezones()[tz.link];
                        offsets = rootTz.offsets;
                        untils = rootTz.untils;
                        offsetIndices = rootTz.offsetIndices
                    } else {
                        offsets = tz.offsets;
                        untils = tz.untils;
                        offsetIndices = tz.offsetIndices
                    }
                    result = this.getUtcOffset(offsets, offsetIndices, untils, dateTimeStamp)
                }
                return result
            },
            getUtcOffset: function(offsets, offsetIndices, untils, dateTimeStamp) {
                var index = 0;
                var offsetIndicesList = offsetIndices.split("");
                var untilsList = untils.split("|").map(function(until) {
                    if ("Infinity" === until) {
                        return null
                    }
                    return 1e3 * parseInt(until, 36)
                });
                var currentUntil = 0;
                for (var i = 0, listLength = untilsList.length; i < listLength; i++) {
                    currentUntil += untilsList[i];
                    if (dateTimeStamp >= currentUntil) {
                        index = i;
                        continue
                    } else {
                        break
                    }
                }
                if (untilsList[index + 1]) {
                    index++
                }
                return offsets[Number(offsetIndicesList[index])]
            },
            getTimezoneShortDisplayNameById: function(id) {
                var tz = this.getTimezoneById(id);
                var result;
                if (tz) {
                    result = tz.DisplayName.substring(0, 11)
                }
                return result
            },
            getTimezonesDisplayName: function() {
                return query(this.getDisplayNames()).sortBy().toArray()
            },
            getTimezoneDisplayNameById: function(id) {
                var tz = this.getTimezoneById(id);
                return tz ? this.getDisplayNames()[tz.winIndex] : ""
            },
            getSimilarTimezones: function(id) {
                if (!id) {
                    return []
                }
                var tz = this.getTimezoneById(id);
                return this.getTimezonesIdsByWinIndex(tz.winIndex)
            },
            getTimezonesIdsByWinIndex: function(winIndex) {
                return this.queryableTimezones().filter(["winIndex", winIndex]).sortBy("title").toArray().map(function(item) {
                    return {
                        id: item.id,
                        displayName: item.title
                    }
                })
            },
            getTimezonesIdsByDisplayName: function(displayName) {
                var displayNameIndex = this.getDisplayNames().indexOf(displayName);
                return this.getTimezonesIdsByWinIndex(displayNameIndex)
            },
            getClientTimezoneOffset: function(date) {
                return 6e4 * date.getTimezoneOffset()
            },
            processDateDependOnTimezone: function(date, tzOffset) {
                var result = new Date(date);
                if (tzOffset) {
                    var tzDiff = tzOffset + this.getClientTimezoneOffset(date) / 36e5;
                    result = new Date(result.setHours(result.getHours() + tzDiff))
                }
                return result
            }
        };
        module.exports = SchedulerTimezones
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/tooltip_strategies/tooltipStrategyBase.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.TooltipStrategyBase = void 0;
        var _button = __webpack_require__( /*! ../../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _function_template = __webpack_require__( /*! ../../../core/templates/function_template */ 113);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiList = __webpack_require__( /*! ../../list/ui.list.edit */ 313);
        var _uiList2 = _interopRequireDefault(_uiList);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var TOOLTIP_APPOINTMENT_ITEM = "dx-tooltip-appointment-item";
        var TOOLTIP_APPOINTMENT_ITEM_CONTENT = TOOLTIP_APPOINTMENT_ITEM + "-content";
        var TOOLTIP_APPOINTMENT_ITEM_CONTENT_SUBJECT = TOOLTIP_APPOINTMENT_ITEM + "-content-subject";
        var TOOLTIP_APPOINTMENT_ITEM_CONTENT_DATE = TOOLTIP_APPOINTMENT_ITEM + "-content-date";
        var TOOLTIP_APPOINTMENT_ITEM_MARKER = TOOLTIP_APPOINTMENT_ITEM + "-marker";
        var TOOLTIP_APPOINTMENT_ITEM_MARKER_BODY = TOOLTIP_APPOINTMENT_ITEM + "-marker-body";
        var TOOLTIP_APPOINTMENT_ITEM_DELETE_BUTTON_CONTAINER = TOOLTIP_APPOINTMENT_ITEM + "-delete-button-container";
        var TOOLTIP_APPOINTMENT_ITEM_DELETE_BUTTON = TOOLTIP_APPOINTMENT_ITEM + "-delete-button";
        exports.TooltipStrategyBase = function() {
            function TooltipStrategyBase(options) {
                _classCallCheck(this, TooltipStrategyBase);
                this._tooltip = null;
                this._options = options;
                this._extraOptions = null
            }
            _createClass(TooltipStrategyBase, [{
                key: "show",
                value: function(target, dataList, extraOptions) {
                    if (this._canShowTooltip(dataList)) {
                        this.hide();
                        this._extraOptions = extraOptions;
                        this._showCore(target, dataList)
                    }
                }
            }, {
                key: "_showCore",
                value: function(target, dataList) {
                    if (!this._tooltip) {
                        this._tooltip = this._createTooltip(target, dataList)
                    } else {
                        this._shouldUseTarget() && this._tooltip.option("target", target);
                        this._list.option("dataSource", dataList)
                    }
                    this._tooltip.option("visible", true)
                }
            }, {
                key: "_getContentTemplate",
                value: function(dataList) {
                    var _this = this;
                    return function(container) {
                        var listElement = (0, _renderer2.default)("<div>");
                        (0, _renderer2.default)(container).append(listElement);
                        _this._list = _this._createList(listElement, dataList)
                    }
                }
            }, {
                key: "isAlreadyShown",
                value: function(target) {
                    if (this._tooltip && this._tooltip.option("visible")) {
                        return this._tooltip.option("target")[0] === target[0]
                    }
                }
            }, {
                key: "_onShown",
                value: function() {
                    this._list.option("focusStateEnabled", this._extraOptions.focusStateEnabled)
                }
            }, {
                key: "dispose",
                value: function() {}
            }, {
                key: "hide",
                value: function() {
                    if (this._tooltip) {
                        this._tooltip.option("visible", false)
                    }
                }
            }, {
                key: "_shouldUseTarget",
                value: function() {
                    return true
                }
            }, {
                key: "_createTooltip",
                value: function() {}
            }, {
                key: "_canShowTooltip",
                value: function(dataList) {
                    if (!dataList.length) {
                        return false
                    }
                    return true
                }
            }, {
                key: "_createListOption",
                value: function(dataList) {
                    var _this2 = this;
                    return {
                        dataSource: dataList,
                        onContentReady: this._onListRender.bind(this),
                        onItemClick: function(e) {
                            return _this2._onListItemClick(e)
                        },
                        itemTemplate: function(item, index) {
                            return _this2._renderTemplate(item.data, _this2._getCurrentAppointmentData(item), index, item.color)
                        }
                    }
                }
            }, {
                key: "_onListRender",
                value: function() {}
            }, {
                key: "_createTooltipElement",
                value: function(wrapperClass) {
                    return (0, _renderer2.default)("<div>").appendTo(this._options.container).addClass(wrapperClass)
                }
            }, {
                key: "_createList",
                value: function(listElement, dataList) {
                    return this._options.createComponent(listElement, _uiList2.default, this._createListOption(dataList))
                }
            }, {
                key: "_renderTemplate",
                value: function(data, currentData, index, color) {
                    var itemListContent = this._createItemListContent(data, currentData, color);
                    this._options.addDefaultTemplates(_defineProperty({}, this._getItemListTemplateName(), new _function_template.FunctionTemplate(function(options) {
                        var $container = (0, _renderer2.default)(options.container);
                        $container.append(itemListContent);
                        return $container
                    })));
                    var template = this._options.getAppointmentTemplate(this._getItemListTemplateName() + "Template");
                    return this._createFunctionTemplate(template, data, currentData, index)
                }
            }, {
                key: "_createFunctionTemplate",
                value: function(template, data, targetData, index) {
                    var isEmptyDropDownAppointmentTemplate = this._isEmptyDropDownAppointmentTemplate();
                    return new _function_template.FunctionTemplate(function(options) {
                        return template.render({
                            model: isEmptyDropDownAppointmentTemplate ? {
                                appointmentData: data,
                                targetedAppointmentData: targetData
                            } : data,
                            container: options.container,
                            index: index
                        })
                    })
                }
            }, {
                key: "_getItemListTemplateName",
                value: function() {
                    return this._isEmptyDropDownAppointmentTemplate() ? "appointmentTooltip" : "dropDownAppointment"
                }
            }, {
                key: "_isEmptyDropDownAppointmentTemplate",
                value: function() {
                    return !this._extraOptions.dropDownAppointmentTemplate || "dropDownAppointment" === this._extraOptions.dropDownAppointmentTemplate
                }
            }, {
                key: "_onListItemClick",
                value: function(e) {
                    this.hide();
                    this._extraOptions.clickEvent && this._extraOptions.clickEvent(e);
                    this._options.showAppointmentPopup(e.itemData.data, false, this._getCurrentAppointmentData(e.itemData))
                }
            }, {
                key: "_getCurrentAppointmentData",
                value: function(item) {
                    return item.settings && item.settings.targetedAppointmentData || item.currentData || item.data
                }
            }, {
                key: "_createItemListContent",
                value: function(data, currentData, color) {
                    var editing = this._extraOptions.editing;
                    var $itemElement = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM);
                    $itemElement.append(this._createItemListMarker(color));
                    $itemElement.append(this._createItemListInfo(this._options.getTextAndFormatDate(data, currentData)));
                    if (!data.disabled && (editing && true === editing.allowDeleting || true === editing)) {
                        var singleAppointmentData = this._options.getSingleAppointmentData(data, this._tooltip.option("target"));
                        $itemElement.append(this._createDeleteButton(data, singleAppointmentData))
                    }
                    return $itemElement
                }
            }, {
                key: "_createItemListMarker",
                value: function(color) {
                    var $marker = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_MARKER);
                    var $markerBody = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_MARKER_BODY);
                    $marker.append($markerBody);
                    color && color.done(function(value) {
                        return $markerBody.css("background", value)
                    });
                    return $marker
                }
            }, {
                key: "_createItemListInfo",
                value: function(object) {
                    var result = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_CONTENT);
                    var $title = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_CONTENT_SUBJECT).text(object.text);
                    var $date = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_CONTENT_DATE).text(object.formatDate);
                    return result.append($title).append($date)
                }
            }, {
                key: "_createDeleteButton",
                value: function(data, currentData) {
                    var _this3 = this;
                    var $container = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_DELETE_BUTTON_CONTAINER);
                    var $deleteButton = (0, _renderer2.default)("<div>").addClass(TOOLTIP_APPOINTMENT_ITEM_DELETE_BUTTON);
                    $container.append($deleteButton);
                    this._options.createComponent($deleteButton, _button2.default, {
                        icon: "trash",
                        stylingMode: "text",
                        onClick: function(e) {
                            _this3.hide();
                            e.event.stopPropagation();
                            _this3._options.checkAndDeleteAppointment(data, currentData)
                        }
                    });
                    return $container
                }
            }]);
            return TooltipStrategyBase
        }()
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.loading.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var viewPortUtils = __webpack_require__( /*! ../../core/utils/view_port */ 76);
        var LoadPanel = __webpack_require__( /*! ../load_panel */ 167);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var loading = null;
        var createLoadPanel = function(options) {
            return new LoadPanel($("<div>").appendTo(options && options.container || viewPortUtils.value()), options)
        };
        var removeLoadPanel = function() {
            if (!loading) {
                return
            }
            loading.$element().remove();
            loading = null
        };
        exports.show = function(options) {
            removeLoadPanel();
            loading = createLoadPanel(options);
            return loading.show()
        };
        exports.hide = function() {
            if (!loading) {
                return (new Deferred).resolve()
            }
            return loading.hide().done(removeLoadPanel).promise()
        }
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var dataUtils = __webpack_require__( /*! ../../../core/element_data */ 41);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var typeUtils = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var windowUtils = __webpack_require__( /*! ../../../core/utils/window */ 7);
        var getPublicElement = __webpack_require__( /*! ../../../core/utils/dom */ 11).getPublicElement;
        var extend = __webpack_require__( /*! ../../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../../core/utils/iterator */ 4).each;
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var messageLocalization = __webpack_require__( /*! ../../../localization/message */ 10);
        var dateLocalization = __webpack_require__( /*! ../../../localization/date */ 35);
        var toMs = dateUtils.dateToMilliseconds;
        var Widget = __webpack_require__( /*! ../../widget/ui.widget */ 17);
        var abstract = Widget.abstract;
        var noop = __webpack_require__( /*! ../../../core/utils/common */ 3).noop;
        var isDefined = __webpack_require__( /*! ../../../core/utils/type */ 1).isDefined;
        var publisherMixin = __webpack_require__( /*! ../ui.scheduler.publisher_mixin */ 123);
        var eventUtils = __webpack_require__( /*! ../../../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../../../events/pointer */ 23);
        var errors = __webpack_require__( /*! ../../widget/ui.errors */ 18);
        var clickEvent = __webpack_require__( /*! ../../../events/click */ 19);
        var contextMenuEvent = __webpack_require__( /*! ../../../events/contextmenu */ 177);
        var dragEvents = __webpack_require__( /*! ../../../events/drag */ 69);
        var Scrollable = __webpack_require__( /*! ../../scroll_view/ui.scrollable */ 89);
        var HorizontalGroupedStrategy = __webpack_require__( /*! ./ui.scheduler.work_space.grouped.strategy.horizontal */ 734);
        var VerticalGroupedStrategy = __webpack_require__( /*! ./ui.scheduler.work_space.grouped.strategy.vertical */ 735);
        var tableCreator = __webpack_require__( /*! ../ui.scheduler.table_creator */ 250);
        var VerticalShader = __webpack_require__( /*! ../shaders/ui.scheduler.current_time_shader.vertical */ 736);
        var AppointmentDragBehavior = __webpack_require__( /*! ../appointmentDragBehavior */ 737);
        var FIXED_CONTAINER_CLASS = __webpack_require__( /*! ../constants */ 171).FIXED_CONTAINER_CLASS;
        var timeZoneUtils = __webpack_require__( /*! ../utils.timeZone */ 148);
        var COMPONENT_CLASS = "dx-scheduler-work-space";
        var GROUPED_WORKSPACE_CLASS = "dx-scheduler-work-space-grouped";
        var VERTICAL_GROUPED_WORKSPACE_CLASS = "dx-scheduler-work-space-vertical-grouped";
        var WORKSPACE_VERTICAL_GROUP_TABLE_CLASS = "dx-scheduler-work-space-vertical-group-table";
        var WORKSPACE_WITH_BOTH_SCROLLS_CLASS = "dx-scheduler-work-space-both-scrollbar";
        var WORKSPACE_WITH_COUNT_CLASS = "dx-scheduler-work-space-count";
        var WORKSPACE_WITH_GROUP_BY_DATE_CLASS = "dx-scheduler-work-space-group-by-date";
        var WORKSPACE_WITH_ODD_CELLS_CLASS = "dx-scheduler-work-space-odd-cells";
        var TIME_PANEL_CLASS = "dx-scheduler-time-panel";
        var TIME_PANEL_CELL_CLASS = "dx-scheduler-time-panel-cell";
        var TIME_PANEL_ROW_CLASS = "dx-scheduler-time-panel-row";
        var ALL_DAY_PANEL_CLASS = "dx-scheduler-all-day-panel";
        var ALL_DAY_TABLE_CLASS = "dx-scheduler-all-day-table";
        var ALL_DAY_CONTAINER_CLASS = "dx-scheduler-all-day-appointments";
        var ALL_DAY_TITLE_CLASS = "dx-scheduler-all-day-title";
        var ALL_DAY_TITLE_HIDDEN_CLASS = "dx-scheduler-all-day-title-hidden";
        var ALL_DAY_TABLE_CELL_CLASS = "dx-scheduler-all-day-table-cell";
        var ALL_DAY_TABLE_ROW_CLASS = "dx-scheduler-all-day-table-row";
        var WORKSPACE_WITH_ALL_DAY_CLASS = "dx-scheduler-work-space-all-day";
        var WORKSPACE_WITH_COLLAPSED_ALL_DAY_CLASS = "dx-scheduler-work-space-all-day-collapsed";
        var WORKSPACE_WITH_MOUSE_SELECTION_CLASS = "dx-scheduler-work-space-mouse-selection";
        var HORIZONTAL_SIZES_CLASS = "dx-scheduler-cell-sizes-horizontal";
        var VERTICAL_SIZES_CLASS = "dx-scheduler-cell-sizes-vertical";
        var HEADER_PANEL_CLASS = "dx-scheduler-header-panel";
        var HEADER_PANEL_CELL_CLASS = "dx-scheduler-header-panel-cell";
        var HEADER_ROW_CLASS = "dx-scheduler-header-row";
        var GROUP_ROW_CLASS = "dx-scheduler-group-row";
        var GROUP_HEADER_CLASS = "dx-scheduler-group-header";
        var GROUP_HEADER_CONTENT_CLASS = "dx-scheduler-group-header-content";
        var DATE_TABLE_CLASS = "dx-scheduler-date-table";
        var DATE_TABLE_CELL_CLASS = "dx-scheduler-date-table-cell";
        var DATE_TABLE_ROW_CLASS = "dx-scheduler-date-table-row";
        var DATE_TABLE_FOCUSED_CELL_CLASS = "dx-scheduler-focused-cell";
        var DATE_TABLE_DROPPABLE_CELL_CLASS = "dx-scheduler-date-table-droppable-cell";
        var SCHEDULER_HEADER_SCROLLABLE_CLASS = "dx-scheduler-header-scrollable";
        var SCHEDULER_SIDEBAR_SCROLLABLE_CLASS = "dx-scheduler-sidebar-scrollable";
        var SCHEDULER_DATE_TABLE_SCROLLABLE_CLASS = "dx-scheduler-date-table-scrollable";
        var SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, "dxSchedulerWorkSpace");
        var SCHEDULER_CELL_DXDRAGENTER_EVENT_NAME = eventUtils.addNamespace(dragEvents.enter, "dxSchedulerDateTable");
        var SCHEDULER_CELL_DXDROP_EVENT_NAME = eventUtils.addNamespace(dragEvents.drop, "dxSchedulerDateTable");
        var SCHEDULER_CELL_DXCLICK_EVENT_NAME = eventUtils.addNamespace(clickEvent.name, "dxSchedulerDateTable");
        var SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, "dxSchedulerDateTable");
        var SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME = eventUtils.addNamespace(pointerEvents.up, "dxSchedulerDateTable");
        var SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME = eventUtils.addNamespace(pointerEvents.move, "dxSchedulerDateTable");
        var CELL_DATA = "dxCellData";
        var DATE_TABLE_CELL_BORDER = 1;
        var DATE_TABLE_MIN_CELL_WIDTH = 75;
        var DAY_MS = toMs("day");
        var HOUR_MS = toMs("hour");
        var SCHEDULER_DRAG_AND_DROP_SELECTOR = ".".concat(DATE_TABLE_CLASS, " td, .").concat(ALL_DAY_TABLE_CLASS, " td");
        var ScrollSemaphore = function() {
            function ScrollSemaphore() {
                _classCallCheck(this, ScrollSemaphore);
                this.counter = 0
            }
            _createClass(ScrollSemaphore, [{
                key: "isFree",
                value: function() {
                    return 0 === this.counter
                }
            }, {
                key: "take",
                value: function() {
                    this.counter++
                }
            }, {
                key: "release",
                value: function() {
                    this.counter--;
                    if (this.counter < 0) {
                        this.counter = 0
                    }
                }
            }]);
            return ScrollSemaphore
        }();
        var formatWeekday = function(date) {
            return dateLocalization.getDayNames("abbreviated")[date.getDay()]
        };
        var SchedulerWorkSpace = Widget.inherit({
            _supportedKeys: function() {
                var clickHandler = function(e) {
                    e.preventDefault();
                    e.stopPropagation();
                    if (this._focusedCells && this._focusedCells.length) {
                        var $itemElement = $(this.option("focusedElement"));
                        var $cellElement = $itemElement.length ? $itemElement : this._focusedCells;
                        e.target = this._focusedCells;
                        this._showPopup = true;
                        this._cellClickAction({
                            event: e,
                            cellElement: $(this._focusedCells),
                            cellData: this.getCellData($cellElement)
                        })
                    }
                };
                var arrowPressHandler = function(e, cell) {
                    e.preventDefault();
                    e.stopPropagation();
                    this._moveToCell(cell, e.shiftKey)
                };
                return extend(this.callBase(), {
                    enter: clickHandler,
                    space: clickHandler,
                    downArrow: function(e) {
                        var $cell = this._getCellFromNextRow("next", e.shiftKey);
                        arrowPressHandler.call(this, e, $cell)
                    },
                    upArrow: function(e) {
                        var $cell = this._getCellFromNextRow("prev", e.shiftKey);
                        arrowPressHandler.call(this, e, $cell)
                    },
                    rightArrow: function(e) {
                        var $rightCell = this._getRightCell(e.shiftKey);
                        arrowPressHandler.call(this, e, $rightCell)
                    },
                    leftArrow: function(e) {
                        var $leftCell = this._getLeftCell(e.shiftKey);
                        arrowPressHandler.call(this, e, $leftCell)
                    }
                })
            },
            _isRTL: function() {
                return this.option("rtlEnabled")
            },
            _getFocusedCell: function() {
                return this._$focusedCell || this._$dateTable.find("." + DATE_TABLE_CELL_CLASS).eq(0)
            },
            _getAllFocusedCells: function() {
                return this._focusedCells || this._$dateTable.find("." + DATE_TABLE_CELL_CLASS).eq(0)
            },
            _getCellFromNextRow: function(direction) {
                var $currentCell = this._$focusedCell;
                if (isDefined($currentCell)) {
                    var cellIndex = $currentCell.index();
                    var $row = $currentCell.parent();
                    var $cell = $row[direction]().children().eq(cellIndex);
                    $cell = this._checkForViewBounds($cell);
                    return $cell
                }
            },
            _checkForViewBounds: function($item) {
                if (!$item.length) {
                    $item = this._$focusedCell
                }
                return $item
            },
            _getRightCell: function(isMultiSelection) {
                if (!isDefined(this._$focusedCell)) {
                    return
                }
                var $rightCell;
                var $focusedCell = this._$focusedCell;
                var groupCount = this._getGroupCount();
                var rowCellCount = isMultiSelection ? this._getCellCount() : this._getTotalCellCount(groupCount);
                var lastIndexInRow = rowCellCount - 1;
                var edgeCellIndex = this._isRTL() ? 0 : lastIndexInRow;
                var currentIndex = $focusedCell.index();
                var direction = this._isRTL() ? "prev" : "next";
                if (currentIndex === edgeCellIndex || isMultiSelection && this._isGroupEndCell($focusedCell)) {
                    var $row = $focusedCell.parent();
                    var sign = this._isRTL() ? 1 : -1;
                    $rightCell = $row[direction]().children().eq(currentIndex + sign * lastIndexInRow);
                    $rightCell = this._checkForViewBounds($rightCell)
                } else {
                    $rightCell = $focusedCell[direction]()
                }
                return $rightCell
            },
            _isGroupEndCell: function($cell) {
                var cellsInRow = this._getCellCount();
                var currentCellIndex = $cell.index();
                var result = currentCellIndex % cellsInRow;
                return this._isRTL() ? 0 === result : result === cellsInRow - 1
            },
            _getLeftCell: function(isMultiSelection) {
                if (!isDefined(this._$focusedCell)) {
                    return
                }
                var $leftCell;
                var $focusedCell = this._$focusedCell;
                var groupCount = this._getGroupCount();
                var rowCellCount = isMultiSelection ? this._getCellCount() : this._getTotalCellCount(groupCount);
                var lastIndexInRow = rowCellCount - 1;
                var edgeCellIndex = this._isRTL() ? lastIndexInRow : 0;
                var currentIndex = $focusedCell.index();
                var direction = this._isRTL() ? "next" : "prev";
                if (currentIndex === edgeCellIndex || isMultiSelection && this._isGroupStartCell($focusedCell)) {
                    var $row = $focusedCell.parent();
                    var sign = this._isRTL() ? -1 : 1;
                    $leftCell = $row[direction]().children().eq(currentIndex + sign * lastIndexInRow);
                    $leftCell = this._checkForViewBounds($leftCell)
                } else {
                    $leftCell = $focusedCell[direction]()
                }
                return $leftCell
            },
            _isGroupStartCell: function($cell) {
                var cellsInRow = this._getCellCount();
                var currentCellIndex = $cell.index();
                var result = currentCellIndex % cellsInRow;
                return this._isRTL() ? result === cellsInRow - 1 : 0 === result
            },
            _moveToCell: function($cell, isMultiSelection) {
                isMultiSelection = isMultiSelection && this.option("allowMultipleCellSelection");
                this._setFocusedCell($cell, isMultiSelection);
                this._dateTableScrollable.scrollToElement($cell)
            },
            _setFocusedCell: function($cell, isMultiSelection) {
                if (!isDefined($cell) || !$cell.length) {
                    return
                }
                this._releaseFocusedCell();
                this._focusedCells = [];
                if (isMultiSelection) {
                    $cell = this._correctCellForGroup($cell);
                    var orientation = "day" === this.option("type") && (!this.option("groups").length || "vertical" === this.option("groupOrientation")) ? "vertical" : "horizontal";
                    var $targetCells = this._getCellsBetween($cell, this._$prevCell, orientation);
                    this._focusedCells = $targetCells.toArray()
                } else {
                    this._focusedCells = [$cell.get(0)];
                    this._$prevCell = $cell
                }
                var $focusedCells = $(this._focusedCells);
                this._toggleFocusClass(true, $focusedCells);
                this.setAria("label", "Add appointment", $focusedCells);
                this._toggleFocusedCellClass(true, $cell);
                this._$focusedCell = $cell;
                var selectedCellData = this.getFocusedCellData();
                this.option("selectedCellData", selectedCellData);
                this._selectionChangedAction({
                    selectedCellData: selectedCellData
                })
            },
            _correctCellForGroup: function($cell) {
                var $focusedCell = this._$focusedCell;
                var cellGroupIndex = this._getGroupIndexByCell($cell);
                var focusedCellGroupIndex = this._getGroupIndexByCell($focusedCell);
                var isDifferentTables = this._hasAllDayClass($cell) !== this._hasAllDayClass($focusedCell);
                return focusedCellGroupIndex !== cellGroupIndex || isDifferentTables ? $focusedCell : $cell
            },
            _getCellsBetween: function($first, $last, direction) {
                var isAllDayTable = this._hasAllDayClass($last);
                var $cells = this._getCells(isAllDayTable, direction);
                var firstIndex = $cells.index($first);
                var lastIndex = $cells.index($last);
                if (firstIndex > lastIndex) {
                    var buffer = firstIndex;
                    firstIndex = lastIndex;
                    lastIndex = buffer
                }
                $cells = $cells.slice(firstIndex, lastIndex + 1);
                if (this._getGroupCount() > 1) {
                    var result = [];
                    var focusedGroupIndex = this._getGroupIndexByCell($first);
                    each($cells, function(_, cell) {
                        var groupIndex = this._getGroupIndexByCell($(cell));
                        if (focusedGroupIndex === groupIndex) {
                            result.push(cell)
                        }
                    }.bind(this));
                    $cells = $(result)
                }
                return $cells
            },
            _hasAllDayClass: function($cell) {
                return $cell.hasClass(ALL_DAY_TABLE_CELL_CLASS)
            },
            _getGroupIndexByCell: function($cell) {
                var cellsInRow = this._getCellCount();
                var currentCellIndex = $cell.index() + 1;
                var groupIndex = Math.ceil(currentCellIndex / cellsInRow);
                return groupIndex
            },
            _toggleFocusedCellClass: function(isFocused, $element) {
                var $focusTarget = $element && $element.length ? $element : this._focusTarget();
                $focusTarget.toggleClass(DATE_TABLE_FOCUSED_CELL_CLASS, isFocused)
            },
            _releaseFocusedCell: function($cell) {
                $cell = $cell || $(this._focusedCells);
                if (isDefined($cell) && $cell.length) {
                    this._toggleFocusClass(false, $cell);
                    this._toggleFocusedCellClass(false, $cell);
                    this.setAria("label", void 0, $cell)
                }
                this.option("selectedCellData", [])
            },
            _focusInHandler: function(e) {
                if ($(e.target).is(this._focusTarget()) && false !== this._isCellClick) {
                    delete this._isCellClick;
                    delete this._contextMenuHandled;
                    this.callBase.apply(this, arguments);
                    var $cell = this._getFocusedCell();
                    this._setFocusedCell($cell)
                }
            },
            _focusOutHandler: function() {
                this.callBase.apply(this, arguments);
                if (!this._contextMenuHandled) {
                    this._releaseFocusedCell()
                }
            },
            _focusTarget: function() {
                return this.$element()
            },
            _activeStateUnit: "." + DATE_TABLE_CELL_CLASS + ", ." + ALL_DAY_TABLE_CELL_CLASS,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    currentDate: new Date,
                    intervalCount: 1,
                    startDate: null,
                    firstDayOfWeek: void 0,
                    startDayHour: 0,
                    endDayHour: 24,
                    hoursInterval: .5,
                    activeStateEnabled: true,
                    hoverStateEnabled: true,
                    groups: [],
                    showAllDayPanel: true,
                    allDayExpanded: false,
                    onCellClick: null,
                    crossScrollingEnabled: false,
                    dataCellTemplate: null,
                    timeCellTemplate: null,
                    resourceCellTemplate: null,
                    dateCellTemplate: null,
                    allowMultipleCellSelection: true,
                    indicatorTime: new Date,
                    indicatorUpdateInterval: 5 * toMs("minute"),
                    shadeUntilCurrentTime: true,
                    groupOrientation: "horizontal",
                    selectedCellData: [],
                    groupByDate: false
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "startDayHour":
                    case "endDayHour":
                        this.invoke("validateDayHours");
                        this._cleanWorkSpace();
                        break;
                    case "dateCellTemplate":
                    case "resourceCellTemplate":
                    case "dataCellTemplate":
                    case "timeCellTemplate":
                    case "hoursInterval":
                    case "firstDayOfWeek":
                    case "currentDate":
                    case "startDate":
                        this._cleanWorkSpace();
                        break;
                    case "groups":
                        this._cleanView();
                        this._removeAllDayElements();
                        this._initGrouping();
                        this.repaint();
                        break;
                    case "groupOrientation":
                        this._initGroupedStrategy();
                        this._createAllDayPanelElements();
                        this._removeAllDayElements();
                        this._cleanWorkSpace();
                        this._toggleGroupByDateClass();
                        break;
                    case "showAllDayPanel":
                        if (this._isVerticalGroupedWorkSpace()) {
                            this._cleanView();
                            this._removeAllDayElements();
                            this._initGrouping();
                            this.repaint()
                        } else {
                            this._toggleAllDayVisibility()
                        }
                        break;
                    case "allDayExpanded":
                        this._changeAllDayVisibility();
                        this._attachTablesEvents();
                        this.headerPanelOffsetRecalculate();
                        this._updateScrollable();
                        break;
                    case "onSelectionChanged":
                        this._createSelectionChangedAction();
                        break;
                    case "onCellClick":
                        this._createCellClickAction();
                        break;
                    case "onCellContextMenu":
                        this._attachContextMenuEvent();
                        break;
                    case "intervalCount":
                        this._cleanWorkSpace();
                        this._toggleWorkSpaceCountClass();
                        this._toggleFixedScrollableClass();
                        break;
                    case "groupByDate":
                        this._cleanWorkSpace();
                        this._toggleGroupByDateClass();
                        break;
                    case "crossScrollingEnabled":
                        this._toggleHorizontalScrollClass();
                        this._dateTableScrollable.option(this._dateTableScrollableConfig());
                        break;
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "allowMultipleCellSelection":
                        break;
                    case "selectedCellData":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _cleanWorkSpace: function() {
                this._cleanView();
                this._toggleGroupedClass();
                this._toggleWorkSpaceWithOddCells();
                this._renderView()
            },
            _init: function() {
                this._headerSemaphore = new ScrollSemaphore;
                this._sideBarSemaphore = new ScrollSemaphore;
                this._dataTableSemaphore = new ScrollSemaphore;
                this.callBase();
                this._initGrouping();
                this._toggleHorizontalScrollClass();
                this._toggleWorkSpaceCountClass();
                this._toggleGroupByDateClass();
                this._toggleWorkSpaceWithOddCells();
                this.$element().addClass(COMPONENT_CLASS).addClass(this._getElementClass())
            },
            _initGrouping: function() {
                this._initGroupedStrategy();
                this._toggleGroupingDirectionClass();
                this._toggleGroupByDateClass()
            },
            _initGroupedStrategy: function() {
                var strategyName = this.option("groups").length ? this.option("groupOrientation") : this._getDefaultGroupStrategy();
                var Strategy = "vertical" === strategyName ? VerticalGroupedStrategy : HorizontalGroupedStrategy;
                this._groupedStrategy = new Strategy(this)
            },
            _getDefaultGroupStrategy: function() {
                return "horizontal"
            },
            _isVerticalGroupedWorkSpace: function() {
                return !!this.option("groups").length && "vertical" === this.option("groupOrientation")
            },
            _isHorizontalGroupedWorkSpace: function() {
                return !!this.option("groups").length && "horizontal" === this.option("groupOrientation")
            },
            _toggleHorizontalScrollClass: function() {
                this.$element().toggleClass(WORKSPACE_WITH_BOTH_SCROLLS_CLASS, this.option("crossScrollingEnabled"))
            },
            _toggleGroupByDateClass: function() {
                this.$element().toggleClass(WORKSPACE_WITH_GROUP_BY_DATE_CLASS, this.isGroupedByDate())
            },
            _toggleWorkSpaceCountClass: function() {
                this.$element().toggleClass(WORKSPACE_WITH_COUNT_CLASS, this._isWorkSpaceWithCount())
            },
            _isWorkSpaceWithCount: function() {
                return this.option("intervalCount") > 1
            },
            _toggleWorkSpaceWithOddCells: function() {
                this.$element().toggleClass(WORKSPACE_WITH_ODD_CELLS_CLASS, this._isWorkspaceWithOddCells())
            },
            _isWorkspaceWithOddCells: function() {
                return .5 === this.option("hoursInterval")
            },
            _toggleGroupingDirectionClass: function() {
                this.$element().toggleClass(VERTICAL_GROUPED_WORKSPACE_CLASS, this._isVerticalGroupedWorkSpace())
            },
            _getRealGroupOrientation: function() {
                return this._isVerticalGroupedWorkSpace() ? "vertical" : "horizontal"
            },
            _getTimePanelClass: function() {
                return TIME_PANEL_CLASS
            },
            _getDateTableClass: function() {
                return DATE_TABLE_CLASS
            },
            _getDateTableRowClass: function() {
                return DATE_TABLE_ROW_CLASS
            },
            _getDateTableCellClass: function(i, j) {
                var cellClass = DATE_TABLE_CELL_CLASS + " " + HORIZONTAL_SIZES_CLASS + " " + VERTICAL_SIZES_CLASS;
                return this._needApplyLastGroupCellClass() ? this._groupedStrategy.addAdditionalGroupCellClasses(cellClass, j + 1, i, j) : cellClass
            },
            _needApplyLastGroupCellClass: function() {
                return true
            },
            _getGroupRowClass: function() {
                return GROUP_ROW_CLASS
            },
            _getGroupHeaderClass: function(i) {
                var cellClass = GROUP_HEADER_CLASS;
                return this._groupedStrategy.addAdditionalGroupCellClasses(cellClass, i + 1)
            },
            _getGroupHeaderContentClass: function() {
                return GROUP_HEADER_CONTENT_CLASS
            },
            _initWorkSpaceUnits: function() {
                this._$headerPanel = $("<table>");
                this._$thead = $("<thead>").appendTo(this._$headerPanel);
                this._$fixedContainer = $("<div>").addClass(FIXED_CONTAINER_CLASS);
                this._$allDayContainer = $("<div>").addClass(ALL_DAY_CONTAINER_CLASS);
                this._initAllDayPanelElements();
                this._createAllDayPanelElements();
                this._$timePanel = $("<table>").addClass(this._getTimePanelClass());
                this._$dateTable = $("<table>");
                this._$groupTable = $("<div>").addClass(WORKSPACE_VERTICAL_GROUP_TABLE_CLASS)
            },
            _initAllDayPanelElements: function() {
                this._allDayTitles = [];
                this._allDayTables = [];
                this._allDayPanels = []
            },
            _createAllDayPanelElements: function() {
                var groupCount = this._getGroupCount();
                if (this._isVerticalGroupedWorkSpace() && 0 !== groupCount) {
                    for (var i = 0; i < groupCount; i++) {
                        var $allDayTitle = $("<div>").addClass(ALL_DAY_TITLE_CLASS).text(messageLocalization.format("dxScheduler-allDay"));
                        this._allDayTitles.push($allDayTitle);
                        this._$allDayTable = $("<table>");
                        this._allDayTables.push(this._$allDayTable);
                        this._$allDayPanel = $("<div>").addClass(ALL_DAY_PANEL_CLASS).append(this._$allDayTable);
                        this._allDayPanels.push(this._$allDayPanel)
                    }
                } else {
                    this._$allDayTitle = $("<div>").addClass(ALL_DAY_TITLE_CLASS).text(messageLocalization.format("dxScheduler-allDay")).appendTo(this.$element());
                    this._$allDayTable = $("<table>");
                    this._$allDayPanel = $("<div>").addClass(ALL_DAY_PANEL_CLASS).append(this._$allDayTable)
                }
            },
            _initDateTableScrollable: function() {
                var $dateTableScrollable = $("<div>").addClass(SCHEDULER_DATE_TABLE_SCROLLABLE_CLASS);
                this._dateTableScrollable = this._createComponent($dateTableScrollable, Scrollable, this._dateTableScrollableConfig())
            },
            _dateTableScrollableConfig: function() {
                var config = {
                    useKeyboard: false,
                    bounceEnabled: false,
                    updateManually: true,
                    pushBackValue: 0
                };
                if (this._needCreateCrossScrolling()) {
                    config = extend(config, this._createCrossScrollingConfig())
                }
                return config
            },
            _createCrossScrollingConfig: function() {
                var _this = this;
                var config = {};
                config.direction = "both";
                config.onScroll = function(e) {
                    _this._dataTableSemaphore.take();
                    _this._sideBarSemaphore.isFree() && _this._sidebarScrollable && _this._sidebarScrollable.scrollTo({
                        top: e.scrollOffset.top
                    });
                    _this._headerSemaphore.isFree() && _this._headerScrollable && _this._headerScrollable.scrollTo({
                        left: e.scrollOffset.left
                    });
                    _this._dataTableSemaphore.release()
                };
                config.onEnd = function() {
                    _this.notifyObserver("updateResizableArea", {})
                };
                return config
            },
            _createWorkSpaceElements: function() {
                if (this.option("crossScrollingEnabled")) {
                    this._createWorkSpaceScrollableElements()
                } else {
                    this._createWorkSpaceStaticElements()
                }
            },
            _createWorkSpaceStaticElements: function() {
                if (this._isVerticalGroupedWorkSpace()) {
                    this._dateTableScrollable.$content().append(this._$allDayContainer, this._$groupTable, this._$timePanel, this._$dateTable);
                    this.$element().append(this._$fixedContainer, this._$headerPanel, this._dateTableScrollable.$element())
                } else {
                    this._dateTableScrollable.$content().append(this._$timePanel, this._$dateTable);
                    this.$element().append(this._$fixedContainer, this._$headerPanel, this._$allDayContainer, this._$allDayPanel, this._dateTableScrollable.$element())
                }
            },
            _createWorkSpaceScrollableElements: function() {
                this.$element().append(this._$fixedContainer);
                this._createHeaderScrollable();
                this._createSidebarScrollable();
                this.$element().append(this._dateTableScrollable.$element());
                this._headerScrollable.$content().append(this._$headerPanel);
                this._dateTableScrollable.$content().append(this._$dateTable);
                if (this._isVerticalGroupedWorkSpace()) {
                    this._dateTableScrollable.$content().prepend(this._$allDayContainer);
                    this._sidebarScrollable.$content().append(this._$groupTable, this._$timePanel)
                } else {
                    this._headerScrollable.$content().append(this._$allDayContainer, this._$allDayPanel)
                }
                this._sidebarScrollable.$content().append(this._$timePanel)
            },
            _createHeaderScrollable: function() {
                var $headerScrollable = $("<div>").addClass(SCHEDULER_HEADER_SCROLLABLE_CLASS).appendTo(this.$element());
                this._headerScrollable = this._createComponent($headerScrollable, Scrollable, this._headerScrollableConfig())
            },
            _headerScrollableConfig: function() {
                var _this2 = this;
                var config = {
                    useKeyboard: false,
                    showScrollbar: false,
                    direction: "horizontal",
                    useNative: false,
                    updateManually: true,
                    bounceEnabled: false,
                    pushBackValue: 0,
                    onScroll: function(e) {
                        _this2._headerSemaphore.take();
                        _this2._dataTableSemaphore.isFree() && _this2._dateTableScrollable.scrollTo({
                            left: e.scrollOffset.left
                        });
                        _this2._headerSemaphore.release()
                    }
                };
                return config
            },
            _createSidebarScrollable: function() {
                var _this3 = this;
                var $timePanelScrollable = $("<div>").addClass(SCHEDULER_SIDEBAR_SCROLLABLE_CLASS).appendTo(this.$element());
                this._sidebarScrollable = this._createComponent($timePanelScrollable, Scrollable, {
                    useKeyboard: false,
                    showScrollbar: false,
                    direction: "vertical",
                    useNative: false,
                    updateManually: true,
                    bounceEnabled: false,
                    pushBackValue: 0,
                    onScroll: function(e) {
                        _this3._sideBarSemaphore.take();
                        _this3._dataTableSemaphore.isFree() && _this3._dateTableScrollable.scrollTo({
                            top: e.scrollOffset.top
                        });
                        _this3._sideBarSemaphore.release()
                    }
                })
            },
            _visibilityChanged: function(visible) {
                if (visible && this._isVerticalGroupedWorkSpace()) {
                    this._setHorizontalGroupHeaderCellsHeight()
                }
                if (visible && this._needCreateCrossScrolling()) {
                    this._setTableSizes()
                }
            },
            _attachTableClasses: function() {
                this._addTableClass(this._$dateTable, this._getDateTableClass());
                if (this._isVerticalGroupedWorkSpace()) {
                    var groupCount = this._getGroupCount();
                    for (var i = 0; i < groupCount; i++) {
                        this._addTableClass(this._allDayTables[i], ALL_DAY_TABLE_CLASS)
                    }
                } else {
                    this._addTableClass(this._$allDayTable, ALL_DAY_TABLE_CLASS)
                }
            },
            _attachHeaderTableClasses: function() {
                this._addTableClass(this._$headerPanel, HEADER_PANEL_CLASS)
            },
            _addTableClass: function($el, className) {
                $el && !$el.hasClass(className) && $el.addClass(className)
            },
            _setTableSizes: function() {
                this._attachTableClasses();
                var cellWidth = this.getCellWidth();
                if (cellWidth < this.getCellMinWidth()) {
                    cellWidth = this.getCellMinWidth()
                }
                var minWidth = this.getWorkSpaceMinWidth();
                var $headerCells = this._$headerPanel.find("tr").last().find("th");
                var width = cellWidth * $headerCells.length;
                if (width < minWidth) {
                    width = minWidth
                }
                this._$headerPanel.width(width);
                this._$dateTable.width(width);
                this._$allDayTable && this._$allDayTable.width(width);
                this._attachHeaderTableClasses();
                if (this._isVerticalGroupedWorkSpace()) {
                    this._setHorizontalGroupHeaderCellsHeight()
                }
            },
            getWorkSpaceMinWidth: function() {
                return this._groupedStrategy.getWorkSpaceMinWidth()
            },
            _dimensionChanged: function() {
                if (this.option("crossScrollingEnabled")) {
                    this._setTableSizes()
                }
                this.headerPanelOffsetRecalculate();
                this._cleanCellDataCache();
                this._cleanAllowedPositions()
            },
            _needCreateCrossScrolling: function() {
                return this.option("crossScrollingEnabled")
            },
            _getElementClass: noop,
            _getRowCount: noop,
            _getCellCount: noop,
            _initMarkup: function() {
                this._initWorkSpaceUnits();
                this._initDateTableScrollable();
                this._createWorkSpaceElements();
                this.callBase();
                if (!this.option("crossScrollingEnabled")) {
                    this._attachTableClasses();
                    this._attachHeaderTableClasses()
                }
                this._toggleGroupedClass();
                this._toggleFixedScrollableClass();
                this._renderView();
                this._attachEvents();
                this._setFocusOnCellByOption(this.option("selectedCellData"))
            },
            _render: function() {
                this.callBase();
                this._renderDateTimeIndication();
                this._setIndicationUpdateInterval()
            },
            _toggleGroupedClass: function() {
                this.$element().toggleClass(GROUPED_WORKSPACE_CLASS, this._getGroupCount() > 0)
            },
            _toggleFixedScrollableClass: noop,
            _renderView: function() {
                this._setFirstViewDate();
                this._applyCellTemplates(this._renderGroupHeader());
                this._renderDateHeader();
                this._renderTimePanel();
                if (this._isVerticalGroupedWorkSpace()) {
                    var groupCount = this._getGroupCount();
                    for (var i = 0; i < groupCount; i++) {
                        this._renderAllDayPanel(i)
                    }
                }
                this._renderDateTable();
                this._renderAllDayPanel();
                this._updateGroupTableHeight();
                this._shader = new VerticalShader
            },
            _updateGroupTableHeight: function() {
                if (this._isVerticalGroupedWorkSpace() && windowUtils.hasWindow()) {
                    this._setHorizontalGroupHeaderCellsHeight()
                }
            },
            _renderDateTimeIndication: noop,
            _setIndicationUpdateInterval: noop,
            _refreshDateTimeIndication: noop,
            _setFocusOnCellByOption: function(data) {
                var cells = [];
                this._releaseFocusedCell();
                for (var i = 0; i < data.length; i++) {
                    var groups = data[i].groups;
                    var groupIndex = this.option("groups").length && groups ? this._getGroupIndexByResourceId(groups) : 0;
                    var allDay = !!data[i].allDay;
                    var coordinates = this.getCoordinatesByDate(data[i].startDate, groupIndex, allDay);
                    var $cell = this._getCellByCoordinates(coordinates, groupIndex);
                    if (isDefined($cell)) {
                        this._toggleFocusClass(true, $cell);
                        cells.push($cell.get(0))
                    }
                }
                this._focusedCells = cells
            },
            _getGroupIndexByResourceId: function(id) {
                var groups = this.option("groups");
                var groupKey = Object.keys(id)[0];
                var groupValue = id[groupKey];
                var tree = this.invoke("createResourcesTree", groups);
                var index = 0;
                for (var i = 0; i < tree.length; i++) {
                    if (tree[i].name === groupKey && tree[i].value === groupValue) {
                        index = tree[i].leafIndex
                    }
                }
                return index
            },
            _setFirstViewDate: function() {
                var firstDayOfWeek = isDefined(this._firstDayOfWeek()) ? this._firstDayOfWeek() : dateLocalization.firstDayOfWeekIndex();
                this._firstViewDate = dateUtils.getFirstWeekDate(this._getViewStartByOptions(), firstDayOfWeek);
                this._setStartDayHour(this._firstViewDate)
            },
            _getViewStartByOptions: function() {
                if (!this.option("startDate")) {
                    return this.option("currentDate")
                } else {
                    var startDate = dateUtils.trimTime(this._getStartViewDate());
                    var currentDate = this.option("currentDate");
                    var diff = startDate.getTime() <= currentDate.getTime() ? 1 : -1;
                    var endDate = new Date(startDate.getTime() + this._getIntervalDuration() * diff);
                    while (!this._dateInRange(currentDate, startDate, endDate, diff)) {
                        startDate = endDate;
                        endDate = new Date(startDate.getTime() + this._getIntervalDuration() * diff)
                    }
                    return diff > 0 ? startDate : endDate
                }
            },
            _getHeaderDate: function() {
                return this.getStartViewDate()
            },
            _getStartViewDate: function() {
                return this.option("startDate")
            },
            _dateInRange: function(date, startDate, endDate, diff) {
                return diff > 0 ? dateUtils.dateInRange(date, startDate, new Date(endDate.getTime() - 1)) : dateUtils.dateInRange(date, endDate, startDate, "date")
            },
            _getIntervalDuration: function() {
                return toMs("day") * this.option("intervalCount")
            },
            _setStartDayHour: function(date) {
                var startDayHour = this.option("startDayHour");
                if (isDefined(startDayHour)) {
                    date.setHours(startDayHour, startDayHour % 1 * 60, 0, 0)
                }
            },
            _firstDayOfWeek: function() {
                return this.option("firstDayOfWeek")
            },
            _attachEvents: function() {
                this._createSelectionChangedAction();
                this._attachClickEvent();
                this._attachContextMenuEvent()
            },
            _attachClickEvent: function() {
                var that = this;
                var pointerDownAction = this._createAction(function(e) {
                    that._pointerDownHandler(e.event)
                });
                this._createCellClickAction();
                var cellSelector = "." + DATE_TABLE_CELL_CLASS + ",." + ALL_DAY_TABLE_CELL_CLASS;
                var $element = this.$element();
                eventsEngine.off($element, SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME);
                eventsEngine.off($element, SCHEDULER_CELL_DXCLICK_EVENT_NAME);
                eventsEngine.on($element, SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME, function(e) {
                    if (eventUtils.isMouseEvent(e) && e.which > 1) {
                        e.preventDefault();
                        return
                    }
                    pointerDownAction({
                        event: e
                    })
                });
                eventsEngine.on($element, SCHEDULER_CELL_DXCLICK_EVENT_NAME, cellSelector, function(e) {
                    var $cell = $(e.target);
                    that._cellClickAction({
                        event: e,
                        cellElement: getPublicElement($cell),
                        cellData: that.getCellData($cell)
                    })
                })
            },
            _createCellClickAction: function() {
                var that = this;
                this._cellClickAction = this._createActionByOption("onCellClick", {
                    afterExecute: function(e) {
                        that._moveToClosestNonStub(e.args[0].event)
                    }
                })
            },
            _createSelectionChangedAction: function() {
                this._selectionChangedAction = this._createActionByOption("onSelectionChanged")
            },
            _moveToClosestNonStub: function(e) {
                var $target = $(e.target);
                if (this._showPopup && this._hasFocusClass($target)) {
                    delete this._showPopup;
                    this._showAddAppointmentPopup($target)
                }
            },
            _pointerDownHandler: function(e) {
                var $target = $(e.target);
                if (!$target.hasClass(DATE_TABLE_CELL_CLASS) && !$target.hasClass(ALL_DAY_TABLE_CELL_CLASS)) {
                    this._isCellClick = false;
                    return
                }
                this._isCellClick = true;
                if ($target.hasClass(DATE_TABLE_FOCUSED_CELL_CLASS)) {
                    this._showPopup = true
                } else {
                    this._setFocusedCell($target)
                }
            },
            _showAddAppointmentPopup: function($cell) {
                var firstCellData = this.getCellData($cell.first());
                var lastCellData = this.getCellData($cell.last());
                var args = {
                    startDate: this.invoke("convertDateByTimezoneBack", firstCellData.startDate) || firstCellData.startDate,
                    endDate: this.invoke("convertDateByTimezoneBack", lastCellData.endDate) || lastCellData.endDate
                };
                if (isDefined(lastCellData.allDay)) {
                    args.allDay = lastCellData.allDay
                }
                extend(args, lastCellData.groups);
                this.notifyObserver("showAddAppointmentPopup", args)
            },
            _attachContextMenuEvent: function() {
                this._createContextMenuAction();
                var cellSelector = "." + DATE_TABLE_CELL_CLASS + ",." + ALL_DAY_TABLE_CELL_CLASS;
                var $element = this.$element();
                var eventName = eventUtils.addNamespace(contextMenuEvent.name, this.NAME);
                eventsEngine.off($element, eventName, cellSelector);
                eventsEngine.on($element, eventName, cellSelector, this._contextMenuHandler.bind(this))
            },
            _contextMenuHandler: function(e) {
                var $cell = $(e.target);
                this._contextMenuAction({
                    event: e,
                    cellElement: getPublicElement($cell),
                    cellData: this.getCellData($cell)
                });
                this._contextMenuHandled = true
            },
            _createContextMenuAction: function() {
                this._contextMenuAction = this._createActionByOption("onCellContextMenu");
            },
            _getGroupHeaderContainer: function() {
                if (this._isVerticalGroupedWorkSpace()) {
                    return this._$groupTable
                }
                return this._$thead
            },
            _getDateHeaderContainer: function() {
                return this._$thead
            },
            _renderGroupHeader: function() {
                var $container = this._getGroupHeaderContainer();
                var groupCount = this._getGroupCount();
                var cellTemplates = [];
                if (groupCount) {
                    var groupRows = this._makeGroupRows(this.option("groups"), this.option("groupByDate"));
                    this._attachGroupCountAttr(groupCount, groupRows);
                    $container.append(groupRows.elements);
                    cellTemplates = groupRows.cellTemplates
                } else {
                    this._detachGroupCountAttr()
                }
                return cellTemplates
            },
            _applyCellTemplates: function(templates) {
                templates.forEach(function(template) {
                    template()
                })
            },
            _detachGroupCountAttr: function() {
                var groupedAttr = this._groupedStrategy.getGroupCountAttr();
                this.$element().removeAttr(groupedAttr.attr)
            },
            _attachGroupCountAttr: function(groupRowCount, groupRows) {
                var groupedAttr = this._groupedStrategy.getGroupCountAttr(groupRowCount, groupRows);
                this.$element().attr(groupedAttr.attr, groupedAttr.count)
            },
            headerPanelOffsetRecalculate: function() {
                if (!this.option("resourceCellTemplate") && !this.option("dateCellTemplate")) {
                    return
                }
                var headerPanelHeight = this.getHeaderPanelHeight();
                var headerHeight = this.invoke("getHeaderHeight");
                var allDayPanelHeight = this.supportAllDayRow() && this.option("showAllDayPanel") ? this._groupedStrategy.getAllDayTableHeight() : 0;
                headerPanelHeight && this._headerScrollable && this._headerScrollable.$element().height(headerPanelHeight + allDayPanelHeight);
                headerPanelHeight && this._dateTableScrollable.$element().css({
                    paddingBottom: allDayPanelHeight + headerPanelHeight + "px",
                    marginBottom: -1 * (parseInt(headerPanelHeight, 10) + allDayPanelHeight) + "px"
                });
                headerPanelHeight && this._sidebarScrollable && this._sidebarScrollable.$element().css({
                    paddingBottom: allDayPanelHeight + headerPanelHeight + "px",
                    marginBottom: -1 * (parseInt(headerPanelHeight, 10) + allDayPanelHeight) + "px"
                });
                this._$allDayTitle && this._$allDayTitle.css("top", headerHeight + headerPanelHeight + "px")
            },
            _makeGroupRows: function(groups, groupByDate) {
                var tableCreatorStrategy = this._isVerticalGroupedWorkSpace() ? tableCreator.VERTICAL : tableCreator.HORIZONTAL;
                return tableCreator.makeGroupedTable(tableCreatorStrategy, groups, {
                    groupHeaderRowClass: this._getGroupRowClass(),
                    groupRowClass: this._getGroupRowClass(),
                    groupHeaderClass: this._getGroupHeaderClass.bind(this),
                    groupHeaderContentClass: this._getGroupHeaderContentClass()
                }, this._getCellCount() || 1, this.option("resourceCellTemplate"), this._getGroupCount(), groupByDate)
            },
            _getDateHeaderTemplate: function() {
                return this.option("dateCellTemplate")
            },
            _renderDateHeader: function() {
                var $container = this._getDateHeaderContainer();
                var $headerRow = $("<tr>").addClass(HEADER_ROW_CLASS);
                var count = this._getCellCount();
                var cellTemplate = this._getDateHeaderTemplate();
                var repeatCount = this._calculateHeaderCellRepeatCount();
                var templateCallbacks = [];
                var colspan = this.option("groupByDate") ? this._getGroupCount() : 1;
                var groupByDate = this.option("groupByDate");
                var i;
                var j;
                if (!groupByDate) {
                    for (j = 0; j < repeatCount; j++) {
                        for (i = 0; i < count; i++) {
                            this._renderDateHeaderTemplate($headerRow, i, j * repeatCount + i, cellTemplate, templateCallbacks)
                        }
                    }
                    $container.append($headerRow)
                } else {
                    for (i = 0; i < count; i++) {
                        var $cell = this._renderDateHeaderTemplate($headerRow, i, i * repeatCount, cellTemplate, templateCallbacks);
                        $cell.attr("colSpan", colspan)
                    }
                    $container.prepend($headerRow)
                }
                this._applyCellTemplates(templateCallbacks);
                return $headerRow
            },
            _renderDateHeaderTemplate: function($container, i, calculatedIndex, cellTemplate, templateCallbacks) {
                var text = this._getHeaderText(i);
                var $cell = $("<th>").addClass(this._getHeaderPanelCellClass(i)).attr("title", text);
                if (cellTemplate && cellTemplate.render) {
                    templateCallbacks.push(cellTemplate.render.bind(cellTemplate, {
                        model: {
                            text: text,
                            date: this._getDateByIndex(i)
                        },
                        index: calculatedIndex,
                        container: getPublicElement($cell)
                    }))
                } else {
                    $cell.text(text)
                }
                $container.append($cell);
                return $cell
            },
            _getHeaderPanelCellClass: function(i) {
                var cellClass = HEADER_PANEL_CELL_CLASS + " " + HORIZONTAL_SIZES_CLASS;
                return this._groupedStrategy.addAdditionalGroupCellClasses(cellClass, i + 1)
            },
            _calculateHeaderCellRepeatCount: function() {
                return this._groupedStrategy.calculateHeaderCellRepeatCount()
            },
            _renderAllDayPanel: function(index) {
                var cellCount = this._getCellCount();
                if (!this._isVerticalGroupedWorkSpace()) {
                    cellCount *= this._getGroupCount() || 1
                }
                var cellTemplates = this._renderTableBody({
                    container: this._allDayPanels.length ? getPublicElement(this._allDayTables[index]) : getPublicElement(this._$allDayTable),
                    rowCount: 1,
                    cellCount: cellCount,
                    cellClass: this._getAllDayPanelCellClass.bind(this),
                    rowClass: ALL_DAY_TABLE_ROW_CLASS,
                    cellTemplate: this.option("dataCellTemplate"),
                    getCellData: this._getAllDayCellData.bind(this),
                    groupIndex: index
                }, true);
                this._toggleAllDayVisibility();
                this._applyCellTemplates(cellTemplates)
            },
            _getAllDayPanelCellClass: function(i, j) {
                var cellClass = ALL_DAY_TABLE_CELL_CLASS + " " + HORIZONTAL_SIZES_CLASS;
                return this._groupedStrategy.addAdditionalGroupCellClasses(cellClass, j + 1)
            },
            _getAllDayCellData: function(cell, rowIndex, cellIndex, groupIndex) {
                var startDate = this._getDateByCellIndexes(rowIndex, cellIndex);
                startDate = dateUtils.trimTime(startDate);
                var data = {
                    startDate: startDate,
                    endDate: new Date(startDate.getTime() + DAY_MS),
                    allDay: true
                };
                var groups = this._getCellGroups(groupIndex || this._getGroupIndex(rowIndex, cellIndex));
                if (groups.length) {
                    data.groups = {}
                }
                for (var i = 0; i < groups.length; i++) {
                    data.groups[groups[i].name] = groups[i].id
                }
                return {
                    key: CELL_DATA,
                    value: data
                }
            },
            _toggleAllDayVisibility: function() {
                var showAllDayPanel = this.option("showAllDayPanel");
                this._$allDayPanel.toggle(showAllDayPanel);
                this._$allDayTitle && this._$allDayTitle.toggleClass(ALL_DAY_TITLE_HIDDEN_CLASS, !showAllDayPanel);
                this.$element().toggleClass(WORKSPACE_WITH_ALL_DAY_CLASS, showAllDayPanel);
                this._changeAllDayVisibility();
                this._updateScrollable()
            },
            _changeAllDayVisibility: function() {
                this.$element().toggleClass(WORKSPACE_WITH_COLLAPSED_ALL_DAY_CLASS, !this.option("allDayExpanded") && this.option("showAllDayPanel"))
            },
            _updateScrollable: function() {
                this._dateTableScrollable.update();
                this._headerScrollable && this._headerScrollable.update();
                this._sidebarScrollable && this._sidebarScrollable.update()
            },
            _renderTimePanel: function() {
                var _this4 = this;
                var repeatCount = this._groupedStrategy.calculateTimeCellRepeatCount();
                var startViewDate = this._getDateWithSkippedDST();
                var _getTimeText = function(i) {
                    var index = i % _this4._getRowCount();
                    if (index % 2 === 0) {
                        return dateLocalization.format(_this4._getTimeCellDateCore(startViewDate, i), "shorttime")
                    }
                    return ""
                };
                this._renderTableBody({
                    container: getPublicElement(this._$timePanel),
                    rowCount: this._getTimePanelRowCount() * repeatCount,
                    cellCount: 1,
                    cellClass: this._getTimeCellClass.bind(this),
                    rowClass: TIME_PANEL_ROW_CLASS,
                    cellTemplate: this.option("timeCellTemplate"),
                    getCellText: _getTimeText.bind(this),
                    getCellDate: this._getTimeCellDate.bind(this),
                    groupCount: this._getGroupCount(),
                    allDayElements: this._insertAllDayRowsIntoDateTable() ? this._allDayTitles : void 0
                })
            },
            _getDateWithSkippedDST: function() {
                var result = new Date(this.getStartViewDate());
                if (timeZoneUtils.isTimezoneChangeInDate(result)) {
                    result = new Date(result.setDate(result.getDate() + 1))
                }
                return result
            },
            _getTimePanelRowCount: function() {
                return this._getCellCountInDay()
            },
            _getCellCountInDay: function(skipRound) {
                var result = this._calculateDayDuration() / this.option("hoursInterval");
                return skipRound ? result : Math.ceil(result)
            },
            _calculateDayDuration: function() {
                return this.option("endDayHour") - this.option("startDayHour")
            },
            _getTimeCellClass: function(i) {
                var cellClass = TIME_PANEL_CELL_CLASS + " " + VERTICAL_SIZES_CLASS;
                return this._groupedStrategy.addAdditionalGroupCellClasses(cellClass, i, i)
            },
            _getTimeCellDateAdjustedDST: function(i) {
                var startViewDate = new Date(this.getStartViewDate());
                if (timeZoneUtils.isTimezoneChangeInDate(startViewDate)) {
                    startViewDate = new Date(startViewDate.setDate(startViewDate.getDate() + 1))
                }
                return this._getTimeCellDateCore(startViewDate, i)
            },
            _getTimeCellDate: function(i) {
                return this._getTimeCellDateCore(this.getStartViewDate(), i)
            },
            _getTimeCellDateCore: function(startViewDate, i) {
                var result = new Date(startViewDate);
                var timeCellDuration = Math.round(this.getCellDuration());
                var cellCountInDay = this._getCellCountInDay(true);
                result.setMilliseconds(result.getMilliseconds() + timeCellDuration * (i % cellCountInDay));
                return result
            },
            _renderDateTable: function() {
                var groupCount = this._getGroupCount();
                this._renderTableBody({
                    container: getPublicElement(this._$dateTable),
                    rowCount: this._getTotalRowCount(groupCount),
                    cellCount: this._getTotalCellCount(groupCount),
                    cellClass: this._getDateTableCellClass.bind(this),
                    rowClass: this._getDateTableRowClass(),
                    cellTemplate: this.option("dataCellTemplate"),
                    getCellData: this._getCellData.bind(this),
                    allDayElements: this._insertAllDayRowsIntoDateTable() ? this._allDayPanels : void 0,
                    groupCount: groupCount,
                    groupByDate: this.option("groupByDate")
                })
            },
            _insertAllDayRowsIntoDateTable: function() {
                return this._groupedStrategy.insertAllDayRowsIntoDateTable()
            },
            _getTotalCellCount: function(groupCount) {
                return this._groupedStrategy.getTotalCellCount(groupCount)
            },
            _getTotalRowCount: function() {
                return this._groupedStrategy.getTotalRowCount()
            },
            _getCellData: function(cell, rowIndex, cellIndex) {
                var data = this._prepareCellData(rowIndex, cellIndex, cell);
                return {
                    key: CELL_DATA,
                    value: data
                }
            },
            _prepareCellData: function(rowIndex, cellIndex) {
                var startDate = this._getDateByCellIndexes(rowIndex, cellIndex);
                var endDate = this.calculateEndDate(startDate);
                var data = {
                    startDate: startDate,
                    endDate: endDate,
                    allDay: this._getTableAllDay()
                };
                var groups = this._getCellGroups(this._getGroupIndex(rowIndex, cellIndex));
                if (groups.length) {
                    data.groups = {}
                }
                for (var i = 0; i < groups.length; i++) {
                    data.groups[groups[i].name] = groups[i].id
                }
                return data
            },
            _getGroupIndex: function(rowIndex, cellIndex) {
                return this._groupedStrategy.getGroupIndex(rowIndex, cellIndex)
            },
            _getTableAllDay: function() {
                return false
            },
            calculateEndDate: function(startDate) {
                var result = new Date(startDate);
                result.setMilliseconds(result.getMilliseconds() + Math.round(this._getInterval()));
                return result
            },
            _getGroupCount: function() {
                var groups = this.option("groups");
                var result = 0;
                for (var i = 0, len = groups.length; i < len; i++) {
                    if (!i) {
                        result = groups[i].items.length
                    } else {
                        result *= groups[i].items.length
                    }
                }
                return result
            },
            _getPathToLeaf: function(leafIndex) {
                var tree = this.invoke("createResourcesTree", this.option("groups"));

                function findLeafByIndex(data, index) {
                    for (var i = 0; i < data.length; i++) {
                        if (data[i].leafIndex === index) {
                            return data[i]
                        } else {
                            var _leaf = findLeafByIndex(data[i].children, index);
                            if (_leaf) {
                                return _leaf
                            }
                        }
                    }
                }

                function makeBranch(leaf, result) {
                    result = result || [];
                    result.push(leaf.value);
                    if (leaf.parent) {
                        makeBranch(leaf.parent, result)
                    }
                    return result
                }
                var leaf = findLeafByIndex(tree, leafIndex);
                return makeBranch(leaf).reverse()
            },
            _getCellGroups: function(groupIndex) {
                var result = [];
                if (this._getGroupCount()) {
                    var groups = this.option("groups");
                    if (groupIndex < 0) {
                        return
                    }
                    var path = this._getPathToLeaf(groupIndex);
                    for (var i = 0; i < groups.length; i++) {
                        result.push({
                            name: groups[i].name,
                            id: path[i]
                        })
                    }
                }
                return result
            },
            _attachTablesEvents: function() {
                var _this5 = this;
                var that = this;
                var isPointerDown = false;
                var cellHeight;
                var cellWidth;
                var $element = this.$element();
                eventsEngine.off($element, SCHEDULER_CELL_DXDRAGENTER_EVENT_NAME);
                eventsEngine.off($element, SCHEDULER_CELL_DXDROP_EVENT_NAME);
                eventsEngine.off($element, SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME);
                eventsEngine.off($element, SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME);
                eventsEngine.on($element, SCHEDULER_CELL_DXDRAGENTER_EVENT_NAME, SCHEDULER_DRAG_AND_DROP_SELECTOR, {
                    itemSizeFunc: function($element) {
                        if (!cellHeight) {
                            cellHeight = getBoundingRect($element.get(0)).height
                        }
                        if (!cellWidth) {
                            cellWidth = getBoundingRect($element.get(0)).width
                        }
                        return {
                            width: cellWidth,
                            height: cellHeight
                        }
                    },
                    checkDropTarget: function(target, event) {
                        return !_this5._isOutsideScrollable(target, event)
                    }
                }, function(e) {
                    if (that._$currentTableTarget) {
                        that.removeDroppableCellClass(that._$currentTableTarget)
                    }
                    that._$currentTableTarget = $(e.target);
                    that._$currentTableTarget.addClass(DATE_TABLE_DROPPABLE_CELL_CLASS)
                });
                eventsEngine.on($element, SCHEDULER_CELL_DXDROP_EVENT_NAME, SCHEDULER_DRAG_AND_DROP_SELECTOR, function(e) {
                    that.removeDroppableCellClass($(e.target));
                    cellHeight = 0;
                    cellWidth = 0
                });
                eventsEngine.on($element, SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME, SCHEDULER_DRAG_AND_DROP_SELECTOR, function(e) {
                    if (eventUtils.isMouseEvent(e) && 1 === e.which) {
                        isPointerDown = true;
                        that.$element().addClass(WORKSPACE_WITH_MOUSE_SELECTION_CLASS);
                        eventsEngine.off(domAdapter.getDocument(), SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME);
                        eventsEngine.on(domAdapter.getDocument(), SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME, function() {
                            isPointerDown = false;
                            that.$element().removeClass(WORKSPACE_WITH_MOUSE_SELECTION_CLASS)
                        })
                    }
                });
                eventsEngine.on($element, SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME, SCHEDULER_DRAG_AND_DROP_SELECTOR, function(e) {
                    if (isPointerDown && that._dateTableScrollable && !that._dateTableScrollable.option("scrollByContent")) {
                        e.preventDefault();
                        e.stopPropagation();
                        that._moveToCell($(e.target), true)
                    }
                })
            },
            _getDateTables: function() {
                return this._$dateTable.add(this._$allDayTable)
            },
            _getDateTable: function() {
                return this._$dateTable
            },
            _getAllDayTable: function() {
                return this._$allDayTable
            },
            _getInterval: function() {
                if (void 0 === this._interval) {
                    this._interval = this.option("hoursInterval") * HOUR_MS
                }
                return this._interval
            },
            _getHeaderText: function(headerIndex) {
                return dateLocalization.format(this._getDateByIndex(headerIndex), this._getFormat())
            },
            _getDateByIndex: abstract,
            _getFormat: abstract,
            _calculateCellIndex: function(rowIndex, cellIndex) {
                return this._groupedStrategy.calculateCellIndex(rowIndex, cellIndex)
            },
            _renderTableBody: function(options, delayCellTemplateRendering) {
                var result = [];
                if (!delayCellTemplateRendering) {
                    this._applyCellTemplates(tableCreator.makeTable(options))
                } else {
                    result = tableCreator.makeTable(options)
                }
                return result
            },
            _removeAllDayElements: function() {
                this._$allDayTable && this._$allDayTable.remove();
                this._$allDayTitle && this._$allDayTitle.remove()
            },
            _cleanView: function() {
                this._cleanCellDataCache();
                this._cleanAllowedPositions();
                this._$thead.empty();
                this._$dateTable.empty();
                this._shader && this._shader.clean();
                this._$timePanel.empty();
                this._$allDayTable && this._$allDayTable.empty();
                this._$groupTable.empty();
                delete this._hiddenInterval;
                delete this._interval
            },
            _clean: function() {
                eventsEngine.off(domAdapter.getDocument(), SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME);
                this.callBase()
            },
            getWorkArea: function() {
                return this._dateTableScrollable.$content()
            },
            getScrollable: function() {
                return this._dateTableScrollable
            },
            getScrollableScrollTop: function() {
                return this._dateTableScrollable.scrollTop()
            },
            getGroupedScrollableScrollTop: function(allDay) {
                return this._groupedStrategy.getScrollableScrollTop(allDay)
            },
            getScrollableScrollLeft: function() {
                return this._dateTableScrollable.scrollLeft()
            },
            getScrollableOuterWidth: function() {
                return this._dateTableScrollable.scrollWidth()
            },
            getScrollableContainer: function() {
                return this._dateTableScrollable._container()
            },
            getHeaderPanelHeight: function() {
                return this._$headerPanel && this._$headerPanel.outerHeight(true)
            },
            getTimePanelWidth: function() {
                return this._$timePanel && getBoundingRect(this._$timePanel.get(0)).width
            },
            getGroupTableWidth: function() {
                return this._$groupTable ? this._$groupTable.outerWidth() : 0
            },
            getWorkSpaceLeftOffset: function() {
                return this._groupedStrategy.getLeftOffset()
            },
            getGroupedStrategy: function() {
                return this._groupedStrategy
            },
            _getCellCoordinatesByIndex: function(index) {
                var cellIndex = Math.floor(index / this._getRowCount());
                var rowIndex = index - this._getRowCount() * cellIndex;
                return {
                    cellIndex: cellIndex,
                    rowIndex: rowIndex
                }
            },
            _getDateByCellIndexes: function(rowIndex, cellIndex, patchedIndexes) {
                cellIndex = !patchedIndexes ? this._patchCellIndex(cellIndex) : cellIndex;
                var firstViewDate = this.getStartViewDate();
                var currentDate = new Date(firstViewDate.getTime() + this._getMillisecondsOffset(rowIndex, cellIndex) + this._getOffsetByCount(cellIndex));
                currentDate.setTime(currentDate.getTime() + dateUtils.getTimezonesDifference(firstViewDate, currentDate));
                return currentDate
            },
            _patchCellIndex: function(cellIndex) {
                if (this.isGroupedByDate()) {
                    cellIndex = Math.floor(cellIndex / this._getGroupCount())
                }
                return cellIndex
            },
            _getOffsetByCount: function() {
                return 0
            },
            _getMillisecondsOffset: function(rowIndex, cellIndex) {
                return this._getInterval() * this._calculateCellIndex(rowIndex, cellIndex) + this._calculateHiddenInterval(rowIndex, cellIndex)
            },
            _calculateHiddenInterval: function(rowIndex, cellIndex) {
                var dayCount = cellIndex % this._getCellCount();
                return dayCount * this._getHiddenInterval()
            },
            _getHiddenInterval: function() {
                if (void 0 === this._hiddenInterval) {
                    this._hiddenInterval = DAY_MS - this.getVisibleDayDuration()
                }
                return this._hiddenInterval
            },
            _getIntervalBetween: function(currentDate, allDay) {
                var firstViewDate = this.getStartViewDate();
                var startDayTime = this.option("startDayHour") * HOUR_MS;
                var timeZoneOffset = dateUtils.getTimezonesDifference(firstViewDate, currentDate);
                var fullInterval = currentDate.getTime() - firstViewDate.getTime() - timeZoneOffset;
                var days = this._getDaysOfInterval(fullInterval, startDayTime);
                var weekendsCount = this._getWeekendsCount(days);
                var result = (days - weekendsCount) * DAY_MS;
                if (!allDay) {
                    result = fullInterval - days * this._getHiddenInterval() - weekendsCount * this.getVisibleDayDuration()
                }
                return result
            },
            _getWeekendsCount: function() {
                return 0
            },
            _getDaysOfInterval: function(fullInterval, startDayTime) {
                return Math.floor((fullInterval + startDayTime) / DAY_MS)
            },
            _getGroupIndexes: function(appointmentResources) {
                var result = [];
                if (appointmentResources && this.option("groups").length) {
                    var tree = this.invoke("createResourcesTree", this.option("groups"));
                    result = this.invoke("getResourceTreeLeaves", tree, appointmentResources)
                }
                return result
            },
            _updateIndex: function(index) {
                return index * this._getRowCount()
            },
            _getDroppableCell: function() {
                return this._getDateTables().find("." + DATE_TABLE_DROPPABLE_CELL_CLASS)
            },
            _getWorkSpaceWidth: function() {
                if (this._needCreateCrossScrolling()) {
                    return getBoundingRect(this._$dateTable.get(0)).width
                }
                return getBoundingRect(this.$element().get(0)).width - this.getTimePanelWidth()
            },
            _getCellPositionByIndex: function(index, groupIndex, inAllDayRow) {
                var cellCoordinates = this._getCellCoordinatesByIndex(index);
                var $cell = this._getCellByCoordinates(cellCoordinates, groupIndex, inAllDayRow);
                var result = this._getCellPosition($cell);
                this.setCellDataCache(cellCoordinates, groupIndex, $cell);
                if (result) {
                    result.rowIndex = cellCoordinates.rowIndex;
                    result.cellIndex = cellCoordinates.cellIndex
                }
                return result
            },
            _getCellPosition: function($cell) {
                var position = $cell.position();
                if (this.option("rtlEnabled")) {
                    position.left += getBoundingRect($cell.get(0)).width
                }
                return position
            },
            _getCellByCoordinates: function(cellCoordinates, groupIndex, inAllDayRow) {
                var indexes = this._groupedStrategy.prepareCellIndexes(cellCoordinates, groupIndex, inAllDayRow);
                return this._$dateTable.find("tr").eq(indexes.rowIndex).find("td").eq(indexes.cellIndex)
            },
            _getCells: function(allDay, direction) {
                var cellClass = allDay ? ALL_DAY_TABLE_CELL_CLASS : DATE_TABLE_CELL_CLASS;
                if ("vertical" === direction) {
                    var result = [];
                    for (var i = 1;; i++) {
                        var cells = this.$element().find("tr .".concat(cellClass, ":nth-child(").concat(i, ")"));
                        if (!cells.length) {
                            break
                        }
                        result = result.concat(cells.toArray())
                    }
                    return $(result)
                } else {
                    return this.$element().find("." + cellClass)
                }
            },
            _setHorizontalGroupHeaderCellsHeight: function() {
                var height = getBoundingRect(this._$dateTable.get(0)).height;
                this._$groupTable.outerHeight(height)
            },
            _getDateTableBorder: function() {
                return DATE_TABLE_CELL_BORDER
            },
            _getDateTableBorderOffset: function() {
                return 2 * this._getDateTableBorder()
            },
            _getGroupHeaderCellsContent: function() {
                return this.$element().find("." + GROUP_HEADER_CONTENT_CLASS)
            },
            _getGroupHeaderCells: function() {
                return this.$element().find("." + GROUP_HEADER_CLASS)
            },
            _getScrollCoordinates: function(hours, minutes, date) {
                var currentDate = date || new Date(this.option("currentDate"));
                var startDayHour = this.option("startDayHour");
                var endDayHour = this.option("endDayHour");
                if (hours < startDayHour) {
                    hours = startDayHour
                }
                if (hours >= endDayHour) {
                    hours = endDayHour - 1
                }
                currentDate.setHours(hours, minutes, 0, 0);
                return this.getCoordinatesByDate(currentDate)
            },
            _isOutsideScrollable: function(target, event) {
                var $scrollableElement = this._dateTableScrollable.$element();
                if (!$(target).closest($scrollableElement).length) {
                    return false
                }
                var scrollableSize = getBoundingRect($scrollableElement.get(0));
                return event.pageY < scrollableSize.top || event.pageY > scrollableSize.top + scrollableSize.height
            },
            setCellDataCache: function(cellCoordinates, groupIndex, $cell) {
                var cache = this.getCellDataCache();
                var data = this.getCellData($cell);
                var key = JSON.stringify({
                    rowIndex: cellCoordinates.rowIndex,
                    cellIndex: cellCoordinates.cellIndex,
                    groupIndex: groupIndex
                });
                cache[key] = data
            },
            setCellDataCacheAlias: function(appointment, geometry) {
                var key = JSON.stringify({
                    rowIndex: appointment.rowIndex,
                    cellIndex: appointment.cellIndex,
                    groupIndex: appointment.groupIndex
                });
                var aliasKey = JSON.stringify({
                    top: geometry.top,
                    left: geometry.left
                });
                var cache = this.getCellDataCache();
                if (cache[key]) {
                    cache[aliasKey] = cache[key]
                }
            },
            getCellDataCache: function(key) {
                if (!this._cache) {
                    this._cache = {}
                }
                return key ? this._cache[key] : this._cache
            },
            _cleanCellDataCache: function() {
                delete this._cache
            },
            _cleanAllowedPositions: function() {
                delete this._maxAllowedVerticalPosition;
                delete this._maxAllowedPosition
            },
            supportAllDayRow: function() {
                return true
            },
            keepOriginalHours: function() {
                return false
            },
            getFocusedCellData: function() {
                var $focusedCells = this._getAllFocusedCells();
                var result = [];
                if ($focusedCells.length > 1) {
                    result = this._getMultipleCellsData($focusedCells)
                } else {
                    var data = this.getCellData($focusedCells);
                    data && result.push(data)
                }
                return result
            },
            _getMultipleCellsData: function($cells) {
                var data = [];
                for (var i = 0; i < $cells.length; i++) {
                    data.push(dataUtils.data($cells[i], CELL_DATA))
                }
                return data
            },
            getCellData: function($cell) {
                var data = $cell[0] ? dataUtils.data($cell[0], CELL_DATA) : void 0;
                return extend(true, {}, data)
            },
            _getHorizontalMax: function(groupIndex) {
                groupIndex = this.option("groupByDate") ? this._getGroupCount() - 1 : groupIndex;
                return this._groupedStrategy.getHorizontalMax(groupIndex)
            },
            getCoordinatesByDate: function(date, groupIndex, inAllDayRow) {
                groupIndex = groupIndex || 0;
                var index = this.getCellIndexByDate(date, inAllDayRow);
                var position = this._getCellPositionByIndex(index, groupIndex, inAllDayRow);
                var shift = this.getPositionShift(inAllDayRow ? 0 : this.getTimeShift(date), inAllDayRow);
                var horizontalHMax = this._getHorizontalMax(groupIndex, date);
                if (!position) {
                    throw errors.Error("E1039")
                }
                var coordinates = {
                    cellPosition: position.left + shift.cellPosition,
                    top: position.top + shift.top,
                    left: position.left + shift.left,
                    rowIndex: position.rowIndex,
                    cellIndex: position.cellIndex,
                    hMax: horizontalHMax,
                    vMax: this.getVerticalMax(groupIndex),
                    groupIndex: groupIndex
                };
                return coordinates
            },
            getVerticalMax: function(groupIndex) {
                return this._groupedStrategy.getVerticalMax(groupIndex)
            },
            _getOffsetByAllDayPanel: function(groupIndex) {
                return this._groupedStrategy._getOffsetByAllDayPanel(groupIndex)
            },
            _getGroupTop: function(groupIndex) {
                return this._groupedStrategy._getGroupTop(groupIndex)
            },
            isGroupedByDate: function() {
                return this.option("groupByDate") && this._isHorizontalGroupedWorkSpace() && this._getGroupCount() > 0
            },
            getCellIndexByDate: function(date, inAllDayRow) {
                var timeInterval = inAllDayRow ? 864e5 : this._getInterval();
                var dateTimeStamp = this._getIntervalBetween(date, inAllDayRow);
                var index = Math.floor(dateTimeStamp / timeInterval);
                if (inAllDayRow) {
                    index = this._updateIndex(index)
                }
                if (index < 0) {
                    index = 0
                }
                return index
            },
            getPositionShift: function(timeShift, isAllDay) {
                return {
                    top: timeShift * this.getCellHeight(),
                    left: 0,
                    cellPosition: 0
                }
            },
            getTimeShift: function(date) {
                var currentDayStart = new Date(date);
                var cellDuration = this.getCellDuration();
                var currentDayEndHour = new Date(new Date(date).setHours(this.option("endDayHour"), 0, 0));
                if (date.getTime() <= currentDayEndHour.getTime()) {
                    currentDayStart.setHours(this.option("startDayHour"), 0, 0, 0)
                }
                var currentDateTime = date.getTime();
                var currentDayStartTime = currentDayStart.getTime();
                var minTime = this._firstViewDate.getTime();
                return currentDateTime > minTime ? (currentDateTime - currentDayStartTime) % cellDuration / cellDuration : 0
            },
            _isSkippedData: function() {
                return false
            },
            getCoordinatesByDateInGroup: function(date, appointmentResources, inAllDayRow) {
                var indexes = this._getGroupIndexes(appointmentResources);
                var result = [];
                if (this._isSkippedData(date)) {
                    return result
                }
                if (indexes.length) {
                    for (var i = 0; i < indexes.length; i++) {
                        result.push(this.getCoordinatesByDate(date, indexes[i], inAllDayRow))
                    }
                } else {
                    result.push(this.getCoordinatesByDate(date, 0, inAllDayRow))
                }
                return result
            },
            getDroppableCellIndex: function() {
                var $droppableCell = this._getDroppableCell();
                var $row = $droppableCell.parent();
                var rowIndex = $row.index();
                return rowIndex * $row.find("td").length + $droppableCell.index()
            },
            getDataByDroppableCell: function() {
                var cellData = this.getCellData(this._getDroppableCell());
                return {
                    date: cellData.startDate,
                    allDay: cellData.allDay,
                    groups: cellData.groups
                }
            },
            getDateRange: function() {
                return [this.getStartViewDate(), this.getEndViewDateByEndDayHour()]
            },
            getCellWidth: function() {
                var cell = this._getCells().first().get(0);
                return cell && getBoundingRect(cell).width
            },
            getCellMinWidth: function() {
                return DATE_TABLE_MIN_CELL_WIDTH
            },
            getRoundedCellWidth: function(groupIndex, startIndex, cellCount) {
                if (groupIndex < 0) {
                    return 0
                }
                var $row = this.$element().find("." + this._getDateTableRowClass()).eq(0);
                var width = 0;
                var $cells = $row.find("." + DATE_TABLE_CELL_CLASS);
                var totalCellCount = this._getCellCount() * groupIndex;
                cellCount = cellCount || this._getCellCount();
                if (!typeUtils.isDefined(startIndex)) {
                    startIndex = totalCellCount
                }
                for (var i = startIndex; i < totalCellCount + cellCount; i++) {
                    width += getBoundingRect($($cells).eq(i).get(0)).width
                }
                return width / (totalCellCount + cellCount - startIndex)
            },
            getCellHeight: function() {
                var cell = this._getCells().first().get(0);
                return cell && getBoundingRect(cell).height
            },
            getAllDayHeight: function() {
                var cell = this._getCells(true).first().get(0);
                return this.option("showAllDayPanel") ? cell && getBoundingRect(cell).height || 0 : 0
            },
            getAllDayOffset: function() {
                return this._groupedStrategy.getAllDayOffset()
            },
            getMaxAllowedPosition: function() {
                if (!this._maxAllowedPosition) {
                    var isRtl = this.option("rtlEnabled");
                    this._maxAllowedPosition = [];
                    this._$dateTable.find("tr").first().find("td:nth-child(" + this._getCellCount() + "n)").each(function(_, cell) {
                        var maxPosition = $(cell).position().left;
                        if (!isRtl) {
                            maxPosition += getBoundingRect(cell).width
                        }
                        this._maxAllowedPosition.push(Math.round(maxPosition))
                    }.bind(this))
                }
                return this._maxAllowedPosition
            },
            getMaxAllowedVerticalPosition: function() {
                if (!this._maxAllowedVerticalPosition) {
                    var that = this;
                    this._maxAllowedVerticalPosition = [];
                    var rows = this._getRowCount();
                    this._$dateTable.find("tr:nth-child(" + rows + "n)").each(function(_, row) {
                        var maxPosition = $(row).position().top + getBoundingRect(row).height;
                        that._maxAllowedVerticalPosition.push(Math.round(maxPosition))
                    })
                }
                return this._maxAllowedVerticalPosition
            },
            getFixedContainer: function() {
                return this._$fixedContainer
            },
            getAllDayContainer: function() {
                return this._$allDayContainer
            },
            getCellIndexByCoordinates: function(coordinates, allDay) {
                var cellCount = this._getTotalCellCount(this._getGroupCount());
                var cellWidth = Math.floor(this._getWorkSpaceWidth() / cellCount);
                var cellHeight = allDay ? this.getAllDayHeight() : this.getCellHeight();
                var leftOffset = this._isRTL() || this.option("crossScrollingEnabled") ? 0 : this.getWorkSpaceLeftOffset();
                var topIndex = Math.floor(Math.floor(coordinates.top) / Math.floor(cellHeight));
                var leftIndex = Math.floor((coordinates.left + 5 - leftOffset) / cellWidth);
                if (this._isRTL()) {
                    leftIndex = cellCount - leftIndex - 1
                }
                return cellCount * topIndex + leftIndex
            },
            getStartViewDate: function() {
                return this._firstViewDate
            },
            getEndViewDate: function() {
                var dateOfLastViewCell = this.getDateOfLastViewCell();
                var endDateOfLastViewCell = this.calculateEndViewDate(dateOfLastViewCell);
                return this._adjustEndViewDateByDaylightDiff(dateOfLastViewCell, endDateOfLastViewCell)
            },
            getEndViewDateByEndDayHour: function() {
                var dateOfLastViewCell = this.getDateOfLastViewCell();
                var endTime = dateUtils.dateTimeFromDecimal(this.option("endDayHour"));
                var endDateOfLastViewCell = new Date(dateOfLastViewCell.setHours(endTime.hours, endTime.minutes));
                return this._adjustEndViewDateByDaylightDiff(dateOfLastViewCell, endDateOfLastViewCell)
            },
            calculateEndViewDate: function(dateOfLastViewCell) {
                return new Date(dateOfLastViewCell.getTime() + this.getCellDuration())
            },
            _adjustEndViewDateByDaylightDiff: function(startDate, endDate) {
                var daylightDiff = timeZoneUtils.getDaylightOffsetInMs(startDate, endDate);
                var endDateOfLastViewCell = new Date(endDate.getTime() - daylightDiff);
                return new Date(endDateOfLastViewCell.getTime() - toMs("minute"))
            },
            getDateOfLastViewCell: function() {
                var rowIndex = this._getRowCount() - 1;
                var cellIndex = this._getCellCount();
                if (this.option("groupByDate") && this._getGroupCount() > 0) {
                    cellIndex = cellIndex * this._getGroupCount() - 1
                } else {
                    cellIndex -= 1
                }
                return this._getDateByCellIndexes(rowIndex, cellIndex, true)
            },
            getCellDuration: function() {
                return 36e5 * this.option("hoursInterval")
            },
            getIntervalDuration: function(allDay) {
                return allDay ? toMs("day") : this.getCellDuration()
            },
            getVisibleDayDuration: function() {
                return this.option("hoursInterval") * this._getCellCountInDay() * HOUR_MS
            },
            getGroupBounds: function(coordinates) {
                var cellCount = this._getCellCount();
                var $cells = this._getCells();
                var cellWidth = this.getCellWidth();
                var result = this._groupedStrategy.getGroupBoundsOffset(cellCount, $cells, cellWidth, coordinates);
                if (this._isRTL()) {
                    var startOffset = result.left;
                    result.left = result.right - 2 * cellWidth;
                    result.right = startOffset + 2 * cellWidth
                }
                return result
            },
            needRecalculateResizableArea: function() {
                return this._isVerticalGroupedWorkSpace() && 0 !== this.getScrollable().scrollTop()
            },
            getCellDataByCoordinates: function(coordinates, allDay) {
                var key = JSON.stringify({
                    top: coordinates.top,
                    left: coordinates.left
                });
                var data = this.getCellDataCache(key);
                if (data) {
                    return data
                }
                var $cells = this._getCells(allDay);
                var cellIndex = this.getCellIndexByCoordinates(coordinates, allDay);
                var $cell = $cells.eq(cellIndex);
                return this.getCellData($cell)
            },
            getVisibleBounds: function() {
                var result = {};
                var $scrollable = this.getScrollable().$element();
                var cellHeight = this.getCellHeight();
                var scrolledCellCount = this.getScrollableScrollTop() / cellHeight;
                var totalCellCount = scrolledCellCount + $scrollable.height() / cellHeight;
                result.top = {
                    hours: Math.floor(scrolledCellCount * this.option("hoursInterval")) + this.option("startDayHour"),
                    minutes: scrolledCellCount % 2 ? 30 : 0
                };
                result.bottom = {
                    hours: Math.floor(totalCellCount * this.option("hoursInterval")) + this.option("startDayHour"),
                    minutes: Math.floor(totalCellCount) % 2 ? 30 : 0
                };
                return result
            },
            updateScrollPosition: function(date) {
                date = this.invoke("convertDateByTimezone", date);
                var bounds = this.getVisibleBounds();
                var startDateHour = date.getHours();
                var startDateMinutes = date.getMinutes();
                if (this.needUpdateScrollPosition(startDateHour, startDateMinutes, bounds, date)) {
                    this.scrollToTime(startDateHour, startDateMinutes, date)
                }
            },
            needUpdateScrollPosition: function(hours, minutes, bounds) {
                var isUpdateNeeded = false;
                if (hours < bounds.top.hours || hours > bounds.bottom.hours) {
                    isUpdateNeeded = true
                }
                if (hours === bounds.top.hours && minutes < bounds.top.minutes) {
                    isUpdateNeeded = true
                }
                if (hours === bounds.bottom.hours && minutes > bounds.top.minutes) {
                    isUpdateNeeded = true
                }
                return isUpdateNeeded
            },
            getGroupWidth: function(groupIndex) {
                var result = this._getCellCount() * this.getCellWidth();
                var position = this.getMaxAllowedPosition();
                var currentPosition = position[groupIndex];
                if (position.length && currentPosition) {
                    if (this._isRTL()) {
                        result = currentPosition - position[groupIndex + 1]
                    } else {
                        if (0 === groupIndex) {
                            result = currentPosition
                        } else {
                            result = currentPosition - position[groupIndex - 1]
                        }
                    }
                }
                return result
            },
            scrollToTime: function(hours, minutes, date) {
                var min = this.getStartViewDate();
                var max = this.getEndViewDate();
                if (date < min || date > max) {
                    errors.log("W1008", date);
                    return
                }
                var coordinates = this._getScrollCoordinates(hours, minutes, date);
                var scrollable = this.getScrollable();
                scrollable.scrollBy({
                    top: coordinates.top - scrollable.scrollTop(),
                    left: 0
                })
            },
            getDistanceBetweenCells: function(startIndex, endIndex) {
                var result = 0;
                this.$element().find("." + this._getDateTableRowClass()).first().find("." + DATE_TABLE_CELL_CLASS).each(function(index) {
                    if (index < startIndex || index > endIndex) {
                        return true
                    }
                    result += getBoundingRect(this).width
                });
                return result
            },
            needApplyCollectorOffset: function() {
                return false
            },
            initDragBehavior: function(scheduler) {
                if (!this.dragBehavior && scheduler) {
                    this.dragBehavior = new AppointmentDragBehavior(scheduler);
                    this.dragBehavior.addTo(this.getWorkArea());
                    this.dragBehavior.addTo(this.getAllDayContainer());
                    this.dragBehavior.addTo(this._$allDayPanel)
                }
                this._attachTablesEvents()
            },
            _isApplyCompactAppointmentOffset: function() {
                return this._supportCompactDropDownAppointments()
            },
            _supportCompactDropDownAppointments: function() {
                return true
            },
            _formatWeekday: function(date) {
                return formatWeekday(date)
            },
            _formatWeekdayAndDay: function(date) {
                return formatWeekday(date) + " " + dateLocalization.format(date, "day")
            },
            removeDroppableCellClass: function($cellElement) {
                ($cellElement || this._getDroppableCell()).removeClass(DATE_TABLE_DROPPABLE_CELL_CLASS)
            }
        }).include(publisherMixin);
        module.exports = SchedulerWorkSpace
    },
    /*!**************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space.grouped.strategy.js ***!
      \**************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../../core/class */ 16);
        var abstract = Class.abstract;
        var LAST_GROUP_CELL_CLASS = "dx-scheduler-last-group-cell";
        var FIRST_GROUP_CELL_CLASS = "dx-scheduler-first-group-cell";
        var GroupedStrategy = Class.inherit({
            ctor: function(workSpace) {
                this._workSpace = workSpace
            },
            getLastGroupCellClass: function() {
                return LAST_GROUP_CELL_CLASS
            },
            getFirstGroupCellClass: function() {
                return FIRST_GROUP_CELL_CLASS
            },
            _getOffsetByAllDayPanel: function() {
                return 0
            },
            _getGroupTop: function() {
                return 0
            },
            prepareCellIndexes: abstract,
            calculateCellIndex: abstract,
            getGroupIndex: abstract,
            insertAllDayRowsIntoDateTable: abstract,
            getTotalCellCount: abstract,
            addAdditionalGroupCellClasses: abstract,
            getHorizontalMax: abstract,
            getVerticalMax: abstract,
            calculateTimeCellRepeatCount: abstract,
            getWorkSpaceMinWidth: abstract,
            getAllDayHeight: abstract,
            getGroupCountAttr: abstract,
            getLeftOffset: abstract,
            shiftIndicator: abstract,
            getShaderOffset: abstract,
            getShaderTopOffset: abstract,
            getShaderMaxHeight: abstract,
            getShaderWidth: abstract,
            getScrollableScrollTop: abstract
        });
        module.exports = GroupedStrategy
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/shaders/ui.scheduler.current_time_shader.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var Class = __webpack_require__( /*! ../../../core/class */ 16);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var DATE_TIME_SHADER_CLASS = "dx-scheduler-date-time-shader";
        var currentTimeShader = Class.inherit({
            render: function(workspace) {
                var _this = this;
                this._workspace = workspace;
                this._$container = workspace._dateTableScrollable.$content();
                this._$shader = this._createShader();
                this._shader = [];
                this._shader.push(this._$shader);
                this._renderShader();
                if (this._$shader && this._workspace.option("crossScrollingEnabled")) {
                    this._$shader.css("marginTop", -getBoundingRect(this._$container.get(0)).height);
                    this._$shader.css("height", getBoundingRect(this._$container.get(0)).height)
                }
                this._shader.forEach(function(shader, index) {
                    _this._$container.append(shader)
                })
            },
            _createShader: function() {
                return $("<div>").addClass(DATE_TIME_SHADER_CLASS)
            },
            clean: function() {
                this._$container && this._$container.find("." + DATE_TIME_SHADER_CLASS).remove()
            }
        });
        module.exports = currentTimeShader
    },
    /*!**************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space_week.js ***!
      \**************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var dateLocalization = __webpack_require__( /*! ../../../localization/date */ 35);
        var each = __webpack_require__( /*! ../../../core/utils/iterator */ 4).each;
        var SchedulerWorkSpace = __webpack_require__( /*! ./ui.scheduler.work_space.indicator */ 206);
        var WEEK_CLASS = "dx-scheduler-work-space-week";
        var toMs = dateUtils.dateToMilliseconds;
        var SchedulerWorkSpaceWeek = SchedulerWorkSpace.inherit({
            _getElementClass: function() {
                return WEEK_CLASS
            },
            _getRowCount: function() {
                return this._getCellCountInDay()
            },
            _getCellCount: function() {
                return 7 * this.option("intervalCount")
            },
            _getDateByIndex: function(headerIndex) {
                var resultDate = new Date(this._firstViewDate);
                resultDate.setDate(this._firstViewDate.getDate() + headerIndex);
                return resultDate
            },
            _getFormat: function() {
                return this._formatWeekdayAndDay
            },
            _getStartViewDate: function() {
                return dateUtils.getFirstWeekDate(this.option("startDate"), this._firstDayOfWeek() || dateLocalization.firstDayOfWeekIndex())
            },
            _getIntervalDuration: function() {
                return 7 * toMs("day") * this.option("intervalCount")
            },
            _getCellsBetween: function($first, $last) {
                if (this._hasAllDayClass($last)) {
                    return this.callBase($first, $last)
                }
                var $cells = this._getCells();
                var firstColumn = $first.index();
                var firstRow = $first.parent().index();
                var lastColumn = $last.index();
                var lastRow = $last.parent().index();
                var groupCount = this._getGroupCount();
                var cellCount = groupCount > 0 ? this._getTotalCellCount(groupCount) : this._getCellCount();
                var rowCount = this._getTotalRowCount(groupCount);
                var result = [];
                for (var i = 0; i < cellCount; i++) {
                    for (var j = 0; j < rowCount; j++) {
                        var cell = $cells.get(cellCount * j + i);
                        result.push(cell)
                    }
                }
                var lastCellGroup = this.getCellData($last).groups;
                var indexesDifference = this.option("showAllDayPanel") && this._isVerticalGroupedWorkSpace() ? this._getGroupIndexByResourceId(lastCellGroup) + 1 : 0;
                var newFirstIndex = rowCount * firstColumn + firstRow - indexesDifference;
                var newLastIndex = rowCount * lastColumn + lastRow - indexesDifference;
                if (newFirstIndex > newLastIndex) {
                    var buffer = newFirstIndex;
                    newFirstIndex = newLastIndex;
                    newLastIndex = buffer
                }
                $cells = $(result).slice(newFirstIndex, newLastIndex + 1);
                if (this._getGroupCount()) {
                    var arr = [];
                    var focusedGroupIndex = this._getGroupIndexByCell($first);
                    each($cells, function(_, cell) {
                        var groupIndex = this._getGroupIndexByCell($(cell));
                        if (focusedGroupIndex === groupIndex) {
                            arr.push(cell)
                        }
                    }.bind(this));
                    $cells = $(arr)
                }
                return $cells
            },
            _getRightCell: function(isMultiSelection) {
                if (!isMultiSelection) {
                    return this.callBase(isMultiSelection)
                }
                var $rightCell;
                var $focusedCell = this._$focusedCell;
                var groupCount = this._getGroupCount();
                var rowCellCount = isMultiSelection ? this._getCellCount() : this._getTotalCellCount(groupCount);
                var edgeCellIndex = this._isRTL() ? 0 : rowCellCount - 1;
                var direction = this._isRTL() ? "prev" : "next";
                if ($focusedCell.index() === edgeCellIndex || this._isGroupEndCell($focusedCell)) {
                    $rightCell = $focusedCell
                } else {
                    $rightCell = $focusedCell[direction]();
                    $rightCell = this._checkForViewBounds($rightCell)
                }
                return $rightCell
            },
            _getLeftCell: function(isMultiSelection) {
                if (!isMultiSelection) {
                    return this.callBase(isMultiSelection)
                }
                var $leftCell;
                var $focusedCell = this._$focusedCell;
                var groupCount = this._getGroupCount();
                var rowCellCount = isMultiSelection ? this._getCellCount() : this._getTotalCellCount(groupCount);
                var edgeCellIndex = this._isRTL() ? rowCellCount - 1 : 0;
                var direction = this._isRTL() ? "next" : "prev";
                if ($focusedCell.index() === edgeCellIndex || this._isGroupStartCell($focusedCell)) {
                    $leftCell = $focusedCell
                } else {
                    $leftCell = $focusedCell[direction]();
                    $leftCell = this._checkForViewBounds($leftCell)
                }
                return $leftCell
            },
            getPositionShift: function(timeShift, isAllDay) {
                if (!isAllDay && this.invoke("isAdaptive") && 0 === this.invoke("getMaxAppointmentCountPerCellByType")) {
                    return {
                        top: 0,
                        left: 0,
                        cellPosition: 0
                    }
                }
                return this.callBase(timeShift, isAllDay)
            },
            _isApplyCompactAppointmentOffset: function() {
                if (this.invoke("isAdaptive") && 0 === this.invoke("getMaxAppointmentCountPerCellByType")) {
                    return false
                }
                return this.callBase()
            }
        });
        registerComponent("dxSchedulerWorkSpaceWeek", SchedulerWorkSpaceWeek);
        module.exports = SchedulerWorkSpaceWeek
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/utils.work_week.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var MONDAY_INDEX = 1;
        var SATURDAY_INDEX = 6;
        var SUNDAY_INDEX = 0;
        exports.isDataOnWeekend = function(date) {
            var day = date.getDay();
            return day === SATURDAY_INDEX || day === SUNDAY_INDEX
        };
        exports.getFirstDayOfWeek = function(firstDayOfWeekOption) {
            return firstDayOfWeekOption || MONDAY_INDEX
        };
        exports.getWeekendsCount = function(days) {
            return 2 * Math.floor(days / 7)
        };
        exports.getFirstViewDate = function(viewStart, firstDayOfWeek) {
            var firstViewDate = dateUtils.getFirstWeekDate(viewStart, firstDayOfWeek);
            return dateUtils.normalizeDateByWeek(firstViewDate, viewStart)
        }
    },
    /*!************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.timeline_week.js ***!
      \************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerTimeline = __webpack_require__( /*! ./ui.scheduler.timeline */ 251);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var TIMELINE_CLASS = "dx-scheduler-timeline-week";
        var SchedulerTimelineWeek = SchedulerTimeline.inherit({
            _getElementClass: function() {
                return TIMELINE_CLASS
            },
            _getCellCount: function() {
                return this.callBase() * this._getWeekDuration()
            },
            _getHeaderPanelCellWidth: function($headerRow) {
                return getBoundingRect($headerRow.children().first().get(0)).width
            },
            _getWeekDuration: function() {
                return 7
            },
            _needRenderWeekHeader: function() {
                return true
            },
            _incrementDate: function(date) {
                date.setDate(date.getDate() + 1)
            }
        });
        registerComponent("dxSchedulerTimelineWeek", SchedulerTimelineWeek);
        module.exports = SchedulerTimelineWeek
    },
    /*!**********************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointmentsPositioning.strategy.base.js ***!
      \**********************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var COLLECTOR_DEFAULT_WIDTH = 24;
        var COLLECTOR_DEFAULT_OFFSET = 3;
        var COMPACT_THEME_APPOINTMENT_DEFAULT_OFFSET = 22;
        var APPOINTMENT_MIN_COUNT = 1;
        var APPOINTMENT_DEFAULT_WIDTH = 40;
        var COLLECTOR_WIDTH_IN_PERCENTS = 75;
        var APPOINTMENT_INCREASED_WIDTH = 50;
        var AppointmentPositioningStrategy = function() {
            function AppointmentPositioningStrategy(renderingStrategy) {
                _classCallCheck(this, AppointmentPositioningStrategy);
                this._renderingStrategy = renderingStrategy
            }
            _createClass(AppointmentPositioningStrategy, [{
                key: "getRenderingStrategy",
                value: function() {
                    return this._renderingStrategy
                }
            }, {
                key: "getDropDownAppointmentWidth",
                value: function(intervalCount, isAllDay) {
                    if (isAllDay || !_type2.default.isDefined(isAllDay)) {
                        return COLLECTOR_WIDTH_IN_PERCENTS * this.getRenderingStrategy().getDefaultCellWidth() / 100
                    } else {
                        return COLLECTOR_DEFAULT_WIDTH
                    }
                }
            }, {
                key: "getCollectorTopOffset",
                value: function() {
                    return COLLECTOR_DEFAULT_OFFSET
                }
            }, {
                key: "getCollectorLeftOffset",
                value: function() {
                    return COLLECTOR_DEFAULT_OFFSET
                }
            }, {
                key: "getAppointmentDefaultOffset",
                value: function() {
                    if (this.getRenderingStrategy()._isCompactTheme()) {
                        return COMPACT_THEME_APPOINTMENT_DEFAULT_OFFSET
                    }
                    return this.getRenderingStrategy().instance.option("_appointmentOffset")
                }
            }, {
                key: "getDynamicAppointmentCountPerCell",
                value: function() {
                    var renderingStrategy = this.getRenderingStrategy();
                    var cellHeight = renderingStrategy.instance.fire("getCellHeight");
                    var allDayCount = Math.floor((cellHeight - renderingStrategy._getAppointmentDefaultOffset()) / renderingStrategy._getAppointmentDefaultHeight()) || this._getAppointmentMinCount();
                    if (renderingStrategy.hasAllDayAppointments()) {
                        return {
                            allDay: "vertical" === renderingStrategy.instance._groupOrientation ? allDayCount : renderingStrategy.instance.option("_appointmentCountPerCell"),
                            simple: this._calculateDynamicAppointmentCountPerCell() || this._getAppointmentMinCount()
                        }
                    } else {
                        return allDayCount
                    }
                }
            }, {
                key: "getDropDownAppointmentHeight",
                value: function() {
                    return
                }
            }, {
                key: "_getAppointmentMinCount",
                value: function() {
                    return APPOINTMENT_MIN_COUNT
                }
            }, {
                key: "_calculateDynamicAppointmentCountPerCell",
                value: function() {
                    return Math.floor(this.getRenderingStrategy()._getAppointmentMaxWidth() / APPOINTMENT_INCREASED_WIDTH)
                }
            }, {
                key: "_getAppointmentDefaultWidth",
                value: function() {
                    return APPOINTMENT_DEFAULT_WIDTH
                }
            }]);
            return AppointmentPositioningStrategy
        }();
        module.exports = AppointmentPositioningStrategy
    },
    /*!*****************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.horizontal.js ***!
      \*****************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./ui.scheduler.appointments.strategy.base */ 252);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DEFAULT_APPOINTMENT_HEIGHT = 60;
        var MIN_APPOINTMENT_HEIGHT = 35;
        var DROP_DOWN_BUTTON_OFFSET = 2;
        var toMs = _date2.default.dateToMilliseconds;
        var HorizontalRenderingStrategy = function(_BaseAppointmentsStra) {
            _inherits(HorizontalRenderingStrategy, _BaseAppointmentsStra);
            var _super = _createSuper(HorizontalRenderingStrategy);

            function HorizontalRenderingStrategy() {
                _classCallCheck(this, HorizontalRenderingStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(HorizontalRenderingStrategy, [{
                key: "_needVerifyItemSize",
                value: function() {
                    return true
                }
            }, {
                key: "calculateAppointmentWidth",
                value: function(appointment, position, isRecurring) {
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    var allDay = this.instance.fire("getField", "allDay", appointment);
                    var startDate = this.startDate(appointment, false, position);
                    var endDate = this.endDate(appointment, position, isRecurring, false);
                    var appointmentDuration = this._getAppointmentDurationInMs(startDate, endDate, allDay);
                    appointmentDuration = this._adjustDurationByDaylightDiff(appointmentDuration, startDate, endDate);
                    var cellDuration = this.instance.getAppointmentDurationInMinutes() * toMs("minute");
                    var durationInCells = appointmentDuration / cellDuration;
                    var width = this.cropAppointmentWidth(durationInCells * cellWidth, cellWidth);
                    return width
                }
            }, {
                key: "_needAdjustDuration",
                value: function(diff) {
                    return diff < 0
                }
            }, {
                key: "getAppointmentGeometry",
                value: function(coordinates) {
                    var result = this._customizeAppointmentGeometry(coordinates);
                    return _get(_getPrototypeOf(HorizontalRenderingStrategy.prototype), "getAppointmentGeometry", this).call(this, result)
                }
            }, {
                key: "_customizeAppointmentGeometry",
                value: function(coordinates) {
                    var config = this._calculateGeometryConfig(coordinates);
                    return this._customizeCoordinates(coordinates, config.height, config.appointmentCountPerCell, config.offset)
                }
            }, {
                key: "_getOffsets",
                value: function() {
                    return {
                        unlimited: 0,
                        auto: 0
                    }
                }
            }, {
                key: "_getCompactLeftCoordinate",
                value: function(itemLeft, index) {
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    return itemLeft + cellWidth * index
                }
            }, {
                key: "_getMaxHeight",
                value: function() {
                    return this.getDefaultCellHeight() || this.getAppointmentMinSize()
                }
            }, {
                key: "_getAppointmentCount",
                value: function(overlappingMode, coordinates) {
                    return this._getMaxAppointmentCountPerCellByType(false)
                }
            }, {
                key: "_getAppointmentDefaultHeight",
                value: function() {
                    return DEFAULT_APPOINTMENT_HEIGHT
                }
            }, {
                key: "_getAppointmentMinHeight",
                value: function() {
                    return MIN_APPOINTMENT_HEIGHT
                }
            }, {
                key: "_sortCondition",
                value: function(a, b) {
                    return this._columnCondition(a, b)
                }
            }, {
                key: "_getOrientation",
                value: function() {
                    return ["left", "right", "top"]
                }
            }, {
                key: "_getMaxAppointmentWidth",
                value: function(startDate) {
                    return this.instance.fire("getMaxAppointmentWidth", {
                        date: startDate
                    })
                }
            }, {
                key: "getDropDownAppointmentWidth",
                value: function() {
                    return this.getDefaultCellWidth() - 2 * DROP_DOWN_BUTTON_OFFSET
                }
            }, {
                key: "getDeltaTime",
                value: function(args, initialSize) {
                    var deltaTime = 0;
                    var deltaWidth = args.width - initialSize.width;
                    deltaTime = toMs("minute") * Math.round(deltaWidth / this.getDefaultCellWidth() * this.instance.getAppointmentDurationInMinutes());
                    return deltaTime
                }
            }, {
                key: "isAllDay",
                value: function(appointmentData) {
                    return this.instance.fire("getField", "allDay", appointmentData)
                }
            }, {
                key: "needSeparateAppointment",
                value: function() {
                    return this.instance.fire("isGroupedByDate")
                }
            }]);
            return HorizontalRenderingStrategy
        }(_uiSchedulerAppointmentsStrategy2.default);
        module.exports = HorizontalRenderingStrategy
    },
    /*!****************************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month_line.js ***!
      \****************************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./ui.scheduler.appointments.strategy.horizontal */ 407);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _query = __webpack_require__( /*! ../../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var HOURS_IN_DAY = 24;
        var MINUTES_IN_HOUR = 60;
        var MILLISECONDS_IN_MINUTE = 6e4;
        var ZERO_APPOINTMENT_DURATION_IN_DAYS = 1;
        var HorizontalMonthLineRenderingStrategy = function(_HorizontalAppointmen) {
            _inherits(HorizontalMonthLineRenderingStrategy, _HorizontalAppointmen);
            var _super = _createSuper(HorizontalMonthLineRenderingStrategy);

            function HorizontalMonthLineRenderingStrategy() {
                _classCallCheck(this, HorizontalMonthLineRenderingStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(HorizontalMonthLineRenderingStrategy, [{
                key: "calculateAppointmentWidth",
                value: function(appointment, position, isRecurring) {
                    var startDate = _date2.default.trimTime(new Date(this.startDate(appointment, false, position)));
                    var endDate = new Date(this.endDate(appointment, position, isRecurring, true));
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    var duration = this._getDurationInDays(startDate, endDate);
                    var width = this.cropAppointmentWidth(Math.ceil(duration) * cellWidth, cellWidth);
                    return width
                }
            }, {
                key: "_getDurationInDays",
                value: function(startDate, endDate) {
                    var adjustedDuration = this._adjustDurationByDaylightDiff(endDate.getTime() - startDate.getTime(), startDate, endDate);
                    return adjustedDuration / _date2.default.dateToMilliseconds("day") || ZERO_APPOINTMENT_DURATION_IN_DAYS
                }
            }, {
                key: "getDeltaTime",
                value: function(args, initialSize) {
                    return HOURS_IN_DAY * MINUTES_IN_HOUR * MILLISECONDS_IN_MINUTE * this._getDeltaWidth(args, initialSize)
                }
            }, {
                key: "isAllDay",
                value: function() {
                    return false
                }
            }, {
                key: "createTaskPositionMap",
                value: function(items, skipSorting) {
                    if (!skipSorting) {
                        this.instance.getAppointmentsInstance()._sortAppointmentsByStartDate(items)
                    }
                    return _get(_getPrototypeOf(HorizontalMonthLineRenderingStrategy.prototype), "createTaskPositionMap", this).call(this, items)
                }
            }, {
                key: "_getSortedPositions",
                value: function(map, skipSorting) {
                    var result = _get(_getPrototypeOf(HorizontalMonthLineRenderingStrategy.prototype), "_getSortedPositions", this).call(this, map);
                    if (!skipSorting) {
                        result = (0, _query2.default)(result).sortBy("top").thenBy("left").thenBy("cellPosition").thenBy("i").toArray()
                    }
                    return result
                }
            }, {
                key: "needCorrectAppointmentDates",
                value: function() {
                    return false
                }
            }]);
            return HorizontalMonthLineRenderingStrategy
        }(_uiSchedulerAppointmentsStrategy2.default);
        module.exports = HorizontalMonthLineRenderingStrategy
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.files_tree_view.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiTree_view = __webpack_require__( /*! ../tree_view/ui.tree_view.search */ 363);
        var _uiTree_view2 = _interopRequireDefault(_uiTree_view);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.file_actions_button */ 410);
        var _uiFile_manager2 = _interopRequireDefault(_uiFile_manager);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DIRS_TREE_CLASS = "dx-filemanager-dirs-tree";
        var FILE_MANAGER_DIRS_TREE_FOCUSED_ITEM_CLASS = "dx-filemanager-focused-item";
        var FILE_MANAGER_DIRS_TREE_ITEM_TEXT_CLASS = "dx-filemanager-dirs-tree-item-text";
        var TREE_VIEW_ITEM_CLASS = "dx-treeview-item";
        var FileManagerFilesTreeView = function(_Widget) {
            _inherits(FileManagerFilesTreeView, _Widget);
            var _super = _createSuper(FileManagerFilesTreeView);

            function FileManagerFilesTreeView() {
                _classCallCheck(this, FileManagerFilesTreeView);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerFilesTreeView, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    this._getCurrentDirectory = this.option("getCurrentDirectory");
                    this._createFileActionsButton = _common.noop;
                    this._storeExpandedState = this.option("storeExpandedState") || false;
                    var $treeView = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_DIRS_TREE_CLASS).appendTo(this.$element());
                    var treeViewOptions = {
                        dataStructure: "plain",
                        rootValue: "",
                        createChildren: this._onFilesTreeViewCreateSubDirectories.bind(this),
                        itemTemplate: this._createFilesTreeViewItemTemplate.bind(this),
                        keyExpr: "getInternalKey",
                        parentIdExpr: "parentDirectory.getInternalKey",
                        displayExpr: function(itemInfo) {
                            return itemInfo.getDisplayName()
                        },
                        hasItemsExpr: "fileItem.hasSubDirectories",
                        onItemClick: this._createActionByOption("onDirectoryClick"),
                        onItemExpanded: function(e) {
                            return _this._onFilesTreeViewItemExpanded(e)
                        },
                        onItemCollapsed: function(e) {
                            return _this._onFilesTreeViewItemCollapsed(e)
                        },
                        onItemRendered: function(e) {
                            return _this._onFilesTreeViewItemRendered(e)
                        }
                    };
                    if (this._contextMenu) {
                        this._contextMenu.option("onContextMenuHidden", function() {
                            return _this._onContextMenuHidden()
                        });
                        treeViewOptions.onItemContextMenu = function(e) {
                            return _this._onFilesTreeViewItemContextMenu(e)
                        };
                        this._createFileActionsButton = function(element, options) {
                            return _this._createComponent(element, _uiFile_manager2.default, options)
                        }
                    }
                    this._filesTreeView = this._createComponent($treeView, _uiTree_view2.default, treeViewOptions);
                    _events_engine2.default.on($treeView, "click", this._createActionByOption("onClick"))
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(FileManagerFilesTreeView.prototype), "_render", this).call(this);
                    var that = this;
                    setTimeout(function() {
                        that._updateFocusedElement()
                    })
                }
            }, {
                key: "_onFilesTreeViewCreateSubDirectories",
                value: function(rootItem) {
                    var getDirectories = this.option("getDirectories");
                    var directoryInfo = rootItem && rootItem.itemData || null;
                    return getDirectories && getDirectories(directoryInfo, true)
                }
            }, {
                key: "_onFilesTreeViewItemRendered",
                value: function(_ref) {
                    var itemData = _ref.itemData;
                    var currentDirectory = this._getCurrentDirectory();
                    if (currentDirectory && currentDirectory.fileItem.equals(itemData.fileItem)) {
                        this._updateFocusedElement()
                    }
                }
            }, {
                key: "_onFilesTreeViewItemExpanded",
                value: function(_ref2) {
                    var itemData = _ref2.itemData,
                        node = _ref2.node;
                    if (this._storeExpandedState) {
                        itemData.expanded = true
                    }
                    if (node.expandedDeferred) {
                        node.expandedDeferred.resolve();
                        delete node.expandedDeferred
                    }
                }
            }, {
                key: "_onFilesTreeViewItemCollapsed",
                value: function(_ref3) {
                    var itemData = _ref3.itemData;
                    if (this._storeExpandedState) {
                        itemData.expanded = false
                    }
                }
            }, {
                key: "_createFilesTreeViewItemTemplate",
                value: function(itemData, itemIndex, itemElement) {
                    var _this2 = this;
                    var $itemElement = (0, _renderer2.default)(itemElement);
                    var $itemWrapper = $itemElement.closest(this._filesTreeViewItemSelector);
                    $itemWrapper.data("item", itemData);
                    var $image = (0, _icon.getImageContainer)(itemData.icon);
                    var $text = (0, _renderer2.default)("<span>").text(itemData.getDisplayName()).addClass(FILE_MANAGER_DIRS_TREE_ITEM_TEXT_CLASS);
                    var $button = (0, _renderer2.default)("<div>");
                    $itemElement.append($image, $text, $button);
                    this._createFileActionsButton($button, {
                        onClick: function(e) {
                            return _this2._onFileItemActionButtonClick(e)
                        }
                    })
                }
            }, {
                key: "_onFilesTreeViewItemContextMenu",
                value: function(_ref4) {
                    var itemElement = _ref4.itemElement,
                        event = _ref4.event;
                    event.preventDefault();
                    var itemData = (0, _renderer2.default)(itemElement).data("item");
                    this._contextMenu.showAt([itemData], itemElement, event)
                }
            }, {
                key: "_onFileItemActionButtonClick",
                value: function(_ref5) {
                    var component = _ref5.component,
                        element = _ref5.element,
                        event = _ref5.event;
                    event.stopPropagation();
                    var $item = component.$element().closest(this._filesTreeViewItemSelector);
                    var item = $item.data("item");
                    this._contextMenu.showAt([item], element);
                    this._activeFileActionsButton = component;
                    this._activeFileActionsButton.setActive(true)
                }
            }, {
                key: "_onContextMenuHidden",
                value: function() {
                    if (this._activeFileActionsButton) {
                        this._activeFileActionsButton.setActive(false)
                    }
                }
            }, {
                key: "_updateFocusedElement",
                value: function() {
                    var directoryInfo = this._getCurrentDirectory();
                    var $element = this._getItemElementByKey(directoryInfo.getInternalKey());
                    if (this._$focusedElement) {
                        this._$focusedElement.toggleClass(FILE_MANAGER_DIRS_TREE_FOCUSED_ITEM_CLASS, false)
                    }
                    this._$focusedElement = $element || (0, _renderer2.default)();
                    this._$focusedElement.toggleClass(FILE_MANAGER_DIRS_TREE_FOCUSED_ITEM_CLASS, true)
                }
            }, {
                key: "_getItemElementByKey",
                value: function(key) {
                    var node = this._filesTreeView && this._filesTreeView._dataAdapter.getNodeByKey(key);
                    if (node) {
                        var $node = this._filesTreeView._getNodeElement(node);
                        if ($node) {
                            return $node.children(this._filesTreeViewItemSelector)
                        }
                    }
                    return null
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerFilesTreeView.prototype), "_getDefaultOptions", this).call(this), {
                        storeExpandedState: false,
                        initialFolder: null,
                        contextMenu: null,
                        getItems: null,
                        getCurrentDirectory: null,
                        onDirectoryClick: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "storeExpandedState":
                            this._storeExpandedState = this.option(name);
                            break;
                        case "getItems":
                        case "rootFolderDisplayName":
                        case "initialFolder":
                        case "contextMenu":
                            this.repaint();
                            break;
                        case "getCurrentDirectory":
                            this.getCurrentDirectory = this.option(name);
                            break;
                        case "onDirectoryClick":
                            this._filesTreeView.option("onItemClick", this._createActionByOption("onDirectoryClick"));
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerFilesTreeView.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "expandDirectory",
                value: function(directoryInfo) {
                    var deferred = new _deferred.Deferred;
                    if (!directoryInfo || 0 === directoryInfo.items.length) {
                        return deferred.reject().promise()
                    }
                    var treeViewNode = this._filesTreeView._dataAdapter.getNodeByKey(directoryInfo.getInternalKey());
                    if (!treeViewNode) {
                        return deferred.reject().promise()
                    }
                    if (treeViewNode.expanded) {
                        return deferred.resolve().promise()
                    }
                    treeViewNode.expandedDeferred = deferred;
                    this._filesTreeView.expandItem(directoryInfo.getInternalKey());
                    return deferred.promise()
                }
            }, {
                key: "refresh",
                value: function() {
                    this._$focusedElement = null;
                    this._filesTreeView.option("dataSource", [])
                }
            }, {
                key: "updateCurrentDirectory",
                value: function() {
                    this._updateFocusedElement();
                    this._storeExpandedState && this._updateExpandedStateToCurrentDirectory()
                }
            }, {
                key: "_updateExpandedStateToCurrentDirectory",
                value: function() {
                    var dirLine = [];
                    for (var dirInfo = this._getCurrentDirectory(); dirInfo; dirInfo = dirInfo.parentDirectory) {
                        dirLine.unshift(dirInfo)
                    }
                    this.expandDirectoryLineRecursive(dirLine)
                }
            }, {
                key: "expandDirectoryLineRecursive",
                value: function(dirLine) {
                    var _this3 = this;
                    if (!dirLine.length) {
                        return (new _deferred.Deferred).resolve().promise()
                    }
                    return this.expandDirectory(dirLine.shift()).then(function() {
                        return _this3.expandDirectoryLineRecursive(dirLine)
                    })
                }
            }, {
                key: "_filesTreeViewItemSelector",
                get: function() {
                    return ".".concat(TREE_VIEW_ITEM_CLASS)
                }
            }, {
                key: "_contextMenu",
                get: function() {
                    return this.option("contextMenu")
                }
            }]);
            return FileManagerFilesTreeView
        }(_ui2.default);
        module.exports = FileManagerFilesTreeView
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.file_actions_button.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_FILE_ACTIONS_BUTTON = "dx-filemanager-file-actions-button";
        var FILE_MANAGER_FILE_ACTIONS_BUTTON_ACTIVATED = "dx-filemanager-file-actions-button-activated";
        var ACTIVE_STATE_CLASS = "dx-state-active";
        var FileManagerFileActionsButton = function(_Widget) {
            _inherits(FileManagerFileActionsButton, _Widget);
            var _super = _createSuper(FileManagerFileActionsButton);

            function FileManagerFileActionsButton() {
                _classCallCheck(this, FileManagerFileActionsButton);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerFileActionsButton, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    this._createClickAction();
                    var $button = (0, _renderer2.default)("<div>");
                    this.$element().append($button).addClass(FILE_MANAGER_FILE_ACTIONS_BUTTON);
                    this._button = this._createComponent($button, _button2.default, {
                        icon: "overflow",
                        stylingMode: "text",
                        onClick: function(e) {
                            return _this._raiseClick(e)
                        }
                    });
                    _get(_getPrototypeOf(FileManagerFileActionsButton.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_createClickAction",
                value: function() {
                    this._clickAction = this._createActionByOption("onClick")
                }
            }, {
                key: "_raiseClick",
                value: function(e) {
                    this._clickAction(e)
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerFileActionsButton.prototype), "_getDefaultOptions", this).call(this), {
                        cssClass: "",
                        onClick: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "cssClass":
                            this.repaint();
                            break;
                        case "onClick":
                            this._createClickAction();
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerFileActionsButton.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "setActive",
                value: function(active) {
                    var _this2 = this;
                    this.$element().toggleClass(FILE_MANAGER_FILE_ACTIONS_BUTTON_ACTIVATED, active);
                    setTimeout(function() {
                        return _this2._button.$element().toggleClass(ACTIVE_STATE_CLASS, active)
                    })
                }
            }]);
            return FileManagerFileActionsButton
        }(_ui2.default);
        module.exports = FileManagerFileActionsButton
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.item_list.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _double_click = __webpack_require__( /*! ../../events/double_click */ 137);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _custom_store = __webpack_require__( /*! ../../data/custom_store */ 118);
        var _custom_store2 = _interopRequireDefault(_custom_store);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_FILES_VIEW_CLASS = "dx-filemanager-files-view";
        var FILE_MANAGER_ITEM_LIST_ITEM_OPEN_EVENT_NAMESPACE = "dxFileManager_open";
        var FileManagerItemListBase = function(_Widget) {
            _inherits(FileManagerItemListBase, _Widget);
            var _super = _createSuper(FileManagerItemListBase);

            function FileManagerItemListBase() {
                _classCallCheck(this, FileManagerItemListBase);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerItemListBase, [{
                key: "_init",
                value: function() {
                    this._initActions();
                    _get(_getPrototypeOf(FileManagerItemListBase.prototype), "_init", this).call(this)
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this._initActions();
                    this.$element().addClass(FILE_MANAGER_FILES_VIEW_CLASS);
                    var dblClickEventName = (0, _utils.addNamespace)(_double_click.name, FILE_MANAGER_ITEM_LIST_ITEM_OPEN_EVENT_NAMESPACE);
                    _events_engine2.default.on(this.$element(), dblClickEventName, this._getItemSelector(), this._onItemDblClick.bind(this));
                    _get(_getPrototypeOf(FileManagerItemListBase.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onError: this._createActionByOption("onError"),
                        onSelectionChanged: this._createActionByOption("onSelectionChanged"),
                        onFocusedItemChanged: this._createActionByOption("onFocusedItemChanged"),
                        onSelectedItemOpened: this._createActionByOption("onSelectedItemOpened")
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerItemListBase.prototype), "_getDefaultOptions", this).call(this), {
                        selectionMode: "single",
                        selectedItemKeys: [],
                        focusedItemKey: void 0,
                        contextMenu: null,
                        getItems: null,
                        getItemThumbnail: null,
                        onError: null,
                        onSelectionChanged: null,
                        onFocusedItemChanged: null,
                        onSelectedItemOpened: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "selectionMode":
                        case "contextMenu":
                        case "getItems":
                        case "getItemThumbnail":
                            this.repaint();
                            break;
                        case "selectedItemKeys":
                            this._setSelectedItemKeys(args.value);
                            break;
                        case "focusedItemKey":
                            this._setFocusedItemKey(args.value);
                            break;
                        case "onError":
                        case "onSelectedItemOpened":
                        case "onSelectionChanged":
                        case "onFocusedItemChanged":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerItemListBase.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_getItems",
                value: function() {
                    var _this = this;
                    return this._getItemsInternal().done(function(itemInfos) {
                        _this._itemCount = itemInfos.length;
                        var parentDirectoryItem = _this._findParentDirectoryItem(itemInfos);
                        _this._hasParentDirectoryItem = !!parentDirectoryItem;
                        _this._parentDirectoryItemKey = parentDirectoryItem ? parentDirectoryItem.fileItem.key : null
                    })
                }
            }, {
                key: "_getItemsInternal",
                value: function() {
                    var itemsGetter = this.option("getItems");
                    var itemsResult = itemsGetter ? itemsGetter() : [];
                    return (0, _deferred.when)(itemsResult)
                }
            }, {
                key: "_raiseOnError",
                value: function(error) {
                    this._actions.onError({
                        error: error
                    })
                }
            }, {
                key: "_raiseSelectionChanged",
                value: function(args) {
                    this._actions.onSelectionChanged(args)
                }
            }, {
                key: "_raiseFocusedItemChanged",
                value: function(args) {
                    this._actions.onFocusedItemChanged(args)
                }
            }, {
                key: "_raiseSelectedItemOpened",
                value: function(fileItemInfo) {
                    this._actions.onSelectedItemOpened({
                        fileItemInfo: fileItemInfo
                    })
                }
            }, {
                key: "_tryRaiseSelectionChanged",
                value: function(_ref) {
                    var _this2 = this;
                    var selectedItemInfos = _ref.selectedItemInfos,
                        selectedItems = _ref.selectedItems,
                        selectedItemKeys = _ref.selectedItemKeys,
                        currentSelectedItemKeys = _ref.currentSelectedItemKeys,
                        currentDeselectedItemKeys = _ref.currentDeselectedItemKeys;
                    var parentDirectoryItem = this._findParentDirectoryItem(this.getSelectedItems());
                    if (parentDirectoryItem) {
                        this._deselectItem(parentDirectoryItem)
                    }
                    var raiseEvent = !this._hasParentDirectoryItem;
                    raiseEvent = raiseEvent || this._hasValidKeys(currentSelectedItemKeys) || this._hasValidKeys(currentDeselectedItemKeys);
                    if (raiseEvent) {
                        selectedItemInfos = this._filterOutItemByPredicate(selectedItemInfos, function(item) {
                            return item.fileItem.key === _this2._parentDirectoryItemKey
                        });
                        selectedItems = this._filterOutParentDirectory(selectedItems);
                        selectedItemKeys = this._filterOutParentDirectoryKey(selectedItemKeys, true);
                        currentSelectedItemKeys = this._filterOutParentDirectoryKey(currentSelectedItemKeys, true);
                        currentDeselectedItemKeys = this._filterOutParentDirectoryKey(currentDeselectedItemKeys, true);
                        this._raiseSelectionChanged({
                            selectedItemInfos: selectedItemInfos,
                            selectedItems: selectedItems,
                            selectedItemKeys: selectedItemKeys,
                            currentSelectedItemKeys: currentSelectedItemKeys,
                            currentDeselectedItemKeys: currentDeselectedItemKeys
                        })
                    }
                }
            }, {
                key: "_getItemThumbnail",
                value: function(fileInfo) {
                    var itemThumbnailGetter = this.option("getItemThumbnail");
                    return itemThumbnailGetter ? itemThumbnailGetter(fileInfo) : {
                        thumbnail: ""
                    }
                }
            }, {
                key: "_getItemThumbnailContainer",
                value: function(fileInfo) {
                    var _this$_getItemThumbna = this._getItemThumbnail(fileInfo),
                        thumbnail = _this$_getItemThumbna.thumbnail,
                        cssClass = _this$_getItemThumbna.cssClass;
                    var $itemThumbnail = (0, _icon.getImageContainer)(thumbnail).addClass(this._getItemThumbnailCssClass());
                    if (cssClass) {
                        $itemThumbnail.addClass(cssClass)
                    }
                    return $itemThumbnail
                }
            }, {
                key: "_getItemThumbnailCssClass",
                value: function() {
                    return ""
                }
            }, {
                key: "_getItemSelector",
                value: function() {}
            }, {
                key: "_onItemDblClick",
                value: function(e) {}
            }, {
                key: "_isDesktop",
                value: function() {
                    return "desktop" === _devices2.default.real().deviceType
                }
            }, {
                key: "_showContextMenu",
                value: function(items, element, offset) {
                    this._contextMenu.showAt(items, element, offset)
                }
            }, {
                key: "_findParentDirectoryItem",
                value: function(itemInfos) {
                    for (var i = 0; i < itemInfos.length; i++) {
                        var itemInfo = itemInfos[i];
                        if (this._isParentDirectoryItem(itemInfo)) {
                            return itemInfo
                        }
                    }
                    return null
                }
            }, {
                key: "_getFileItemsForContextMenu",
                value: function(fileItem) {
                    var result = this.getSelectedItems();
                    if (this._isParentDirectoryItem(fileItem)) {
                        result.push(fileItem)
                    }
                    return result
                }
            }, {
                key: "_isParentDirectoryItem",
                value: function(itemInfo) {
                    return itemInfo.fileItem.isParentFolder
                }
            }, {
                key: "_hasValidKeys",
                value: function(keys) {
                    return keys.length > 1 || 1 === keys.length && keys[0] !== this._parentDirectoryItemKey
                }
            }, {
                key: "_filterOutParentDirectory",
                value: function(array, createNewArray) {
                    var _this3 = this;
                    return this._filterOutItemByPredicate(array, function(item) {
                        return item.key === _this3._parentDirectoryItemKey
                    }, createNewArray)
                }
            }, {
                key: "_filterOutParentDirectoryKey",
                value: function(array, createNewArray) {
                    var _this4 = this;
                    return this._filterOutItemByPredicate(array, function(key) {
                        return key === _this4._parentDirectoryItemKey
                    }, createNewArray)
                }
            }, {
                key: "_filterOutItemByPredicate",
                value: function(array, predicate, createNewArray) {
                    var result = array;
                    var index = -1;
                    for (var i = 0; i < array.length; i++) {
                        if (predicate(array[i])) {
                            index = i;
                            break
                        }
                    }
                    if (index !== -1) {
                        if (createNewArray) {
                            result = _toConsumableArray(array)
                        }
                        result.splice(index, 1)
                    }
                    return result
                }
            }, {
                key: "_isMultipleSelectionMode",
                value: function() {
                    return "multiple" === this.option("selectionMode")
                }
            }, {
                key: "_deselectItem",
                value: function(item) {}
            }, {
                key: "_setSelectedItemKeys",
                value: function(itemKeys) {}
            }, {
                key: "_setFocusedItemKey",
                value: function(itemKey) {}
            }, {
                key: "_createDataSource",
                value: function() {
                    return {
                        store: new _custom_store2.default({
                            key: "fileItem.key",
                            load: this._getItems.bind(this)
                        })
                    }
                }
            }, {
                key: "getSelectedItems",
                value: function() {}
            }, {
                key: "clearSelection",
                value: function() {}
            }, {
                key: "selectItem",
                value: function() {}
            }, {
                key: "_contextMenu",
                get: function() {
                    return this.option("contextMenu")
                }
            }]);
            return FileManagerItemListBase
        }(_ui2.default);
        module.exports = FileManagerItemListBase
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/splitter.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _pointer = __webpack_require__( /*! ../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _utils = __webpack_require__( /*! ../events/utils */ 8);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var SPLITTER_CLASS = "dx-splitter";
        var SPLITTER_WRAPPER_CLASS = "".concat(SPLITTER_CLASS, "-wrapper");
        var SPLITTER_INACTIVE_CLASS = "".concat(SPLITTER_CLASS, "-inactive");
        var SPLITTER_BORDER_CLASS = "".concat(SPLITTER_CLASS, "-border");
        var SPLITTER_INITIAL_STATE_CLASS = "".concat(SPLITTER_CLASS, "-initial");
        var STATE_DISABLED_CLASS = "dx-state-disabled";
        var SPLITTER_MODULE_NAMESPACE = "dxSplitterResizing";
        var SPLITTER_POINTER_DOWN_EVENT_NAME = (0, _utils.addNamespace)(_pointer2.default.down, SPLITTER_MODULE_NAMESPACE);
        var SPLITTER_POINTER_MOVE_EVENT_NAME = (0, _utils.addNamespace)(_pointer2.default.move, SPLITTER_MODULE_NAMESPACE);
        var SPLITTER_POINTER_UP_EVENT_NAME = (0, _utils.addNamespace)(_pointer2.default.up, SPLITTER_MODULE_NAMESPACE);
        var SplitterControl = function(_Widget) {
            _inherits(SplitterControl, _Widget);
            var _super = _createSuper(SplitterControl);

            function SplitterControl() {
                _classCallCheck(this, SplitterControl);
                return _super.apply(this, arguments)
            }
            _createClass(SplitterControl, [{
                key: "_initMarkup",
                value: function() {
                    this._$container = this.option("container");
                    this._$leftElement = this.option("leftElement");
                    this._$rightElement = this.option("rightElement");
                    this._onApplyPanelSize = this._createActionByOption("onApplyPanelSize");
                    this.$element().addClass(SPLITTER_WRAPPER_CLASS).addClass(SPLITTER_INITIAL_STATE_CLASS);
                    this._$splitterBorder = (0, _renderer2.default)("<div>").addClass(SPLITTER_BORDER_CLASS).appendTo(this.$element());
                    this._$splitter = (0, _renderer2.default)("<div>").addClass(SPLITTER_CLASS).addClass(SPLITTER_INACTIVE_CLASS).appendTo(this._$splitterBorder)
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(SplitterControl.prototype), "_render", this).call(this);
                    this._detachEventHandlers();
                    this._attachEventHandlers()
                }
            }, {
                key: "_clean",
                value: function() {
                    this._detachEventHandlers();
                    _get(_getPrototypeOf(SplitterControl.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_attachEventHandlers",
                value: function() {
                    var document = _dom_adapter2.default.getDocument();
                    _events_engine2.default.on(this._$splitterBorder, SPLITTER_POINTER_DOWN_EVENT_NAME, this._onMouseDownHandler.bind(this));
                    _events_engine2.default.on(document, SPLITTER_POINTER_MOVE_EVENT_NAME, this._onMouseMoveHandler.bind(this));
                    _events_engine2.default.on(document, SPLITTER_POINTER_UP_EVENT_NAME, this._onMouseUpHandler.bind(this))
                }
            }, {
                key: "_detachEventHandlers",
                value: function() {
                    var document = _dom_adapter2.default.getDocument();
                    _events_engine2.default.off(this._$splitterBorder, SPLITTER_POINTER_DOWN_EVENT_NAME);
                    _events_engine2.default.off(document, SPLITTER_POINTER_MOVE_EVENT_NAME);
                    _events_engine2.default.off(document, SPLITTER_POINTER_UP_EVENT_NAME)
                }
            }, {
                key: "_dimensionChanged",
                value: function() {
                    if (void 0 === this._leftPanelPercentageWidth) {
                        var leftElementWidth = this._$leftElement.get(0).clientWidth + this.getSplitterOffset();
                        this._leftPanelPercentageWidth = this._convertLeftPanelWidthToPercentage(leftElementWidth)
                    }
                    var rightPanelWidth = 100 - this._leftPanelPercentageWidth;
                    this._onApplyPanelSize({
                        leftPanelWidth: this._leftPanelPercentageWidth + "%",
                        rightPanelWidth: rightPanelWidth + "%"
                    });
                    this.setSplitterPositionLeft(this._$leftElement.get(0).clientWidth - this.getSplitterOffset())
                }
            }, {
                key: "_onMouseDownHandler",
                value: function(e) {
                    e.preventDefault();
                    this._offsetX = e.pageX - this._$splitterBorder.offset().left <= this._getSplitterBorderWidth() ? e.pageX - this._$splitterBorder.offset().left : 0;
                    this._isSplitterActive = true;
                    this._containerWidth = this._$container.get(0).clientWidth;
                    this.$element().removeClass(SPLITTER_INITIAL_STATE_CLASS);
                    this._$splitter.removeClass(SPLITTER_INACTIVE_CLASS);
                    this.setSplitterPositionLeft(null, true)
                }
            }, {
                key: "_onMouseMoveHandler",
                value: function(e) {
                    if (!this._isSplitterActive) {
                        return
                    }
                    this.setSplitterPositionLeft(this._getNewSplitterPositionLeft(e), true)
                }
            }, {
                key: "_onMouseUpHandler",
                value: function() {
                    if (this._isSplitterActive) {
                        this._$splitter.addClass(SPLITTER_INACTIVE_CLASS);
                        this._isSplitterActive = false
                    }
                }
            }, {
                key: "_getNewSplitterPositionLeft",
                value: function(e) {
                    var newSplitterPositionLeft = e.pageX - this._$container.offset().left - this._offsetX;
                    newSplitterPositionLeft = Math.max(0 - this.getSplitterOffset(), newSplitterPositionLeft);
                    newSplitterPositionLeft = Math.min(this._containerWidth - this.getSplitterOffset() - this._getSplitterWidth(), newSplitterPositionLeft);
                    return newSplitterPositionLeft
                }
            }, {
                key: "_isDomElement",
                value: function(element) {
                    return element && element.nodeType && 1 === element.nodeType
                }
            }, {
                key: "_isPercentValue",
                value: function(value) {
                    return (0, _type.isString)(value) && "%" === value.slice(-1)
                }
            }, {
                key: "getSplitterOffset",
                value: function() {
                    return (this._getSplitterBorderWidth() - this._getSplitterWidth()) / 2
                }
            }, {
                key: "_getSplitterWidth",
                value: function() {
                    return this._$splitter.get(0).clientWidth
                }
            }, {
                key: "_getSplitterBorderWidth",
                value: function() {
                    return this._$splitterBorder.get(0).clientWidth
                }
            }, {
                key: "toggleState",
                value: function(isActive) {
                    var classAction = isActive ? "removeClass" : "addClass";
                    this.$element()[classAction](STATE_DISABLED_CLASS);
                    this._$splitter[classAction](STATE_DISABLED_CLASS)
                }
            }, {
                key: "isSplitterMoved",
                value: function() {
                    return !this.$element().hasClass(SPLITTER_INITIAL_STATE_CLASS)
                }
            }, {
                key: "setSplitterPositionLeft",
                value: function(splitterPositionLeft, needUpdatePanels) {
                    splitterPositionLeft = splitterPositionLeft || this._$leftElement.get(0).clientWidth - this.getSplitterOffset();
                    this.$element().css("left", splitterPositionLeft);
                    if (!needUpdatePanels) {
                        return
                    }
                    var leftPanelWidth = splitterPositionLeft + this.getSplitterOffset();
                    var rightPanelWidth = this._containerWidth - leftPanelWidth;
                    this._onApplyPanelSize({
                        leftPanelWidth: leftPanelWidth,
                        rightPanelWidth: rightPanelWidth
                    });
                    this._leftPanelPercentageWidth = this._convertLeftPanelWidthToPercentage(leftPanelWidth)
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "initialLeftPanelWidth":
                            this._leftPanelPercentageWidth = this._convertLeftPanelWidthToPercentage(args.value);
                            this._dimensionChanged();
                            break;
                        case "leftElement":
                            this.repaint();
                            break;
                        default:
                            _get(_getPrototypeOf(SplitterControl.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_convertLeftPanelWidthToPercentage",
                value: function(leftPanelWidth) {
                    return leftPanelWidth / this._$container.get(0).clientWidth * 100
                }
            }]);
            return SplitterControl
        }(_ui2.default);
        exports.default = SplitterControl
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.panel.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var POINTERUP_EVENT_NAME = eventUtils.addNamespace(_pointer2.default.up, "dxDiagramPanel");
        var PREVENT_REFOCUS_SELECTOR = ".dx-textbox";
        var DiagramPanel = function(_Widget) {
            _inherits(DiagramPanel, _Widget);
            var _super = _createSuper(DiagramPanel);

            function DiagramPanel() {
                _classCallCheck(this, DiagramPanel);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramPanel, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramPanel.prototype), "_init", this).call(this);
                    this._createOnPointerUpAction()
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(DiagramPanel.prototype), "_render", this).call(this);
                    this._attachPointerUpEvent()
                }
            }, {
                key: "_getPointerUpElements",
                value: function() {
                    return [this.$element()]
                }
            }, {
                key: "_attachPointerUpEvent",
                value: function() {
                    var _this = this;
                    var elements = this._getPointerUpElements();
                    elements.forEach(function(element) {
                        _events_engine2.default.off(element, POINTERUP_EVENT_NAME);
                        _events_engine2.default.on(element, POINTERUP_EVENT_NAME, function(e) {
                            if (!(0, _renderer2.default)(e.target).closest(PREVENT_REFOCUS_SELECTOR).length) {
                                _this._onPointerUpAction()
                            }
                        })
                    })
                }
            }, {
                key: "_createOnPointerUpAction",
                value: function() {
                    this._onPointerUpAction = this._createActionByOption("onPointerUp")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onPointerUp":
                            this._createOnPointerUpAction();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramPanel.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return DiagramPanel
        }(_ui2.default);
        module.exports = DiagramPanel
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.menu_helper.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var DIAGRAM_CONTEXT_MENU_CLASS = "dx-diagram-contextmenu";
        var DiagramMenuHelper = {
            getContextMenuItemTemplate: function(contextMenu, itemData, itemIndex, itemElement) {
                var $itemElement = (0, _renderer2.default)(itemElement);
                $itemElement.empty();
                var itemKey = void 0 !== itemData.rootCommand ? itemData.rootCommand : -1;
                if (itemData.icon && !itemData.checked) {
                    var $iconElement = (0, _icon.getImageContainer)(itemData.icon);
                    $itemElement.append($iconElement)
                } else {
                    if (contextMenu._menuHasCheckedItems && true === contextMenu._menuHasCheckedItems[itemKey]) {
                        var $checkElement = (0, _icon.getImageContainer)("check");
                        $checkElement.css("visibility", !itemData.checked ? "hidden" : "visible");
                        $itemElement.append($checkElement)
                    }
                }
                $itemElement.append('<span class="dx-menu-item-text">' + itemData.text + "</span>");
                if (Array.isArray(itemData.items) && itemData.items.length > 0) {
                    $itemElement.append('<span class="dx-menu-item-popout-container"><div class="dx-menu-item-popout"></div></span>')
                }
            },
            getContextMenuCssClass: function() {
                return DIAGRAM_CONTEXT_MENU_CLASS
            },
            onContextMenuItemClick: function(widget, itemData, actionHandler) {
                if ((void 0 !== itemData.command || void 0 !== itemData.name) && (!Array.isArray(itemData.items) || !itemData.items.length)) {
                    var parameter = DiagramMenuHelper.getItemCommandParameter(widget, itemData);
                    actionHandler.call(this, itemData.command, itemData.name, parameter)
                } else {
                    if (void 0 !== itemData.rootCommand && void 0 !== itemData.value) {
                        var _parameter = DiagramMenuHelper.getItemCommandParameter(widget, itemData, itemData.value);
                        actionHandler.call(this, itemData.rootCommand, void 0, _parameter)
                    }
                }
            },
            getItemValue: function(item) {
                return "object" === _typeof(item.value) ? JSON.stringify(item.value) : item.value
            },
            getItemOptionText: function(contextMenu, indexPath) {
                if (contextMenu) {
                    indexPath = indexPath.slice();
                    var parentItemOptionText = this._getParentItemOptionText(indexPath);
                    if (contextMenu && contextMenu._originalItemsInfo && contextMenu._originalItemsInfo[parentItemOptionText]) {
                        indexPath[indexPath.length - 1] += contextMenu._originalItemsInfo[parentItemOptionText].indexPathCorrection
                    }
                }
                return this._getItemOptionTextCore(indexPath)
            },
            _getParentItemOptionText: function(indexPath) {
                var parentIndexPath = indexPath.slice(0, indexPath.length - 1);
                return this._getItemOptionTextCore(parentIndexPath)
            },
            _getItemOptionTextCore: function(indexPath) {
                return indexPath.reduce(function(r, i) {
                    return r + "items[".concat(i, "].")
                }, "")
            },
            getItemCommandParameter: function(widget, item, value) {
                if (item.getParameter) {
                    return item.getParameter(widget)
                }
                return value
            },
            updateContextMenuItems: function(contextMenu, itemOptionText, rootCommandKey, items) {
                var _this = this;
                if (!contextMenu._originalItemsInfo) {
                    contextMenu._originalItemsInfo = {}
                }
                if (!contextMenu._originalItemsInfo[itemOptionText]) {
                    contextMenu._originalItemsInfo[itemOptionText] = {
                        items: contextMenu.option(itemOptionText + "items") || []
                    }
                }
                items = items.map(function(item) {
                    return {
                        value: _this.getItemValue(item),
                        text: item.text,
                        checked: item.checked,
                        widget: contextMenu,
                        rootCommand: rootCommandKey
                    }
                });
                var originalItems = contextMenu._originalItemsInfo[itemOptionText].items;
                contextMenu.option(itemOptionText + "items", items.concat(originalItems));
                if (contextMenu._originalItemsInfo[itemOptionText] && originalItems.length) {
                    contextMenu._originalItemsInfo[itemOptionText].indexPathCorrection = items.length
                }
            },
            updateContextMenuItemVisible: function(contextMenu, itemOptionText, visible) {
                contextMenu.option(itemOptionText + "visible", visible)
            },
            updateContextMenuItemValue: function(contextMenu, itemOptionText, rootCommandKey, value) {
                var items = contextMenu.option(itemOptionText + "items");
                if ("boolean" === typeof value && (!items || !items.length)) {
                    this._setContextMenuHasCheckedItems(contextMenu, -1);
                    contextMenu.option(itemOptionText + "checked", value)
                } else {
                    if (void 0 !== value) {
                        this._setContextMenuHasCheckedItems(contextMenu, rootCommandKey);
                        if (Array.isArray(items)) {
                            items.forEach(function(item, index) {
                                item.checked = item.value === value
                            })
                        }
                    }
                }
            },
            _setContextMenuHasCheckedItems: function(contextMenu, key) {
                if (!contextMenu._menuHasCheckedItems) {
                    contextMenu._menuHasCheckedItems = {}
                }
                contextMenu._menuHasCheckedItems[key] = true
            }
        };
        module.exports = DiagramMenuHelper
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.floating_panel.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.panel */ 413);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_MOBILE_POPUP_CLASS = "dx-diagram-mobile-popup";
        var DiagramFloatingPanel = function(_DiagramPanel) {
            _inherits(DiagramFloatingPanel, _DiagramPanel);
            var _super = _createSuper(DiagramFloatingPanel);

            function DiagramFloatingPanel() {
                _classCallCheck(this, DiagramFloatingPanel);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramFloatingPanel, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramFloatingPanel.prototype), "_init", this).call(this);
                    this._createOnVisibilityChangingAction();
                    this._createOnVisibilityChangedAction()
                }
            }, {
                key: "isVisible",
                value: function() {
                    return this.option("isVisible")
                }
            }, {
                key: "isMobileView",
                value: function() {
                    return this.option("isMobileView")
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(DiagramFloatingPanel.prototype), "_initMarkup", this).call(this);
                    var $parent = this.$element();
                    var $popupElement = (0, _renderer2.default)("<div>").addClass(this._getPopupClass()).addClass(this.isMobileView() && DIAGRAM_MOBILE_POPUP_CLASS).appendTo($parent);
                    this._popup = this._createComponent($popupElement, _popup2.default, this._getPopupOptions());
                    this._updatePopupVisible()
                }
            }, {
                key: "show",
                value: function() {
                    this.option("isVisible", true)
                }
            }, {
                key: "hide",
                value: function() {
                    this.option("isVisible", false)
                }
            }, {
                key: "toggle",
                value: function() {
                    this.option("isVisible", !this.isVisible())
                }
            }, {
                key: "repaint",
                value: function() {
                    this._popup.repaint()
                }
            }, {
                key: "_getPopupContent",
                value: function() {
                    return this._popup.content()
                }
            }, {
                key: "_getPopupTitle",
                value: function() {
                    var $content = (0, _renderer2.default)(this._getPopupContent());
                    return $content.parent().find(".dx-popup-title")
                }
            }, {
                key: "_getPointerUpElements",
                value: function() {
                    return [this._getPopupContent(), this._getPopupTitle()]
                }
            }, {
                key: "_getVerticalPaddingsAndBorders",
                value: function() {
                    var $content = (0, _renderer2.default)(this._getPopupContent());
                    return $content.outerHeight() - $content.height()
                }
            }, {
                key: "_getHorizontalPaddingsAndBorders",
                value: function() {
                    var $content = (0, _renderer2.default)(this._getPopupContent());
                    return $content.outerWidth() - $content.width()
                }
            }, {
                key: "_getPopupClass",
                value: function() {
                    return ""
                }
            }, {
                key: "_getPopupWidth",
                value: function() {
                    return this.option("width") || "auto"
                }
            }, {
                key: "_getPopupMaxWidth",
                value: function() {
                    return this.option("maxWidth")
                }
            }, {
                key: "_getPopupMinWidth",
                value: function() {
                    return this.option("minWidth")
                }
            }, {
                key: "_getPopupHeight",
                value: function() {
                    return this.option("height") || "auto"
                }
            }, {
                key: "_getPopupMaxHeight",
                value: function() {
                    return this.option("maxHeight")
                }
            }, {
                key: "_getPopupMinHeight",
                value: function() {
                    return this.option("minHeight")
                }
            }, {
                key: "_getPopupPosition",
                value: function() {
                    return {}
                }
            }, {
                key: "_getPopupContainer",
                value: function() {
                    return this.option("container")
                }
            }, {
                key: "_getPopupSlideAnimationObject",
                value: function(properties) {
                    return (0, _extend.extend)({
                        type: "slide",
                        start: function() {
                            (0, _renderer2.default)("body").css("overflow", "hidden")
                        },
                        complete: function() {
                            (0, _renderer2.default)("body").css("overflow", "")
                        }
                    }, properties)
                }
            }, {
                key: "_getPopupAnimation",
                value: function() {
                    return {
                        hide: {
                            type: "fadeOut"
                        },
                        show: {
                            type: "fadeIn"
                        }
                    }
                }
            }, {
                key: "_getPopupOptions",
                value: function() {
                    var _this = this;
                    var that = this;
                    return {
                        animation: (0, _window.hasWindow)() ? this._getPopupAnimation() : null,
                        shading: false,
                        showTitle: false,
                        focusStateEnabled: false,
                        container: this._getPopupContainer(),
                        width: this._getPopupWidth(),
                        height: this._getPopupHeight(),
                        maxWidth: this._getPopupMaxWidth(),
                        maxHeight: this._getPopupMaxHeight(),
                        minWidth: this._getPopupMinWidth(),
                        minHeight: this._getPopupMinHeight(),
                        position: this._getPopupPosition(),
                        onContentReady: function() {
                            that._renderPopupContent(that._popup.content())
                        },
                        onShowing: function() {
                            _this._onVisibilityChangingAction({
                                visible: true,
                                component: _this
                            })
                        },
                        onShown: function() {
                            _this.option("isVisible", true);
                            _this._onVisibilityChangedAction({
                                visible: true,
                                component: _this
                            })
                        },
                        onHiding: function() {
                            _this._onVisibilityChangingAction({
                                visible: false,
                                component: _this
                            })
                        },
                        onHidden: function() {
                            _this.option("isVisible", false);
                            _this._onVisibilityChangedAction({
                                visible: false,
                                component: _this
                            })
                        }
                    }
                }
            }, {
                key: "_renderPopupContent",
                value: function($parent) {}
            }, {
                key: "_updatePopupVisible",
                value: function() {
                    this._popup.option("visible", this.isVisible())
                }
            }, {
                key: "_createOnVisibilityChangingAction",
                value: function() {
                    this._onVisibilityChangingAction = this._createActionByOption("onVisibilityChanging")
                }
            }, {
                key: "_createOnVisibilityChangedAction",
                value: function() {
                    this._onVisibilityChangedAction = this._createActionByOption("onVisibilityChanged")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onVisibilityChanging":
                            this._createOnVisibilityChangingAction();
                            break;
                        case "onVisibilityChanged":
                            this._createOnVisibilityChangedAction();
                            break;
                        case "container":
                            this._popup.option("container", this._getPopupContainer());
                            break;
                        case "width":
                            this._popup.option("width", this._getPopupWidth());
                            break;
                        case "height":
                            this._popup.option("height", this._getPopupHeight());
                            break;
                        case "maxWidth":
                            this._popup.option("maxWidth", this._getPopupMaxWidth());
                            break;
                        case "maxHeight":
                            this._popup.option("maxHeight", this._getPopupMaxHeight());
                            break;
                        case "minWidth":
                            this._popup.option("minWidth", this._getPopupMinWidth());
                            break;
                        case "minHeight":
                            this._popup.option("minHeight", this._getPopupMinHeight());
                            break;
                        case "isMobileView":
                            this._invalidate();
                            break;
                        case "isVisible":
                            this._updatePopupVisible();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramFloatingPanel.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(DiagramFloatingPanel.prototype), "_getDefaultOptions", this).call(this), {
                        isVisible: true,
                        isMobileView: false,
                        offsetX: 0,
                        offsetY: 0
                    })
                }
            }]);
            return DiagramFloatingPanel
        }(_uiDiagram2.default);
        module.exports = DiagramFloatingPanel
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.items_option.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _component = __webpack_require__( /*! ../../core/component */ 115);
        var _component2 = _interopRequireDefault(_component);
        var _data_helper = __webpack_require__( /*! ../../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ItemsOption = function(_Component) {
            _inherits(ItemsOption, _Component);
            var _super = _createSuper(ItemsOption);

            function ItemsOption(diagramWidget) {
                var _this;
                _classCallCheck(this, ItemsOption);
                _this = _super.call(this);
                _this._diagramWidget = diagramWidget;
                _this._resetCache();
                return _this
            }
            _createClass(ItemsOption, [{
                key: "_dataSourceChangedHandler",
                value: function(newItems, e) {
                    this._items = newItems;
                    this._diagramWidget._onDataSourceChanged()
                }
            }, {
                key: "_dataSourceLoadingChangedHandler",
                value: function(isLoading) {
                    if (isLoading && !this._dataSource.isLoaded()) {
                        this._diagramWidget._showLoadingIndicator()
                    } else {
                        this._diagramWidget._hideLoadingIndicator()
                    }
                }
            }, {
                key: "insert",
                value: function(data, callback, errorCallback) {
                    var _this2 = this;
                    this._resetCache();
                    this._getStore().insert(data).done(function(data) {
                        if (callback) {
                            callback(data)
                        }
                        _this2._resetCache()
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                        _this2._resetCache()
                    })
                }
            }, {
                key: "update",
                value: function(key, data, callback, errorCallback) {
                    var storeKey = this._getStoreKey(data);
                    this._getStore().update(storeKey, data).done(function(data, key) {
                        if (callback) {
                            callback(key, data)
                        }
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                    })
                }
            }, {
                key: "remove",
                value: function(key, data, callback, errorCallback) {
                    var _this3 = this;
                    this._resetCache();
                    var storeKey = this._getStoreKey(data);
                    this._getStore().remove(storeKey).done(function(key) {
                        if (callback) {
                            callback(key, data)
                        }
                        _this3._resetCache()
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                        _this3._resetCache()
                    })
                }
            }, {
                key: "findItem",
                value: function(itemKey) {
                    if (!this._items) {
                        return null
                    }
                    var index = this._getIndexByKey(itemKey);
                    return this._items[index]
                }
            }, {
                key: "getItems",
                value: function() {
                    return this._items
                }
            }, {
                key: "hasItems",
                value: function() {
                    return !!this._items
                }
            }, {
                key: "_getIndexByKey",
                value: function(key) {
                    var cache = this._cache;
                    var keys = cache.keys || this._getKeys() || [];
                    if (!cache.keys) {
                        cache.keys = keys
                    }
                    if ("object" === _typeof(key)) {
                        for (var i = 0, length = keys.length; i < length; i++) {
                            if (keys[i] === key) {
                                return i
                            }
                        }
                    } else {
                        var set = cache.set || keys.reduce(function(accumulator, key, index) {
                            accumulator[key] = index;
                            return accumulator
                        }, {});
                        if (!cache.set) {
                            cache.set = set
                        }
                        return set[key]
                    }
                    return -1
                }
            }, {
                key: "_getKeys",
                value: function() {
                    if (!this._items) {
                        return []
                    }
                    var keyExpr = this._getKeyExpr();
                    return keyExpr && this._items && this._items.map(function(item) {
                        return keyExpr(item)
                    })
                }
            }, {
                key: "_getKeyExpr",
                value: function() {
                    throw "Not Implemented"
                }
            }, {
                key: "_dataSourceOptions",
                value: function() {
                    return {
                        paginate: false
                    }
                }
            }, {
                key: "_getStore",
                value: function() {
                    return this._dataSource.store()
                }
            }, {
                key: "_getStoreKey",
                value: function(data) {
                    return this._getStore().keyOf(data)
                }
            }, {
                key: "_resetCache",
                value: function() {
                    this._cache = {}
                }
            }]);
            return ItemsOption
        }(_component2.default);
        ItemsOption.include(_data_helper2.default);
        module.exports = ItemsOption
    }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/file_management/object_provider.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _array = __webpack_require__( /*! ../core/utils/array */ 14);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _data = __webpack_require__( /*! ../core/utils/data */ 20);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _errors = __webpack_require__( /*! ../data/errors */ 38);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _file_saver = __webpack_require__( /*! ../exporter/file_saver */ 176);
        var _ui = __webpack_require__( /*! ../ui/widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _jszip = __webpack_require__( /*! jszip */ 296);
        var _jszip2 = _interopRequireDefault(_jszip);
        var _provider_base = __webpack_require__( /*! ./provider_base */ 193);
        var _provider_base2 = _interopRequireDefault(_provider_base);
        var _errors2 = __webpack_require__( /*! ./errors */ 222);
        var _errors3 = _interopRequireDefault(_errors2);
        var _utils = __webpack_require__( /*! ./utils */ 221);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var window = (0, _window.getWindow)();
        var ObjectFileSystemProvider = function(_FileSystemProviderBa) {
            _inherits(ObjectFileSystemProvider, _FileSystemProviderBa);
            var _super = _createSuper(ObjectFileSystemProvider);

            function ObjectFileSystemProvider(options) {
                var _this;
                _classCallCheck(this, ObjectFileSystemProvider);
                options = (0, _common.ensureDefined)(options, {});
                _this = _super.call(this, options);
                var initialArray = options.data;
                if (initialArray && !Array.isArray(initialArray)) {
                    throw _errors.errors.Error("E4006")
                }
                var itemsExpr = options.itemsExpr || "items";
                _this._subFileItemsGetter = (0, _data.compileGetter)(itemsExpr);
                _this._subFileItemsSetter = _this._getSetter(itemsExpr);
                var contentExpr = options.contentExpr || "content";
                _this._contentGetter = (0, _data.compileGetter)(contentExpr);
                _this._contentSetter = _this._getSetter(contentExpr);
                var nameExpr = _this._getNameExpr(options);
                _this._nameSetter = _this._getSetter(nameExpr);
                var isDirExpr = _this._getIsDirExpr(options);
                _this._getIsDirSetter = _this._getSetter(isDirExpr);
                var keyExpr = _this._getKeyExpr(options);
                _this._keySetter = _this._getSetter(keyExpr);
                var sizeExpr = _this._getSizeExpr(options);
                _this._sizeSetter = _this._getSetter(sizeExpr);
                var dateModifiedExpr = _this._getDateModifiedExpr(options);
                _this._dateModifiedSetter = _this._getSetter(dateModifiedExpr);
                _this._data = initialArray || [];
                return _this
            }
            _createClass(ObjectFileSystemProvider, [{
                key: "getItems",
                value: function(parentDir) {
                    var _this2 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this2._getItems(parentDir)
                    }, true)
                }
            }, {
                key: "renameItem",
                value: function(item, name) {
                    var _this3 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this3._renameItemCore(item, name)
                    })
                }
            }, {
                key: "_renameItemCore",
                value: function(item, name) {
                    if (!item) {
                        return
                    }
                    var dataItem = this._findDataObject(item);
                    this._nameSetter(dataItem, name);
                    item.name = name;
                    item.key = this._ensureDataObjectKey(dataItem)
                }
            }, {
                key: "createDirectory",
                value: function(parentDir, name) {
                    var _this4 = this;
                    return this._executeActionAsDeferred(function() {
                        _this4._validateDirectoryExists(parentDir);
                        _this4._createDataObject(parentDir, name, true)
                    })
                }
            }, {
                key: "deleteItems",
                value: function(items) {
                    var _this5 = this;
                    return items.map(function(item) {
                        return _this5._executeActionAsDeferred(function() {
                            return _this5._deleteItem(item)
                        })
                    })
                }
            }, {
                key: "moveItems",
                value: function(items, destinationDir) {
                    var _this6 = this;
                    var destinationDataItem = this._findDataObject(destinationDir);
                    var array = this._getDirectoryDataItems(destinationDataItem);
                    var deferreds = items.map(function(item) {
                        return _this6._executeActionAsDeferred(function() {
                            _this6._checkAbilityToMoveOrCopyItem(item, destinationDir);
                            var dataItem = _this6._findDataObject(item);
                            _this6._deleteItem(item);
                            array.push(dataItem)
                        })
                    });
                    this._updateHasSubDirs(destinationDir);
                    return deferreds
                }
            }, {
                key: "copyItems",
                value: function(items, destinationDir) {
                    var _this7 = this;
                    var destinationDataItem = this._findDataObject(destinationDir);
                    var array = this._getDirectoryDataItems(destinationDataItem);
                    var deferreds = items.map(function(item) {
                        return _this7._executeActionAsDeferred(function() {
                            _this7._checkAbilityToMoveOrCopyItem(item, destinationDir);
                            var dataItem = _this7._findDataObject(item);
                            var copiedItem = _this7._createCopy(dataItem);
                            array.push(copiedItem)
                        })
                    });
                    this._updateHasSubDirs(destinationDir);
                    return deferreds
                }
            }, {
                key: "uploadFileChunk",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    var _this8 = this;
                    if (chunksInfo.chunkIndex > 0) {
                        return chunksInfo.customData.deferred
                    }
                    this._validateDirectoryExists(destinationDirectory);
                    var deferred = chunksInfo.customData.deferred = new _deferred.Deferred;
                    var reader = this._createFileReader();
                    reader.readAsDataURL(fileData);
                    reader.onload = function() {
                        var content = reader.result.split(",")[1];
                        var dataObj = _this8._createDataObject(destinationDirectory, fileData.name, false);
                        _this8._sizeSetter(dataObj, fileData.size);
                        _this8._dateModifiedSetter(dataObj, fileData.lastModifiedDate);
                        _this8._contentSetter(dataObj, content);
                        deferred.resolve()
                    };
                    reader.onerror = function(error) {
                        return deferred.reject(error)
                    };
                    return deferred
                }
            }, {
                key: "downloadItems",
                value: function(items) {
                    if (1 === items.length) {
                        this._downloadSingleFile(items[0])
                    } else {
                        this._downloadMultipleFiles(items)
                    }
                }
            }, {
                key: "_downloadSingleFile",
                value: function(file) {
                    var content = this._getFileContent(file);
                    var byteString = window.atob(content);
                    var arrayBuffer = new ArrayBuffer(byteString.length);
                    var array = new Uint8Array(arrayBuffer);
                    for (var i = 0; i < byteString.length; i++) {
                        array[i] = byteString.charCodeAt(i)
                    }
                    var blob = new window.Blob([arrayBuffer], {
                        type: "application/octet-stream"
                    });
                    _file_saver.fileSaver.saveAs(file.name, null, blob)
                }
            }, {
                key: "_downloadMultipleFiles",
                value: function(files) {
                    var _this9 = this;
                    var jsZip = getJSZip();
                    var zip = new jsZip;
                    files.forEach(function(file) {
                        return zip.file(file.name, _this9._getFileContent(file), {
                            base64: true
                        })
                    });
                    var options = {
                        type: "blob",
                        compression: "DEFLATE",
                        mimeType: "application/zip"
                    };
                    var deferred = new _deferred.Deferred;
                    if (zip.generateAsync) {
                        zip.generateAsync(options).then(deferred.resolve)
                    } else {
                        deferred.resolve(zip.generate(options))
                    }
                    deferred.done(function(blob) {
                        return _file_saver.fileSaver.saveAs("files.zip", null, blob)
                    })
                }
            }, {
                key: "_getFileContent",
                value: function(file) {
                    var dataItem = this._findDataObject(file);
                    return this._contentGetter(dataItem) || ""
                }
            }, {
                key: "_validateDirectoryExists",
                value: function(directoryInfo) {
                    if (!this._isFileItemExists(directoryInfo) || this._isDirGetter(directoryInfo.fileItem)) {
                        throw {
                            errorId: _errors3.default.DirectoryNotFound,
                            fileItem: directoryInfo
                        }
                    }
                }
            }, {
                key: "_checkAbilityToMoveOrCopyItem",
                value: function(item, destinationDir) {
                    var _this10 = this;
                    var dataItem = this._findDataObject(item);
                    var itemKey = this._getKeyFromDataObject(dataItem, item.parentPath);
                    var pathInfo = destinationDir.getFullPathInfo();
                    var currentPath = "";
                    pathInfo.forEach(function(info) {
                        currentPath = (0, _utils.pathCombine)(currentPath, info.name);
                        var pathKey = _this10._getDataObjectKey(info.key, currentPath);
                        if (pathKey === itemKey) {
                            throw {
                                errorId: _errors3.default.Other,
                                fileItem: item
                            }
                        }
                    })
                }
            }, {
                key: "_createDataObject",
                value: function(parentDir, name, isDirectory) {
                    var dataObj = {};
                    this._nameSetter(dataObj, name);
                    this._getIsDirSetter(dataObj, isDirectory);
                    this._keySetter(dataObj, String(new _guid2.default));
                    var parentDataItem = this._findDataObject(parentDir);
                    var array = this._getDirectoryDataItems(parentDataItem);
                    array.push(dataObj);
                    if (isDirectory) {
                        this._updateHasSubDirs(parentDir)
                    }
                    return dataObj
                }
            }, {
                key: "_createCopy",
                value: function(dataObj) {
                    var _this11 = this;
                    var copyObj = {};
                    this._nameSetter(copyObj, this._nameGetter(dataObj));
                    this._getIsDirSetter(copyObj, this._isDirGetter(dataObj));
                    var items = this._subFileItemsGetter(dataObj);
                    if (Array.isArray(items)) {
                        var itemsCopy = [];
                        items.forEach(function(childItem) {
                            var childCopy = _this11._createCopy(childItem);
                            itemsCopy.push(childCopy)
                        });
                        this._subFileItemsSetter(copyObj, itemsCopy)
                    }
                    return copyObj
                }
            }, {
                key: "_deleteItem",
                value: function(fileItem) {
                    var dataItem = this._findDataObject(fileItem);
                    var parentDirDataObj = this._findFileItemObj(fileItem.pathInfo);
                    var array = this._getDirectoryDataItems(parentDirDataObj);
                    var index = array.indexOf(dataItem);
                    array.splice(index, 1)
                }
            }, {
                key: "_getDirectoryDataItems",
                value: function(directoryDataObj) {
                    if (!directoryDataObj) {
                        return this._data
                    }
                    var dataItems = this._subFileItemsGetter(directoryDataObj);
                    if (!Array.isArray(dataItems)) {
                        dataItems = [];
                        this._subFileItemsSetter(directoryDataObj, dataItems)
                    }
                    return dataItems
                }
            }, {
                key: "_getItems",
                value: function(parentDir) {
                    this._validateDirectoryExists(parentDir);
                    var pathInfo = parentDir.getFullPathInfo();
                    var parentDirKey = pathInfo && pathInfo.length > 0 ? pathInfo[pathInfo.length - 1].key : null;
                    var dirFileObjects = this._data;
                    if (parentDirKey) {
                        var directoryEntry = this._findFileItemObj(pathInfo);
                        dirFileObjects = directoryEntry && this._subFileItemsGetter(directoryEntry) || []
                    }
                    this._ensureKeysForDuplicateNameItems(dirFileObjects);
                    return this._convertDataObjectsToFileItems(dirFileObjects, pathInfo)
                }
            }, {
                key: "_ensureKeysForDuplicateNameItems",
                value: function(dataObjects) {
                    var _this12 = this;
                    var names = {};
                    dataObjects.forEach(function(obj) {
                        var name = _this12._nameGetter(obj);
                        if (names[name]) {
                            _this12._ensureDataObjectKey(obj)
                        } else {
                            names[name] = true
                        }
                    })
                }
            }, {
                key: "_findDataObject",
                value: function(item) {
                    if (item.isRoot()) {
                        return null
                    }
                    var result = this._findFileItemObj(item.getFullPathInfo());
                    if (!result) {
                        throw {
                            errorId: item.isDirectory ? _errors3.default.DirectoryNotFound : _errors3.default.FileNotFound,
                            fileItem: item
                        }
                    }
                    return result
                }
            }, {
                key: "_findFileItemObj",
                value: function(pathInfo) {
                    var _this13 = this;
                    if (!Array.isArray(pathInfo)) {
                        pathInfo = []
                    }
                    var currentPath = "";
                    var fileItemObj = null;
                    var fileItemObjects = this._data;
                    var _loop = function(i) {
                        fileItemObj = (0, _array.find)(fileItemObjects, function(item) {
                            var hasCorrectFileItemType = _this13._isDirGetter(item) || i === pathInfo.length - 1;
                            return _this13._getKeyFromDataObject(item, currentPath) === pathInfo[i].key && _this13._nameGetter(item) === pathInfo[i].name && hasCorrectFileItemType
                        });
                        if (fileItemObj) {
                            currentPath = (0, _utils.pathCombine)(currentPath, _this13._nameGetter(fileItemObj));
                            fileItemObjects = _this13._subFileItemsGetter(fileItemObj)
                        }
                    };
                    for (var i = 0; i < pathInfo.length && (0 === i || fileItemObj); i++) {
                        _loop(i)
                    }
                    return fileItemObj
                }
            }, {
                key: "_getKeyFromDataObject",
                value: function(dataObj, defaultKeyPrefix) {
                    var key = this._keyGetter(dataObj);
                    var relativeName = (0, _utils.pathCombine)(defaultKeyPrefix, this._nameGetter(dataObj));
                    return this._getDataObjectKey(key, relativeName)
                }
            }, {
                key: "_getDataObjectKey",
                value: function(key, relativeName) {
                    return key ? key : relativeName
                }
            }, {
                key: "_ensureDataObjectKey",
                value: function(dataObj) {
                    var key = this._keyGetter(dataObj);
                    if (!key) {
                        key = String(new _guid2.default);
                        this._keySetter(dataObj, key)
                    }
                    return key
                }
            }, {
                key: "_updateHasSubDirs",
                value: function(dir) {
                    if (dir && !dir.isRoot()) {
                        var dataItem = this._findDataObject(dir);
                        dir.hasSubDirectories = this._hasSubDirs(dataItem)
                    }
                }
            }, {
                key: "_hasSubDirs",
                value: function(dataObj) {
                    var subItems = (0, _common.ensureDefined)(this._subFileItemsGetter(dataObj), []);
                    if (!Array.isArray(subItems)) {
                        return true
                    }
                    for (var i = 0; i < subItems.length; i++) {
                        if (true === this._isDirGetter(subItems[i])) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_getSetter",
                value: function(expr) {
                    return _type2.default.isFunction(expr) ? expr : (0, _data.compileSetter)(expr)
                }
            }, {
                key: "_isFileItemExists",
                value: function(fileItem) {
                    return fileItem.isDirectory && fileItem.isRoot() || !!this._findFileItemObj(fileItem.getFullPathInfo())
                }
            }, {
                key: "_createFileReader",
                value: function() {
                    return new window.FileReader
                }
            }]);
            return ObjectFileSystemProvider
        }(_provider_base2.default);

        function getJSZip() {
            if (!_jszip2.default) {
                throw _ui2.default.Error("E1041", "JSZip")
            }
            return _jszip2.default
        }
        module.exports = ObjectFileSystemProvider
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/file_management/remote_provider.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ajax = __webpack_require__( /*! ../core/utils/ajax */ 75);
        var _ajax2 = _interopRequireDefault(_ajax);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _guid = __webpack_require__( /*! ../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _provider_base = __webpack_require__( /*! ./provider_base */ 193);
        var _provider_base2 = _interopRequireDefault(_provider_base);
        var _data = __webpack_require__( /*! ../core/utils/data */ 20);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var window = (0, _window.getWindow)();
        var FILE_CHUNK_BLOB_NAME = "chunk";
        var RemoteFileSystemProvider = function(_FileSystemProviderBa) {
            _inherits(RemoteFileSystemProvider, _FileSystemProviderBa);
            var _super = _createSuper(RemoteFileSystemProvider);

            function RemoteFileSystemProvider(options) {
                var _this;
                _classCallCheck(this, RemoteFileSystemProvider);
                options = (0, _common.ensureDefined)(options, {});
                _this = _super.call(this, options);
                _this._endpointUrl = options.endpointUrl;
                _this._hasSubDirsGetter = (0, _data.compileGetter)(options.hasSubDirectoriesExpr || "hasSubDirectories");
                return _this
            }
            _createClass(RemoteFileSystemProvider, [{
                key: "getItems",
                value: function(parentDir) {
                    var _this2 = this;
                    var pathInfo = parentDir.getFullPathInfo();
                    return this._getEntriesByPath(pathInfo).then(function(result) {
                        return _this2._convertDataObjectsToFileItems(result.result, pathInfo)
                    })
                }
            }, {
                key: "renameItem",
                value: function(item, name) {
                    return this._executeRequest("Rename", {
                        pathInfo: item.getFullPathInfo(),
                        isDirectory: item.isDirectory,
                        name: name
                    })
                }
            }, {
                key: "createDirectory",
                value: function(parentDir, name) {
                    return this._executeRequest("CreateDir", {
                        pathInfo: parentDir.getFullPathInfo(),
                        name: name
                    }).done(function() {
                        if (parentDir && !parentDir.isRoot()) {
                            parentDir.hasSubDirectories = true
                        }
                    })
                }
            }, {
                key: "deleteItems",
                value: function(items) {
                    var _this3 = this;
                    return items.map(function(item) {
                        return _this3._executeRequest("Remove", {
                            pathInfo: item.getFullPathInfo(),
                            isDirectory: item.isDirectory
                        })
                    })
                }
            }, {
                key: "moveItems",
                value: function(items, destinationDirectory) {
                    var _this4 = this;
                    return items.map(function(item) {
                        return _this4._executeRequest("Move", {
                            sourcePathInfo: item.getFullPathInfo(),
                            sourceIsDirectory: item.isDirectory,
                            destinationPathInfo: destinationDirectory.getFullPathInfo()
                        })
                    })
                }
            }, {
                key: "copyItems",
                value: function(items, destinationFolder) {
                    var _this5 = this;
                    return items.map(function(item) {
                        return _this5._executeRequest("Copy", {
                            sourcePathInfo: item.getFullPathInfo(),
                            sourceIsDirectory: item.isDirectory,
                            destinationPathInfo: destinationFolder.getFullPathInfo()
                        })
                    })
                }
            }, {
                key: "uploadFileChunk",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    if (0 === chunksInfo.chunkIndex) {
                        chunksInfo.customData.uploadId = new _guid2.default
                    }
                    var args = {
                        destinationId: destinationDirectory.relativeName,
                        chunkMetadata: JSON.stringify({
                            UploadId: chunksInfo.customData.uploadId,
                            FileName: fileData.name,
                            Index: chunksInfo.chunkIndex,
                            TotalCount: chunksInfo.chunkCount,
                            FileSize: fileData.size
                        })
                    };
                    var formData = new window.FormData;
                    formData.append(FILE_CHUNK_BLOB_NAME, chunksInfo.chunkBlob);
                    formData.append("arguments", JSON.stringify(args));
                    formData.append("command", "UploadChunk");
                    var deferred = new _deferred.Deferred;
                    _ajax2.default.sendRequest({
                        url: this._endpointUrl,
                        method: "POST",
                        dataType: "json",
                        data: formData,
                        upload: {
                            onprogress: _common.noop,
                            onloadstart: _common.noop,
                            onabort: _common.noop
                        },
                        cache: false
                    }).done(function(result) {
                        !result.success && deferred.reject(result) || deferred.resolve()
                    }).fail(deferred.reject);
                    return deferred.promise()
                }
            }, {
                key: "abortFileUpload",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    return this._executeRequest("AbortUpload", {
                        uploadId: chunksInfo.customData.uploadId
                    })
                }
            }, {
                key: "downloadItems",
                value: function(items) {
                    var args = this._getDownloadArgs(items);
                    var $form = (0, _renderer2.default)("<form>").css({
                        display: "none"
                    }).attr({
                        method: "post",
                        action: args.url
                    });
                    ["command", "arguments"].forEach(function(name) {
                        (0, _renderer2.default)("<input>").attr({
                            type: "hidden",
                            name: name,
                            value: args[name]
                        }).appendTo($form)
                    });
                    $form.appendTo("body");
                    _events_engine2.default.trigger($form, "submit");
                    setTimeout(function() {
                        return $form.remove()
                    })
                }
            }, {
                key: "getItemsContent",
                value: function(items) {
                    var args = this._getDownloadArgs(items);
                    var formData = new window.FormData;
                    formData.append("command", args.command);
                    formData.append("arguments", args.arguments);
                    return _ajax2.default.sendRequest({
                        url: args.url,
                        method: "POST",
                        responseType: "arraybuffer",
                        data: formData,
                        upload: {
                            onprogress: _common.noop,
                            onloadstart: _common.noop,
                            onabort: _common.noop
                        },
                        cache: false
                    })
                }
            }, {
                key: "_getDownloadArgs",
                value: function(items) {
                    var pathInfoList = items.map(function(item) {
                        return item.getFullPathInfo()
                    });
                    var args = {
                        pathInfoList: pathInfoList
                    };
                    var argsStr = JSON.stringify(args);
                    return {
                        url: this._endpointUrl,
                        arguments: argsStr,
                        command: "Download"
                    }
                }
            }, {
                key: "_getItemsIds",
                value: function(items) {
                    return items.map(function(it) {
                        return it.relativeName
                    })
                }
            }, {
                key: "_getEntriesByPath",
                value: function(pathInfo) {
                    return this._executeRequest("GetDirContents", {
                        pathInfo: pathInfo
                    })
                }
            }, {
                key: "_executeRequest",
                value: function(command, args) {
                    var method = "GetDirContents" === command ? "GET" : "POST";
                    var deferred = new _deferred.Deferred;
                    _ajax2.default.sendRequest({
                        url: this._getEndpointUrl(command, args),
                        method: method,
                        dataType: "json",
                        cache: false
                    }).then(function(result) {
                        !result.success && deferred.reject(result) || deferred.resolve(result)
                    }, function(e) {
                        return deferred.reject(e)
                    });
                    return deferred.promise()
                }
            }, {
                key: "_getEndpointUrl",
                value: function(command, args) {
                    var queryString = this._getQueryString({
                        command: command,
                        arguments: JSON.stringify(args)
                    });
                    var separator = this._endpointUrl && this._endpointUrl.indexOf("?") > 0 ? "&" : "?";
                    return this._endpointUrl + separator + queryString
                }
            }, {
                key: "_getQueryString",
                value: function(params) {
                    var pairs = [];
                    var keys = Object.keys(params);
                    for (var i = 0; i < keys.length; i++) {
                        var key = keys[i];
                        var value = params[key];
                        if (void 0 === value) {
                            continue
                        }
                        if (null === value) {
                            value = ""
                        }
                        if (Array.isArray(value)) {
                            this._processQueryStringArrayParam(key, value, pairs)
                        } else {
                            var pair = this._getQueryStringPair(key, value);
                            pairs.push(pair)
                        }
                    }
                    return pairs.join("&")
                }
            }, {
                key: "_processQueryStringArrayParam",
                value: function(key, array, pairs) {
                    var _this6 = this;
                    (0, _iterator.each)(array, function(_, item) {
                        var pair = _this6._getQueryStringPair(key, item);
                        pairs.push(pair)
                    })
                }
            }, {
                key: "_getQueryStringPair",
                value: function(key, value) {
                    return encodeURIComponent(key) + "=" + encodeURIComponent(value)
                }
            }, {
                key: "_hasSubDirs",
                value: function(dataObj) {
                    var hasSubDirs = this._hasSubDirsGetter(dataObj);
                    return "boolean" === typeof hasSubDirs ? hasSubDirs : true
                }
            }, {
                key: "_getKeyExpr",
                value: function(options) {
                    return options.keyExpr || "key"
                }
            }]);
            return RemoteFileSystemProvider
        }(_provider_base2.default);
        module.exports = RemoteFileSystemProvider
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/file_management/custom_provider.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _data = __webpack_require__( /*! ../core/utils/data */ 20);
        var _provider_base = __webpack_require__( /*! ./provider_base */ 193);
        var _provider_base2 = _interopRequireDefault(_provider_base);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var CustomFileSystemProvider = function(_FileSystemProviderBa) {
            _inherits(CustomFileSystemProvider, _FileSystemProviderBa);
            var _super = _createSuper(CustomFileSystemProvider);

            function CustomFileSystemProvider(options) {
                var _this;
                _classCallCheck(this, CustomFileSystemProvider);
                options = (0, _common.ensureDefined)(options, {});
                _this = _super.call(this, options);
                _this._hasSubDirsGetter = (0, _data.compileGetter)(options.hasSubDirectoriesExpr || "hasSubDirectories");
                _this._getItemsFunction = _this._ensureFunction(options.getItems, function() {
                    return []
                });
                _this._renameItemFunction = _this._ensureFunction(options.renameItem);
                _this._createDirectoryFunction = _this._ensureFunction(options.createDirectory);
                _this._deleteItemFunction = _this._ensureFunction(options.deleteItem);
                _this._moveItemFunction = _this._ensureFunction(options.moveItem);
                _this._copyItemFunction = _this._ensureFunction(options.copyItem);
                _this._uploadFileChunkFunction = _this._ensureFunction(options.uploadFileChunk);
                _this._abortFileUploadFunction = _this._ensureFunction(options.abortFileUpload);
                _this._downloadItemsFunction = _this._ensureFunction(options.downloadItems);
                _this._getItemsContentFunction = _this._ensureFunction(options.getItemsContent);
                return _this
            }
            _createClass(CustomFileSystemProvider, [{
                key: "getItems",
                value: function(parentDir) {
                    var _this2 = this;
                    var pathInfo = parentDir.getFullPathInfo();
                    return this._executeActionAsDeferred(function() {
                        return _this2._getItemsFunction(parentDir)
                    }, true).then(function(dataItems) {
                        return _this2._convertDataObjectsToFileItems(dataItems, pathInfo)
                    })
                }
            }, {
                key: "renameItem",
                value: function(item, name) {
                    var _this3 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this3._renameItemFunction(item, name)
                    })
                }
            }, {
                key: "createDirectory",
                value: function(parentDir, name) {
                    var _this4 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this4._createDirectoryFunction(parentDir, name)
                    })
                }
            }, {
                key: "deleteItems",
                value: function(items) {
                    var _this5 = this;
                    return items.map(function(item) {
                        return _this5._executeActionAsDeferred(function() {
                            return _this5._deleteItemFunction(item)
                        })
                    })
                }
            }, {
                key: "moveItems",
                value: function(items, destinationDirectory) {
                    var _this6 = this;
                    return items.map(function(item) {
                        return _this6._executeActionAsDeferred(function() {
                            return _this6._moveItemFunction(item, destinationDirectory)
                        })
                    })
                }
            }, {
                key: "copyItems",
                value: function(items, destinationFolder) {
                    var _this7 = this;
                    return items.map(function(item) {
                        return _this7._executeActionAsDeferred(function() {
                            return _this7._copyItemFunction(item, destinationFolder)
                        })
                    })
                }
            }, {
                key: "uploadFileChunk",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    var _this8 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this8._uploadFileChunkFunction(fileData, chunksInfo, destinationDirectory)
                    })
                }
            }, {
                key: "abortFileUpload",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    var _this9 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this9._abortFileUploadFunction(fileData, chunksInfo, destinationDirectory)
                    })
                }
            }, {
                key: "downloadItems",
                value: function(items) {
                    return this._downloadItemsFunction(items)
                }
            }, {
                key: "getItemsContent",
                value: function(items) {
                    var _this10 = this;
                    return this._executeActionAsDeferred(function() {
                        return _this10._getItemsContentFunction(items)
                    })
                }
            }, {
                key: "_hasSubDirs",
                value: function(dataObj) {
                    var hasSubDirs = this._hasSubDirsGetter(dataObj);
                    return "boolean" === typeof hasSubDirs ? hasSubDirs : true
                }
            }, {
                key: "_getKeyExpr",
                value: function(options) {
                    return options.keyExpr || "key"
                }
            }, {
                key: "_ensureFunction",
                value: function(functionObject, defaultFunction) {
                    defaultFunction = defaultFunction || _common.noop;
                    return (0, _type.isFunction)(functionObject) ? functionObject : defaultFunction
                }
            }]);
            return CustomFileSystemProvider
        }(_provider_base2.default);
        module.exports = CustomFileSystemProvider
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel_creator.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _class = __webpack_require__( /*! ../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _ui = __webpack_require__( /*! ../ui/widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _string = __webpack_require__( /*! ../core/utils/string */ 43);
        var _string2 = _interopRequireDefault(_string);
        var _jszip = __webpack_require__( /*! jszip */ 296);
        var _jszip2 = _interopRequireDefault(_jszip);
        var _file_saver = __webpack_require__( /*! ./file_saver */ 176);
        var _file_saver2 = _interopRequireDefault(_file_saver);
        var _excel_format_converter = __webpack_require__( /*! ./excel_format_converter */ 186);
        var _excel_format_converter2 = _interopRequireDefault(_excel_format_converter);
        var _excel = __webpack_require__( /*! ./excel/excel.file */ 457);
        var _excel2 = _interopRequireDefault(_excel);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var XML_TAG = '<?xml version="1.0" encoding="utf-8"?>';
        var GROUP_SHEET_PR_XML = '<sheetPr><outlinePr summaryBelow="0"/></sheetPr>';
        var SINGLE_SHEET_PR_XML = "<sheetPr/>";
        var BASE_STYLE_XML2 = '<borders count="1"><border><left style="thin"><color rgb="FFD3D3D3"/></left><right style="thin"><color rgb="FFD3D3D3"/></right><top style="thin"><color rgb="FFD3D3D3"/></top><bottom style="thin"><color rgb="FFD3D3D3"/></bottom></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>';
        var OPEN_XML_FORMAT_URL = "http://schemas.openxmlformats.org";
        var RELATIONSHIP_PART_NAME = "rels";
        var XL_FOLDER_NAME = "xl";
        var WORKBOOK_FILE_NAME = "workbook.xml";
        var CONTENTTYPES_FILE_NAME = "[Content_Types].xml";
        var SHAREDSTRING_FILE_NAME = "sharedStrings.xml";
        var STYLE_FILE_NAME = "styles.xml";
        var WORKSHEETS_FOLDER = "worksheets";
        var WORKSHEET_FILE_NAME = "sheet1.xml";
        var WORKSHEET_HEADER_XML = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">';
        var VALID_TYPES = {
            "boolean": "b",
            date: "d",
            number: "n",
            string: "s"
        };
        var EXCEL_START_TIME = Date.UTC(1899, 11, 30);
        var DAYS_COUNT_BEFORE_29_FEB_1900 = 60;
        var MAX_DIGIT_WIDTH_IN_PIXELS = 7;
        var UNSUPPORTED_FORMAT_MAPPING = {
            quarter: "shortDate",
            quarterAndYear: "shortDate",
            minute: "longTime",
            millisecond: "longTime"
        };
        var ExcelCreator = _class2.default.inherit({
            _getXMLTag: function(tagName, attributes, content) {
                var result = "<" + tagName;
                var i;
                var length = attributes.length;
                var attr;
                for (i = 0; i < length; i++) {
                    attr = attributes[i];
                    if (void 0 !== attr.value) {
                        result = result + " " + attr.name + '="' + attr.value + '"'
                    }
                }
                return (0, _type.isDefined)(content) ? result + ">" + content + "</" + tagName + ">" : result + " />"
            },
            _convertToExcelCellRef: function(zeroBasedRowIndex, zeroBasedCellIndex) {
                var columnName = "";
                var max = 26;
                var charCode;
                var isCellIndexFound;
                while (!isCellIndexFound) {
                    charCode = 65 + (zeroBasedCellIndex >= max ? zeroBasedCellIndex % max : Math.ceil(zeroBasedCellIndex));
                    columnName = String.fromCharCode(charCode) + columnName;
                    if (zeroBasedCellIndex >= max) {
                        zeroBasedCellIndex = Math.floor(zeroBasedCellIndex / max) - 1
                    } else {
                        isCellIndexFound = true
                    }
                }
                return columnName + (zeroBasedRowIndex + 1)
            },
            _convertToExcelCellRefAndTrackMaxIndex: function(rowIndex, cellIndex) {
                if (this._maxRowIndex < Number(rowIndex)) {
                    this._maxRowIndex = Number(rowIndex)
                }
                if (this._maxColumnIndex < Number(cellIndex)) {
                    this._maxColumnIndex = Number(cellIndex)
                }
                return this._convertToExcelCellRef(rowIndex, cellIndex)
            },
            _getDataType: function(dataType) {
                return VALID_TYPES[dataType] || VALID_TYPES.string
            },
            _tryGetExcelCellDataType: function(object) {
                if ((0, _type.isDefined)(object)) {
                    if ("number" === typeof object) {
                        if (isFinite(object)) {
                            return VALID_TYPES.number
                        } else {
                            return VALID_TYPES.string
                        }
                    } else {
                        if ((0, _type.isString)(object)) {
                            return VALID_TYPES.string
                        } else {
                            if ((0, _type.isDate)(object)) {
                                return VALID_TYPES.number
                            } else {
                                if ((0, _type.isBoolean)(object)) {
                                    return VALID_TYPES.boolean
                                }
                            }
                        }
                    }
                }
            },
            _formatObjectConverter: function(format, dataType) {
                var result = {
                    format: format,
                    precision: format && format.precision,
                    dataType: dataType
                };
                if ((0, _type.isObject)(format)) {
                    return (0, _extend.extend)(result, format, {
                        format: format.formatter || format.type,
                        currency: format.currency
                    })
                }
                return result
            },
            _tryConvertToExcelNumberFormat: function(format, dataType) {
                var newFormat = this._formatObjectConverter(format, dataType);
                format = newFormat.format;
                var currency = newFormat.currency;
                dataType = newFormat.dataType;
                if ((0, _type.isDefined)(format) && "date" === dataType) {
                    format = UNSUPPORTED_FORMAT_MAPPING[format && format.type || format] || format
                }
                return _excel_format_converter2.default.convertFormat(format, newFormat.precision, dataType, currency)
            },
            _appendString: function(value) {
                if ((0, _type.isDefined)(value)) {
                    value = String(value);
                    if (value.length) {
                        value = _string2.default.encodeHtml(value);
                        if (void 0 === this._stringHash[value]) {
                            this._stringHash[value] = this._stringArray.length;
                            this._stringArray.push(value)
                        }
                        return this._stringHash[value]
                    }
                }
            },
            _tryGetExcelDateValue: function(date) {
                var days;
                var totalTime;
                if ((0, _type.isDate)(date)) {
                    days = Math.floor((Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - EXCEL_START_TIME) / 864e5);
                    if (days < DAYS_COUNT_BEFORE_29_FEB_1900) {
                        days--
                    }
                    totalTime = (3600 * date.getHours() + 60 * date.getMinutes() + date.getSeconds()) / 86400;
                    return days + totalTime
                }
            },
            _prepareValue: function(rowIndex, cellIndex) {
                var dataProvider = this._dataProvider;
                var _ref = dataProvider.getCellData(rowIndex, cellIndex) || {},
                    cellSourceData = _ref.cellSourceData;
                var _ref2 = dataProvider.getCellData(rowIndex, cellIndex) || {},
                    value = _ref2.value;
                var sourceValue;
                var type = this._getDataType(dataProvider.getCellType(rowIndex, cellIndex));
                if (type === VALID_TYPES.date && !(0, _type.isDate)(value)) {
                    type = VALID_TYPES.string
                }
                switch (type) {
                    case VALID_TYPES.string:
                        sourceValue = value;
                        value = this._appendString(value);
                        break;
                    case VALID_TYPES.date:
                        sourceValue = value;
                        value = this._tryGetExcelDateValue(value);
                        type = VALID_TYPES.number
                }
                return {
                    value: value,
                    type: type,
                    sourceValue: sourceValue,
                    cellSourceData: cellSourceData
                }
            },
            _callCustomizeExcelCell: function(_ref3) {
                var dataProvider = _ref3.dataProvider,
                    value = _ref3.value,
                    style = _ref3.style,
                    sourceData = _ref3.sourceData;
                var styleCopy = _excel2.default.copyCellFormat(style);
                var args = {
                    value: value,
                    numberFormat: styleCopy.numberFormat,
                    clearStyle: function() {
                        this.horizontalAlignment = null;
                        this.verticalAlignment = null;
                        this.wrapTextEnabled = null;
                        this.font = null;
                        this.numberFormat = null
                    }
                };
                if ((0, _type.isDefined)(styleCopy)) {
                    if ((0, _type.isDefined)(styleCopy.alignment)) {
                        args.horizontalAlignment = styleCopy.alignment.horizontal;
                        args.verticalAlignment = styleCopy.alignment.vertical;
                        args.wrapTextEnabled = styleCopy.alignment.wrapText
                    }
                    args.backgroundColor = styleCopy.backgroundColor;
                    args.fillPatternType = styleCopy.fillPatternType;
                    args.fillPatternColor = styleCopy.fillPatternColor;
                    args.font = styleCopy.font
                }
                dataProvider.customizeExcelCell(args, sourceData);
                var newStyle = styleCopy || {};
                newStyle.font = args.font;
                newStyle.alignment = newStyle.alignment || {};
                newStyle.alignment.horizontal = args.horizontalAlignment;
                newStyle.alignment.vertical = args.verticalAlignment;
                newStyle.alignment.wrapText = args.wrapTextEnabled;
                newStyle.backgroundColor = args.backgroundColor;
                newStyle.fillPatternType = args.fillPatternType;
                newStyle.fillPatternColor = args.fillPatternColor;
                newStyle.numberFormat = args.numberFormat;
                return {
                    value: args.value,
                    style: newStyle
                }
            },
            _getDataArray: function() {
                var that = this;
                var rowIndex;
                var cellIndex;
                var cellsArray;
                var cellData;
                var result = [];
                var dataProvider = that._dataProvider;
                var rowsLength = dataProvider.getRowsCount();
                var columns = dataProvider.getColumns();
                var cellsLength;
                for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {
                    cellsArray = [];
                    cellsLength = columns.length;
                    for (cellIndex = 0; cellIndex !== cellsLength; cellIndex++) {
                        cellData = that._prepareValue(rowIndex, cellIndex);
                        var styleArrayIndex = dataProvider.getStyleId(rowIndex, cellIndex);
                        var cellStyleId = this._styleArrayIndexToCellStyleIdMap[styleArrayIndex];
                        if (dataProvider.hasCustomizeExcelCell && dataProvider.hasCustomizeExcelCell()) {
                            var value = cellData.sourceValue || cellData.value;
                            var modifiedExcelCell = this._callCustomizeExcelCell({
                                dataProvider: dataProvider,
                                value: value,
                                style: that._styleArray[styleArrayIndex],
                                sourceData: cellData.cellSourceData
                            });
                            if (modifiedExcelCell.value !== value) {
                                if (_typeof(modifiedExcelCell.value) !== _typeof(value) || "number" === typeof modifiedExcelCell.value && !isFinite(modifiedExcelCell.value)) {
                                    var cellDataType = this._tryGetExcelCellDataType(modifiedExcelCell.value);
                                    if ((0, _type.isDefined)(cellDataType)) {
                                        cellData.type = cellDataType
                                    }
                                }
                                switch (cellData.type) {
                                    case VALID_TYPES.string:
                                        cellData.value = this._appendString(modifiedExcelCell.value);
                                        break;
                                    case VALID_TYPES.date:
                                        cellData.value = modifiedExcelCell.value;
                                        break;
                                    case VALID_TYPES.number:
                                        var newValue = modifiedExcelCell.value;
                                        var excelDateValue = this._tryGetExcelDateValue(newValue);
                                        if ((0, _type.isDefined)(excelDateValue)) {
                                            newValue = excelDateValue
                                        }
                                        cellData.value = newValue;
                                        break;
                                    default:
                                        cellData.value = modifiedExcelCell.value
                                }
                            }
                            cellStyleId = this._excelFile.registerCellFormat(modifiedExcelCell.style)
                        }
                        cellsArray.push({
                            style: cellStyleId,
                            value: cellData.value,
                            type: cellData.type
                        })
                    }
                    if (!that._needSheetPr && dataProvider.getGroupLevel(rowIndex) > 0) {
                        that._needSheetPr = true
                    }
                    result.push(cellsArray)
                }
                return result
            },
            _calculateWidth: function(pixelsWidth) {
                pixelsWidth = parseInt(pixelsWidth, 10);
                if (!pixelsWidth || pixelsWidth < 5) {
                    pixelsWidth = 100
                }
                return Math.min(255, Math.floor((pixelsWidth - 5) / MAX_DIGIT_WIDTH_IN_PIXELS * 100 + .5) / 100)
            },
            _prepareStyleData: function() {
                var _this = this;
                var that = this;
                var styles = that._dataProvider.getStyles();
                that._dataProvider.getColumns().forEach(function(column) {
                    that._colsArray.push(that._calculateWidth(column.width))
                });
                var fonts = [{
                    size: 11,
                    color: {
                        theme: 1
                    },
                    name: "Calibri",
                    family: 2,
                    scheme: "minor",
                    bold: false
                }, {
                    size: 11,
                    color: {
                        theme: 1
                    },
                    name: "Calibri",
                    family: 2,
                    scheme: "minor",
                    bold: true
                }];
                this._excelFile.registerFont(fonts[0]);
                this._excelFile.registerFont(fonts[1]);
                styles.forEach(function(style) {
                    var numberFormat = that._tryConvertToExcelNumberFormat(style.format, style.dataType);
                    if (!(0, _type.isDefined)(numberFormat)) {
                        numberFormat = 0
                    }
                    that._styleArray.push({
                        font: fonts[Number(!!style.bold)],
                        numberFormat: numberFormat,
                        alignment: {
                            vertical: "top",
                            wrapText: !!style.wrapText,
                            horizontal: style.alignment || "left"
                        }
                    })
                });
                that._styleArrayIndexToCellStyleIdMap = that._styleArray.map(function(item) {
                    return _this._excelFile.registerCellFormat(item)
                })
            },
            _prepareCellData: function() {
                this._cellsArray = this._getDataArray()
            },
            _createXMLRelationships: function(xmlRelationships) {
                return this._getXMLTag("Relationships", [{
                    name: "xmlns",
                    value: OPEN_XML_FORMAT_URL + "/package/2006/relationships"
                }], xmlRelationships)
            },
            _createXMLRelationship: function(id, type, target) {
                return this._getXMLTag("Relationship", [{
                    name: "Id",
                    value: "rId" + id
                }, {
                    name: "Type",
                    value: OPEN_XML_FORMAT_URL + "/officeDocument/2006/relationships/" + type
                }, {
                    name: "Target",
                    value: target
                }])
            },
            _getWorkbookContent: function() {
                var content = '<bookViews><workbookView xWindow="0" yWindow="0" windowWidth="0" windowHeight="0"/></bookViews><sheets><sheet name="Sheet" sheetId="1" r:id="rId1" /></sheets><definedNames><definedName name="_xlnm.Print_Titles" localSheetId="0">Sheet!$1:$1</definedName><definedName name="_xlnm._FilterDatabase" hidden="0" localSheetId="0">Sheet!$A$1:$F$6332</definedName></definedNames>';
                return XML_TAG + this._getXMLTag("workbook", [{
                    name: "xmlns:r",
                    value: OPEN_XML_FORMAT_URL + "/officeDocument/2006/relationships"
                }, {
                    name: "xmlns",
                    value: OPEN_XML_FORMAT_URL + "/spreadsheetml/2006/main"
                }], content)
            },
            _getContentTypesContent: function() {
                return XML_TAG + '<Types xmlns="' + OPEN_XML_FORMAT_URL + '/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Default Extension="xml" ContentType="application/xml" /><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /><Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" /><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /></Types>'
            },
            _generateStylesXML: function() {
                var that = this;
                var folder = that._zip.folder(XL_FOLDER_NAME);
                var XML = "";
                XML += this._excelFile.generateNumberFormatsXml();
                XML += this._excelFile.generateFontsXml();
                XML += this._excelFile.generateFillsXml();
                XML += BASE_STYLE_XML2;
                XML += this._excelFile.generateCellFormatsXml();
                XML += that._getXMLTag("cellStyles", [{
                    name: "count",
                    value: 1
                }], that._getXMLTag("cellStyle", [{
                    name: "name",
                    value: "Normal"
                }, {
                    name: "xfId",
                    value: 0
                }, {
                    name: "builtinId",
                    value: 0
                }]));
                XML = XML_TAG + that._getXMLTag("styleSheet", [{
                    name: "xmlns",
                    value: OPEN_XML_FORMAT_URL + "/spreadsheetml/2006/main"
                }], XML);
                folder.file(STYLE_FILE_NAME, XML);
                that._styleArray = []
            },
            _generateStringsXML: function() {
                var folder = this._zip.folder(XL_FOLDER_NAME);
                var stringIndex;
                var stringsLength = this._stringArray.length;
                var sharedStringXml = XML_TAG;
                for (stringIndex = 0; stringIndex < stringsLength; stringIndex++) {
                    this._stringArray[stringIndex] = this._getXMLTag("si", [], this._getXMLTag("t", [], this._stringArray[stringIndex]))
                }
                sharedStringXml += this._getXMLTag("sst", [{
                    name: "xmlns",
                    value: OPEN_XML_FORMAT_URL + "/spreadsheetml/2006/main"
                }, {
                    name: "count",
                    value: this._stringArray.length
                }, {
                    name: "uniqueCount",
                    value: this._stringArray.length
                }], this._stringArray.join(""));
                folder.file(SHAREDSTRING_FILE_NAME, sharedStringXml);
                this._stringArray = []
            },
            _getPaneXML: function() {
                var attributes = [{
                    name: "activePane",
                    value: "bottomLeft"
                }, {
                    name: "state",
                    value: "frozen"
                }];
                var frozenArea = this._dataProvider.getFrozenArea();
                if (!(frozenArea.x || frozenArea.y)) {
                    return ""
                }
                if (frozenArea.x) {
                    attributes.push({
                        name: "xSplit",
                        value: frozenArea.x
                    })
                }
                if (frozenArea.y) {
                    attributes.push({
                        name: "ySplit",
                        value: frozenArea.y
                    })
                }
                attributes.push({
                    name: "topLeftCell",
                    value: this._convertToExcelCellRefAndTrackMaxIndex(frozenArea.y, frozenArea.x)
                });
                return this._getXMLTag("pane", attributes)
            },
            _getAutoFilterXML: function(maxCellIndex) {
                if (this._options.autoFilterEnabled) {
                    return '<autoFilter ref="A' + this._dataProvider.getHeaderRowCount() + ":" + maxCellIndex + '" />'
                }
                return ""
            },
            _getIgnoredErrorsXML: function(maxCellIndex) {
                if (this._options.ignoreErrors) {
                    return '<ignoredErrors><ignoredError sqref="A1:' + maxCellIndex + '" numberStoredAsText="1" /></ignoredErrors>'
                }
                return ""
            },
            _generateWorksheetXML: function() {
                var colIndex;
                var rowIndex;
                var cellData;
                var xmlCells;
                var xmlRows = [];
                var rowsLength = this._cellsArray.length;
                var cellsLength;
                var colsLength = this._colsArray.length;
                var rSpans = "1:" + colsLength;
                var headerRowCount = this._dataProvider.getHeaderRowCount ? this._dataProvider.getHeaderRowCount() : 1;
                var xmlResult = [WORKSHEET_HEADER_XML];
                xmlResult.push(this._needSheetPr ? GROUP_SHEET_PR_XML : SINGLE_SHEET_PR_XML);
                xmlResult.push('<dimension ref="A1:C1"/>');
                xmlResult.push("<sheetViews><sheetView ");
                xmlResult.push(this._rtlEnabled ? 'rightToLeft="1" ' : "");
                xmlResult.push('tabSelected="1" workbookViewId="0">');
                xmlResult.push(this._getPaneXML());
                xmlResult.push("</sheetView></sheetViews>");
                xmlResult.push('<sheetFormatPr defaultRowHeight="15"');
                xmlResult.push(' outlineLevelRow="' + (this._dataProvider.getRowsCount() > 0 ? this._dataProvider.getGroupLevel(0) : 0) + '"');
                xmlResult.push(' x14ac:dyDescent="0.25"/>');
                for (colIndex = 0; colIndex < colsLength; colIndex++) {
                    this._colsArray[colIndex] = this._getXMLTag("col", [{
                        name: "width",
                        value: this._colsArray[colIndex]
                    }, {
                        name: "min",
                        value: Number(colIndex) + 1
                    }, {
                        name: "max",
                        value: Number(colIndex) + 1
                    }, {
                        name: "customWidth",
                        value: 1
                    }])
                }
                xmlResult.push(this._getXMLTag("cols", [], this._colsArray.join("")) + "<sheetData>");
                for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {
                    xmlCells = [];
                    cellsLength = this._cellsArray[rowIndex].length;
                    for (colIndex = 0; colIndex < cellsLength; colIndex++) {
                        rowIndex = Number(rowIndex);
                        cellData = this._cellsArray[rowIndex][colIndex];
                        xmlCells.push(this._getXMLTag("c", [{
                            name: "r",
                            value: this._convertToExcelCellRefAndTrackMaxIndex(rowIndex, colIndex)
                        }, {
                            name: "s",
                            value: cellData.style
                        }, {
                            name: "t",
                            value: cellData.type
                        }], (0, _type.isDefined)(cellData.value) ? this._getXMLTag("v", [], cellData.value) : null))
                    }
                    xmlRows.push(this._getXMLTag("row", [{
                        name: "r",
                        value: Number(rowIndex) + 1
                    }, {
                        name: "spans",
                        value: rSpans
                    }, {
                        name: "outlineLevel",
                        value: rowIndex >= headerRowCount ? this._dataProvider.getGroupLevel(rowIndex) : 0
                    }, {
                        name: "x14ac:dyDescent",
                        value: "0.25"
                    }], xmlCells.join("")));
                    this._cellsArray[rowIndex] = null;
                    if (xmlRows.length > 1e4) {
                        xmlResult.push(xmlRows.join(""));
                        xmlRows = []
                    }
                }
                xmlResult.push(xmlRows.join(""));
                xmlRows = [];
                var rightBottomCellRef = this._convertToExcelCellRef(this._maxRowIndex, this._maxColumnIndex);
                xmlResult.push("</sheetData>" + this._getAutoFilterXML(rightBottomCellRef) + this._generateMergingXML() + this._getIgnoredErrorsXML(rightBottomCellRef) + "</worksheet>");
                this._zip.folder(XL_FOLDER_NAME).folder(WORKSHEETS_FOLDER).file(WORKSHEET_FILE_NAME, xmlResult.join(""));
                this._colsArray = [];
                this._cellsArray = [];
                xmlResult = []
            },
            _generateMergingXML: function() {
                var k;
                var l;
                var cellIndex;
                var rowIndex;
                var rowsLength = (0, _type.isDefined)(this._dataProvider.getHeaderRowCount) ? this._dataProvider.getHeaderRowCount() : this._dataProvider.getRowsCount();
                var columnsLength = this._dataProvider.getColumns().length;
                var usedArea = [];
                var mergeArray = [];
                var mergeIndex;
                var mergeXML = "";
                for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {
                    for (cellIndex = 0; cellIndex !== columnsLength; cellIndex++) {
                        if (!(0, _type.isDefined)(usedArea[rowIndex]) || !(0, _type.isDefined)(usedArea[rowIndex][cellIndex])) {
                            var cellMerge = this._dataProvider.getCellMerging(rowIndex, cellIndex);
                            if (cellMerge.colspan || cellMerge.rowspan) {
                                mergeArray.push({
                                    start: this._convertToExcelCellRefAndTrackMaxIndex(rowIndex, cellIndex),
                                    end: this._convertToExcelCellRefAndTrackMaxIndex(rowIndex + (cellMerge.rowspan || 0), cellIndex + (cellMerge.colspan || 0))
                                });
                                for (k = rowIndex; k <= rowIndex + cellMerge.rowspan || 0; k++) {
                                    for (l = cellIndex; l <= cellIndex + cellMerge.colspan || 0; l++) {
                                        if (!(0, _type.isDefined)(usedArea[k])) {
                                            usedArea[k] = []
                                        }
                                        usedArea[k][l] = true
                                    }
                                }
                            }
                        }
                    }
                }
                var mergeArrayLength = mergeArray.length;
                for (mergeIndex = 0; mergeIndex < mergeArrayLength; mergeIndex++) {
                    mergeXML += this._getXMLTag("mergeCell", [{
                        name: "ref",
                        value: mergeArray[mergeIndex].start + ":" + mergeArray[mergeIndex].end
                    }])
                }
                return mergeXML.length ? this._getXMLTag("mergeCells", [{
                    name: "count",
                    value: mergeArrayLength
                }], mergeXML) : ""
            },
            _generateCommonXML: function() {
                var relsFileContent = XML_TAG + this._createXMLRelationships(this._createXMLRelationship(1, "officeDocument", "xl/" + WORKBOOK_FILE_NAME));
                var folder = this._zip.folder(XL_FOLDER_NAME);
                var relsXML = XML_TAG;
                this._zip.folder("_" + RELATIONSHIP_PART_NAME).file("." + RELATIONSHIP_PART_NAME, relsFileContent);
                var xmlRelationships = this._createXMLRelationship(1, "worksheet", "worksheets/" + WORKSHEET_FILE_NAME) + this._createXMLRelationship(2, "styles", STYLE_FILE_NAME) + this._createXMLRelationship(3, "sharedStrings", SHAREDSTRING_FILE_NAME);
                relsXML += this._createXMLRelationships(xmlRelationships);
                folder.folder("_" + RELATIONSHIP_PART_NAME).file(WORKBOOK_FILE_NAME + ".rels", relsXML);
                folder.file(WORKBOOK_FILE_NAME, this._getWorkbookContent());
                this._zip.file(CONTENTTYPES_FILE_NAME, this._getContentTypesContent())
            },
            _generateContent: function() {
                this._prepareStyleData();
                this._prepareCellData();
                this._generateWorkXML();
                this._generateCommonXML()
            },
            _generateWorkXML: function() {
                this._generateStylesXML();
                this._generateStringsXML();
                this._generateWorksheetXML()
            },
            ctor: function(dataProvider, options) {
                this._rtlEnabled = options && !!options.rtlEnabled;
                this._options = options;
                this._maxRowIndex = 0;
                this._maxColumnIndex = 0;
                this._stringArray = [];
                this._stringHash = {};
                this._styleArray = [];
                this._colsArray = [];
                this._cellsArray = [];
                this._needSheetPr = false;
                this._dataProvider = dataProvider;
                this._excelFile = new _excel2.default;
                if ((0, _type.isDefined)(ExcelCreator.JSZip)) {
                    this._zip = new ExcelCreator.JSZip
                } else {
                    this._zip = null
                }
            },
            _checkZipState: function() {
                if (!this._zip) {
                    throw _ui2.default.Error("E1041", "JSZip")
                }
            },
            ready: function() {
                return this._dataProvider.ready()
            },
            getData: function(isBlob) {
                var options = {
                    type: isBlob ? "blob" : "base64",
                    compression: "DEFLATE",
                    mimeType: _file_saver2.default.MIME_TYPES.EXCEL
                };
                var deferred = new _deferred.Deferred;
                this._checkZipState();
                this._generateContent();
                if (this._zip.generateAsync) {
                    this._zip.generateAsync(options).then(deferred.resolve)
                } else {
                    deferred.resolve(this._zip.generate(options))
                }
                return deferred
            }
        });
        ExcelCreator.JSZip = _jszip2.default;
        exports.ExcelCreator = ExcelCreator;
        exports.getData = function(data, options) {
            var excelCreator = new exports.ExcelCreator(data, options);
            excelCreator._checkZipState();
            return excelCreator.ready().then(function() {
                return excelCreator.getData((0, _type.isFunction)((0, _window.getWindow)().Blob))
            })
        };
        exports.__internals = {
            CONTENTTYPES_FILE_NAME: CONTENTTYPES_FILE_NAME,
            RELATIONSHIP_PART_NAME: RELATIONSHIP_PART_NAME,
            XL_FOLDER_NAME: XL_FOLDER_NAME,
            WORKBOOK_FILE_NAME: WORKBOOK_FILE_NAME,
            STYLE_FILE_NAME: STYLE_FILE_NAME,
            WORKSHEET_FILE_NAME: WORKSHEET_FILE_NAME,
            WORKSHEETS_FOLDER: WORKSHEETS_FOLDER,
            WORKSHEET_HEADER_XML: WORKSHEET_HEADER_XML,
            SHAREDSTRING_FILE_NAME: SHAREDSTRING_FILE_NAME,
            GROUP_SHEET_PR_XML: GROUP_SHEET_PR_XML,
            SINGLE_SHEET_PR_XML: SINGLE_SHEET_PR_XML,
            BASE_STYLE_XML2: BASE_STYLE_XML2,
            XML_TAG: XML_TAG
        }
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/localization/intl/number.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _core = __webpack_require__( /*! ../core */ 83);
        var _open_xml_currency_format = __webpack_require__( /*! ../open_xml_currency_format */ 272);
        var _open_xml_currency_format2 = _interopRequireDefault(_open_xml_currency_format);
        var _accounting_formats = __webpack_require__( /*! ../cldr-data/accounting_formats */ 454);
        var _accounting_formats2 = _interopRequireDefault(_accounting_formats);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var detectCurrencySymbolRegex = /([^\s0]+)?(\s*)0*[.,]*0*(\s*)([^\s0]+)?/;
        var formattersCache = {};
        var getFormatter = function(format) {
            var key = (0, _core.locale)() + "/" + JSON.stringify(format);
            if (!formattersCache[key]) {
                formattersCache[key] = new Intl.NumberFormat((0, _core.locale)(), format).format
            }
            return formattersCache[key]
        };
        var getCurrencyFormatter = function(currency) {
            return new Intl.NumberFormat((0, _core.locale)(), {
                style: "currency",
                currency: currency
            })
        };
        module.exports = {
            engine: function() {
                return "intl"
            },
            _formatNumberCore: function(value, format, formatConfig) {
                if ("exponential" === format) {
                    return this.callBase.apply(this, arguments)
                }
                return getFormatter(this._normalizeFormatConfig(format, formatConfig))(value)
            },
            _normalizeFormatConfig: function(format, formatConfig, value) {
                var config;
                if ("decimal" === format) {
                    config = {
                        minimumIntegerDigits: formatConfig.precision || void 0,
                        useGrouping: false,
                        maximumFractionDigits: String(value).length,
                        round: value < 0 ? "ceil" : "floor"
                    }
                } else {
                    config = this._getPrecisionConfig(formatConfig.precision)
                }
                if ("percent" === format) {
                    config.style = "percent"
                } else {
                    if ("currency" === format) {
                        config.style = "currency";
                        config.currency = formatConfig.currency || (0, _config2.default)().defaultCurrency
                    }
                }
                return config
            },
            _getPrecisionConfig: function(precision) {
                var config;
                if (null === precision) {
                    config = {
                        minimumFractionDigits: 0,
                        maximumFractionDigits: 20
                    }
                } else {
                    config = {
                        minimumFractionDigits: precision || 0,
                        maximumFractionDigits: precision || 0
                    }
                }
                return config
            },
            format: function(value, _format) {
                if ("number" !== typeof value) {
                    return value
                }
                _format = this._normalizeFormat(_format);
                if ("default" === _format.currency) {
                    _format.currency = (0, _config2.default)().defaultCurrency
                }
                if (!_format || "function" !== typeof _format && !_format.type && !_format.formatter) {
                    return getFormatter(_format)(value)
                }
                return this.callBase.apply(this, arguments)
            },
            _getCurrencySymbolInfo: function(currency) {
                var formatter = getCurrencyFormatter(currency);
                return this._extractCurrencySymbolInfo(formatter.format(0))
            },
            _extractCurrencySymbolInfo: function(currencyValueString) {
                var match = detectCurrencySymbolRegex.exec(currencyValueString) || [];
                var position = match[1] ? "before" : "after";
                var symbol = match[1] || match[4] || "";
                var delimiter = match[2] || match[3] || "";
                return {
                    position: position,
                    symbol: symbol,
                    delimiter: delimiter
                }
            },
            getCurrencySymbol: function(currency) {
                if (!currency) {
                    currency = (0, _config2.default)().defaultCurrency
                }
                var symbolInfo = this._getCurrencySymbolInfo(currency);
                return {
                    symbol: symbolInfo.symbol
                }
            },
            getOpenXmlCurrencyFormat: function(currency) {
                var targetCurrency = currency || (0, _config2.default)().defaultCurrency;
                var currencySymbol = this._getCurrencySymbolInfo(targetCurrency).symbol;
                var closestAccountingFormat = (0, _core.getValueByClosestLocale)(function(locale) {
                    return _accounting_formats2.default[locale]
                });
                return (0, _open_xml_currency_format2.default)(currencySymbol, closestAccountingFormat)
            }
        }
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/localization/cldr-data/parent_locales.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {
            "en-150": "en-001",
            "en-AG": "en-001",
            "en-AI": "en-001",
            "en-AU": "en-001",
            "en-BB": "en-001",
            "en-BM": "en-001",
            "en-BS": "en-001",
            "en-BW": "en-001",
            "en-BZ": "en-001",
            "en-CA": "en-001",
            "en-CC": "en-001",
            "en-CK": "en-001",
            "en-CM": "en-001",
            "en-CX": "en-001",
            "en-CY": "en-001",
            "en-DG": "en-001",
            "en-DM": "en-001",
            "en-ER": "en-001",
            "en-FJ": "en-001",
            "en-FK": "en-001",
            "en-FM": "en-001",
            "en-GB": "en-001",
            "en-GD": "en-001",
            "en-GG": "en-001",
            "en-GH": "en-001",
            "en-GI": "en-001",
            "en-GM": "en-001",
            "en-GY": "en-001",
            "en-HK": "en-001",
            "en-IE": "en-001",
            "en-IL": "en-001",
            "en-IM": "en-001",
            "en-IN": "en-001",
            "en-IO": "en-001",
            "en-JE": "en-001",
            "en-JM": "en-001",
            "en-KE": "en-001",
            "en-KI": "en-001",
            "en-KN": "en-001",
            "en-KY": "en-001",
            "en-LC": "en-001",
            "en-LR": "en-001",
            "en-LS": "en-001",
            "en-MG": "en-001",
            "en-MO": "en-001",
            "en-MS": "en-001",
            "en-MT": "en-001",
            "en-MU": "en-001",
            "en-MW": "en-001",
            "en-MY": "en-001",
            "en-NA": "en-001",
            "en-NF": "en-001",
            "en-NG": "en-001",
            "en-NR": "en-001",
            "en-NU": "en-001",
            "en-NZ": "en-001",
            "en-PG": "en-001",
            "en-PH": "en-001",
            "en-PK": "en-001",
            "en-PN": "en-001",
            "en-PW": "en-001",
            "en-RW": "en-001",
            "en-SB": "en-001",
            "en-SC": "en-001",
            "en-SD": "en-001",
            "en-SG": "en-001",
            "en-SH": "en-001",
            "en-SL": "en-001",
            "en-SS": "en-001",
            "en-SX": "en-001",
            "en-SZ": "en-001",
            "en-TC": "en-001",
            "en-TK": "en-001",
            "en-TO": "en-001",
            "en-TT": "en-001",
            "en-TV": "en-001",
            "en-TZ": "en-001",
            "en-UG": "en-001",
            "en-VC": "en-001",
            "en-VG": "en-001",
            "en-VU": "en-001",
            "en-WS": "en-001",
            "en-ZA": "en-001",
            "en-ZM": "en-001",
            "en-ZW": "en-001",
            "en-AT": "en-150",
            "en-BE": "en-150",
            "en-CH": "en-150",
            "en-DE": "en-150",
            "en-DK": "en-150",
            "en-FI": "en-150",
            "en-NL": "en-150",
            "en-SE": "en-150",
            "en-SI": "en-150",
            "es-AR": "es-419",
            "es-BO": "es-419",
            "es-BR": "es-419",
            "es-BZ": "es-419",
            "es-CL": "es-419",
            "es-CO": "es-419",
            "es-CR": "es-419",
            "es-CU": "es-419",
            "es-DO": "es-419",
            "es-EC": "es-419",
            "es-GT": "es-419",
            "es-HN": "es-419",
            "es-MX": "es-419",
            "es-NI": "es-419",
            "es-PA": "es-419",
            "es-PE": "es-419",
            "es-PR": "es-419",
            "es-PY": "es-419",
            "es-SV": "es-419",
            "es-US": "es-419",
            "es-UY": "es-419",
            "es-VE": "es-419",
            "pt-AO": "pt-PT",
            "pt-CH": "pt-PT",
            "pt-CV": "pt-PT",
            "pt-FR": "pt-PT",
            "pt-GQ": "pt-PT",
            "pt-GW": "pt-PT",
            "pt-LU": "pt-PT",
            "pt-MO": "pt-PT",
            "pt-MZ": "pt-PT",
            "pt-ST": "pt-PT",
            "pt-TL": "pt-PT",
            "az-Arab": "root",
            "az-Cyrl": "root",
            "blt-Latn": "root",
            "bm-Nkoo": "root",
            "bs-Cyrl": "root",
            "byn-Latn": "root",
            "cu-Glag": "root",
            "dje-Arab": "root",
            "dyo-Arab": "root",
            "en-Dsrt": "root",
            "en-Shaw": "root",
            "ff-Adlm": "root",
            "ff-Arab": "root",
            "ha-Arab": "root",
            "iu-Latn": "root",
            "kk-Arab": "root",
            "ku-Arab": "root",
            "ky-Arab": "root",
            "ky-Latn": "root",
            "ml-Arab": "root",
            "mn-Mong": "root",
            "ms-Arab": "root",
            "pa-Arab": "root",
            "sd-Deva": "root",
            "sd-Khoj": "root",
            "sd-Sind": "root",
            "shi-Latn": "root",
            "so-Arab": "root",
            "sr-Latn": "root",
            "sw-Arab": "root",
            "tg-Arab": "root",
            "ug-Cyrl": "root",
            "uz-Arab": "root",
            "uz-Cyrl": "root",
            "vai-Latn": "root",
            "wo-Arab": "root",
            "yo-Arab": "root",
            "yue-Hans": "root",
            "zh-Hant": "root",
            "zh-Hant-MO": "zh-Hant-HK"
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/localization/parentLocale.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var PARENT_LOCALE_SEPARATOR = "-";
        module.exports = function(parentLocales, locale) {
            var parentLocale = parentLocales[locale];
            if (parentLocale) {
                return "root" !== parentLocale && parentLocale
            }
            return locale.substr(0, locale.lastIndexOf(PARENT_LOCALE_SEPARATOR))
        }
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/localization/cldr-data/accounting_formats.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {
            af: "\xa4#,##0.00;(\xa4#,##0.00)",
            "af-NA": "\xa4#,##0.00;(\xa4#,##0.00)",
            agq: "#,##0.00\xa4",
            ak: "\xa4#,##0.00",
            am: "\xa4#,##0.00;(\xa4#,##0.00)",
            ar: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-AE": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-BH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-DJ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-DZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-EG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-EH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-ER": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-IL": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-IQ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-JO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-KM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-KW": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-LB": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-LY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-MA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-MR": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-OM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-PS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-QA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-SA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-SD": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-SO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-SS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-SY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-TD": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-TN": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ar-YE": "\xa4#,##0.00;(\xa4#,##0.00)",
            as: "\xa4\xa0#,##,##0.00",
            asa: "#,##0.00\xa0\xa4",
            ast: "#,##0.00\xa0\xa4",
            az: "#,##0.00\xa0\xa4",
            "az-Cyrl": "#,##0.00\xa0\xa4",
            "az-Latn": "#,##0.00\xa0\xa4",
            bas: "#,##0.00\xa0\xa4",
            be: "#,##0.00\xa0\xa4",
            bem: "\xa4#,##0.00;(\xa4#,##0.00)",
            bez: "#,##0.00\xa4",
            bg: "0.00\xa0\xa4;(0.00\xa0\xa4)",
            bm: "\xa4#,##0.00;(\xa4#,##0.00)",
            bn: "#,##,##0.00\xa4;(#,##,##0.00\xa4)",
            "bn-IN": "#,##,##0.00\xa4;(#,##,##0.00\xa4)",
            bo: "\xa4\xa0#,##0.00",
            "bo-IN": "\xa4\xa0#,##0.00",
            br: "#,##0.00\xa0\xa4",
            brx: "\xa4\xa0#,##,##0.00",
            bs: "#,##0.00\xa0\xa4",
            "bs-Cyrl": "#,##0.00\xa0\xa4",
            "bs-Latn": "#,##0.00\xa0\xa4",
            ca: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "ca-AD": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "ca-ES-VALENCIA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "ca-FR": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "ca-IT": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            ccp: "#,##,##0.00\xa4;(#,##,##0.00\xa4)",
            "ccp-IN": "#,##,##0.00\xa4;(#,##,##0.00\xa4)",
            ce: "#,##0.00\xa0\xa4",
            ceb: "\xa4#,##0.00;(\xa4#,##0.00)",
            cgg: "\xa4#,##0.00",
            chr: "\xa4#,##0.00;(\xa4#,##0.00)",
            ckb: "\xa4\xa0#,##0.00",
            "ckb-IR": "\xa4\xa0#,##0.00",
            cs: "#,##0.00\xa0\xa4",
            cu: "\xa4\xa0#,##0.00",
            cy: "\xa4#,##0.00;(\xa4#,##0.00)",
            da: "#,##0.00\xa0\xa4",
            "da-GL": "#,##0.00\xa0\xa4",
            dav: "\xa4#,##0.00;(\xa4#,##0.00)",
            de: "#,##0.00\xa0\xa4",
            "de-AT": "#,##0.00\xa0\xa4",
            "de-BE": "#,##0.00\xa0\xa4",
            "de-CH": "#,##0.00\xa0\xa4",
            "de-IT": "#,##0.00\xa0\xa4",
            "de-LI": "#,##0.00\xa0\xa4",
            "de-LU": "#,##0.00\xa0\xa4",
            dje: "#,##0.00\xa4",
            dsb: "#,##0.00\xa0\xa4",
            dua: "#,##0.00\xa0\xa4",
            dyo: "#,##0.00\xa0\xa4",
            dz: "\xa4#,##,##0.00",
            ebu: "\xa4#,##0.00;(\xa4#,##0.00)",
            ee: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ee-TG": "\xa4#,##0.00;(\xa4#,##0.00)",
            el: "#,##0.00\xa0\xa4",
            "el-CY": "#,##0.00\xa0\xa4",
            en: "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-001": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-150": "#,##0.00\xa0\xa4",
            "en-AE": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-AG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-AI": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-AS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-AT": "\xa4\xa0#,##0.00",
            "en-AU": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BB": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BE": "#,##0.00\xa0\xa4",
            "en-BI": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BW": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-BZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CC": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CH": "\xa4\xa0#,##0.00;\xa4-#,##0.00",
            "en-CK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CX": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-CY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-DE": "#,##0.00\xa0\xa4",
            "en-DG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-DK": "#,##0.00\xa0\xa4",
            "en-DM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-ER": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-FI": "#,##0.00\xa0\xa4",
            "en-FJ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-FK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-FM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GB": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GD": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GI": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GU": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-GY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-HK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-IE": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-IL": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-IM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-IN": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-IO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-JE": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-JM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-KE": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-KI": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-KN": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-KY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-LC": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-LR": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-LS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MP": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MT": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MU": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MW": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-MY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NF": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NL": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "en-NR": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NU": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-NZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PN": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PR": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-PW": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-RW": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SB": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SC": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SD": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SE": "#,##0.00\xa0\xa4",
            "en-SG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SH": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SI": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "en-SL": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SX": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-SZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TC": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TT": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TV": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-TZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-UG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-UM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-US-POSIX": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-VC": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-VG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-VI": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-VU": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-WS": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-ZA": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-ZM": "\xa4#,##0.00;(\xa4#,##0.00)",
            "en-ZW": "\xa4#,##0.00;(\xa4#,##0.00)",
            eo: "\xa4\xa0#,##0.00",
            es: "#,##0.00\xa0\xa4",
            "es-419": "\xa4#,##0.00",
            "es-AR": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "es-BO": "\xa4#,##0.00",
            "es-BR": "\xa4#,##0.00",
            "es-BZ": "\xa4#,##0.00",
            "es-CL": "\xa4#,##0.00",
            "es-CO": "\xa4#,##0.00",
            "es-CR": "\xa4#,##0.00",
            "es-CU": "\xa4#,##0.00",
            "es-DO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "es-EA": "#,##0.00\xa0\xa4",
            "es-EC": "\xa4#,##0.00",
            "es-GQ": "#,##0.00\xa0\xa4",
            "es-GT": "\xa4#,##0.00",
            "es-HN": "\xa4#,##0.00",
            "es-IC": "#,##0.00\xa0\xa4",
            "es-MX": "\xa4#,##0.00",
            "es-NI": "\xa4#,##0.00",
            "es-PA": "\xa4#,##0.00",
            "es-PE": "\xa4#,##0.00",
            "es-PH": "#,##0.00\xa0\xa4",
            "es-PR": "\xa4#,##0.00",
            "es-PY": "\xa4#,##0.00",
            "es-SV": "\xa4#,##0.00",
            "es-US": "\xa4#,##0.00",
            "es-UY": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "es-VE": "\xa4#,##0.00",
            et: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            eu: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            ewo: "#,##0.00\xa0\xa4",
            fa: "\u200e\xa4\xa0#,##0.00;\u200e(\xa4\xa0#,##0.00)",
            "fa-AF": "\xa4\xa0#,##0.00;\u200e(\xa4\xa0#,##0.00)",
            ff: "#,##0.00\xa0\xa4",
            "ff-Latn": "#,##0.00\xa0\xa4",
            "ff-Latn-BF": "#,##0.00\xa0\xa4",
            "ff-Latn-CM": "#,##0.00\xa0\xa4",
            "ff-Latn-GH": "#,##0.00\xa0\xa4",
            "ff-Latn-GM": "#,##0.00\xa0\xa4",
            "ff-Latn-GN": "#,##0.00\xa0\xa4",
            "ff-Latn-GW": "#,##0.00\xa0\xa4",
            "ff-Latn-LR": "#,##0.00\xa0\xa4",
            "ff-Latn-MR": "#,##0.00\xa0\xa4",
            "ff-Latn-NE": "#,##0.00\xa0\xa4",
            "ff-Latn-NG": "#,##0.00\xa0\xa4",
            "ff-Latn-SL": "#,##0.00\xa0\xa4",
            fi: "#,##0.00\xa0\xa4",
            fil: "\xa4#,##0.00;(\xa4#,##0.00)",
            fo: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fo-DK": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            fr: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-BE": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-BF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-BI": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-BJ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-BL": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CD": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CG": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CH": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CI": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-CM": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-DJ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-DZ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-GA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-GF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-GN": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-GP": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-GQ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-HT": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-KM": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-LU": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MC": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MG": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-ML": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MQ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MR": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-MU": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-NC": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-NE": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-PF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-PM": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-RE": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-RW": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-SC": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-SN": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-SY": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-TD": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-TG": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-TN": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-VU": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-WF": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "fr-YT": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            fur: "\xa4\xa0#,##0.00",
            fy: "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            ga: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ga-GB": "\xa4#,##0.00;(\xa4#,##0.00)",
            gd: "\xa4#,##0.00;(\xa4#,##0.00)",
            gl: "#,##0.00\xa0\xa4",
            gsw: "#,##0.00\xa0\xa4",
            "gsw-FR": "#,##0.00\xa0\xa4",
            "gsw-LI": "#,##0.00\xa0\xa4",
            gu: "\xa4#,##,##0.00;(\xa4#,##,##0.00)",
            guz: "\xa4#,##0.00;(\xa4#,##0.00)",
            gv: "\xa4#,##0.00",
            ha: "\xa4\xa0#,##0.00",
            "ha-GH": "\xa4\xa0#,##0.00",
            "ha-NE": "\xa4\xa0#,##0.00",
            haw: "\xa4#,##0.00;(\xa4#,##0.00)",
            he: "#,##0.00\xa0\xa4",
            hi: "\xa4#,##,##0.00",
            hr: "#,##0.00\xa0\xa4",
            "hr-BA": "#,##0.00\xa0\xa4",
            hsb: "#,##0.00\xa0\xa4",
            hu: "#,##0.00\xa0\xa4",
            hy: "#,##0.00\xa0\xa4",
            ia: "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            id: "\xa4#,##0.00",
            ig: "\xa4#,##0.00;(\xa4#,##0.00)",
            ii: "\xa4\xa0#,##0.00",
            is: "#,##0.00\xa0\xa4",
            it: "#,##0.00\xa0\xa4",
            "it-CH": "#,##0.00\xa0\xa4",
            "it-SM": "#,##0.00\xa0\xa4",
            "it-VA": "#,##0.00\xa0\xa4",
            ja: "\xa4#,##0.00;(\xa4#,##0.00)",
            jgo: "\xa4\xa0#,##0.00",
            jmc: "\xa4#,##0.00",
            jv: "\xa4\xa0#,##0.00",
            ka: "#,##0.00\xa0\xa4",
            kab: "#,##0.00\xa4",
            kam: "\xa4#,##0.00;(\xa4#,##0.00)",
            kde: "\xa4#,##0.00;(\xa4#,##0.00)",
            kea: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            khq: "#,##0.00\xa4",
            ki: "\xa4#,##0.00;(\xa4#,##0.00)",
            kk: "#,##0.00\xa0\xa4",
            kkj: "\xa4\xa0#,##0.00",
            kl: "\xa4#,##0.00;\xa4-#,##0.00",
            kln: "\xa4#,##0.00;(\xa4#,##0.00)",
            km: "#,##0.00\xa4;(#,##0.00\xa4)",
            kn: "\xa4#,##0.00;(\xa4#,##0.00)",
            ko: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ko-KP": "\xa4#,##0.00;(\xa4#,##0.00)",
            kok: "\xa4#,##0.00;(\xa4#,##0.00)",
            ks: "\xa4\xa0#,##,##0.00",
            ksb: "#,##0.00\xa4",
            ksf: "#,##0.00\xa0\xa4",
            ksh: "#,##0.00\xa0\xa4",
            ku: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            kw: "\xa4#,##0.00",
            ky: "#,##0.00\xa0\xa4",
            lag: "\xa4\xa0#,##0.00",
            lb: "#,##0.00\xa0\xa4",
            lg: "#,##0.00\xa4",
            lkt: "\xa4\xa0#,##0.00",
            ln: "#,##0.00\xa0\xa4",
            "ln-AO": "#,##0.00\xa0\xa4",
            "ln-CF": "#,##0.00\xa0\xa4",
            "ln-CG": "#,##0.00\xa0\xa4",
            lo: "\xa4#,##0.00;\xa4-#,##0.00",
            lrc: "\xa4\xa0#,##0.00",
            "lrc-IQ": "\xa4\xa0#,##0.00",
            lt: "#,##0.00\xa0\xa4",
            lu: "#,##0.00\xa4",
            luo: "#,##0.00\xa4",
            luy: "\xa4#,##0.00;\xa4-\xa0#,##0.00",
            lv: "#,##0.00\xa0\xa4",
            mas: "\xa4#,##0.00;(\xa4#,##0.00)",
            "mas-TZ": "\xa4#,##0.00;(\xa4#,##0.00)",
            mer: "\xa4#,##0.00;(\xa4#,##0.00)",
            mfe: "\xa4\xa0#,##0.00",
            mg: "\xa4#,##0.00",
            mgh: "\xa4\xa0#,##0.00",
            mgo: "\xa4\xa0#,##0.00",
            mi: "\xa4\xa0#,##0.00",
            mk: "#,##0.00\xa0\xa4",
            ml: "\xa4#,##0.00;(\xa4#,##0.00)",
            mn: "\xa4\xa0#,##0.00",
            mr: "\xa4#,##0.00;(\xa4#,##0.00)",
            ms: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ms-BN": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ms-SG": "\xa4#,##0.00;(\xa4#,##0.00)",
            mt: "\xa4#,##0.00",
            mua: "\xa4#,##0.00;(\xa4#,##0.00)",
            my: "\xa4\xa0#,##0.00",
            mzn: "\xa4\xa0#,##0.00",
            naq: "\xa4#,##0.00",
            nb: "\xa4\xa0#,##0.00",
            "nb-SJ": "\xa4\xa0#,##0.00",
            nd: "\xa4#,##0.00;(\xa4#,##0.00)",
            nds: "\xa4\xa0#,##0.00",
            "nds-NL": "\xa4\xa0#,##0.00",
            ne: "\xa4\xa0#,##0.00",
            "ne-IN": "\xa4\xa0#,##0.00",
            nl: "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-AW": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-BE": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-BQ": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-CW": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-SR": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            "nl-SX": "\xa4\xa0#,##0.00;(\xa4\xa0#,##0.00)",
            nmg: "#,##0.00\xa0\xa4",
            nn: "#,##0.00\xa0\xa4",
            nnh: "\xa4\xa0#,##0.00",
            nus: "\xa4#,##0.00;(\xa4#,##0.00)",
            nyn: "\xa4#,##0.00",
            om: "\xa4#,##0.00",
            "om-KE": "\xa4#,##0.00",
            or: "\xa4#,##0.00;(\xa4#,##0.00)",
            os: "\xa4\xa0#,##0.00",
            "os-RU": "\xa4\xa0#,##0.00",
            pa: "\xa4\xa0#,##0.00",
            "pa-Arab": "\xa4\xa0#,##0.00",
            "pa-Guru": "\xa4\xa0#,##0.00",
            pl: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            prg: "\xa4\xa0#,##0.00",
            ps: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ps-PK": "\xa4#,##0.00;(\xa4#,##0.00)",
            pt: "\xa4\xa0#,##0.00",
            "pt-AO": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-CH": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-CV": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-GQ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-GW": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-LU": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-MO": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-MZ": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-PT": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-ST": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "pt-TL": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            qu: "\xa4\xa0#,##0.00",
            "qu-BO": "\xa4\xa0#,##0.00",
            "qu-EC": "\xa4\xa0#,##0.00",
            rm: "#,##0.00\xa0\xa4",
            rn: "#,##0.00\xa4",
            ro: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "ro-MD": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            rof: "\xa4#,##0.00",
            root: "\xa4\xa0#,##0.00",
            ru: "#,##0.00\xa0\xa4",
            "ru-BY": "#,##0.00\xa0\xa4",
            "ru-KG": "#,##0.00\xa0\xa4",
            "ru-KZ": "#,##0.00\xa0\xa4",
            "ru-MD": "#,##0.00\xa0\xa4",
            "ru-UA": "#,##0.00\xa0\xa4",
            rw: "\xa4\xa0#,##0.00",
            rwk: "#,##0.00\xa4",
            sah: "#,##0.00\xa0\xa4",
            saq: "\xa4#,##0.00;(\xa4#,##0.00)",
            sbp: "#,##0.00\xa4",
            sd: "\xa4\xa0#,##0.00",
            se: "#,##0.00\xa0\xa4",
            "se-FI": "#,##0.00\xa0\xa4",
            "se-SE": "#,##0.00\xa0\xa4",
            seh: "#,##0.00\xa4",
            ses: "#,##0.00\xa4",
            sg: "\xa4#,##0.00;\xa4-#,##0.00",
            shi: "#,##0.00\xa4",
            "shi-Latn": "#,##0.00\xa4",
            "shi-Tfng": "#,##0.00\xa4",
            si: "\xa4#,##0.00;(\xa4#,##0.00)",
            sk: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            sl: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            smn: "#,##0.00\xa0\xa4",
            sn: "\xa4#,##0.00;(\xa4#,##0.00)",
            so: "\xa4#,##0.00;(\xa4#,##0.00)",
            "so-DJ": "\xa4#,##0.00;(\xa4#,##0.00)",
            "so-ET": "\xa4#,##0.00;(\xa4#,##0.00)",
            "so-KE": "\xa4#,##0.00;(\xa4#,##0.00)",
            sq: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sq-MK": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sq-XK": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            sr: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Cyrl": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Cyrl-BA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Cyrl-ME": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Cyrl-XK": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Latn": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Latn-BA": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Latn-ME": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            "sr-Latn-XK": "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            sv: "#,##0.00\xa0\xa4",
            "sv-AX": "#,##0.00\xa0\xa4",
            "sv-FI": "#,##0.00\xa0\xa4",
            sw: "\xa4\xa0#,##0.00",
            "sw-CD": "\xa4\xa0#,##0.00",
            "sw-KE": "\xa4\xa0#,##0.00",
            "sw-UG": "\xa4\xa0#,##0.00",
            ta: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ta-LK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ta-MY": "\xa4#,##0.00;(\xa4#,##0.00)",
            "ta-SG": "\xa4#,##0.00;(\xa4#,##0.00)",
            te: "\xa4#,##0.00;(\xa4#,##0.00)",
            teo: "\xa4#,##0.00;(\xa4#,##0.00)",
            "teo-KE": "\xa4#,##0.00;(\xa4#,##0.00)",
            tg: "#,##0.00\xa0\xa4",
            th: "\xa4#,##0.00;(\xa4#,##0.00)",
            ti: "\xa4#,##0.00",
            "ti-ER": "\xa4#,##0.00",
            tk: "#,##0.00\xa0\xa4",
            to: "\xa4\xa0#,##0.00",
            tr: "\xa4#,##0.00;(\xa4#,##0.00)",
            "tr-CY": "\xa4#,##0.00;(\xa4#,##0.00)",
            tt: "#,##0.00\xa0\xa4",
            twq: "#,##0.00\xa4",
            tzm: "#,##0.00\xa0\xa4",
            ug: "\xa4#,##0.00;(\xa4#,##0.00)",
            uk: "#,##0.00\xa0\xa4",
            ur: "\xa4#,##0.00;(\xa4#,##0.00)",
            "ur-IN": "\xa4#,##0.00;(\xa4#,##0.00)",
            uz: "#,##0.00\xa0\xa4",
            "uz-Arab": "\xa4\xa0#,##0.00",
            "uz-Cyrl": "#,##0.00\xa0\xa4",
            "uz-Latn": "#,##0.00\xa0\xa4",
            vai: "\xa4#,##0.00;(\xa4#,##0.00)",
            "vai-Latn": "\xa4#,##0.00;(\xa4#,##0.00)",
            "vai-Vaii": "\xa4#,##0.00;(\xa4#,##0.00)",
            vi: "#,##0.00\xa0\xa4",
            vo: "\xa4\xa0#,##0.00",
            vun: "\xa4#,##0.00",
            wae: "\xa4\xa0#,##0.00",
            wo: "\xa4\xa0#,##0.00",
            xh: "\xa4#,##0.00",
            xog: "#,##0.00\xa0\xa4",
            yav: "#,##0.00\xa0\xa4;(#,##0.00\xa0\xa4)",
            yi: "\xa4\xa0#,##0.00",
            yo: "\xa4#,##0.00;(\xa4#,##0.00)",
            "yo-BJ": "\xa4#,##0.00;(\xa4#,##0.00)",
            yue: "\xa4#,##0.00;(\xa4#,##0.00)",
            "yue-Hans": "\xa4#,##0.00;(\xa4#,##0.00)",
            "yue-Hant": "\xa4#,##0.00;(\xa4#,##0.00)",
            zgh: "#,##0.00\xa4",
            zh: "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hans": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hans-HK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hans-MO": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hans-SG": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hant": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hant-HK": "\xa4#,##0.00;(\xa4#,##0.00)",
            "zh-Hant-MO": "\xa4#,##0.00;(\xa4#,##0.00)",
            zu: "\xa4#,##0.00;(\xa4#,##0.00)"
        }
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/localization/cldr-data/first_day_of_week_data.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {
            "af-NA": 1,
            agq: 1,
            ak: 1,
            ar: 6,
            "ar-EH": 1,
            "ar-ER": 1,
            "ar-KM": 1,
            "ar-LB": 1,
            "ar-MA": 1,
            "ar-MR": 1,
            "ar-PS": 1,
            "ar-SO": 1,
            "ar-SS": 1,
            "ar-TD": 1,
            "ar-TN": 1,
            asa: 1,
            ast: 1,
            az: 1,
            "az-Cyrl": 1,
            bas: 1,
            be: 1,
            bem: 1,
            bez: 1,
            bg: 1,
            bm: 1,
            br: 1,
            bs: 1,
            "bs-Cyrl": 1,
            ca: 1,
            ce: 1,
            cgg: 1,
            ckb: 6,
            cs: 1,
            cu: 1,
            cy: 1,
            da: 1,
            de: 1,
            dje: 1,
            dsb: 1,
            dua: 1,
            dyo: 1,
            ee: 1,
            el: 1,
            "en-001": 1,
            "en-AE": 6,
            "en-BI": 1,
            "en-MP": 1,
            "en-SD": 6,
            eo: 1,
            es: 1,
            et: 1,
            eu: 1,
            ewo: 1,
            fa: 6,
            ff: 1,
            fi: 1,
            fo: 1,
            fr: 1,
            "fr-DJ": 6,
            "fr-DZ": 6,
            "fr-SY": 6,
            fur: 1,
            fy: 1,
            ga: 1,
            gd: 1,
            gl: 1,
            gsw: 1,
            gv: 1,
            ha: 1,
            hr: 1,
            hsb: 1,
            hu: 1,
            hy: 1,
            ia: 1,
            ig: 1,
            is: 1,
            it: 1,
            jgo: 1,
            jmc: 1,
            ka: 1,
            kab: 6,
            kde: 1,
            kea: 1,
            khq: 1,
            kk: 1,
            kkj: 1,
            kl: 1,
            "ko-KP": 1,
            ksb: 1,
            ksf: 1,
            ksh: 1,
            ku: 1,
            kw: 1,
            ky: 1,
            lag: 1,
            lb: 1,
            lg: 1,
            ln: 1,
            lrc: 6,
            lt: 1,
            lu: 1,
            lv: 1,
            "mas-TZ": 1,
            mfe: 1,
            mg: 1,
            mgo: 1,
            mi: 1,
            mk: 1,
            mn: 1,
            ms: 1,
            mua: 1,
            mzn: 6,
            naq: 1,
            nb: 1,
            nds: 1,
            nl: 1,
            nmg: 1,
            nn: 1,
            nnh: 1,
            nus: 1,
            nyn: 1,
            os: 1,
            pl: 1,
            prg: 1,
            ps: 6,
            "pt-AO": 1,
            "pt-CH": 1,
            "pt-CV": 1,
            "pt-GQ": 1,
            "pt-GW": 1,
            "pt-LU": 1,
            "pt-ST": 1,
            "pt-TL": 1,
            "qu-BO": 1,
            "qu-EC": 1,
            rm: 1,
            rn: 1,
            ro: 1,
            rof: 1,
            ru: 1,
            rw: 1,
            rwk: 1,
            sah: 1,
            sbp: 1,
            se: 1,
            ses: 1,
            sg: 1,
            shi: 1,
            "shi-Latn": 1,
            si: 1,
            sk: 1,
            sl: 1,
            smn: 1,
            so: 1,
            "so-DJ": 6,
            sq: 1,
            sr: 1,
            "sr-Latn": 1,
            sv: 1,
            sw: 1,
            "ta-LK": 1,
            "ta-MY": 1,
            teo: 1,
            tg: 1,
            "ti-ER": 1,
            tk: 1,
            to: 1,
            tr: 1,
            tt: 1,
            twq: 1,
            tzm: 1,
            uk: 1,
            uz: 1,
            "uz-Arab": 6,
            "uz-Cyrl": 1,
            vai: 1,
            "vai-Latn": 1,
            vi: 1,
            vo: 1,
            vun: 1,
            wae: 1,
            wo: 1,
            xog: 1,
            yav: 1,
            yi: 1,
            yo: 1,
            zgh: 1
        }
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/localization/intl/date.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _core = __webpack_require__( /*! ../core */ 83);

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var SYMBOLS_TO_REMOVE_REGEX = /[\u200E\u200F]/g;
        var getIntlFormatter = function(format) {
            return function(date) {
                if (!format.timeZoneName) {
                    var year = date.getFullYear();
                    var recognizableAsTwentyCentury = String(year).length < 3;
                    var safeYearShift = 400;
                    var temporaryYearValue = recognizableAsTwentyCentury ? year + safeYearShift : year;
                    var utcDate = new Date(Date.UTC(temporaryYearValue, date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
                    if (recognizableAsTwentyCentury) {
                        utcDate.setFullYear(year)
                    }
                    var utcFormat = (0, _extend.extend)({
                        timeZone: "UTC"
                    }, format);
                    return formatDateTime(utcDate, utcFormat)
                }
                return formatDateTime(date, format)
            }
        };
        var formattersCache = {};
        var getFormatter = function(format) {
            var key = (0, _core.locale)() + "/" + JSON.stringify(format);
            if (!formattersCache[key]) {
                formattersCache[key] = new Intl.DateTimeFormat((0, _core.locale)(), format).format
            }
            return formattersCache[key]
        };

        function formatDateTime(date, format) {
            return getFormatter(format)(date).replace(SYMBOLS_TO_REMOVE_REGEX, "")
        }
        var formatNumber = function(number) {
            return new Intl.NumberFormat((0, _core.locale)()).format(number)
        };
        var getAlternativeNumeralsMap = function() {
            var numeralsMapCache = {};
            return function(locale) {
                if (!(locale in numeralsMapCache)) {
                    if ("0" === formatNumber(0)) {
                        numeralsMapCache[locale] = false;
                        return false
                    }
                    numeralsMapCache[locale] = {};
                    for (var i = 0; i < 10; ++i) {
                        numeralsMapCache[locale][formatNumber(i)] = i
                    }
                }
                return numeralsMapCache[locale]
            }
        }();
        var normalizeNumerals = function(dateString) {
            var alternativeNumeralsMap = getAlternativeNumeralsMap((0, _core.locale)());
            if (!alternativeNumeralsMap) {
                return dateString
            }
            return dateString.split("").map(function(sign) {
                return sign in alternativeNumeralsMap ? String(alternativeNumeralsMap[sign]) : sign
            }).join("")
        };
        var removeLeadingZeroes = function(str) {
            return str.replace(/(\D)0+(\d)/g, "$1$2")
        };
        var dateStringEquals = function(actual, expected) {
            return removeLeadingZeroes(actual) === removeLeadingZeroes(expected)
        };
        var normalizeMonth = function(text) {
            return text.replace("d\u2019", "de ")
        };
        var intlFormats = {
            day: {
                day: "numeric"
            },
            dayofweek: {
                weekday: "long"
            },
            longdate: {
                weekday: "long",
                year: "numeric",
                month: "long",
                day: "numeric"
            },
            longdatelongtime: {
                weekday: "long",
                year: "numeric",
                month: "long",
                day: "numeric",
                hour: "numeric",
                minute: "numeric",
                second: "numeric"
            },
            longtime: {
                hour: "numeric",
                minute: "numeric",
                second: "numeric"
            },
            month: {
                month: "long"
            },
            monthandday: {
                month: "long",
                day: "numeric"
            },
            monthandyear: {
                year: "numeric",
                month: "long"
            },
            shortdate: {},
            shorttime: {
                hour: "numeric",
                minute: "numeric"
            },
            shortyear: {
                year: "2-digit"
            },
            year: {
                year: "numeric"
            }
        };
        Object.defineProperty(intlFormats, "shortdateshorttime", {
            get: function() {
                var defaultOptions = Intl.DateTimeFormat((0, _core.locale)()).resolvedOptions();
                return {
                    year: defaultOptions.year,
                    month: defaultOptions.month,
                    day: defaultOptions.day,
                    hour: "numeric",
                    minute: "numeric"
                }
            }
        });
        var getIntlFormat = function(format) {
            return "string" === typeof format && intlFormats[format.toLowerCase()]
        };
        var monthNameStrategies = {
            standalone: function(monthIndex, monthFormat) {
                var date = new Date(1999, monthIndex, 13, 1);
                var dateString = getIntlFormatter({
                    month: monthFormat
                })(date);
                return dateString
            },
            format: function(monthIndex, monthFormat) {
                var date = new Date(0, monthIndex, 13, 1);
                var dateString = normalizeMonth(getIntlFormatter({
                    day: "numeric",
                    month: monthFormat
                })(date));
                var parts = dateString.split(" ").filter(function(part) {
                    return part.indexOf("13") < 0
                });
                if (1 === parts.length) {
                    return parts[0]
                } else {
                    if (2 === parts.length) {
                        return parts[0].length > parts[1].length ? parts[0] : parts[1]
                    }
                }
                return monthNameStrategies.standalone(monthIndex, monthFormat)
            }
        };
        module.exports = {
            engine: function() {
                return "intl"
            },
            getMonthNames: function(format, type) {
                var intlFormats = {
                    wide: "long",
                    abbreviated: "short",
                    narrow: "narrow"
                };
                var monthFormat = intlFormats[format || "wide"];
                type = "format" === type ? type : "standalone";
                return Array.apply(null, new Array(12)).map(function(_, monthIndex) {
                    return monthNameStrategies[type](monthIndex, monthFormat)
                })
            },
            getDayNames: function(format) {
                var intlFormats = {
                    wide: "long",
                    abbreviated: "short",
                    "short": "narrow",
                    narrow: "narrow"
                };
                var getIntlDayNames = function(format) {
                    return Array.apply(null, new Array(7)).map(function(_, dayIndex) {
                        return getIntlFormatter({
                            weekday: format
                        })(new Date(0, 0, dayIndex))
                    })
                };
                var result = getIntlDayNames(intlFormats[format || "wide"]);
                return result
            },
            getPeriodNames: function() {
                var hour12Formatter = getIntlFormatter({
                    hour: "numeric",
                    hour12: true
                });
                return [1, 13].map(function(hours) {
                    var hourNumberText = formatNumber(1);
                    var timeParts = hour12Formatter(new Date(0, 0, 1, hours)).split(hourNumberText);
                    if (2 !== timeParts.length) {
                        return ""
                    }
                    var biggerPart = timeParts[0].length > timeParts[1].length ? timeParts[0] : timeParts[1];
                    return biggerPart.trim()
                })
            },
            format: function(date, _format) {
                if (!date) {
                    return
                }
                if (!_format) {
                    return date
                }
                if ("function" !== typeof _format && !_format.formatter) {
                    _format = _format.type || _format
                }
                var intlFormat = getIntlFormat(_format);
                if (intlFormat) {
                    return getIntlFormatter(intlFormat)(date)
                }
                var formatType = _typeof(_format);
                if (_format.formatter || "function" === formatType || "string" === formatType) {
                    return this.callBase.apply(this, arguments)
                }
                return getIntlFormatter(_format)(date)
            },
            parse: function(dateString, format) {
                var _this = this;
                var formatter;
                if (format && !format.parser && "string" === typeof dateString) {
                    dateString = normalizeMonth(dateString);
                    formatter = function(date) {
                        return normalizeMonth(_this.format(date, format))
                    }
                }
                return this.callBase(dateString, formatter || format)
            },
            _parseDateBySimpleFormat: function(dateString, format) {
                var _this2 = this;
                dateString = normalizeNumerals(dateString);
                var formatParts = this.getFormatParts(format);
                var dateParts = dateString.split(/\D+/).filter(function(part) {
                    return part.length > 0
                });
                if (formatParts.length !== dateParts.length) {
                    return
                }
                var dateArgs = this._generateDateArgs(formatParts, dateParts);
                var constructDate = function(dateArgs, ampmShift) {
                    var hoursShift = ampmShift ? 12 : 0;
                    return new Date(dateArgs.year, dateArgs.month, dateArgs.day, (dateArgs.hours + hoursShift) % 24, dateArgs.minutes, dateArgs.seconds)
                };
                var constructValidDate = function(ampmShift) {
                    var parsedDate = constructDate(dateArgs, ampmShift);
                    if (dateStringEquals(normalizeNumerals(_this2.format(parsedDate, format)), dateString)) {
                        return parsedDate
                    }
                };
                return constructValidDate(false) || constructValidDate(true)
            },
            _generateDateArgs: function(formatParts, dateParts) {
                var currentDate = new Date;
                var dateArgs = {
                    year: currentDate.getFullYear(),
                    month: currentDate.getMonth(),
                    day: currentDate.getDate(),
                    hours: 0,
                    minutes: 0,
                    seconds: 0
                };
                formatParts.forEach(function(formatPart, index) {
                    var datePart = dateParts[index];
                    var parsed = parseInt(datePart, 10);
                    if ("month" === formatPart) {
                        parsed -= 1
                    }
                    dateArgs[formatPart] = parsed
                });
                return dateArgs
            },
            formatUsesMonthName: function(format) {
                if ("object" === _typeof(format) && !(format.type || format.format)) {
                    return "long" === format.month
                }
                return this.callBase.apply(this, arguments)
            },
            formatUsesDayName: function(format) {
                if ("object" === _typeof(format) && !(format.type || format.format)) {
                    return "long" === format.weekday
                }
                return this.callBase.apply(this, arguments)
            },
            getFormatParts: function(format) {
                if ("string" === typeof format) {
                    return this.callBase(format)
                }
                var intlFormat = (0, _extend.extend)({}, intlFormats[format.toLowerCase()]);
                var date = new Date(2001, 2, 4, 5, 6, 7);
                var formattedDate = getIntlFormatter(intlFormat)(date);
                formattedDate = normalizeNumerals(formattedDate);
                var formatParts = [{
                    name: "year",
                    value: 1
                }, {
                    name: "month",
                    value: 3
                }, {
                    name: "day",
                    value: 4
                }, {
                    name: "hours",
                    value: 5
                }, {
                    name: "minutes",
                    value: 6
                }, {
                    name: "seconds",
                    value: 7
                }];
                return formatParts.map(function(part) {
                    return {
                        name: part.name,
                        index: formattedDate.indexOf(part.value)
                    }
                }).filter(function(part) {
                    return part.index > -1
                }).sort(function(a, b) {
                    return a.index - b.index
                }).map(function(part) {
                    return part.name
                })
            }
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.file.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.cell_format_helper */ 458);
        var _excel4 = _interopRequireDefault(_excel3);
        var _excel5 = __webpack_require__( /*! ./excel.fill_helper */ 275);
        var _excel6 = _interopRequireDefault(_excel5);
        var _excel7 = __webpack_require__( /*! ./excel.font_helper */ 277);
        var _excel8 = _interopRequireDefault(_excel7);
        var _excel9 = __webpack_require__( /*! ./excel.number_format_helper */ 461);
        var _excel10 = _interopRequireDefault(_excel9);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var ExcelFile = function() {
            function ExcelFile() {
                _classCallCheck(this, ExcelFile);
                this._cellFormatTags = [];
                this._fillTags = [];
                this._fontTags = [];
                this._numberFormatTags = [];
                this._fillTags.push(_excel6.default.tryCreateTag({
                    patternFill: {
                        patternType: "none"
                    }
                }))
            }
            _createClass(ExcelFile, [{
                key: "registerCellFormat",
                value: function(cellFormat) {
                    var result;
                    var cellFormatTag = _excel4.default.tryCreateTag(cellFormat, {
                        registerFill: this.registerFill.bind(this),
                        registerFont: this.registerFont.bind(this),
                        registerNumberFormat: this.registerNumberFormat.bind(this)
                    });
                    if ((0, _type.isDefined)(cellFormatTag)) {
                        for (var i = 0; i < this._cellFormatTags.length; i++) {
                            if (_excel4.default.areEqual(this._cellFormatTags[i], cellFormatTag)) {
                                result = i;
                                break
                            }
                        }
                        if (void 0 === result) {
                            result = this._cellFormatTags.push(cellFormatTag) - 1
                        }
                    }
                    return result
                }
            }, {
                key: "generateCellFormatsXml",
                value: function() {
                    var cellFormatTagsAsXmlStringsArray = this._cellFormatTags.map(function(tag) {
                        return _excel4.default.toXml(tag)
                    });
                    return _excel2.default.toXml("cellXfs", {
                        count: cellFormatTagsAsXmlStringsArray.length
                    }, cellFormatTagsAsXmlStringsArray.join(""))
                }
            }, {
                key: "registerFill",
                value: function(fill) {
                    var result;
                    var fillTag = _excel6.default.tryCreateTag(fill);
                    if ((0, _type.isDefined)(fillTag)) {
                        for (var i = 0; i < this._fillTags.length; i++) {
                            if (_excel6.default.areEqual(this._fillTags[i], fillTag)) {
                                result = i;
                                break
                            }
                        }
                        if (void 0 === result) {
                            if (this._fillTags.length < 2) {
                                this._fillTags.push(_excel6.default.tryCreateTag({
                                    patternFill: {
                                        patternType: "Gray125"
                                    }
                                }))
                            }
                            result = this._fillTags.push(fillTag) - 1
                        }
                    }
                    return result
                }
            }, {
                key: "generateFillsXml",
                value: function() {
                    var tagsAsXmlStringsArray = this._fillTags.map(function(tag) {
                        return _excel6.default.toXml(tag)
                    });
                    return _excel2.default.toXml("fills", {
                        count: tagsAsXmlStringsArray.length
                    }, tagsAsXmlStringsArray.join(""))
                }
            }, {
                key: "registerFont",
                value: function(font) {
                    var result;
                    var fontTag = _excel8.default.tryCreateTag(font);
                    if ((0, _type.isDefined)(fontTag)) {
                        for (var i = 0; i < this._fontTags.length; i++) {
                            if (_excel8.default.areEqual(this._fontTags[i], fontTag)) {
                                result = i;
                                break
                            }
                        }
                        if (void 0 === result) {
                            result = this._fontTags.push(fontTag) - 1
                        }
                    }
                    return result
                }
            }, {
                key: "generateFontsXml",
                value: function() {
                    var xmlStringsArray = this._fontTags.map(function(tag) {
                        return _excel8.default.toXml(tag)
                    });
                    return _excel2.default.toXml("fonts", {
                        count: xmlStringsArray.length
                    }, xmlStringsArray.join(""))
                }
            }, {
                key: "_convertNumberFormatIndexToId",
                value: function(index) {
                    var CUSTOM_FORMAT_ID_START_VALUE = 165;
                    return CUSTOM_FORMAT_ID_START_VALUE + index
                }
            }, {
                key: "registerNumberFormat",
                value: function(numberFormat) {
                    var result;
                    var tag = _excel10.default.tryCreateTag(numberFormat);
                    if ((0, _type.isDefined)(tag)) {
                        for (var i = 0; i < this._numberFormatTags.length; i++) {
                            if (_excel10.default.areEqual(this._numberFormatTags[i], tag)) {
                                result = this._numberFormatTags[i][_excel10.default.ID_PROPERTY_NAME];
                                break
                            }
                        }
                        if (void 0 === result) {
                            tag[_excel10.default.ID_PROPERTY_NAME] = this._convertNumberFormatIndexToId(this._numberFormatTags.length);
                            result = tag[_excel10.default.ID_PROPERTY_NAME];
                            this._numberFormatTags.push(tag)
                        }
                    }
                    return result
                }
            }, {
                key: "generateNumberFormatsXml",
                value: function() {
                    if (this._numberFormatTags.length > 0) {
                        var xmlStringsArray = this._numberFormatTags.map(function(tag) {
                            return _excel10.default.toXml(tag)
                        });
                        return _excel2.default.toXml("numFmts", {
                            count: xmlStringsArray.length
                        }, xmlStringsArray.join(""))
                    } else {
                        return ""
                    }
                }
            }], [{
                key: "copyCellFormat",
                value: function(source) {
                    return _excel4.default.copy(source)
                }
            }]);
            return ExcelFile
        }();
        exports.default = ExcelFile;
        module.exports = ExcelFile
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.cell_format_helper.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.cell_alignment_helper */ 459);
        var _excel4 = _interopRequireDefault(_excel3);
        var _excel5 = __webpack_require__( /*! ./excel.fill_helper */ 275);
        var _excel6 = _interopRequireDefault(_excel5);
        var _excel7 = __webpack_require__( /*! ./excel.font_helper */ 277);
        var _excel8 = _interopRequireDefault(_excel7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var cellFormatHelper = {
            tryCreateTag: function(sourceObj, sharedItemsContainer) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    var numberFormatId;
                    if ("number" === typeof sourceObj.numberFormat) {
                        numberFormatId = sourceObj.numberFormat
                    } else {
                        numberFormatId = sharedItemsContainer.registerNumberFormat(sourceObj.numberFormat)
                    }
                    var fill = sourceObj.fill;
                    if (!(0, _type.isDefined)(fill)) {
                        fill = _excel6.default.tryCreateFillFromSimpleFormat(sourceObj)
                    }
                    result = {
                        numberFormatId: numberFormatId,
                        alignment: _excel4.default.tryCreateTag(sourceObj.alignment),
                        fontId: sharedItemsContainer.registerFont(sourceObj.font),
                        fillId: sharedItemsContainer.registerFill(fill)
                    };
                    if (cellFormatHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            copy: function(source) {
                var result;
                if (null === source) {
                    result = null
                } else {
                    if ((0, _type.isDefined)(source)) {
                        result = {};
                        if (void 0 !== source.numberFormat) {
                            result.numberFormat = source.numberFormat
                        }
                        if (void 0 !== source.fill) {
                            result.fill = _excel6.default.copy(source.fill)
                        } else {
                            _excel6.default.copySimpleFormat(source, result)
                        }
                        if (void 0 !== source.alignment) {
                            result.alignment = _excel4.default.copy(source.alignment)
                        }
                        if (void 0 !== source.font) {
                            result.font = _excel8.default.copy(source.font)
                        }
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return cellFormatHelper.isEmpty(leftTag) && cellFormatHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.fontId === rightTag.fontId && leftTag.numberFormatId === rightTag.numberFormatId && leftTag.fillId === rightTag.fillId && _excel4.default.areEqual(leftTag.alignment, rightTag.alignment)
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.fontId) && !(0, _type.isDefined)(tag.numberFormatId) && !(0, _type.isDefined)(tag.fillId) && _excel4.default.isEmpty(tag.alignment)
            },
            toXml: function(tag) {
                var isAlignmentEmpty = _excel4.default.isEmpty(tag.alignment);
                var applyNumberFormat;
                if ((0, _type.isDefined)(tag.numberFormatId)) {
                    applyNumberFormat = tag.numberFormatId > 0 ? 1 : 0
                }
                return _excel2.default.toXml("xf", {
                    xfId: 0,
                    applyAlignment: isAlignmentEmpty ? null : 1,
                    fontId: tag.fontId,
                    applyNumberFormat: applyNumberFormat,
                    fillId: tag.fillId,
                    numFmtId: tag.numberFormatId
                }, isAlignmentEmpty ? null : _excel4.default.toXml(tag.alignment))
            }
        };
        exports.default = cellFormatHelper
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.cell_alignment_helper.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var cellAlignmentHelper = {
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    result = {
                        vertical: sourceObj.vertical,
                        wrapText: sourceObj.wrapText,
                        horizontal: sourceObj.horizontal
                    };
                    if (cellAlignmentHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            copy: function(source) {
                var result = null;
                if ((0, _type.isDefined)(source)) {
                    result = {};
                    if (void 0 !== source.horizontal) {
                        result.horizontal = source.horizontal
                    }
                    if (void 0 !== source.vertical) {
                        result.vertical = source.vertical
                    }
                    if (void 0 !== source.wrapText) {
                        result.wrapText = source.wrapText
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return cellAlignmentHelper.isEmpty(leftTag) && cellAlignmentHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.vertical === rightTag.vertical && leftTag.wrapText === rightTag.wrapText && leftTag.horizontal === rightTag.horizontal
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.vertical) && !(0, _type.isDefined)(tag.wrapText) && !(0, _type.isDefined)(tag.horizontal)
            },
            toXml: function(tag) {
                return _excel2.default.toXml("alignment", {
                    vertical: tag.vertical,
                    wrapText: (0, _type.isDefined)(tag.wrapText) ? Number(tag.wrapText) : void 0,
                    horizontal: tag.horizontal
                })
            }
        };
        exports.default = cellAlignmentHelper
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.pattern_fill_helper.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.color_helper */ 276);
        var _excel4 = _interopRequireDefault(_excel3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var patternFillHelper = {
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ((0, _type.isDefined)(sourceObj)) {
                    result = {
                        patternType: sourceObj.patternType,
                        backgroundColor: _excel4.default.tryCreateTag(sourceObj.backgroundColor),
                        foregroundColor: _excel4.default.tryCreateTag(sourceObj.foregroundColor)
                    };
                    if (patternFillHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            copy: function(source) {
                var result = null;
                if ((0, _type.isDefined)(source)) {
                    result = {};
                    if (void 0 !== source.patternType) {
                        result.patternType = source.patternType
                    }
                    if (void 0 !== source.backgroundColor) {
                        result.backgroundColor = _excel4.default.copy(source.backgroundColor)
                    }
                    if (void 0 !== source.foregroundColor) {
                        result.foregroundColor = _excel4.default.copy(source.foregroundColor)
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return patternFillHelper.isEmpty(leftTag) && patternFillHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.patternType === rightTag.patternType && _excel4.default.areEqual(leftTag.backgroundColor, rightTag.backgroundColor) && _excel4.default.areEqual(leftTag.foregroundColor, rightTag.foregroundColor)
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.patternType)
            },
            toXml: function(tag) {
                var content = [(0, _type.isDefined)(tag.foregroundColor) ? _excel4.default.toXml("fgColor", tag.foregroundColor) : "", (0, _type.isDefined)(tag.backgroundColor) ? _excel4.default.toXml("bgColor", tag.backgroundColor) : ""].join("");
                return _excel2.default.toXml("patternFill", {
                    patternType: tag.patternType
                }, content)
            }
        };
        exports.default = patternFillHelper
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.number_format_helper.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 84);
        var _excel2 = _interopRequireDefault(_excel);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var numberFormatHelper = {
            ID_PROPERTY_NAME: "id",
            tryCreateTag: function(sourceObj) {
                var result = null;
                if ("string" === typeof sourceObj) {
                    result = {
                        formatCode: sourceObj
                    };
                    if (numberFormatHelper.isEmpty(result)) {
                        result = null
                    }
                }
                return result
            },
            areEqual: function(leftTag, rightTag) {
                return numberFormatHelper.isEmpty(leftTag) && numberFormatHelper.isEmpty(rightTag) || (0, _type.isDefined)(leftTag) && (0, _type.isDefined)(rightTag) && leftTag.formatCode === rightTag.formatCode
            },
            isEmpty: function(tag) {
                return !(0, _type.isDefined)(tag) || !(0, _type.isDefined)(tag.formatCode) || "" === tag.formatCode
            },
            toXml: function(tag) {
                return _excel2.default.toXml("numFmt", {
                    numFmtId: tag[numberFormatHelper.ID_PROPERTY_NAME],
                    formatCode: tag.formatCode
                })
            }
        };
        exports.default = numberFormatHelper
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/exporter/svg_creator.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var ajax = __webpack_require__( /*! ../core/utils/ajax */ 75);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var svgUtils = __webpack_require__( /*! ../core/utils/svg */ 216);
        var deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var when = deferredUtils.when;
        var Deferred = deferredUtils.Deferred;
        exports.svgCreator = {
            _markup: "",
            _imageArray: {},
            _imageDeferreds: [],
            _getBinaryFile: function(src, callback) {
                ajax.sendRequest({
                    url: src,
                    method: "GET",
                    responseType: "arraybuffer"
                }).done(callback).fail(function() {
                    callback(false)
                })
            },
            _loadImages: function() {
                var that = this;
                each(that._imageArray, function(src) {
                    var deferred = new Deferred;
                    that._imageDeferreds.push(deferred);
                    that._getBinaryFile(src, function(response) {
                        if (!response) {
                            delete that._imageArray[src];
                            deferred.resolve();
                            return
                        }
                        var i;
                        var binary = "";
                        var bytes = new Uint8Array(response);
                        var length = bytes.byteLength;
                        for (i = 0; i < length; i++) {
                            binary += String.fromCharCode(bytes[i])
                        }
                        that._imageArray[src] = "data:image/png;base64," + window.btoa(binary);
                        deferred.resolve()
                    })
                })
            },
            _parseImages: function(element) {
                var href;
                var that = this;
                if ("image" === element.tagName) {
                    href = $(element).attr("href") || $(element).attr("xlink:href");
                    if (!that._imageArray[href]) {
                        that._imageArray[href] = ""
                    }
                }
                each(element.childNodes, function(_, element) {
                    that._parseImages(element)
                })
            },
            _prepareImages: function(svgElem) {
                this._parseImages(svgElem);
                this._loadImages();
                return when.apply($, this._imageDeferreds)
            },
            getData: function(data, options) {
                var markup;
                var that = this;
                var xmlVersion = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
                var svgElem = svgUtils.getSvgElement(data);
                var $svgObject = $(svgElem);
                markup = xmlVersion + svgUtils.getSvgMarkup($svgObject.get(0), options.backgroundColor);
                return that._prepareImages(svgElem).then(function() {
                    each(that._imageArray, function(href, dataURI) {
                        var regexpString = "href=['|\"]".concat(href, "['|\"]");
                        markup = markup.replace(new RegExp(regexpString, "gi"), 'href="'.concat(dataURI, '"'))
                    });
                    return isFunction(window.Blob) ? that._getBlob(markup) : that._getBase64(markup)
                })
            },
            _getBlob: function(markup) {
                return new window.Blob([markup], {
                    type: "image/svg+xml"
                })
            },
            _getBase64: function(markup) {
                return window.btoa(markup)
            }
        };
        exports.getData = function(data, options) {
            return exports.svgCreator.getData(data, options)
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/http_request.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ./utils/window */ 7);
        var window = windowUtils.getWindow();
        var injector = __webpack_require__( /*! ./utils/dependency_injector */ 56);
        var nativeXMLHttpRequest = {
            getXhr: function() {
                return new window.XMLHttpRequest
            }
        };
        module.exports = injector(nativeXMLHttpRequest)
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/exporter/pdf_creator.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var VERSION = __webpack_require__( /*! ../core/version */ 164);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var imageCreator = __webpack_require__( /*! ./image_creator */ 278).imageCreator;
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var mainPageTemplate = "%PDF-1.3\r\n2 0 obj\r\n<</ProcSet[/PDF/ImageB/ImageC/ImageI]/XObject<</I0 5 0 R>>>>\r\nendobj\r\n4 0 obj\r\n<</Type/Pages/Kids[1 0 R]/Count 1>>\r\nendobj\r\n7 0 obj\r\n<</OpenAction[1 0 R /FitH null]/Type/Catalog/Pages 4 0 R/PageLayout/OneColumn>>\r\nendobj\r\n1 0 obj\r\n<</Type/Page/Resources 2 0 R/MediaBox[0 0 _width_ _height_]/Contents 3 0 R/Parent 4 0 R>>\r\nendobj\r\n";
        var contentTemplate = "3 0 obj\r\n<</Length 52>>stream\r\n0.20 w\n0 G\nq _width_ 0 0 _height_ 0.00 0.00 cm /I0 Do Q\r\nendstream\r\nendobj\r\n";
        var infoTemplate = "6 0 obj\r\n<</CreationDate _date_/Producer(DevExtreme _version_)>>\r\nendobj\r\n";
        var imageStartTemplate = "5 0 obj\r\n<</Type/XObject/Subtype/Image/Width _width_/Height _height_/ColorSpace/DeviceRGB/BitsPerComponent 8/Filter/DCTDecode/Length _length_>>stream\r\n";
        var imageEndTemplate = "\r\nendstream\r\nendobj\r\n";
        var trailerTemplate = "trailer\r\n<<\r\n/Size 8\r\n/Root 7 0 R\r\n/Info 6 0 R\r\n>>\r\nstartxref\r\n_length_\r\n%%EOF";
        var xrefTemplate = "xref\r\n0 8\r\n0000000000 65535 f\r\n0000000241 00000 n\r\n0000000010 00000 n\r\n_main_ 00000 n\r\n0000000089 00000 n\r\n_image_ 00000 n\r\n_info_ 00000 n\r\n0000000143 00000 n\r\n";
        var pad = function pad(str, len) {
            return str.length < len ? pad("0" + str, len) : str
        };
        var composePdfString = function(imageString, options, curDate) {
            var margin = 2 * (options.margin || 0);
            var width = options.width + margin;
            var height = options.height + margin;
            var widthPt = (.75 * width).toFixed(2);
            var heightPt = (.75 * height).toFixed(2);
            var mainPage = mainPageTemplate.replace("_width_", widthPt).replace("_height_", heightPt);
            var content = contentTemplate.replace("_width_", widthPt).replace("_height_", heightPt);
            var info = infoTemplate.replace("_date_", curDate).replace("_version_", VERSION);
            var image = imageStartTemplate.replace("_width_", width).replace("_height_", height).replace("_length_", imageString.length) + imageString + imageEndTemplate;
            var xref = getXref(mainPage.length, content.length, info.length);
            var mainContent = mainPage + content + info + image;
            var trailer = trailerTemplate.replace("_length_", mainContent.length);
            return mainContent + xref + trailer
        };

        function getXref(mainPageLength, contentLength, infoLength) {
            return xrefTemplate.replace("_main_", pad(mainPageLength + "", 10)).replace("_info_", pad(mainPageLength + contentLength + "", 10)).replace("_image_", pad(mainPageLength + contentLength + infoLength + "", 10))
        }
        var getCurDate = function() {
            return new Date
        };
        var getBlob = function(binaryData) {
            var i = 0;
            var dataArray = new Uint8Array(binaryData.length);
            for (; i < binaryData.length; i++) {
                dataArray[i] = binaryData.charCodeAt(i)
            }
            return new window.Blob([dataArray.buffer], {
                type: "application/pdf"
            })
        };
        var getBase64 = function(binaryData) {
            return window.btoa(binaryData)
        };
        exports.getData = function(data, options) {
            return imageCreator.getImageData(data, extend({}, options, {
                format: "JPEG"
            })).then(function(imageString) {
                var binaryData = composePdfString(imageString, options, getCurDate());
                var pdfData = isFunction(window.Blob) ? getBlob(binaryData) : getBase64(binaryData);
                return pdfData
            })
        };
        exports.__tests = {
            set_composePdfString: function(func) {
                exports.__tests.composePdfString = composePdfString;
                composePdfString = func
            },
            restore_composePdfString: function(func) {
                if (exports.__tests.composePdfString) {
                    composePdfString = exports.__tests.composePdfString;
                    exports.__tests.composePdfString = null
                }
            },
            set_getCurDate: function(func) {
                exports.__tests.getCurDate = getCurDate;
                getCurDate = func
            },
            restore_getCurDate: function(func) {
                if (exports.__tests.getCurDate) {
                    getCurDate = exports.__tests.getCurDate;
                    exports.__tests.getCurDate = null
                }
            },
            set_getBlob: function(func) {
                exports.__tests.getBlob = getBlob;
                getBlob = func
            },
            restore_getBlob: function(func) {
                if (exports.__tests.getBlob) {
                    getBlob = exports.__tests.getBlob;
                    exports.__tests.getBlob = null
                }
            },
            set_getBase64: function(func) {
                exports.__tests.getBase64 = getBase64;
                getBase64 = func
            },
            restore_getBase64: function(func) {
                if (exports.__tests.getBase64) {
                    getBase64 = exports.__tests.getBase64;
                    exports.__tests.getBase64 = null
                }
            }
        }
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/excel_exporter.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.exportDataGrid = void 0;
        var _export_data_grid = __webpack_require__( /*! ./exporter/exceljs/export_data_grid */ 466);
        exports.exportDataGrid = _export_data_grid.exportDataGrid
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/exporter/exceljs/export_data_grid.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports._getFullOptions = exports.MAX_EXCEL_COLUMN_WIDTH = exports.exportDataGrid = void 0;
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel_format_converter = __webpack_require__( /*! ../excel_format_converter */ 186);
        var _excel_format_converter2 = _interopRequireDefault(_excel_format_converter);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MAX_DIGIT_WIDTH_IN_PIXELS = 7;
        var MAX_EXCEL_COLUMN_WIDTH = 255;

        function exportDataGrid(options) {
            if (!(0, _type.isDefined)(options)) {
                return
            }
            var _getFullOptions2 = _getFullOptions(options),
                customizeCell = _getFullOptions2.customizeCell,
                component = _getFullOptions2.component,
                worksheet = _getFullOptions2.worksheet,
                topLeftCell = _getFullOptions2.topLeftCell,
                autoFilterEnabled = _getFullOptions2.autoFilterEnabled,
                keepColumnWidths = _getFullOptions2.keepColumnWidths,
                selectedRowsOnly = _getFullOptions2.selectedRowsOnly,
                loadPanel = _getFullOptions2.loadPanel;
            var initialLoadPanelOptions = (0, _extend.extend)({}, component.option("loadPanel"));
            if ("animation" in component.option("loadPanel")) {
                loadPanel.animation = null
            }
            component.option("loadPanel", loadPanel);
            var wrapText = !!component.option("wordWrapEnabled");
            worksheet.properties.outlineProperties = {
                summaryBelow: false,
                summaryRight: false
            };
            var cellRange = {
                from: {
                    row: topLeftCell.row,
                    column: topLeftCell.column
                },
                to: {
                    row: topLeftCell.row,
                    column: topLeftCell.column
                }
            };
            var dataProvider = component.getDataProvider(selectedRowsOnly);
            return new Promise(function(resolve) {
                dataProvider.ready().done(function() {
                    var columns = dataProvider.getColumns();
                    var headerRowCount = dataProvider.getHeaderRowCount();
                    var dataRowsCount = dataProvider.getRowsCount();
                    if (keepColumnWidths) {
                        _setColumnsWidth(worksheet, columns, cellRange.from.column)
                    }
                    var mergedCells = [];
                    var mergeRanges = [];
                    for (var rowIndex = 0; rowIndex < dataRowsCount; rowIndex++) {
                        var row = worksheet.getRow(cellRange.from.row + rowIndex);
                        _exportRow(rowIndex, columns.length, row, cellRange.from.column, dataProvider, customizeCell, headerRowCount, mergedCells, mergeRanges, wrapText);
                        if (rowIndex >= headerRowCount) {
                            row.outlineLevel = dataProvider.getGroupLevel(rowIndex)
                        }
                        if (rowIndex >= 1) {
                            cellRange.to.row++
                        }
                    }
                    _mergeCells(worksheet, topLeftCell, mergeRanges);
                    cellRange.to.column += columns.length > 0 ? columns.length - 1 : 0;
                    var worksheetViewSettings = worksheet.views[0] || {};
                    if (component.option("rtlEnabled")) {
                        worksheetViewSettings.rightToLeft = true
                    }
                    if (headerRowCount > 0) {
                        if (Object.keys(worksheetViewSettings).indexOf("state") === -1) {
                            (0, _extend.extend)(worksheetViewSettings, {
                                state: "frozen",
                                ySplit: cellRange.from.row + dataProvider.getFrozenArea().y - 1
                            })
                        }
                        _setAutoFilter(dataProvider, worksheet, cellRange, autoFilterEnabled)
                    }
                    if (Object.keys(worksheetViewSettings).length > 0) {
                        worksheet.views = [worksheetViewSettings]
                    }
                    resolve(cellRange)
                }).always(function() {
                    component.option("loadPanel", initialLoadPanelOptions)
                })
            })
        }

        function _getFullOptions(options) {
            var fullOptions = (0, _extend.extend)({}, options);
            if (!(0, _type.isDefined)(fullOptions.topLeftCell)) {
                fullOptions.topLeftCell = {
                    row: 1,
                    column: 1
                }
            } else {
                if ((0, _type.isString)(fullOptions.topLeftCell)) {
                    var _fullOptions$workshee = fullOptions.worksheet.getCell(fullOptions.topLeftCell),
                        row = _fullOptions$workshee.row,
                        col = _fullOptions$workshee.col;
                    fullOptions.topLeftCell = {
                        row: row,
                        column: col
                    }
                }
            }
            if (!(0, _type.isDefined)(fullOptions.keepColumnWidths)) {
                fullOptions.keepColumnWidths = true
            }
            if (!(0, _type.isDefined)(fullOptions.selectedRowsOnly)) {
                fullOptions.selectedRowsOnly = false
            }
            if (!(0, _type.isDefined)(fullOptions.loadPanel)) {
                fullOptions.loadPanel = {}
            }
            if (!(0, _type.isDefined)(fullOptions.loadPanel.enabled)) {
                fullOptions.loadPanel.enabled = true
            }
            if (!(0, _type.isDefined)(fullOptions.loadPanel.text)) {
                fullOptions.loadPanel.text = _message2.default.format("dxDataGrid-exporting")
            }
            if (!(0, _type.isDefined)(fullOptions.autoFilterEnabled)) {
                fullOptions.autoFilterEnabled = false
            }
            return fullOptions
        }

        function _exportRow(rowIndex, cellCount, row, startColumnIndex, dataProvider, customizeCell, headerRowCount, mergedCells, mergeRanges, wrapText) {
            var styles = dataProvider.getStyles();
            for (var cellIndex = 0; cellIndex < cellCount; cellIndex++) {
                var cellData = dataProvider.getCellData(rowIndex, cellIndex, true);
                var gridCell = cellData.cellSourceData;
                var excelCell = row.getCell(startColumnIndex + cellIndex);
                if ((0, _type.isDate)(cellData.value)) {
                    excelCell.value = _convertDateForExcelJS(cellData.value)
                } else {
                    excelCell.value = cellData.value
                }
                if ((0, _type.isDefined)(excelCell.value)) {
                    var _styles$dataProvider$ = styles[dataProvider.getStyleId(rowIndex, cellIndex)],
                        bold = _styles$dataProvider$.bold,
                        horizontalAlignment = _styles$dataProvider$.alignment,
                        format = _styles$dataProvider$.format,
                        dataType = _styles$dataProvider$.dataType;
                    var numberFormat = _tryConvertToExcelNumberFormat(format, dataType);
                    if ((0, _type.isDefined)(numberFormat)) {
                        numberFormat = numberFormat.replace(/&quot;/g, "")
                    } else {
                        if ((0, _type.isString)(excelCell.value) && /^[@=+-]/.test(excelCell.value)) {
                            numberFormat = "@"
                        }
                    }
                    _setNumberFormat(excelCell, numberFormat);
                    _setFont(excelCell, bold);
                    _setAlignment(excelCell, wrapText, horizontalAlignment)
                }
                if ((0, _type.isDefined)(customizeCell)) {
                    customizeCell({
                        cell: excelCell,
                        excelCell: excelCell,
                        gridCell: gridCell
                    })
                }
                if (rowIndex < headerRowCount) {
                    var mergeRange = _tryGetMergeRange(rowIndex, cellIndex, mergedCells, dataProvider);
                    if ((0, _type.isDefined)(mergeRange)) {
                        mergeRanges.push(mergeRange)
                    }
                }
            }
        }

        function _convertDateForExcelJS(date) {
            return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()))
        }

        function _setAutoFilter(dataProvider, worksheet, cellRange, autoFilterEnabled) {
            if (autoFilterEnabled) {
                if (!(0, _type.isDefined)(worksheet.autoFilter) && dataProvider.getRowsCount() > 0) {
                    worksheet.autoFilter = cellRange
                }
            }
        }

        function _setNumberFormat(excelCell, numberFormat) {
            excelCell.numFmt = numberFormat
        }

        function _tryConvertToExcelNumberFormat(format, dataType) {
            var newFormat = _formatObjectConverter(format, dataType);
            var currency = newFormat.currency;
            format = newFormat.format;
            dataType = newFormat.dataType;
            return _excel_format_converter2.default.convertFormat(format, newFormat.precision, dataType, currency)
        }

        function _formatObjectConverter(format, dataType) {
            var result = {
                format: format,
                precision: format && format.precision,
                dataType: dataType
            };
            if ((0, _type.isObject)(format)) {
                return (0, _extend.extend)(result, format, {
                    format: format.formatter || format.type,
                    currency: format.currency
                })
            }
            return result
        }

        function _setFont(excelCell, bold) {
            if ((0, _type.isDefined)(bold)) {
                excelCell.font = excelCell.font || {};
                excelCell.font.bold = bold
            }
        }

        function _setAlignment(excelCell, wrapText, horizontalAlignment) {
            excelCell.alignment = excelCell.alignment || {};
            if ((0, _type.isDefined)(wrapText)) {
                excelCell.alignment.wrapText = wrapText
            }
            if ((0, _type.isDefined)(horizontalAlignment)) {
                excelCell.alignment.horizontal = horizontalAlignment
            }
            excelCell.alignment.vertical = "top"
        }

        function _setColumnsWidth(worksheet, columns, startColumnIndex) {
            if (!(0, _type.isDefined)(columns)) {
                return
            }
            for (var i = 0; i < columns.length; i++) {
                var columnWidth = columns[i].width;
                if ("number" === typeof columnWidth && isFinite(columnWidth)) {
                    worksheet.getColumn(startColumnIndex + i).width = Math.min(MAX_EXCEL_COLUMN_WIDTH, Math.floor(columnWidth / MAX_DIGIT_WIDTH_IN_PIXELS * 100) / 100)
                }
            }
        }

        function _tryGetMergeRange(rowIndex, cellIndex, mergedCells, dataProvider) {
            if (!mergedCells[rowIndex] || !mergedCells[rowIndex][cellIndex]) {
                var cellMerge = dataProvider.getCellMerging(rowIndex, cellIndex);
                if (cellMerge.colspan || cellMerge.rowspan) {
                    for (var i = rowIndex; i <= rowIndex + cellMerge.rowspan || 0; i++) {
                        for (var j = cellIndex; j <= cellIndex + cellMerge.colspan || 0; j++) {
                            if (!mergedCells[i]) {
                                mergedCells[i] = []
                            }
                            mergedCells[i][j] = true
                        }
                    }
                    return {
                        start: {
                            row: rowIndex,
                            column: cellIndex
                        },
                        end: {
                            row: rowIndex + (cellMerge.rowspan || 0),
                            column: cellIndex + (cellMerge.colspan || 0)
                        }
                    }
                }
            }
        }

        function _mergeCells(worksheet, topLeftCell, mergeRanges) {
            mergeRanges.forEach(function(mergeRange) {
                worksheet.mergeCells(mergeRange.start.row + topLeftCell.row, mergeRange.start.column + topLeftCell.column, mergeRange.end.row + topLeftCell.row, mergeRange.end.column + topLeftCell.column)
            })
        }
        exports.exportDataGrid = exportDataGrid;
        exports.MAX_EXCEL_COLUMN_WIDTH = MAX_EXCEL_COLUMN_WIDTH;
        exports._getFullOptions = _getFullOptions
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/localization/default_messages.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {
            en: {
                Yes: "Yes",
                No: "No",
                Cancel: "Cancel",
                Clear: "Clear",
                Done: "Done",
                Loading: "Loading...",
                Select: "Select...",
                Search: "Search",
                Back: "Back",
                OK: "OK",
                "dxCollectionWidget-noDataText": "No data to display",
                "dxDropDownEditor-selectLabel": "Select",
                "validation-required": "Required",
                "validation-required-formatted": "{0} is required",
                "validation-numeric": "Value must be a number",
                "validation-numeric-formatted": "{0} must be a number",
                "validation-range": "Value is out of range",
                "validation-range-formatted": "{0} is out of range",
                "validation-stringLength": "The length of the value is not correct",
                "validation-stringLength-formatted": "The length of {0} is not correct",
                "validation-custom": "Value is invalid",
                "validation-custom-formatted": "{0} is invalid",
                "validation-async": "Value is invalid",
                "validation-async-formatted": "{0} is invalid",
                "validation-compare": "Values do not match",
                "validation-compare-formatted": "{0} does not match",
                "validation-pattern": "Value does not match pattern",
                "validation-pattern-formatted": "{0} does not match pattern",
                "validation-email": "Email is invalid",
                "validation-email-formatted": "{0} is invalid",
                "validation-mask": "Value is invalid",
                "dxLookup-searchPlaceholder": "Minimum character number: {0}",
                "dxList-pullingDownText": "Pull down to refresh...",
                "dxList-pulledDownText": "Release to refresh...",
                "dxList-refreshingText": "Refreshing...",
                "dxList-pageLoadingText": "Loading...",
                "dxList-nextButtonText": "More",
                "dxList-selectAll": "Select All",
                "dxListEditDecorator-delete": "Delete",
                "dxListEditDecorator-more": "More",
                "dxScrollView-pullingDownText": "Pull down to refresh...",
                "dxScrollView-pulledDownText": "Release to refresh...",
                "dxScrollView-refreshingText": "Refreshing...",
                "dxScrollView-reachBottomText": "Loading...",
                "dxDateBox-simulatedDataPickerTitleTime": "Select time",
                "dxDateBox-simulatedDataPickerTitleDate": "Select date",
                "dxDateBox-simulatedDataPickerTitleDateTime": "Select date and time",
                "dxDateBox-validation-datetime": "Value must be a date or time",
                "dxFileUploader-selectFile": "Select file",
                "dxFileUploader-dropFile": "or Drop file here",
                "dxFileUploader-bytes": "bytes",
                "dxFileUploader-kb": "kb",
                "dxFileUploader-Mb": "Mb",
                "dxFileUploader-Gb": "Gb",
                "dxFileUploader-upload": "Upload",
                "dxFileUploader-uploaded": "Uploaded",
                "dxFileUploader-readyToUpload": "Ready to upload",
                "dxFileUploader-uploadFailedMessage": "Upload failed",
                "dxFileUploader-invalidFileExtension": "File type is not allowed",
                "dxFileUploader-invalidMaxFileSize": "File is too large",
                "dxFileUploader-invalidMinFileSize": "File is too small",
                "dxRangeSlider-ariaFrom": "From",
                "dxRangeSlider-ariaTill": "Till",
                "dxSwitch-switchedOnText": "ON",
                "dxSwitch-switchedOffText": "OFF",
                "dxForm-optionalMark": "optional",
                "dxForm-requiredMessage": "{0} is required",
                "dxNumberBox-invalidValueMessage": "Value must be a number",
                "dxNumberBox-noDataText": "No data",
                "dxDataGrid-columnChooserTitle": "Column Chooser",
                "dxDataGrid-columnChooserEmptyText": "Drag a column here to hide it",
                "dxDataGrid-groupContinuesMessage": "Continues on the next page",
                "dxDataGrid-groupContinuedMessage": "Continued from the previous page",
                "dxDataGrid-groupHeaderText": "Group by This Column",
                "dxDataGrid-ungroupHeaderText": "Ungroup",
                "dxDataGrid-ungroupAllText": "Ungroup All",
                "dxDataGrid-editingEditRow": "Edit",
                "dxDataGrid-editingSaveRowChanges": "Save",
                "dxDataGrid-editingCancelRowChanges": "Cancel",
                "dxDataGrid-editingDeleteRow": "Delete",
                "dxDataGrid-editingUndeleteRow": "Undelete",
                "dxDataGrid-editingConfirmDeleteMessage": "Are you sure you want to delete this record?",
                "dxDataGrid-validationCancelChanges": "Cancel changes",
                "dxDataGrid-groupPanelEmptyText": "Drag a column header here to group by that column",
                "dxDataGrid-noDataText": "No data",
                "dxDataGrid-searchPanelPlaceholder": "Search...",
                "dxDataGrid-filterRowShowAllText": "(All)",
                "dxDataGrid-filterRowResetOperationText": "Reset",
                "dxDataGrid-filterRowOperationEquals": "Equals",
                "dxDataGrid-filterRowOperationNotEquals": "Does not equal",
                "dxDataGrid-filterRowOperationLess": "Less than",
                "dxDataGrid-filterRowOperationLessOrEquals": "Less than or equal to",
                "dxDataGrid-filterRowOperationGreater": "Greater than",
                "dxDataGrid-filterRowOperationGreaterOrEquals": "Greater than or equal to",
                "dxDataGrid-filterRowOperationStartsWith": "Starts with",
                "dxDataGrid-filterRowOperationContains": "Contains",
                "dxDataGrid-filterRowOperationNotContains": "Does not contain",
                "dxDataGrid-filterRowOperationEndsWith": "Ends with",
                "dxDataGrid-filterRowOperationBetween": "Between",
                "dxDataGrid-filterRowOperationBetweenStartText": "Start",
                "dxDataGrid-filterRowOperationBetweenEndText": "End",
                "dxDataGrid-applyFilterText": "Apply filter",
                "dxDataGrid-trueText": "true",
                "dxDataGrid-falseText": "false",
                "dxDataGrid-sortingAscendingText": "Sort Ascending",
                "dxDataGrid-sortingDescendingText": "Sort Descending",
                "dxDataGrid-sortingClearText": "Clear Sorting",
                "dxDataGrid-editingSaveAllChanges": "Save changes",
                "dxDataGrid-editingCancelAllChanges": "Discard changes",
                "dxDataGrid-editingAddRow": "Add a row",
                "dxDataGrid-summaryMin": "Min: {0}",
                "dxDataGrid-summaryMinOtherColumn": "Min of {1} is {0}",
                "dxDataGrid-summaryMax": "Max: {0}",
                "dxDataGrid-summaryMaxOtherColumn": "Max of {1} is {0}",
                "dxDataGrid-summaryAvg": "Avg: {0}",
                "dxDataGrid-summaryAvgOtherColumn": "Avg of {1} is {0}",
                "dxDataGrid-summarySum": "Sum: {0}",
                "dxDataGrid-summarySumOtherColumn": "Sum of {1} is {0}",
                "dxDataGrid-summaryCount": "Count: {0}",
                "dxDataGrid-columnFixingFix": "Fix",
                "dxDataGrid-columnFixingUnfix": "Unfix",
                "dxDataGrid-columnFixingLeftPosition": "To the left",
                "dxDataGrid-columnFixingRightPosition": "To the right",
                "dxDataGrid-exportTo": "Export",
                "dxDataGrid-exportToExcel": "Export to Excel file",
                "dxDataGrid-exporting": "Exporting...",
                "dxDataGrid-excelFormat": "Excel file",
                "dxDataGrid-selectedRows": "Selected rows",
                "dxDataGrid-exportSelectedRows": "Export selected rows",
                "dxDataGrid-exportAll": "Export all data",
                "dxDataGrid-headerFilterEmptyValue": "(Blanks)",
                "dxDataGrid-headerFilterOK": "OK",
                "dxDataGrid-headerFilterCancel": "Cancel",
                "dxDataGrid-ariaColumn": "Column",
                "dxDataGrid-ariaValue": "Value",
                "dxDataGrid-ariaFilterCell": "Filter cell",
                "dxDataGrid-ariaCollapse": "Collapse",
                "dxDataGrid-ariaExpand": "Expand",
                "dxDataGrid-ariaDataGrid": "Data grid",
                "dxDataGrid-ariaSearchInGrid": "Search in data grid",
                "dxDataGrid-ariaSelectAll": "Select all",
                "dxDataGrid-ariaSelectRow": "Select row",
                "dxDataGrid-filterBuilderPopupTitle": "Filter Builder",
                "dxDataGrid-filterPanelCreateFilter": "Create Filter",
                "dxDataGrid-filterPanelClearFilter": "Clear",
                "dxDataGrid-filterPanelFilterEnabledHint": "Enable the filter",
                "dxTreeList-ariaTreeList": "Tree list",
                "dxTreeList-editingAddRowToNode": "Add",
                "dxPager-infoText": "Page {0} of {1} ({2} items)",
                "dxPager-pagesCountText": "of",
                "dxPivotGrid-grandTotal": "Grand Total",
                "dxPivotGrid-total": "{0} Total",
                "dxPivotGrid-fieldChooserTitle": "Field Chooser",
                "dxPivotGrid-showFieldChooser": "Show Field Chooser",
                "dxPivotGrid-expandAll": "Expand All",
                "dxPivotGrid-collapseAll": "Collapse All",
                "dxPivotGrid-sortColumnBySummary": 'Sort "{0}" by This Column',
                "dxPivotGrid-sortRowBySummary": 'Sort "{0}" by This Row',
                "dxPivotGrid-removeAllSorting": "Remove All Sorting",
                "dxPivotGrid-dataNotAvailable": "N/A",
                "dxPivotGrid-rowFields": "Row Fields",
                "dxPivotGrid-columnFields": "Column Fields",
                "dxPivotGrid-dataFields": "Data Fields",
                "dxPivotGrid-filterFields": "Filter Fields",
                "dxPivotGrid-allFields": "All Fields",
                "dxPivotGrid-columnFieldArea": "Drop Column Fields Here",
                "dxPivotGrid-dataFieldArea": "Drop Data Fields Here",
                "dxPivotGrid-rowFieldArea": "Drop Row Fields Here",
                "dxPivotGrid-filterFieldArea": "Drop Filter Fields Here",
                "dxScheduler-editorLabelTitle": "Subject",
                "dxScheduler-editorLabelStartDate": "Start Date",
                "dxScheduler-editorLabelEndDate": "End Date",
                "dxScheduler-editorLabelDescription": "Description",
                "dxScheduler-editorLabelRecurrence": "Repeat",
                "dxScheduler-openAppointment": "Open appointment",
                "dxScheduler-recurrenceNever": "Never",
                "dxScheduler-recurrenceMinutely": "Every minute",
                "dxScheduler-recurrenceHourly": "Hourly",
                "dxScheduler-recurrenceDaily": "Daily",
                "dxScheduler-recurrenceWeekly": "Weekly",
                "dxScheduler-recurrenceMonthly": "Monthly",
                "dxScheduler-recurrenceYearly": "Yearly",
                "dxScheduler-recurrenceRepeatEvery": "Repeat Every",
                "dxScheduler-recurrenceRepeatOn": "Repeat On",
                "dxScheduler-recurrenceEnd": "End repeat",
                "dxScheduler-recurrenceAfter": "After",
                "dxScheduler-recurrenceOn": "On",
                "dxScheduler-recurrenceRepeatMinutely": "minute(s)",
                "dxScheduler-recurrenceRepeatHourly": "hour(s)",
                "dxScheduler-recurrenceRepeatDaily": "day(s)",
                "dxScheduler-recurrenceRepeatWeekly": "week(s)",
                "dxScheduler-recurrenceRepeatMonthly": "month(s)",
                "dxScheduler-recurrenceRepeatYearly": "year(s)",
                "dxScheduler-switcherDay": "Day",
                "dxScheduler-switcherWeek": "Week",
                "dxScheduler-switcherWorkWeek": "Work Week",
                "dxScheduler-switcherMonth": "Month",
                "dxScheduler-switcherAgenda": "Agenda",
                "dxScheduler-switcherTimelineDay": "Timeline Day",
                "dxScheduler-switcherTimelineWeek": "Timeline Week",
                "dxScheduler-switcherTimelineWorkWeek": "Timeline Work Week",
                "dxScheduler-switcherTimelineMonth": "Timeline Month",
                "dxScheduler-recurrenceRepeatOnDate": "on date",
                "dxScheduler-recurrenceRepeatCount": "occurrence(s)",
                "dxScheduler-allDay": "All day",
                "dxScheduler-confirmRecurrenceEditMessage": "Do you want to edit only this appointment or the whole series?",
                "dxScheduler-confirmRecurrenceDeleteMessage": "Do you want to delete only this appointment or the whole series?",
                "dxScheduler-confirmRecurrenceEditSeries": "Edit series",
                "dxScheduler-confirmRecurrenceDeleteSeries": "Delete series",
                "dxScheduler-confirmRecurrenceEditOccurrence": "Edit appointment",
                "dxScheduler-confirmRecurrenceDeleteOccurrence": "Delete appointment",
                "dxScheduler-noTimezoneTitle": "No timezone",
                "dxScheduler-moreAppointments": "{0} more",
                "dxCalendar-todayButtonText": "Today",
                "dxCalendar-ariaWidgetName": "Calendar",
                "dxColorView-ariaRed": "Red",
                "dxColorView-ariaGreen": "Green",
                "dxColorView-ariaBlue": "Blue",
                "dxColorView-ariaAlpha": "Transparency",
                "dxColorView-ariaHex": "Color code",
                "dxTagBox-selected": "{0} selected",
                "dxTagBox-allSelected": "All selected ({0})",
                "dxTagBox-moreSelected": "{0} more",
                "vizExport-printingButtonText": "Print",
                "vizExport-titleMenuText": "Exporting/Printing",
                "vizExport-exportButtonText": "{0} file",
                "dxFilterBuilder-and": "And",
                "dxFilterBuilder-or": "Or",
                "dxFilterBuilder-notAnd": "Not And",
                "dxFilterBuilder-notOr": "Not Or",
                "dxFilterBuilder-addCondition": "Add Condition",
                "dxFilterBuilder-addGroup": "Add Group",
                "dxFilterBuilder-enterValueText": "<enter a value>",
                "dxFilterBuilder-filterOperationEquals": "Equals",
                "dxFilterBuilder-filterOperationNotEquals": "Does not equal",
                "dxFilterBuilder-filterOperationLess": "Is less than",
                "dxFilterBuilder-filterOperationLessOrEquals": "Is less than or equal to",
                "dxFilterBuilder-filterOperationGreater": "Is greater than",
                "dxFilterBuilder-filterOperationGreaterOrEquals": "Is greater than or equal to",
                "dxFilterBuilder-filterOperationStartsWith": "Starts with",
                "dxFilterBuilder-filterOperationContains": "Contains",
                "dxFilterBuilder-filterOperationNotContains": "Does not contain",
                "dxFilterBuilder-filterOperationEndsWith": "Ends with",
                "dxFilterBuilder-filterOperationIsBlank": "Is blank",
                "dxFilterBuilder-filterOperationIsNotBlank": "Is not blank",
                "dxFilterBuilder-filterOperationBetween": "Is between",
                "dxFilterBuilder-filterOperationAnyOf": "Is any of",
                "dxFilterBuilder-filterOperationNoneOf": "Is none of",
                "dxHtmlEditor-dialogColorCaption": "Change Font Color",
                "dxHtmlEditor-dialogBackgroundCaption": "Change Background Color",
                "dxHtmlEditor-dialogLinkCaption": "Add Link",
                "dxHtmlEditor-dialogLinkUrlField": "URL",
                "dxHtmlEditor-dialogLinkTextField": "Text",
                "dxHtmlEditor-dialogLinkTargetField": "Open link in new window",
                "dxHtmlEditor-dialogImageCaption": "Add Image",
                "dxHtmlEditor-dialogImageUrlField": "URL",
                "dxHtmlEditor-dialogImageAltField": "Alternate text",
                "dxHtmlEditor-dialogImageWidthField": "Width (px)",
                "dxHtmlEditor-dialogImageHeightField": "Height (px)",
                "dxHtmlEditor-heading": "Heading",
                "dxHtmlEditor-normalText": "Normal text",
                "dxFileManager-newDirectoryName": "Untitled directory",
                "dxFileManager-rootDirectoryName": "Files",
                "dxFileManager-errorNoAccess": "Access Denied. Operation could not be completed.",
                "dxFileManager-errorDirectoryExistsFormat": "Directory '{0}' already exists.",
                "dxFileManager-errorFileExistsFormat": "File '{0}' already exists.",
                "dxFileManager-errorFileNotFoundFormat": "File '{0}' not found.",
                "dxFileManager-errorDirectoryNotFoundFormat": "Directory '{0}' not found.",
                "dxFileManager-errorWrongFileExtension": "File extension is not allowed.",
                "dxFileManager-errorMaxFileSizeExceeded": "File size exceeds the maximum allowed size.",
                "dxFileManager-errorInvalidSymbols": "This name contains invalid characters.",
                "dxFileManager-errorDefault": "Unspecified error.",
                "dxFileManager-errorDirectoryOpenFailed": "The directory cannot be opened",
                "dxFileManager-commandCreate": "New directory",
                "dxFileManager-commandRename": "Rename",
                "dxFileManager-commandMove": "Move to",
                "dxFileManager-commandCopy": "Copy to",
                "dxFileManager-commandDelete": "Delete",
                "dxFileManager-commandDownload": "Download",
                "dxFileManager-commandUpload": "Upload files",
                "dxFileManager-commandRefresh": "Refresh",
                "dxFileManager-commandThumbnails": "Thumbnails View",
                "dxFileManager-commandDetails": "Details View",
                "dxFileManager-commandClearSelection": "Clear selection",
                "dxFileManager-dialogDirectoryChooserMoveTitle": "Move to",
                "dxFileManager-dialogDirectoryChooserMoveButtonText": "Move",
                "dxFileManager-dialogDirectoryChooserCopyTitle": "Copy to",
                "dxFileManager-dialogDirectoryChooserCopyButtonText": "Copy",
                "dxFileManager-dialogRenameItemTitle": "Rename",
                "dxFileManager-dialogRenameItemButtonText": "Save",
                "dxFileManager-dialogCreateDirectoryTitle": "New directory",
                "dxFileManager-dialogCreateDirectoryButtonText": "Create",
                "dxFileManager-dialogDeleteItemTitle": "Delete",
                "dxFileManager-dialogDeleteItemButtonText": "Delete",
                "dxFileManager-dialogDeleteItemSingleItemConfirmation": "Are you sure you want to delete {0}?",
                "dxFileManager-dialogDeleteItemMultipleItemsConfirmation": "Are you sure you want to delete {0} items?",
                "dxFileManager-dialogButtonCancel": "Cancel",
                "dxFileManager-editingCreateSingleItemProcessingMessage": "Creating a directory inside {0}",
                "dxFileManager-editingCreateSingleItemSuccessMessage": "Created a directory inside {0}",
                "dxFileManager-editingCreateSingleItemErrorMessage": "Directory was not created",
                "dxFileManager-editingCreateCommonErrorMessage": "Directory was not created",
                "dxFileManager-editingRenameSingleItemProcessingMessage": "Renaming an item inside {0}",
                "dxFileManager-editingRenameSingleItemSuccessMessage": "Renamed an item inside {0}",
                "dxFileManager-editingRenameSingleItemErrorMessage": "Item was not renamed",
                "dxFileManager-editingRenameCommonErrorMessage": "Item was not renamed",
                "dxFileManager-editingDeleteSingleItemProcessingMessage": "Deleting an item from {0}",
                "dxFileManager-editingDeleteMultipleItemsProcessingMessage": "Deleting {0} items from {1}",
                "dxFileManager-editingDeleteSingleItemSuccessMessage": "Deleted an item from {0}",
                "dxFileManager-editingDeleteMultipleItemsSuccessMessage": "Deleted {0} items from {1}",
                "dxFileManager-editingDeleteSingleItemErrorMessage": "Item was not deleted",
                "dxFileManager-editingDeleteMultipleItemsErrorMessage": "{0} items were not deleted",
                "dxFileManager-editingDeleteCommonErrorMessage": "Some items were not deleted",
                "dxFileManager-editingMoveSingleItemProcessingMessage": "Moving an item to {0}",
                "dxFileManager-editingMoveMultipleItemsProcessingMessage": "Moving {0} items to {1}",
                "dxFileManager-editingMoveSingleItemSuccessMessage": "Moved an item to {0}",
                "dxFileManager-editingMoveMultipleItemsSuccessMessage": "Moved {0} items to {1}",
                "dxFileManager-editingMoveSingleItemErrorMessage": "Item was not moved",
                "dxFileManager-editingMoveMultipleItemsErrorMessage": "{0} items were not moved",
                "dxFileManager-editingMoveCommonErrorMessage": "Some items were not moved",
                "dxFileManager-editingCopySingleItemProcessingMessage": "Copying an item to {0}",
                "dxFileManager-editingCopyMultipleItemsProcessingMessage": "Copying {0} items to {1}",
                "dxFileManager-editingCopySingleItemSuccessMessage": "Copied an item to {0}",
                "dxFileManager-editingCopyMultipleItemsSuccessMessage": "Copied {0} items to {1}",
                "dxFileManager-editingCopySingleItemErrorMessage": "Item was not copied",
                "dxFileManager-editingCopyMultipleItemsErrorMessage": "{0} items were not copied",
                "dxFileManager-editingCopyCommonErrorMessage": "Some items were not copied",
                "dxFileManager-editingUploadSingleItemProcessingMessage": "Uploading an item to {0}",
                "dxFileManager-editingUploadMultipleItemsProcessingMessage": "Uploading {0} items to {1}",
                "dxFileManager-editingUploadSingleItemSuccessMessage": "Uploaded an item to {0}",
                "dxFileManager-editingUploadMultipleItemsSuccessMessage": "Uploaded {0} items to {1}",
                "dxFileManager-editingUploadSingleItemErrorMessage": "Item was not uploaded",
                "dxFileManager-editingUploadMultipleItemsErrorMessage": "{0} items were not uploaded",
                "dxFileManager-editingUploadCanceledMessage": "Canceled",
                "dxFileManager-listDetailsColumnCaptionName": "Name",
                "dxFileManager-listDetailsColumnCaptionDateModified": "Date Modified",
                "dxFileManager-listDetailsColumnCaptionFileSize": "File Size",
                "dxFileManager-listThumbnailsTooltipTextSize": "Size",
                "dxFileManager-listThumbnailsTooltipTextDateModified": "Date Modified",
                "dxFileManager-notificationProgressPanelTitle": "Progress",
                "dxFileManager-notificationProgressPanelEmptyListText": "No operations",
                "dxFileManager-notificationProgressPanelOperationCanceled": "Canceled",
                "dxDiagram-categoryGeneral": "General",
                "dxDiagram-categoryFlowchart": "Flowchart",
                "dxDiagram-categoryOrgChart": "Org Chart",
                "dxDiagram-categoryContainers": "Containers",
                "dxDiagram-categoryCustom": "Custom",
                "dxDiagram-commandExportToSvg": "Export to SVG",
                "dxDiagram-commandExportToPng": "Export to PNG",
                "dxDiagram-commandExportToJpg": "Export to JPEG",
                "dxDiagram-commandUndo": "Undo",
                "dxDiagram-commandRedo": "Redo",
                "dxDiagram-commandFontName": "Font Name",
                "dxDiagram-commandFontSize": "Font Size",
                "dxDiagram-commandBold": "Bold",
                "dxDiagram-commandItalic": "Italic",
                "dxDiagram-commandUnderline": "Underline",
                "dxDiagram-commandTextColor": "Font Color",
                "dxDiagram-commandLineColor": "Line Color",
                "dxDiagram-commandLineWidth": "Line Width",
                "dxDiagram-commandLineStyle": "Line Style",
                "dxDiagram-commandLineStyleSolid": "Solid",
                "dxDiagram-commandLineStyleDotted": "Dotted",
                "dxDiagram-commandLineStyleDashed": "Dashed",
                "dxDiagram-commandFillColor": "Fill Color",
                "dxDiagram-commandAlignLeft": "Align Left",
                "dxDiagram-commandAlignCenter": "Align Center",
                "dxDiagram-commandAlignRight": "Align Right",
                "dxDiagram-commandConnectorLineType": "Connector Line Type",
                "dxDiagram-commandConnectorLineStraight": "Straight",
                "dxDiagram-commandConnectorLineOrthogonal": "Orthogonal",
                "dxDiagram-commandConnectorLineStart": "Connector Line Start",
                "dxDiagram-commandConnectorLineEnd": "Connector Line End",
                "dxDiagram-commandConnectorLineNone": "None",
                "dxDiagram-commandConnectorLineArrow": "Arrow",
                "dxDiagram-commandFullscreen": "Full Screen",
                "dxDiagram-commandUnits": "Units",
                "dxDiagram-commandPageSize": "Page Size",
                "dxDiagram-commandPageOrientation": "Page Orientation",
                "dxDiagram-commandPageOrientationLandscape": "Landscape",
                "dxDiagram-commandPageOrientationPortrait": "Portrait",
                "dxDiagram-commandPageColor": "Page Color",
                "dxDiagram-commandShowGrid": "Show Grid",
                "dxDiagram-commandSnapToGrid": "Snap to Grid",
                "dxDiagram-commandGridSize": "Grid Size",
                "dxDiagram-commandZoomLevel": "Zoom Level",
                "dxDiagram-commandAutoZoom": "Auto Zoom",
                "dxDiagram-commandFitToContent": "Fit to Content",
                "dxDiagram-commandFitToWidth": "Fit to Width",
                "dxDiagram-commandAutoZoomByContent": "Auto Zoom by Content",
                "dxDiagram-commandAutoZoomByWidth": "Auto Zoom by Width",
                "dxDiagram-commandSimpleView": "Simple View",
                "dxDiagram-commandCut": "Cut",
                "dxDiagram-commandCopy": "Copy",
                "dxDiagram-commandPaste": "Paste",
                "dxDiagram-commandSelectAll": "Select All",
                "dxDiagram-commandDelete": "Delete",
                "dxDiagram-commandBringToFront": "Bring to Front",
                "dxDiagram-commandSendToBack": "Send to Back",
                "dxDiagram-commandLock": "Lock",
                "dxDiagram-commandUnlock": "Unlock",
                "dxDiagram-commandInsertShapeImage": "Insert Image...",
                "dxDiagram-commandEditShapeImage": "Change Image...",
                "dxDiagram-commandDeleteShapeImage": "Delete Image",
                "dxDiagram-commandLayoutLeftToRight": "Left-to-right",
                "dxDiagram-commandLayoutRightToLeft": "Right-to-left",
                "dxDiagram-commandLayoutTopToBottom": "Top-to-bottom",
                "dxDiagram-commandLayoutBottomToTop": "Bottom-to-top",
                "dxDiagram-unitIn": "in",
                "dxDiagram-unitCm": "cm",
                "dxDiagram-unitPx": "px",
                "dxDiagram-dialogButtonOK": "OK",
                "dxDiagram-dialogButtonCancel": "Cancel",
                "dxDiagram-dialogInsertShapeImageTitle": "Insert Image",
                "dxDiagram-dialogEditShapeImageTitle": "Change Image",
                "dxDiagram-dialogEditShapeImageSelectButton": "Select image",
                "dxDiagram-dialogEditShapeImageLabelText": "or drop file here",
                "dxDiagram-uiExport": "Export",
                "dxDiagram-uiProperties": "Properties",
                "dxDiagram-uiSettings": "Settings",
                "dxDiagram-uiShowToolbox": "Show Toolbox",
                "dxDiagram-uiSearch": "Search",
                "dxDiagram-uiStyle": "Style",
                "dxDiagram-uiLayout": "Layout",
                "dxDiagram-uiLayoutTree": "Tree",
                "dxDiagram-uiLayoutLayered": "Layered",
                "dxDiagram-uiDiagram": "Diagram",
                "dxDiagram-uiText": "Text",
                "dxDiagram-uiObject": "Object",
                "dxDiagram-uiConnector": "Connector",
                "dxDiagram-uiPage": "Page",
                "dxDiagram-shapeText": "Text",
                "dxDiagram-shapeRectangle": "Rectangle",
                "dxDiagram-shapeEllipse": "Ellipse",
                "dxDiagram-shapeCross": "Cross",
                "dxDiagram-shapeTriangle": "Triangle",
                "dxDiagram-shapeDiamond": "Diamond",
                "dxDiagram-shapeHeart": "Heart",
                "dxDiagram-shapePentagon": "Pentagon",
                "dxDiagram-shapeHexagon": "Hexagon",
                "dxDiagram-shapeOctagon": "Octagon",
                "dxDiagram-shapeStar": "Star",
                "dxDiagram-shapeArrowLeft": "Left Arrow",
                "dxDiagram-shapeArrowUp": "Up Arrow",
                "dxDiagram-shapeArrowRight": "Right Arrow",
                "dxDiagram-shapeArrowDown": "Down Arrow",
                "dxDiagram-shapeArrowUpDown": "Up Down Arrow",
                "dxDiagram-shapeArrowLeftRight": "Left Right Arrow",
                "dxDiagram-shapeProcess": "Process",
                "dxDiagram-shapeDecision": "Decision",
                "dxDiagram-shapeTerminator": "Terminator",
                "dxDiagram-shapePredefinedProcess": "Predefined Process",
                "dxDiagram-shapeDocument": "Document",
                "dxDiagram-shapeMultipleDocuments": "Multiple Documents",
                "dxDiagram-shapeManualInput": "Manual Input",
                "dxDiagram-shapePreparation": "Preparation",
                "dxDiagram-shapeData": "Data",
                "dxDiagram-shapeDatabase": "Database",
                "dxDiagram-shapeHardDisk": "Hard Disk",
                "dxDiagram-shapeInternalStorage": "Internal Storage",
                "dxDiagram-shapePaperTape": "Paper Tape",
                "dxDiagram-shapeManualOperation": "Manual Operation",
                "dxDiagram-shapeDelay": "Delay",
                "dxDiagram-shapeStoredData": "Stored Data",
                "dxDiagram-shapeDisplay": "Display",
                "dxDiagram-shapeMerge": "Merge",
                "dxDiagram-shapeConnector": "Connector",
                "dxDiagram-shapeOr": "Or",
                "dxDiagram-shapeSummingJunction": "Summing Junction",
                "dxDiagram-shapeContainerDefaultText": "Container",
                "dxDiagram-shapeVerticalContainer": "Vertical Container",
                "dxDiagram-shapeHorizontalContainer": "Horizontal Container",
                "dxDiagram-shapeCardDefaultText": "Person's Name",
                "dxDiagram-shapeCardWithImageOnLeft": "Card with Image on the Left",
                "dxDiagram-shapeCardWithImageOnTop": "Card with Image on the Top",
                "dxDiagram-shapeCardWithImageOnRight": "Card with Image on the Right",
                "dxGantt-dialogTitle": "Title",
                "dxGantt-dialogStartTitle": "Start",
                "dxGantt-dialogEndTitle": "End",
                "dxGantt-dialogProgressTitle": "Progress",
                "dxGantt-dialogResourcesTitle": "Resources",
                "dxGantt-dialogResourceManagerTitle": "Resource Manager",
                "dxGantt-dialogTaskDetailsTitle": "Task Details",
                "dxGantt-dialogEditResourceListHint": "Edit Resource List",
                "dxGantt-dialogEditNoResources": "No resources",
                "dxGantt-dialogButtonAdd": "Add",
                "dxGantt-contextMenuNewTask": "New Task",
                "dxGantt-contextMenuNewSubtask": "New Subtask",
                "dxGantt-contextMenuDeleteTask": "Delete Task",
                "dxGantt-contextMenuDeleteDependency": "Delete Dependency",
                "dxGantt-dialogTaskDeleteConfirmation": "Deleting a task also deletes all its dependencies and subtasks. Are you sure you want to delete this task?",
                "dxGantt-dialogDependencyDeleteConfirmation": "Are you sure you want to delete the dependency from the task?",
                "dxGantt-dialogResourcesDeleteConfirmation": "Deleting a resource also deletes it from tasks to which this resource is assigned. Are you sure you want to delete these resources? Resource: {0}",
                "dxGantt-dialogConstraintCriticalViolationMessage": "The task you are attempting to move is linked to a second task by a dependency relation. This change would conflict with dependency rules. How would you like to proceed?",
                "dxGantt-dialogConstraintViolationMessage": "The task you are attempting to move is linked to a second task by a dependency relation. How would you like to proceed?",
                "dxGantt-dialogCancelOperationMessage": "Cancel the operation",
                "dxGantt-dialogDeleteDependencyMessage": "Delete the dependency",
                "dxGantt-dialogMoveTaskAndKeepDependencyMessage": "Move the task and keep the dependency",
                "dxGantt-undo": "Undo",
                "dxGantt-redo": "Redo",
                "dxGantt-expandAll": "Expand All",
                "dxGantt-collapseAll": "Collapse All",
                "dxGantt-addNewTask": "Add New Task",
                "dxGantt-deleteSelectedTask": "Delete Selected Task",
                "dxGantt-zoomIn": "Zoom In",
                "dxGantt-zoomOut": "Zoom Out",
                "dxGantt-fullScreen": "Full Screen"
            }
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/options/index.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.Options = void 0;
        var _type = __webpack_require__( /*! ../utils/type */ 1);
        var _common = __webpack_require__( /*! ../utils/common */ 3);
        var _option_manager = __webpack_require__( /*! ./option_manager */ 469);
        var _object = __webpack_require__( /*! ../utils/object */ 47);
        var _utils = __webpack_require__( /*! ./utils */ 187);
        var _extend = __webpack_require__( /*! ../utils/extend */ 0);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.Options = function() {
            function Options(options, defaultOptions, optionsByReference, deprecatedOptions) {
                var _this = this;
                _classCallCheck(this, Options);
                this._deprecatedCallback;
                this._startChangeCallback;
                this._endChangeCallback;
                this._default = defaultOptions;
                this._deprecated = deprecatedOptions;
                this._deprecatedNames = [];
                this._initDeprecatedNames();
                this._optionManager = new _option_manager.OptionManager(options, optionsByReference);
                this._optionManager.onRelevantNamesPrepared(function(options, name, value, silent) {
                    return _this._setRelevantNames(options, name, value, silent)
                });
                this._cachedOptions = {};
                this._rules = []
            }
            _createClass(Options, [{
                key: "_initDeprecatedNames",
                value: function() {
                    for (var optionName in this._deprecated) {
                        this._deprecatedNames.push(optionName)
                    }
                }
            }, {
                key: "_getByRules",
                value: function(rules) {
                    rules = Array.isArray(rules) ? this._rules.concat(rules) : this._rules;
                    return (0, _utils.convertRulesToOptions)(rules)
                }
            }, {
                key: "_notifyDeprecated",
                value: function(option) {
                    var info = this._deprecated[option];
                    if (info) {
                        this._deprecatedCallback(option, info)
                    }
                }
            }, {
                key: "_setRelevantNames",
                value: function(options, name, value, silent) {
                    if (name) {
                        var normalizedName = this._normalizeName(name, silent);
                        if (normalizedName && normalizedName !== name) {
                            this._setField(options, normalizedName, value);
                            this._clearField(options, name)
                        }
                    }
                }
            }, {
                key: "_setField",
                value: function(options, fullName, value) {
                    var fieldName = "";
                    var fieldObject = null;
                    do {
                        fieldName = fieldName ? ".".concat(fieldName) : "";
                        fieldName = (0, _utils.getFieldName)(fullName) + fieldName;
                        fullName = (0, _utils.getParentName)(fullName);
                        fieldObject = fullName ? this._optionManager.get(options, fullName, false) : options
                    } while (!fieldObject);
                    fieldObject[fieldName] = value
                }
            }, {
                key: "_clearField",
                value: function(options, name) {
                    delete options[name];
                    var previousFieldName = (0, _utils.getParentName)(name);
                    var fieldObject = previousFieldName ? this._optionManager.get(options, previousFieldName, false) : options;
                    if (fieldObject) {
                        delete fieldObject[(0, _utils.getFieldName)(name)]
                    }
                }
            }, {
                key: "_normalizeName",
                value: function(name, silent) {
                    if (this._deprecatedNames.length && name) {
                        for (var i = 0; i < this._deprecatedNames.length; i++) {
                            if (this._deprecatedNames[i] === name) {
                                var deprecate = this._deprecated[name];
                                if (deprecate) {
                                    !silent && this._notifyDeprecated(name);
                                    return deprecate.alias || name
                                }
                            }
                        }
                    }
                    return name
                }
            }, {
                key: "addRules",
                value: function(rules) {
                    this._rules = rules.concat(this._rules)
                }
            }, {
                key: "applyRules",
                value: function(rules) {
                    var options = this._getByRules(rules);
                    this.silent(options)
                }
            }, {
                key: "dispose",
                value: function() {
                    this._deprecatedCallback = _common.noop;
                    this._startChangeCallback = _common.noop;
                    this._endChangeCallback = _common.noop;
                    this._optionManager.dispose()
                }
            }, {
                key: "onChanging",
                value: function(callBack) {
                    this._optionManager.onChanging(callBack)
                }
            }, {
                key: "onChanged",
                value: function(callBack) {
                    this._optionManager.onChanged(callBack)
                }
            }, {
                key: "onDeprecated",
                value: function(callBack) {
                    this._deprecatedCallback = callBack
                }
            }, {
                key: "onStartChange",
                value: function(callBack) {
                    this._startChangeCallback = callBack
                }
            }, {
                key: "onEndChange",
                value: function(callBack) {
                    this._endChangeCallback = callBack
                }
            }, {
                key: "isInitial",
                value: function(name) {
                    var value = this.silent(name);
                    var initialValue = this.initial(name);
                    var areFunctions = (0, _type.isFunction)(value) && (0, _type.isFunction)(initialValue);
                    return areFunctions ? value.toString() === initialValue.toString() : (0, _common.equalByValue)(value, initialValue)
                }
            }, {
                key: "initial",
                value: function(name) {
                    return (0, _utils.getNestedOptionValue)(this._initial, name)
                }
            }, {
                key: "option",
                value: function(options, value) {
                    var isGetter = arguments.length < 2 && "object" !== (0, _type.type)(options);
                    if (isGetter) {
                        return this._optionManager.get(void 0, this._normalizeName(options))
                    } else {
                        this._startChangeCallback();
                        try {
                            this._optionManager.set(options, value)
                        } finally {
                            this._endChangeCallback()
                        }
                    }
                }
            }, {
                key: "silent",
                value: function(options, value) {
                    var isGetter = arguments.length < 2 && "object" !== (0, _type.type)(options);
                    if (isGetter) {
                        return this._optionManager.get(void 0, options, void 0, true)
                    } else {
                        this._optionManager.set(options, value, void 0, true)
                    }
                }
            }, {
                key: "reset",
                value: function(name) {
                    var _this2 = this;
                    if (name) {
                        var fullPath = name.replace(/\[([^\]])\]/g, ".$1").split(".");
                        var value = fullPath.reduce(function(value, field) {
                            return value ? value[field] : _this2.initial(field)
                        }, null);
                        var defaultValue = (0, _type.isObject)(value) ? (0, _object.clone)(value) : value;
                        this._optionManager.set(name, defaultValue, false)
                    }
                }
            }, {
                key: "getAliasesByName",
                value: function(name) {
                    var _this3 = this;
                    return Object.keys(this._deprecated).filter(function(aliasName) {
                        return name === _this3._deprecated[aliasName].alias
                    })
                }
            }, {
                key: "isDeprecated",
                value: function(name) {
                    return Object.prototype.hasOwnProperty.call(this._deprecated, name)
                }
            }, {
                key: "cache",
                value: function(name, options) {
                    var isGetter = arguments.length < 2;
                    if (isGetter) {
                        return this._cachedOptions[name]
                    } else {
                        this._cachedOptions[name] = (0, _extend.extend)(this._cachedOptions[name], options)
                    }
                }
            }, {
                key: "_initial",
                set: function(value) {
                    this._initialOptions = value
                },
                get: function() {
                    if (!this._initialOptions) {
                        var rulesOptions = this._getByRules(this.silent("defaultOptionsRules"));
                        this._initialOptions = this._default;
                        this._optionManager._setByReference(this._initialOptions, rulesOptions)
                    }
                    return this._initialOptions
                }
            }]);
            return Options
        }()
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/options/option_manager.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.OptionManager = void 0;
        var _data = __webpack_require__( /*! ../utils/data */ 20);
        var _common = __webpack_require__( /*! ../utils/common */ 3);
        var _comparator = __webpack_require__( /*! ../utils/comparator */ 279);
        var _extend = __webpack_require__( /*! ../utils/extend */ 0);
        var _type = __webpack_require__( /*! ../utils/type */ 1);
        var _utils = __webpack_require__( /*! ./utils */ 187);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var cachedGetters = {};
        var cachedSetters = {};
        exports.OptionManager = function() {
            function OptionManager(options, optionsByReference) {
                _classCallCheck(this, OptionManager);
                this._options = options;
                this._optionsByReference = optionsByReference;
                this._changingCallback;
                this._changedCallback;
                this._namePreparedCallbacks
            }
            _createClass(OptionManager, [{
                key: "_setByReference",
                value: function(options, rulesOptions) {
                    (0, _extend.extend)(true, options, rulesOptions);
                    for (var fieldName in this._optionsByReference) {
                        if (Object.prototype.hasOwnProperty.call(rulesOptions, fieldName)) {
                            options[fieldName] = rulesOptions[fieldName]
                        }
                    }
                }
            }, {
                key: "_setPreparedValue",
                value: function(name, value, merge, silent) {
                    var previousValue = this.get(this._options, name, false);
                    if (!(0, _comparator.equals)(previousValue, value)) {
                        var path = name.split(/[.[]/);
                        !silent && this._changingCallback(name, previousValue, value);
                        cachedSetters[name] = cachedSetters[name] || (0, _data.compileSetter)(name);
                        cachedSetters[name](this._options, value, {
                            functionsAsIs: true,
                            merge: (0, _type.isDefined)(merge) ? merge : !this._optionsByReference[name],
                            unwrapObservables: path.length > 1 && !!this._optionsByReference[path[0]]
                        });
                        !silent && this._changedCallback(name, value, previousValue)
                    }
                }
            }, {
                key: "_prepareRelevantNames",
                value: function(options, name, value, silent) {
                    if ((0, _type.isPlainObject)(value)) {
                        for (var valueName in value) {
                            this._prepareRelevantNames(options, "".concat(name, ".").concat(valueName), value[valueName])
                        }
                    }
                    this._namePreparedCallbacks(options, name, value, silent)
                }
            }, {
                key: "get",
                value: function() {
                    var options = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this._options;
                    var name = arguments.length > 1 ? arguments[1] : void 0;
                    var unwrapObservables = arguments.length > 2 ? arguments[2] : void 0;
                    cachedGetters[name] = cachedGetters[name] || (0, _data.compileGetter)(name);
                    return cachedGetters[name](options, {
                        functionsAsIs: true,
                        unwrapObservables: unwrapObservables
                    })
                }
            }, {
                key: "set",
                value: function(options, value, merge, silent) {
                    options = (0, _utils.normalizeOptions)(options, value);
                    for (var name in options) {
                        this._prepareRelevantNames(options, name, options[name], silent)
                    }
                    for (var _name in options) {
                        this._setPreparedValue(_name, options[_name], merge, silent)
                    }
                }
            }, {
                key: "onRelevantNamesPrepared",
                value: function(callBack) {
                    this._namePreparedCallbacks = callBack
                }
            }, {
                key: "onChanging",
                value: function(callBack) {
                    this._changingCallback = callBack
                }
            }, {
                key: "onChanged",
                value: function(callBack) {
                    this._changedCallback = callBack
                }
            }, {
                key: "dispose",
                value: function() {
                    this._changingCallback = _common.noop;
                    this._changedCallback = _common.noop
                }
            }]);
            return OptionManager
        }()
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/core/postponed_operations.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.PostponedOperations = void 0;
        var _deferred = __webpack_require__( /*! ./utils/deferred */ 6);
        var _type = __webpack_require__( /*! ./utils/type */ 1);

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.PostponedOperations = function() {
            function PostponedOperations() {
                _classCallCheck(this, PostponedOperations);
                this._postponedOperations = {}
            }
            _createClass(PostponedOperations, [{
                key: "add",
                value: function(key, fn, postponedPromise) {
                    if (key in this._postponedOperations) {
                        postponedPromise && this._postponedOperations[key].promises.push(postponedPromise)
                    } else {
                        var completePromise = new _deferred.Deferred;
                        this._postponedOperations[key] = {
                            fn: fn,
                            completePromise: completePromise,
                            promises: postponedPromise ? [postponedPromise] : []
                        }
                    }
                    return this._postponedOperations[key].completePromise.promise()
                }
            }, {
                key: "callPostponedOperations",
                value: function() {
                    for (var key in this._postponedOperations) {
                        var operation = this._postponedOperations[key];
                        if ((0, _type.isDefined)(operation)) {
                            if (operation.promises && operation.promises.length) {
                                _deferred.when.apply(void 0, _toConsumableArray(operation.promises)).done(operation.fn).then(operation.completePromise.resolve)
                            } else {
                                operation.fn().done(operation.completePromise.resolve)
                            }
                        }
                    }
                    this._postponedOperations = {}
                }
            }]);
            return PostponedOperations
        }()
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/core/template_manager.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ./renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ./utils/type */ 1);
        var _common = __webpack_require__( /*! ./utils/common */ 3);
        var _extend = __webpack_require__( /*! ./utils/extend */ 0);
        var _errors = __webpack_require__( /*! ./errors */ 22);
        var _dom = __webpack_require__( /*! ./utils/dom */ 11);
        var _function_template = __webpack_require__( /*! ./templates/function_template */ 113);
        var _empty_template = __webpack_require__( /*! ./templates/empty_template */ 87);
        var _inflector = __webpack_require__( /*! ./utils/inflector */ 34);
        var _template_manager = __webpack_require__( /*! ./utils/template_manager */ 472);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var TEXT_NODE = 3;
        var ANONYMOUS_TEMPLATE_NAME = "template";
        var TEMPLATE_SELECTOR = '[data-options*="dxTemplate"]';
        var TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper";
        var DEPRECATED_WIDGET_NAMES = {
            button: true,
            tabs: true,
            dropDownMenu: true
        };
        var DX_POLYMORPH_WIDGET_TEMPLATE = new _function_template.FunctionTemplate(function(_ref) {
            var model = _ref.model,
                parent = _ref.parent;
            var widgetName = model.widget;
            if (!widgetName) {
                return (0, _renderer2.default)()
            }
            var widgetElement = (0, _renderer2.default)("<div>");
            var widgetOptions = model.options || {};
            if (DEPRECATED_WIDGET_NAMES[widgetName]) {
                var deprecatedName = widgetName;
                widgetName = (0, _inflector.camelize)("dx-" + widgetName);
                (0, _errors.log)("W0001", 'dxToolbar - "widget" item field', deprecatedName, "16.1", "Use: " + widgetName + "instead")
            }
            if (parent) {
                parent._createComponent(widgetElement, widgetName, widgetOptions)
            } else {
                widgetElement[widgetName](widgetOptions)
            }
            return widgetElement
        });
        var TemplateManager = function() {
            function TemplateManager(createElement, anonymousTemplateName) {
                _classCallCheck(this, TemplateManager);
                this._tempTemplates = [];
                this._defaultTemplates = {};
                this._anonymousTemplateName = anonymousTemplateName || ANONYMOUS_TEMPLATE_NAME;
                this._createElement = createElement || _template_manager.defaultCreateElement;
                this._createTemplateIfNeeded = this._createTemplateIfNeeded.bind(this)
            }
            _createClass(TemplateManager, [{
                key: "addDefaultTemplates",
                value: function(templates) {
                    this._defaultTemplates = (0, _extend.extend)({}, this._defaultTemplates, templates)
                }
            }, {
                key: "dispose",
                value: function() {
                    this._tempTemplates.forEach(function(tempTemplate) {
                        tempTemplate.template.dispose && tempTemplate.template.dispose()
                    });
                    this._tempTemplates = []
                }
            }, {
                key: "extractTemplates",
                value: function($el) {
                    var templates = this._extractTemplates($el);
                    var anonymousTemplateMeta = this._extractAnonymousTemplate($el);
                    return {
                        templates: templates,
                        anonymousTemplateMeta: anonymousTemplateMeta
                    }
                }
            }, {
                key: "_extractTemplates",
                value: function($el) {
                    var templateElements = $el.contents().filter(TEMPLATE_SELECTOR);
                    var templatesMap = {};
                    templateElements.each(function(_, template) {
                        var templateOptions = (0, _dom.getElementOptions)(template).dxTemplate;
                        if (!templateOptions) {
                            return
                        }
                        if (!templateOptions.name) {
                            throw (0, _errors.Error)("E0023")
                        }(0, _renderer2.default)(template).addClass(TEMPLATE_WRAPPER_CLASS).detach();
                        templatesMap[templateOptions.name] = templatesMap[templateOptions.name] || [];
                        templatesMap[templateOptions.name].push(template)
                    });
                    var templates = [];
                    for (var templateName in templatesMap) {
                        var deviceTemplate = (0, _template_manager.findTemplateByDevice)(templatesMap[templateName]);
                        if (deviceTemplate) {
                            templates.push({
                                name: templateName,
                                template: this._createTemplate(deviceTemplate)
                            })
                        }
                    }
                    return templates
                }
            }, {
                key: "_extractAnonymousTemplate",
                value: function($el) {
                    var $anonymousTemplate = $el.contents().detach();
                    var $notJunkTemplateContent = $anonymousTemplate.filter(function(_, element) {
                        var isTextNode = element.nodeType === TEXT_NODE;
                        var isEmptyText = (0, _renderer2.default)(element).text().trim().length < 1;
                        return !(isTextNode && isEmptyText)
                    });
                    return $notJunkTemplateContent.length > 0 ? {
                        template: this._createTemplate($anonymousTemplate),
                        name: this._anonymousTemplateName
                    } : {}
                }
            }, {
                key: "_createTemplateIfNeeded",
                value: function(templateSource) {
                    var cachedTemplate = this._tempTemplates.filter(function(tempTemplate) {
                        return tempTemplate.source === (0, _template_manager.templateKey)(templateSource)
                    })[0];
                    if (cachedTemplate) {
                        return cachedTemplate.template
                    }
                    var template = this._createTemplate(templateSource);
                    this._tempTemplates.push({
                        template: template,
                        source: (0, _template_manager.templateKey)(templateSource)
                    });
                    return template
                }
            }, {
                key: "_createTemplate",
                value: function(templateSource) {
                    return this._createElement((0, _template_manager.validateTemplateSource)(templateSource))
                }
            }, {
                key: "getTemplate",
                value: function(templateSource, templates, _ref2, context) {
                    var _this = this;
                    var isAsyncTemplate = _ref2.isAsyncTemplate,
                        skipTemplates = _ref2.skipTemplates;
                    if (!(0, _type.isFunction)(templateSource)) {
                        return (0, _template_manager.acquireTemplate)(templateSource, this._createTemplateIfNeeded, templates, isAsyncTemplate, skipTemplates, this._defaultTemplates)
                    }
                    return new _function_template.FunctionTemplate(function(options) {
                        var templateSourceResult = templateSource.apply(context, (0, _template_manager.getNormalizedTemplateArgs)(options));
                        if (!(0, _type.isDefined)(templateSourceResult)) {
                            return new _empty_template.EmptyTemplate
                        }
                        var dispose = false;
                        var template = (0, _template_manager.acquireTemplate)(templateSourceResult, function(templateSource) {
                            if (templateSource.nodeType || (0, _type.isRenderer)(templateSource) && !(0, _renderer2.default)(templateSource).is("script")) {
                                return new _function_template.FunctionTemplate(function() {
                                    return templateSource
                                })
                            }
                            dispose = true;
                            return _this._createTemplate(templateSource)
                        }, templates, isAsyncTemplate, skipTemplates, _this._defaultTemplates);
                        var result = template.render(options);
                        dispose && template.dispose && template.dispose();
                        return result
                    })
                }
            }, {
                key: "anonymousTemplateName",
                get: function() {
                    return this._anonymousTemplateName
                }
            }], [{
                key: "createDefaultOptions",
                value: function() {
                    return {
                        integrationOptions: {
                            watchMethod: function(fn, callback) {
                                var options = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                                if (!options.skipImmediate) {
                                    callback(fn())
                                }
                                return _common.noop
                            },
                            templates: {
                                "dx-polymorph-widget": DX_POLYMORPH_WIDGET_TEMPLATE
                            }
                        }
                    }
                }
            }]);
            return TemplateManager
        }();
        exports.default = TemplateManager
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/template_manager.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.acquireTemplate = exports.acquireIntegrationTemplate = exports.defaultCreateElement = exports.templateKey = exports.validateTemplateSource = exports.getNormalizedTemplateArgs = exports.addOneRenderedCall = exports.findTemplateByDevice = void 0;
        var _renderer = __webpack_require__( /*! ../renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ./type */ 1);
        var _common = __webpack_require__( /*! ./common */ 3);
        var _extend = __webpack_require__( /*! ./extend */ 0);
        var _child_default_template = __webpack_require__( /*! ../templates/child_default_template */ 141);
        var _template_base = __webpack_require__( /*! ../templates/template_base */ 78);
        var _empty_template = __webpack_require__( /*! ../templates/empty_template */ 87);
        var _dom = __webpack_require__( /*! ./dom */ 11);
        var _devices = __webpack_require__( /*! ../devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _template = __webpack_require__( /*! ../templates/template */ 473);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.findTemplateByDevice = function(templates) {
            var suitableTemplate = (0, _common.findBestMatches)(_devices2.default.current(), templates, function(template) {
                return (0, _dom.getElementOptions)(template).dxTemplate
            })[0];
            templates.forEach(function(template) {
                if (template !== suitableTemplate) {
                    (0, _renderer2.default)(template).remove()
                }
            });
            return suitableTemplate
        };
        var addOneRenderedCall = exports.addOneRenderedCall = function(template) {
            var _render = template.render.bind(template);
            return (0, _extend.extend)({}, template, {
                render: function(options) {
                    var templateResult = _render(options);
                    options && options.onRendered && options.onRendered();
                    return templateResult
                }
            })
        };
        exports.getNormalizedTemplateArgs = function(options) {
            var args = [];
            if ("model" in options) {
                args.push(options.model)
            }
            if ("index" in options) {
                args.push(options.index)
            }
            args.push(options.container);
            return args
        };
        exports.validateTemplateSource = function(templateSource) {
            return "string" === typeof templateSource ? (0, _dom.normalizeTemplateElement)(templateSource) : templateSource
        };
        exports.templateKey = function(templateSource) {
            return (0, _type.isRenderer)(templateSource) && templateSource[0] || templateSource
        };
        exports.defaultCreateElement = function(element) {
            return new _template.Template(element)
        };
        var acquireIntegrationTemplate = exports.acquireIntegrationTemplate = function(templateSource, templates, isAsyncTemplate, skipTemplates) {
            var integrationTemplate = null;
            if (!skipTemplates || skipTemplates.indexOf(templateSource) === -1) {
                integrationTemplate = templates[templateSource];
                if (integrationTemplate && !(integrationTemplate instanceof _template_base.TemplateBase) && !isAsyncTemplate) {
                    integrationTemplate = addOneRenderedCall(integrationTemplate)
                }
            }
            return integrationTemplate
        };
        exports.acquireTemplate = function(templateSource, createTemplate, templates, isAsyncTemplate, skipTemplates, defaultTemplates) {
            if (null == templateSource) {
                return new _empty_template.EmptyTemplate
            }
            if (templateSource instanceof _child_default_template.ChildDefaultTemplate) {
                return defaultTemplates[templateSource.name]
            }
            if (templateSource instanceof _template_base.TemplateBase) {
                return templateSource
            }
            if ((0, _type.isFunction)(templateSource.render) && !(0, _type.isRenderer)(templateSource)) {
                return addOneRenderedCall(templateSource)
            }
            if (templateSource.nodeType || (0, _type.isRenderer)(templateSource)) {
                return createTemplate((0, _renderer2.default)(templateSource))
            }
            return acquireIntegrationTemplate(templateSource, templates, isAsyncTemplate, skipTemplates) || defaultTemplates[templateSource] || createTemplate(templateSource)
        }
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/core/templates/template.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.Template = void 0;
        var _renderer = __webpack_require__( /*! ../renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _template_base = __webpack_require__( /*! ./template_base */ 78);
        var _dom = __webpack_require__( /*! ../utils/dom */ 11);
        var _template_engine_registry = __webpack_require__( /*! ./template_engine_registry */ 165);
        __webpack_require__( /*! ./template_engines */ 474);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }(0, _template_engine_registry.registerTemplateEngine)("default", {
            compile: function(element) {
                return (0, _dom.normalizeTemplateElement)(element)
            },
            render: function(template, model, index) {
                return template.clone()
            }
        });
        (0, _template_engine_registry.setTemplateEngine)("default");
        exports.Template = function(_TemplateBase) {
            _inherits(Template, _TemplateBase);
            var _super = _createSuper(Template);

            function Template(element) {
                var _this;
                _classCallCheck(this, Template);
                _this = _super.call(this);
                _this._element = element;
                return _this
            }
            _createClass(Template, [{
                key: "_renderCore",
                value: function(options) {
                    var transclude = options.transclude;
                    if (!transclude && !this._compiledTemplate) {
                        this._compiledTemplate = (0, _template_engine_registry.getCurrentTemplateEngine)().compile(this._element)
                    }
                    return (0, _renderer2.default)("<div>").append(transclude ? this._element : (0, _template_engine_registry.getCurrentTemplateEngine)().render(this._compiledTemplate, options.model, options.index)).contents()
                }
            }, {
                key: "source",
                value: function() {
                    return (0, _renderer2.default)(this._element).clone()
                }
            }]);
            return Template
        }(_template_base.TemplateBase)
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/core/templates/template_engines.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _dom = __webpack_require__( /*! ../utils/dom */ 11);
        var _template_engine_registry = __webpack_require__( /*! ./template_engine_registry */ 165);
        (0, _template_engine_registry.registerTemplateEngine)("jquery-tmpl", {
            compile: function(element) {
                return (0, _dom.extractTemplateMarkup)(element)
            },
            render: function(template, data) {
                return jQuery.tmpl(template, data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("jsrender", {
            compile: function(element) {
                return (jQuery ? jQuery : jsrender).templates((0, _dom.extractTemplateMarkup)(element))
            },
            render: function(template, data) {
                return template.render(data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("mustache", {
            compile: function(element) {
                return (0, _dom.extractTemplateMarkup)(element)
            },
            render: function(template, data) {
                return Mustache.render(template, data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("hogan", {
            compile: function(element) {
                return Hogan.compile((0, _dom.extractTemplateMarkup)(element))
            },
            render: function(template, data) {
                return template.render(data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("underscore", {
            compile: function(element) {
                return _.template((0, _dom.extractTemplateMarkup)(element))
            },
            render: function(template, data) {
                return template(data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("handlebars", {
            compile: function(element) {
                return Handlebars.compile((0, _dom.extractTemplateMarkup)(element))
            },
            render: function(template, data) {
                return template(data)
            }
        });
        (0, _template_engine_registry.registerTemplateEngine)("doT", {
            compile: function(element) {
                return doT.template((0, _dom.extractTemplateMarkup)(element))
            },
            render: function(template, data) {
                return template(data)
            }
        })
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/events/core/keyboard_processor.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COMPOSITION_START_EVENT = "compositionstart";
        var COMPOSITION_END_EVENT = "compositionend";
        var KEYDOWN_EVENT = "keydown";
        var NAMESPACE = "KeyboardProcessor";
        var KeyboardProcessor = _class2.default.inherit({
            _keydown: (0, _utils.addNamespace)(KEYDOWN_EVENT, NAMESPACE),
            _compositionStart: (0, _utils.addNamespace)(COMPOSITION_START_EVENT, NAMESPACE),
            _compositionEnd: (0, _utils.addNamespace)(COMPOSITION_END_EVENT, NAMESPACE),
            ctor: function(options) {
                var _this = this;
                options = options || {};
                if (options.element) {
                    this._element = (0, _renderer2.default)(options.element)
                }
                if (options.focusTarget) {
                    this._focusTarget = options.focusTarget
                }
                this._handler = options.handler;
                if (this._element) {
                    this._processFunction = function(e) {
                        var isNotFocusTarget = _this._focusTarget && _this._focusTarget !== e.target && (0, _array.inArray)(e.target, _this._focusTarget) < 0;
                        var shouldSkipProcessing = _this._isComposingJustFinished && 229 === e.which || _this._isComposing || isNotFocusTarget;
                        _this._isComposingJustFinished = false;
                        if (!shouldSkipProcessing) {
                            _this.process(e)
                        }
                    };
                    this._toggleProcessingWithContext = this.toggleProcessing.bind(this);
                    _events_engine2.default.on(this._element, this._keydown, this._processFunction);
                    _events_engine2.default.on(this._element, this._compositionStart, this._toggleProcessingWithContext);
                    _events_engine2.default.on(this._element, this._compositionEnd, this._toggleProcessingWithContext)
                }
            },
            dispose: function() {
                if (this._element) {
                    _events_engine2.default.off(this._element, this._keydown, this._processFunction);
                    _events_engine2.default.off(this._element, this._compositionStart, this._toggleProcessingWithContext);
                    _events_engine2.default.off(this._element, this._compositionEnd, this._toggleProcessingWithContext)
                }
                this._element = void 0;
                this._handler = void 0
            },
            process: function(e) {
                this._handler({
                    keyName: (0, _utils.normalizeKeyName)(e),
                    key: e.key,
                    code: e.code,
                    ctrl: e.ctrlKey,
                    location: e.location,
                    metaKey: e.metaKey,
                    shift: e.shiftKey,
                    alt: e.altKey,
                    which: e.which,
                    originalEvent: e
                })
            },
            toggleProcessing: function(_ref) {
                var type = _ref.type;
                this._isComposing = type === COMPOSITION_START_EVENT;
                this._isComposingJustFinished = !this._isComposing
            }
        });
        module.exports = KeyboardProcessor
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/events/utils/add_namespace.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var addNamespace = function addNamespace(eventNames, namespace) {
            if (!namespace) {
                throw _errors2.default.Error("E0017")
            }
            if (Array.isArray(eventNames)) {
                return eventNames.map(function(eventName) {
                    return addNamespace(eventName, namespace)
                }).join(" ")
            }
            if (eventNames.indexOf(" ") !== -1) {
                return addNamespace(eventNames.split(/\s+/g), namespace)
            }
            return "".concat(eventNames, ".").concat(namespace)
        };
        exports.default = addNamespace
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/mobile/init_mobile_viewport/init_mobile_viewport.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var resizeCallbacks = __webpack_require__( /*! ../../core/utils/resize_callbacks */ 114);
        var support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var styleUtils = __webpack_require__( /*! ../../core/utils/style */ 93);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var initMobileViewport = function(options) {
            options = extend({}, options);
            var realDevice = devices.real();
            var allowZoom = options.allowZoom;
            var allowPan = options.allowPan;
            var allowSelection = "allowSelection" in options ? options.allowSelection : "generic" === realDevice.platform;
            var metaSelector = "meta[name=viewport]";
            if (!$(metaSelector).length) {
                $("<meta>").attr("name", "viewport").appendTo("head")
            }
            var metaVerbs = ["width=device-width"];
            var msTouchVerbs = [];
            if (allowZoom) {
                msTouchVerbs.push("pinch-zoom")
            } else {
                metaVerbs.push("initial-scale=1.0", "maximum-scale=1.0, user-scalable=no")
            }
            if (allowPan) {
                msTouchVerbs.push("pan-x", "pan-y")
            }
            if (!allowPan && !allowZoom) {
                $("html, body").css({
                    msContentZooming: "none",
                    msUserSelect: "none",
                    overflow: "hidden"
                })
            } else {
                $("html").css("msOverflowStyle", "-ms-autohiding-scrollbar")
            }
            if (!allowSelection && support.supportProp("userSelect")) {
                $(".dx-viewport").css(styleUtils.styleProp("userSelect"), "none")
            }
            $(metaSelector).attr("content", metaVerbs.join());
            $("html").css("msTouchAction", msTouchVerbs.join(" ") || "none");
            realDevice = devices.real();
            if (support.touch) {
                eventsEngine.off(domAdapter.getDocument(), ".dxInitMobileViewport");
                eventsEngine.on(domAdapter.getDocument(), "dxpointermove.dxInitMobileViewport", function(e) {
                    var count = e.pointers.length;
                    var isTouchEvent = "touch" === e.pointerType;
                    var zoomDisabled = !allowZoom && count > 1;
                    var panDisabled = !allowPan && 1 === count && !e.isScrollingEvent;
                    if (isTouchEvent && (zoomDisabled || panDisabled)) {
                        e.preventDefault()
                    }
                })
            }
            if (realDevice.ios) {
                var isPhoneGap = "file:" === domAdapter.getLocation().protocol;
                if (!isPhoneGap) {
                    resizeCallbacks.add(function() {
                        var windowWidth = $(window).width();
                        $("body").width(windowWidth)
                    })
                }
            }
            if (realDevice.android) {
                resizeCallbacks.add(function() {
                    setTimeout(function() {
                        var activeElement = domAdapter.getActiveElement();
                        activeElement.scrollIntoViewIfNeeded ? activeElement.scrollIntoViewIfNeeded() : activeElement.scrollIntoView(false)
                    })
                })
            }
        };
        exports.initMobileViewport = initMobileViewport
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/index.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ./core/events_engine */ 5);
        exports.on = eventsEngine.on;
        exports.one = eventsEngine.one;
        exports.off = eventsEngine.off;
        exports.trigger = eventsEngine.trigger;
        exports.triggerHandler = eventsEngine.triggerHandler;
        exports.Event = eventsEngine.Event
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/mspointer.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var BaseStrategy = __webpack_require__( /*! ./base */ 160);
        var Observer = __webpack_require__( /*! ./observer */ 283);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var eventMap = {
            dxpointerdown: "pointerdown",
            dxpointermove: "pointermove",
            dxpointerup: "pointerup",
            dxpointercancel: "pointercancel",
            dxpointerover: "pointerover",
            dxpointerout: "pointerout",
            dxpointerenter: "pointerenter",
            dxpointerleave: "pointerleave"
        };
        var observer;
        var activated = false;
        var activateStrategy = function() {
            if (activated) {
                return
            }
            observer = new Observer(eventMap, function(a, b) {
                return a.pointerId === b.pointerId
            }, function(e) {
                if (e.isPrimary) {
                    observer.reset()
                }
            });
            activated = true
        };
        var MsPointerStrategy = BaseStrategy.inherit({
            ctor: function() {
                this.callBase.apply(this, arguments);
                activateStrategy()
            },
            _fireEvent: function(args) {
                return this.callBase(extend({
                    pointers: observer.pointers(),
                    pointerId: args.originalEvent.pointerId
                }, args))
            }
        });
        MsPointerStrategy.map = eventMap;
        MsPointerStrategy.resetObserver = function() {
            observer.reset()
        };
        module.exports = MsPointerStrategy
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/events/pointer/mouse_and_touch.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var BaseStrategy = __webpack_require__( /*! ./base */ 160);
        var MouseStrategy = __webpack_require__( /*! ./mouse */ 284);
        var TouchStrategy = __webpack_require__( /*! ./touch */ 282);
        var eventUtils = __webpack_require__( /*! ../utils */ 8);
        var eventMap = {
            dxpointerdown: "touchstart mousedown",
            dxpointermove: "touchmove mousemove",
            dxpointerup: "touchend mouseup",
            dxpointercancel: "touchcancel",
            dxpointerover: "mouseover",
            dxpointerout: "mouseout",
            dxpointerenter: "mouseenter",
            dxpointerleave: "mouseleave"
        };
        var activated = false;
        var activateStrategy = function() {
            if (activated) {
                return
            }
            MouseStrategy.activate();
            activated = true
        };
        var MouseAndTouchStrategy = BaseStrategy.inherit({
            EVENT_LOCK_TIMEOUT: 100,
            ctor: function() {
                this.callBase.apply(this, arguments);
                activateStrategy()
            },
            _handler: function(e) {
                var isMouseEvent = eventUtils.isMouseEvent(e);
                if (!isMouseEvent) {
                    this._skipNextEvents = true
                }
                if (isMouseEvent && this._mouseLocked) {
                    return
                }
                if (isMouseEvent && this._skipNextEvents) {
                    this._skipNextEvents = false;
                    this._mouseLocked = true;
                    clearTimeout(this._unlockMouseTimer);
                    var that = this;
                    this._unlockMouseTimer = setTimeout(function() {
                        that._mouseLocked = false
                    }, this.EVENT_LOCK_TIMEOUT);
                    return
                }
                return this.callBase(e)
            },
            _fireEvent: function(args) {
                var isMouseEvent = eventUtils.isMouseEvent(args.originalEvent);
                var normalizer = isMouseEvent ? MouseStrategy.normalize : TouchStrategy.normalize;
                return this.callBase(extend(normalizer(args.originalEvent), args))
            },
            dispose: function() {
                this.callBase();
                this._skipNextEvents = false;
                this._mouseLocked = false;
                clearTimeout(this._unlockMouseTimer)
            }
        });
        MouseAndTouchStrategy.map = eventMap;
        MouseAndTouchStrategy.resetObserver = MouseStrategy.resetObserver;
        module.exports = MouseAndTouchStrategy
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/localization.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var core = __webpack_require__( /*! ./localization/core */ 83);
        var message = __webpack_require__( /*! ./localization/message */ 10);
        var number = __webpack_require__( /*! ./localization/number */ 49);
        var date = __webpack_require__( /*! ./localization/date */ 35);
        __webpack_require__( /*! ./localization/currency */ 131);
        exports.locale = core.locale.bind(core);
        exports.loadMessages = message.load.bind(message);
        exports.formatMessage = message.format.bind(message);
        exports.formatNumber = number.format.bind(number);
        exports.parseNumber = number.parse.bind(number);
        exports.formatDate = date.format.bind(date);
        exports.parseDate = date.parse.bind(date);
        exports.message = message;
        exports.number = number;
        exports.date = date;
        exports.disableIntl = function() {
            if ("intl" === number.engine()) {
                number.resetInjection()
            }
            if ("intl" === date.engine()) {
                date.resetInjection()
            }
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/renderer.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var rendererBase = __webpack_require__( /*! ../../core/renderer_base */ 268);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        if (useJQuery) {
            rendererBase.set(jQuery)
        }
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/hooks.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric;
        var setEventFixMethod = __webpack_require__( /*! ../../events/utils */ 8).setEventFixMethod;
        var registerEvent = __webpack_require__( /*! ../../events/core/event_registrator */ 77);
        var hookTouchProps = __webpack_require__( /*! ../../events/core/hook_touch_props */ 269);
        if (useJQuery) {
            if (compareVersion(jQuery.fn.jquery, [3]) < 0) {
                var POINTER_TYPE_MAP = {
                    2: "touch",
                    3: "pen",
                    4: "mouse"
                };
                each(["MSPointerDown", "MSPointerMove", "MSPointerUp", "MSPointerCancel", "MSPointerOver", "MSPointerOut", "mouseenter", "mouseleave", "pointerdown", "pointermove", "pointerup", "pointercancel", "pointerover", "pointerout", "pointerenter", "pointerleave"], function() {
                    jQuery.event.fixHooks[this] = {
                        filter: function(event, originalEvent) {
                            var pointerType = originalEvent.pointerType;
                            if (isNumeric(pointerType)) {
                                event.pointerType = POINTER_TYPE_MAP[pointerType]
                            }
                            return event
                        },
                        props: jQuery.event.mouseHooks.props.concat(["pointerId", "pointerType", "originalTarget", "width", "height", "pressure", "result", "tiltX", "charCode", "tiltY", "detail", "isPrimary", "prevValue"])
                    }
                });
                each(["touchstart", "touchmove", "touchend", "touchcancel"], function() {
                    jQuery.event.fixHooks[this] = {
                        filter: function(event, originalEvent) {
                            hookTouchProps(function(name, hook) {
                                event[name] = hook(originalEvent)
                            });
                            return event
                        },
                        props: jQuery.event.mouseHooks.props.concat(["touches", "changedTouches", "targetTouches", "detail", "result", "originalTarget", "charCode", "prevValue"])
                    }
                });
                jQuery.event.fixHooks.wheel = jQuery.event.mouseHooks;
                var DX_EVENT_HOOKS = {
                    props: jQuery.event.mouseHooks.props.concat(["pointerType", "pointerId", "pointers"])
                };
                registerEvent.callbacks.add(function(name) {
                    jQuery.event.fixHooks[name] = DX_EVENT_HOOKS
                });
                var fix = function(event, originalEvent) {
                    var fixHook = jQuery.event.fixHooks[originalEvent.type] || jQuery.event.mouseHooks;
                    var props = fixHook.props ? jQuery.event.props.concat(fixHook.props) : jQuery.event.props;
                    var propIndex = props.length;
                    while (propIndex--) {
                        var prop = props[propIndex];
                        event[prop] = originalEvent[prop]
                    }
                    return fixHook.filter ? fixHook.filter(event, originalEvent) : event
                };
                setEventFixMethod(fix)
            } else {
                hookTouchProps(function(name, hook) {
                    jQuery.event.addProp(name, hook)
                })
            }
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/deferred.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        if (useJQuery) {
            var Deferred = jQuery.Deferred;
            var strategy = {
                Deferred: Deferred
            };
            strategy.when = compareVersion(jQuery.fn.jquery, [3]) < 0 ? jQuery.when : function(singleArg) {
                if (0 === arguments.length) {
                    return (new Deferred).resolve()
                } else {
                    if (1 === arguments.length) {
                        return singleArg && singleArg.then ? singleArg : (new Deferred).resolve(singleArg)
                    } else {
                        return jQuery.when.apply(jQuery, arguments)
                    }
                }
            };
            deferredUtils.setStrategy(strategy)
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/hold_ready.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var themes_callback = __webpack_require__( /*! ../../ui/themes_callback */ 286);
        var ready = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51).add;
        if (jQuery && !themes_callback.fired()) {
            var holdReady = jQuery.holdReady || jQuery.fn.holdReady;
            holdReady(true);
            themes_callback.add(function() {
                ready(function() {
                    holdReady(false)
                })
            })
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/events.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _jquery = __webpack_require__( /*! jquery */ 57);
        var _jquery2 = _interopRequireDefault(_jquery);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _use_jquery = __webpack_require__( /*! ./use_jquery */ 85);
        var _use_jquery2 = _interopRequireDefault(_use_jquery);
        var _event_registrator_callbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 130);
        var _event_registrator_callbacks2 = _interopRequireDefault(_event_registrator_callbacks);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var useJQuery = (0, _use_jquery2.default)();
        if (useJQuery) {
            _event_registrator_callbacks2.default.add(function(name, eventObject) {
                _jquery2.default.event.special[name] = eventObject
            });
            if (_events_engine2.default.passiveEventHandlersSupported()) {
                _events_engine2.default.forcePassiveFalseEventNames.forEach(function(eventName) {
                    _jquery2.default.event.special[eventName] = {
                        setup: function(data, namespaces, handler) {
                            _dom_adapter2.default.listen(this, eventName, handler, {
                                passive: false
                            })
                        }
                    }
                })
            }
            _events_engine2.default.set({
                on: function(element) {
                    (0, _jquery2.default)(element).on.apply((0, _jquery2.default)(element), Array.prototype.slice.call(arguments, 1))
                },
                one: function(element) {
                    (0, _jquery2.default)(element).one.apply((0, _jquery2.default)(element), Array.prototype.slice.call(arguments, 1))
                },
                off: function(element) {
                    (0, _jquery2.default)(element).off.apply((0, _jquery2.default)(element), Array.prototype.slice.call(arguments, 1))
                },
                trigger: function(element) {
                    (0, _jquery2.default)(element).trigger.apply((0, _jquery2.default)(element), Array.prototype.slice.call(arguments, 1))
                },
                triggerHandler: function(element) {
                    (0, _jquery2.default)(element).triggerHandler.apply((0, _jquery2.default)(element), Array.prototype.slice.call(arguments, 1))
                },
                Event: _jquery2.default.Event
            })
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/easing.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var easing = __webpack_require__( /*! ../../animation/easing */ 281);
        if (jQuery) {
            easing.setEasing(jQuery.easing)
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/element_data.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var dataUtils = __webpack_require__( /*! ../../core/element_data */ 41);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        if (useJQuery) {
            dataUtils.setDataStrategy(jQuery)
        }
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/element.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var setPublicElementWrapper = __webpack_require__( /*! ../../core/utils/dom */ 11).setPublicElementWrapper;
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        var getPublicElement = function($element) {
            return $element
        };
        if (useJQuery) {
            setPublicElementWrapper(getPublicElement)
        }
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/component_registrator.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _jquery = __webpack_require__( /*! jquery */ 57);
        var _jquery2 = _interopRequireDefault(_jquery);
        var _component_registrator_callbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 159);
        var _component_registrator_callbacks2 = _interopRequireDefault(_component_registrator_callbacks);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        if (_jquery2.default) {
            var registerJQueryComponent = function(name, componentClass) {
                _jquery2.default.fn[name] = function(options) {
                    var isMemberInvoke = "string" === typeof options;
                    var result;
                    if (isMemberInvoke) {
                        var memberName = options;
                        var memberArgs = [].slice.call(arguments).slice(1);
                        this.each(function() {
                            var instance = componentClass.getInstance(this);
                            if (!instance) {
                                throw _errors2.default.Error("E0009", name)
                            }
                            var member = instance[memberName];
                            var memberValue = member.apply(instance, memberArgs);
                            if (void 0 === result) {
                                result = memberValue
                            }
                        })
                    } else {
                        this.each(function() {
                            var instance = componentClass.getInstance(this);
                            if (instance) {
                                instance.option(options)
                            } else {
                                new componentClass(this, options)
                            }
                        });
                        result = this
                    }
                    return result
                }
            };
            _component_registrator_callbacks2.default.add(registerJQueryComponent)
        }
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/ajax.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 57);
        var ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 85)();
        if (useJQuery) {
            ajax.inject({
                sendRequest: function(options) {
                    if (!options.responseType && !options.upload) {
                        return jQuery.ajax(options)
                    }
                    return this.callBase.apply(this, [options])
                }
            })
        }
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/integration/angular.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var angular = __webpack_require__( /*! angular */ 287);
        if (angular) {
            __webpack_require__( /*! ./jquery */ 285);
            __webpack_require__( /*! ./angular/component_registrator */ 493);
            __webpack_require__( /*! ./angular/event_registrator */ 501);
            __webpack_require__( /*! ./angular/components */ 502);
            __webpack_require__( /*! ./angular/action_executors */ 503)
        }
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/component_registrator.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _component_registrator_callbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 159);
        var _component_registrator_callbacks2 = _interopRequireDefault(_component_registrator_callbacks);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _locker = __webpack_require__( /*! ../../core/utils/locker */ 288);
        var _locker2 = _interopRequireDefault(_locker);
        var _editor = __webpack_require__( /*! ../../ui/editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _template = __webpack_require__( /*! ./template */ 494);
        var _module = __webpack_require__( /*! ./module */ 189);
        var _module2 = _interopRequireDefault(_module);
        var _uiCollection_widget = __webpack_require__( /*! ../../ui/collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _comparator = __webpack_require__( /*! ../../core/utils/comparator */ 279);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _extend2 = _interopRequireDefault(_extend);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var each = _iterator2.default.each;
        var inArray = _array2.default.inArray;
        var compileSetter = _data2.default.compileSetter;
        var compileGetter = _data2.default.compileGetter;
        var extendFromObject = _extend2.default.extendFromObject;
        var ITEM_ALIAS_ATTRIBUTE_NAME = "dxItemAlias";
        var SKIP_APPLY_ACTION_CATEGORIES = ["rendering"];
        var NG_MODEL_OPTION = "value";
        var safeApply = function(func, scope) {
            if (scope.$root.$$phase) {
                return func(scope)
            } else {
                return scope.$apply(function() {
                    return func(scope)
                })
            }
        };
        var getClassMethod = function getClassMethod(initClass, methodName) {
            var hasParentProperty = Object.prototype.hasOwnProperty.bind(initClass)("parent");
            var isES6Class = !hasParentProperty && initClass.parent;
            if (isES6Class) {
                var baseClass = Object.getPrototypeOf(initClass);
                return baseClass.prototype[methodName] ? function() {
                    return baseClass.prototype[methodName]()
                } : getClassMethod(baseClass, methodName)
            } else {
                var method = initClass.parent.prototype[methodName];
                if (method) {
                    return function() {
                        return method()
                    }
                }
                if (!method || !initClass.parent.subclassOf) {
                    return function() {
                        return
                    }
                }
                return getClassMethod(initClass.parent, methodName)
            }
        };
        var ComponentBuilder = _class2.default.inherit({
            ctor: function(options) {
                this._componentDisposing = (0, _callbacks2.default)();
                this._optionChangedCallbacks = (0, _callbacks2.default)();
                this._ngLocker = new _locker2.default;
                this._scope = options.scope;
                this._$element = options.$element;
                this._$templates = options.$templates;
                this._componentClass = options.componentClass;
                this._parse = options.parse;
                this._compile = options.compile;
                this._itemAlias = options.itemAlias;
                this._transcludeFn = options.transcludeFn;
                this._digestCallbacks = options.dxDigestCallbacks;
                this._normalizeOptions(options.ngOptions);
                this._initComponentBindings();
                this._initComponent(this._scope);
                if (!options.ngOptions) {
                    this._addOptionsStringWatcher(options.ngOptionsString)
                }
            },
            _addOptionsStringWatcher: function(optionsString) {
                var _this = this;
                var clearOptionsStringWatcher = this._scope.$watch(optionsString, function(newOptions) {
                    if (!newOptions) {
                        return
                    }
                    clearOptionsStringWatcher();
                    _this._normalizeOptions(newOptions);
                    _this._initComponentBindings();
                    _this._component.option(_this._evalOptions(_this._scope))
                });
                this._componentDisposing.add(clearOptionsStringWatcher)
            },
            _normalizeOptions: function(options) {
                var _this2 = this;
                this._ngOptions = extendFromObject({}, options);
                if (!options) {
                    return
                }
                if (!Object.prototype.hasOwnProperty.call(options, "bindingOptions") && options.bindingOptions) {
                    this._ngOptions.bindingOptions = options.bindingOptions
                }
                if (options.bindingOptions) {
                    each(options.bindingOptions, function(key, value) {
                        if ("string" === _type2.default.type(value)) {
                            _this2._ngOptions.bindingOptions[key] = {
                                dataPath: value
                            }
                        }
                    })
                }
            },
            _initComponent: function(scope) {
                this._component = new this._componentClass(this._$element, this._evalOptions(scope));
                this._component._isHidden = true;
                this._handleDigestPhase()
            },
            _handleDigestPhase: function() {
                var _this3 = this;
                var beginUpdate = function() {
                    _this3._component.beginUpdate()
                };
                var endUpdate = function() {
                    _this3._component.endUpdate()
                };
                this._digestCallbacks.begin.add(beginUpdate);
                this._digestCallbacks.end.add(endUpdate);
                this._componentDisposing.add(function() {
                    _this3._digestCallbacks.begin.remove(beginUpdate);
                    _this3._digestCallbacks.end.remove(endUpdate)
                })
            },
            _initComponentBindings: function() {
                var _this4 = this;
                var optionDependencies = {};
                if (!this._ngOptions.bindingOptions) {
                    return
                }
                each(this._ngOptions.bindingOptions, function(optionPath, value) {
                    var separatorIndex = optionPath.search(/\[|\./);
                    var optionForSubscribe = separatorIndex > -1 ? optionPath.substring(0, separatorIndex) : optionPath;
                    var prevWatchMethod;
                    var clearWatcher;
                    var valuePath = value.dataPath;
                    var deepWatch = true;
                    var forcePlainWatchMethod = false;
                    if (void 0 !== value.deep) {
                        forcePlainWatchMethod = deepWatch = !!value.deep
                    }
                    if (!optionDependencies[optionForSubscribe]) {
                        optionDependencies[optionForSubscribe] = {}
                    }
                    optionDependencies[optionForSubscribe][optionPath] = valuePath;
                    var updateWatcher = function updateWatcher() {
                        var watchCallback = function(newValue, oldValue) {
                            if (_this4._ngLocker.locked(optionPath)) {
                                return
                            }
                            _this4._ngLocker.obtain(optionPath);
                            _this4._component.option(optionPath, newValue);
                            updateWatcher();
                            if ((0, _comparator.equals)(oldValue, newValue) && _this4._ngLocker.locked(optionPath)) {
                                _this4._ngLocker.release(optionPath)
                            }
                        };
                        var watchMethod = Array.isArray(_this4._scope.$eval(valuePath)) && !forcePlainWatchMethod ? "$watchCollection" : "$watch";
                        if (prevWatchMethod !== watchMethod) {
                            if (clearWatcher) {
                                clearWatcher()
                            }
                            clearWatcher = _this4._scope[watchMethod](valuePath, watchCallback, deepWatch);
                            prevWatchMethod = watchMethod
                        }
                    };
                    updateWatcher();
                    _this4._componentDisposing.add(clearWatcher)
                });
                this._optionChangedCallbacks.add(function(args) {
                    var optionName = args.name;
                    var fullName = args.fullName;
                    var component = args.component;
                    if (_this4._ngLocker.locked(fullName)) {
                        _this4._ngLocker.release(fullName);
                        return
                    }
                    if (!optionDependencies || !optionDependencies[optionName]) {
                        return
                    }
                    var isActivePhase = _this4._scope.$root.$$phase;
                    var obtainOption = function() {
                        _this4._ngLocker.obtain(fullName)
                    };
                    if (isActivePhase) {
                        _this4._digestCallbacks.begin.add(obtainOption)
                    } else {
                        obtainOption()
                    }
                    safeApply(function() {
                        each(optionDependencies[optionName], function(optionPath, valuePath) {
                            if (!_this4._optionsAreLinked(fullName, optionPath)) {
                                return
                            }
                            var value = component.option(optionPath);
                            _this4._parse(valuePath).assign(_this4._scope, value);
                            var scopeValue = _this4._parse(valuePath)(_this4._scope);
                            if (scopeValue !== value) {
                                args.component.option(optionPath, scopeValue)
                            }
                        })
                    }, _this4._scope);
                    var releaseOption = function releaseOption() {
                        if (_this4._ngLocker.locked(fullName)) {
                            _this4._ngLocker.release(fullName)
                        }
                        _this4._digestCallbacks.begin.remove(obtainOption);
                        _this4._digestCallbacks.end.remove(releaseOption)
                    };
                    if (isActivePhase) {
                        _this4._digestCallbacks.end.addPrioritized(releaseOption)
                    } else {
                        releaseOption()
                    }
                })
            },
            _optionsAreNested: function(optionPath1, optionPath2) {
                var parentSeparator = optionPath1[optionPath2.length];
                return 0 === optionPath1.indexOf(optionPath2) && ("." === parentSeparator || "[" === parentSeparator)
            },
            _optionsAreLinked: function(optionPath1, optionPath2) {
                if (optionPath1 === optionPath2) {
                    return true
                }
                return optionPath1.length > optionPath2.length ? this._optionsAreNested(optionPath1, optionPath2) : this._optionsAreNested(optionPath2, optionPath1)
            },
            _compilerByTemplate: function(template) {
                var _this5 = this;
                var scopeItemsPath = this._getScopeItemsPath();
                return function(options) {
                    var $resultMarkup = (0, _renderer2.default)(template).clone();
                    var dataIsScope = options.model && options.model.constructor === _this5._scope.$root.constructor;
                    var templateScope = dataIsScope ? options.model : options.noModel ? _this5._scope : _this5._createScopeWithData(options);
                    if (scopeItemsPath) {
                        _this5._synchronizeScopes(templateScope, scopeItemsPath, options.index)
                    }
                    $resultMarkup.appendTo(options.container);
                    if (!options.noModel) {
                        _events_engine2.default.on($resultMarkup, "$destroy", function() {
                            var destroyAlreadyCalled = !templateScope.$parent;
                            if (destroyAlreadyCalled) {
                                return
                            }
                            templateScope.$destroy()
                        })
                    }
                    var ngTemplate = _this5._compile($resultMarkup, _this5._transcludeFn);
                    _this5._applyAsync(function(scope) {
                        ngTemplate(scope, null, {
                            parentBoundTranscludeFn: _this5._transcludeFn
                        })
                    }, templateScope);
                    return $resultMarkup
                }
            },
            _applyAsync: function(func, scope) {
                var _this6 = this;
                func(scope);
                if (!scope.$root.$$phase) {
                    if (!this._renderingTimer) {
                        var clearRenderingTimer = function() {
                            clearTimeout(_this6._renderingTimer)
                        };
                        this._renderingTimer = setTimeout(function() {
                            scope.$apply();
                            _this6._renderingTimer = null;
                            _this6._componentDisposing.remove(clearRenderingTimer)
                        });
                        this._componentDisposing.add(clearRenderingTimer)
                    }
                }
            },
            _getScopeItemsPath: function() {
                if (this._componentClass.subclassOf(_uiCollection_widget2.default) && this._ngOptions.bindingOptions && this._ngOptions.bindingOptions.items) {
                    return this._ngOptions.bindingOptions.items.dataPath
                }
            },
            _createScopeWithData: function(options) {
                var newScope = this._scope.$new();
                if (this._itemAlias) {
                    newScope[this._itemAlias] = options.model
                }
                if (_type2.default.isDefined(options.index)) {
                    newScope.$index = options.index
                }
                return newScope
            },
            _synchronizeScopes: function(itemScope, parentPrefix, itemIndex) {
                if (this._itemAlias && "object" !== _typeof(itemScope[this._itemAlias])) {
                    this._synchronizeScopeField({
                        parentScope: this._scope,
                        childScope: itemScope,
                        fieldPath: this._itemAlias,
                        parentPrefix: parentPrefix,
                        itemIndex: itemIndex
                    })
                }
            },
            _synchronizeScopeField: function(args) {
                var parentScope = args.parentScope;
                var childScope = args.childScope;
                var fieldPath = args.fieldPath;
                var parentPrefix = args.parentPrefix;
                var itemIndex = args.itemIndex;
                var innerPathSuffix = fieldPath === this._itemAlias ? "" : "." + fieldPath;
                var collectionField = void 0 !== itemIndex;
                var optionOuterBag = [parentPrefix];
                if (collectionField) {
                    if (!_type2.default.isNumeric(itemIndex)) {
                        return
                    }
                    optionOuterBag.push("[", itemIndex, "]")
                }
                optionOuterBag.push(innerPathSuffix);
                var optionOuterPath = optionOuterBag.join("");
                var clearParentWatcher = parentScope.$watch(optionOuterPath, function(newValue, oldValue) {
                    if (newValue !== oldValue) {
                        compileSetter(fieldPath)(childScope, newValue)
                    }
                });
                var clearItemWatcher = childScope.$watch(fieldPath, function(newValue, oldValue) {
                    if (newValue !== oldValue) {
                        if (collectionField && !compileGetter(parentPrefix)(parentScope)[itemIndex]) {
                            clearItemWatcher();
                            return
                        }
                        compileSetter(optionOuterPath)(parentScope, newValue)
                    }
                });
                this._componentDisposing.add([clearParentWatcher, clearItemWatcher])
            },
            _evalOptions: function(scope) {
                var _this8 = this;
                var result = extendFromObject({}, this._ngOptions);
                delete result.bindingOptions;
                if (this._ngOptions.bindingOptions) {
                    each(this._ngOptions.bindingOptions, function(key, value) {
                        result[key] = scope.$eval(value.dataPath)
                    })
                }
                result._optionChangedCallbacks = this._optionChangedCallbacks;
                result._disposingCallbacks = this._componentDisposing;
                result.onActionCreated = function(component, action, config) {
                    if (config && inArray(config.category, SKIP_APPLY_ACTION_CATEGORIES) > -1) {
                        return action
                    }
                    var wrappedAction = function() {
                        var _this7 = this;
                        var args = arguments;
                        if (!scope || !scope.$root || scope.$root.$$phase) {
                            return action.apply(this, args)
                        }
                        return safeApply(function() {
                            return action.apply(_this7, args)
                        }, scope)
                    };
                    return wrappedAction
                };
                result.beforeActionExecute = result.onActionCreated;
                result.nestedComponentOptions = function(component) {
                    return {
                        templatesRenderAsynchronously: component.option("templatesRenderAsynchronously"),
                        forceApplyBindings: component.option("forceApplyBindings"),
                        modelByElement: component.option("modelByElement"),
                        onActionCreated: component.option("onActionCreated"),
                        beforeActionExecute: component.option("beforeActionExecute"),
                        nestedComponentOptions: component.option("nestedComponentOptions")
                    }
                };
                result.templatesRenderAsynchronously = true;
                if ((0, _config2.default)().wrapActionsBeforeExecute) {
                    result.forceApplyBindings = function() {
                        safeApply(function() {}, scope)
                    }
                }
                result.integrationOptions = {
                    createTemplate: function(element) {
                        return new _template.NgTemplate(element, _this8._compilerByTemplate.bind(_this8))
                    },
                    watchMethod: function(fn, callback, options) {
                        options = options || {};
                        var immediateValue;
                        var skipCallback = options.skipImmediate;
                        var disposeWatcher = scope.$watch(function() {
                            var value = fn();
                            if (value instanceof Date) {
                                value = value.valueOf()
                            }
                            return value
                        }, function(newValue) {
                            var isSameValue = immediateValue === newValue;
                            if (!skipCallback && (!isSameValue || isSameValue && options.deep)) {
                                callback(newValue)
                            }
                            skipCallback = false
                        }, options.deep);
                        if (!skipCallback) {
                            immediateValue = fn();
                            callback(immediateValue)
                        }
                        if ((0, _config2.default)().wrapActionsBeforeExecute) {
                            _this8._applyAsync(function() {}, scope)
                        }
                        return disposeWatcher
                    },
                    templates: {
                        "dx-polymorph-widget": {
                            render: function(options) {
                                var widgetName = options.model.widget;
                                if (!widgetName) {
                                    return
                                }
                                if ("button" === widgetName || "tabs" === widgetName || "dropDownMenu" === widgetName) {
                                    var deprecatedName = widgetName;
                                    widgetName = _inflector2.default.camelize("dx-" + widgetName);
                                    _errors2.default.log("W0001", "dxToolbar - 'widget' item field", deprecatedName, "16.1", "Use: '" + widgetName + "' instead")
                                }
                                var markup = (0, _renderer2.default)("<div>").attr(_inflector2.default.dasherize(widgetName), "options").get(0);
                                var newScope = _this8._scope.$new();
                                newScope.options = options.model.options;
                                options.container.append(markup);
                                _this8._compile(markup)(newScope)
                            }
                        }
                    }
                };
                result.modelByElement = function() {
                    return scope
                };
                return result
            }
        });
        ComponentBuilder = ComponentBuilder.inherit({
            ctor: function(options) {
                this._componentName = options.componentName;
                this._ngModel = options.ngModel;
                this._ngModelController = options.ngModelController;
                this.callBase.apply(this, arguments)
            },
            _isNgModelRequired: function() {
                return (this._componentClass.subclassOf(_editor2.default) || this._componentClass.prototype instanceof _editor2.default) && this._ngModel
            },
            _initComponentBindings: function() {
                this.callBase.apply(this, arguments);
                this._initNgModelBinding()
            },
            _initNgModelBinding: function() {
                var _this9 = this;
                if (!this._isNgModelRequired()) {
                    return
                }
                var clearNgModelWatcher = this._scope.$watch(this._ngModel, function(newValue, oldValue) {
                    if (_this9._ngLocker.locked(NG_MODEL_OPTION)) {
                        return
                    }
                    if (newValue === oldValue) {
                        return
                    }
                    _this9._component.option(NG_MODEL_OPTION, newValue)
                });
                this._optionChangedCallbacks.add(function(args) {
                    _this9._ngLocker.obtain(NG_MODEL_OPTION);
                    try {
                        if (args.name !== NG_MODEL_OPTION) {
                            return
                        }
                        _this9._ngModelController.$setViewValue(args.value)
                    } finally {
                        if (_this9._ngLocker.locked(NG_MODEL_OPTION)) {
                            _this9._ngLocker.release(NG_MODEL_OPTION)
                        }
                    }
                });
                this._componentDisposing.add(clearNgModelWatcher)
            },
            _evalOptions: function() {
                if (!this._isNgModelRequired()) {
                    return this.callBase.apply(this, arguments)
                }
                var result = this.callBase.apply(this, arguments);
                result[NG_MODEL_OPTION] = this._parse(this._ngModel)(this._scope);
                return result
            }
        });
        var registeredComponents = {};
        var registerComponentDirective = function(name) {
            var priority = "dxValidator" !== name ? 1 : 10;
            _module2.default.directive(name, ["$compile", "$parse", "dxDigestCallbacks", function($compile, $parse, dxDigestCallbacks) {
                return {
                    restrict: "A",
                    require: "^?ngModel",
                    priority: priority,
                    compile: function($element) {
                        var componentClass = registeredComponents[name];
                        var useTemplates = componentClass.prototype._useTemplates ? componentClass.prototype._useTemplates() : getClassMethod(componentClass, "_useTemplates")();
                        var $content = useTemplates ? $element.contents().detach() : null;
                        return function(scope, $element, attrs, ngModelController, transcludeFn) {
                            $element.append($content);
                            safeApply(function() {
                                new ComponentBuilder({
                                    componentClass: componentClass,
                                    componentName: name,
                                    compile: $compile,
                                    parse: $parse,
                                    $element: $element,
                                    scope: scope,
                                    ngOptionsString: attrs[name],
                                    ngOptions: attrs[name] ? scope.$eval(attrs[name]) : {},
                                    ngModel: attrs.ngModel,
                                    ngModelController: ngModelController,
                                    transcludeFn: transcludeFn,
                                    itemAlias: attrs[ITEM_ALIAS_ATTRIBUTE_NAME],
                                    dxDigestCallbacks: dxDigestCallbacks
                                })
                            }, scope)
                        }
                    }
                }
            }])
        };
        _component_registrator_callbacks2.default.add(function(name, componentClass) {
            if (!registeredComponents[name]) {
                registerComponentDirective(name)
            }
            registeredComponents[name] = componentClass
        })
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/template.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.NgTemplate = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _template_base = __webpack_require__( /*! ../../core/templates/template_base */ 78);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        exports.NgTemplate = function(_TemplateBase) {
            _inherits(NgTemplate, _TemplateBase);
            var _super = _createSuper(NgTemplate);

            function NgTemplate(element, templateCompiler) {
                var _this;
                _classCallCheck(this, NgTemplate);
                _this = _super.call(this);
                _this._element = element;
                _this._compiledTemplate = templateCompiler((0, _dom.normalizeTemplateElement)(_this._element));
                return _this
            }
            _createClass(NgTemplate, [{
                key: "_renderCore",
                value: function(options) {
                    var compiledTemplate = this._compiledTemplate;
                    return (0, _type.isFunction)(compiledTemplate) ? compiledTemplate(options) : compiledTemplate
                }
            }, {
                key: "source",
                value: function() {
                    return (0, _renderer2.default)(this._element).clone()
                }
            }]);
            return NgTemplate
        }(_template_base.TemplateBase)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.base.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _action = __webpack_require__( /*! ../../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _data_helper = __webpack_require__( /*! ../../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);
        var _item = __webpack_require__( /*! ./item */ 135);
        var _item2 = _interopRequireDefault(_item);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _selectors2 = _interopRequireDefault(_selectors);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _hold = __webpack_require__( /*! ../../events/hold */ 95);
        var _hold2 = _interopRequireDefault(_hold);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _contextmenu = __webpack_require__( /*! ../../events/contextmenu */ 177);
        var _contextmenu2 = _interopRequireDefault(_contextmenu);
        var _bindable_template = __webpack_require__( /*! ../../core/templates/bindable_template */ 59);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var COLLECTION_CLASS = "dx-collection";
        var ITEM_CLASS = "dx-item";
        var CONTENT_CLASS_POSTFIX = "-content";
        var ITEM_CONTENT_PLACEHOLDER_CLASS = "dx-item-content-placeholder";
        var ITEM_DATA_KEY = "dxItemData";
        var ITEM_INDEX_KEY = "dxItemIndex";
        var ITEM_TEMPLATE_ID_PREFIX = "tmpl-";
        var ITEMS_SELECTOR = "[data-options*='dxItem']";
        var SELECTED_ITEM_CLASS = "dx-item-selected";
        var ITEM_RESPONSE_WAIT_CLASS = "dx-item-response-wait";
        var EMPTY_COLLECTION = "dx-empty-collection";
        var TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper";
        var ITEM_PATH_REGEX = /^([^.]+\[\d+\]\.)+([\w.]+)$/;
        var ANONYMOUS_TEMPLATE_NAME = "item";
        var FOCUS_UP = "up";
        var FOCUS_DOWN = "down";
        var FOCUS_LEFT = "left";
        var FOCUS_RIGHT = "right";
        var FOCUS_PAGE_UP = "pageup";
        var FOCUS_PAGE_DOWN = "pagedown";
        var FOCUS_LAST = "last";
        var FOCUS_FIRST = "first";
        var CollectionWidget = _ui2.default.inherit({
            _activeStateUnit: "." + ITEM_CLASS,
            _supportedKeys: function() {
                var enter = function(e) {
                    var $itemElement = (0, _renderer2.default)(this.option("focusedElement"));
                    if (!$itemElement.length) {
                        return
                    }
                    this._itemClickHandler((0, _extend.extend)({}, e, {
                        target: $itemElement,
                        currentTarget: $itemElement
                    }))
                };
                var space = function(e) {
                    e.preventDefault();
                    enter.call(this, e)
                };
                var move = function(location, e) {
                    e.preventDefault();
                    e.stopPropagation();
                    this._moveFocus(location, e)
                };
                return (0, _extend.extend)(this.callBase(), {
                    space: space,
                    enter: enter,
                    leftArrow: move.bind(this, FOCUS_LEFT),
                    rightArrow: move.bind(this, FOCUS_RIGHT),
                    upArrow: move.bind(this, FOCUS_UP),
                    downArrow: move.bind(this, FOCUS_DOWN),
                    pageUp: move.bind(this, FOCUS_UP),
                    pageDown: move.bind(this, FOCUS_DOWN),
                    home: move.bind(this, FOCUS_FIRST),
                    end: move.bind(this, FOCUS_LAST)
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    selectOnFocus: false,
                    loopItemFocus: true,
                    items: [],
                    itemTemplate: "item",
                    onItemRendered: null,
                    onItemClick: null,
                    onItemHold: null,
                    itemHoldTimeout: 750,
                    onItemContextMenu: null,
                    onFocusedItemChanged: null,
                    noDataText: _message2.default.format("dxCollectionWidget-noDataText"),
                    dataSource: null,
                    _itemAttributes: {},
                    itemTemplateProperty: "template",
                    focusOnSelectedItem: true,
                    focusedElement: null,
                    displayExpr: void 0,
                    disabledExpr: function(data) {
                        return data ? data.disabled : void 0
                    },
                    visibleExpr: function(data) {
                        return data ? data.visible : void 0
                    }
                })
            },
            _init: function() {
                this._compileDisplayGetter();
                this.callBase();
                this._cleanRenderedItems();
                this._refreshDataSource()
            },
            _compileDisplayGetter: function() {
                var displayExpr = this.option("displayExpr");
                this._displayGetter = displayExpr ? (0, _data.compileGetter)(this.option("displayExpr")) : void 0
            },
            _initTemplates: function() {
                this._initItemsFromMarkup();
                this._initDefaultItemTemplate();
                this.callBase()
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initDefaultItemTemplate: function() {
                var fieldsMap = this._getFieldsMap();
                this._templateManager.addDefaultTemplates({
                    item: new _bindable_template.BindableTemplate(function($container, data) {
                        if ((0, _type.isPlainObject)(data)) {
                            this._prepareDefaultItemTemplate(data, $container)
                        } else {
                            if (fieldsMap && (0, _type.isFunction)(fieldsMap.text)) {
                                data = fieldsMap.text(data)
                            }
                            $container.text(String(_common2.default.ensureDefined(data, "")))
                        }
                    }.bind(this), this._getBindableFields(), this.option("integrationOptions.watchMethod"), fieldsMap)
                })
            },
            _getBindableFields: function() {
                return ["text", "html"]
            },
            _getFieldsMap: function() {
                if (this._displayGetter) {
                    return {
                        text: this._displayGetter
                    }
                }
            },
            _prepareDefaultItemTemplate: function(data, $container) {
                if ((0, _type.isDefined)(data.text)) {
                    $container.text(data.text)
                }
                if ((0, _type.isDefined)(data.html)) {
                    $container.html(data.html)
                }
            },
            _initItemsFromMarkup: function() {
                var _this = this;
                var $items = this.$element().contents().filter(ITEMS_SELECTOR);
                if (!$items.length || this.option("items").length) {
                    return
                }
                var items = [].slice.call($items).map(function(item) {
                    var $item = (0, _renderer2.default)(item);
                    var result = (0, _dom.getElementOptions)(item).dxItem;
                    var isTemplateRequired = $item.html().trim() && !result.template;
                    if (isTemplateRequired) {
                        result.template = _this._prepareItemTemplate($item)
                    } else {
                        $item.remove()
                    }
                    return result
                });
                this.option("items", items)
            },
            _prepareItemTemplate: function($item) {
                var templateId = ITEM_TEMPLATE_ID_PREFIX + new _guid2.default;
                var $template = $item.detach().clone().removeAttr("data-options").addClass(TEMPLATE_WRAPPER_CLASS);
                this._saveTemplate(templateId, $template);
                return templateId
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _cleanRenderedItems: function() {
                this._renderedItemsCount = 0
            },
            _focusTarget: function() {
                return this.$element()
            },
            _focusInHandler: function(e) {
                this.callBase.apply(this, arguments);
                if ((0, _array.inArray)(e.target, this._focusTarget()) === -1) {
                    return
                }
                var $focusedElement = (0, _renderer2.default)(this.option("focusedElement"));
                if ($focusedElement.length) {
                    this._setFocusedItem($focusedElement)
                } else {
                    var $activeItem = this._getActiveItem();
                    if ($activeItem.length) {
                        this.option("focusedElement", (0, _dom.getPublicElement)($activeItem))
                    }
                }
            },
            _focusOutHandler: function() {
                this.callBase.apply(this, arguments);
                var $target = (0, _renderer2.default)(this.option("focusedElement"));
                this._updateFocusedItemState($target, false)
            },
            _getActiveItem: function(last) {
                var $focusedElement = (0, _renderer2.default)(this.option("focusedElement"));
                if ($focusedElement.length) {
                    return $focusedElement
                }
                var index = this.option("focusOnSelectedItem") ? this.option("selectedIndex") : 0;
                var activeElements = this._getActiveElement();
                var lastIndex = activeElements.length - 1;
                if (index < 0) {
                    index = last ? lastIndex : 0
                }
                return activeElements.eq(index)
            },
            _moveFocus: function(location) {
                var $items = this._getAvailableItems();
                var $newTarget;
                switch (location) {
                    case FOCUS_PAGE_UP:
                    case FOCUS_UP:
                        $newTarget = this._prevItem($items);
                        break;
                    case FOCUS_PAGE_DOWN:
                    case FOCUS_DOWN:
                        $newTarget = this._nextItem($items);
                        break;
                    case FOCUS_RIGHT:
                        $newTarget = this.option("rtlEnabled") ? this._prevItem($items) : this._nextItem($items);
                        break;
                    case FOCUS_LEFT:
                        $newTarget = this.option("rtlEnabled") ? this._nextItem($items) : this._prevItem($items);
                        break;
                    case FOCUS_FIRST:
                        $newTarget = $items.first();
                        break;
                    case FOCUS_LAST:
                        $newTarget = $items.last();
                        break;
                    default:
                        return false
                }
                if (0 !== $newTarget.length) {
                    this.option("focusedElement", (0, _dom.getPublicElement)($newTarget))
                }
            },
            _getVisibleItems: function($itemElements) {
                $itemElements = $itemElements || this._itemElements();
                return $itemElements.filter(":visible")
            },
            _getAvailableItems: function($itemElements) {
                return this._getVisibleItems($itemElements).not(".dx-state-disabled")
            },
            _prevItem: function($items) {
                var $target = this._getActiveItem();
                var targetIndex = $items.index($target);
                var $last = $items.last();
                var $item = (0, _renderer2.default)($items[targetIndex - 1]);
                var loop = this.option("loopItemFocus");
                if (0 === $item.length && loop) {
                    $item = $last
                }
                return $item
            },
            _nextItem: function($items) {
                var $target = this._getActiveItem(true);
                var targetIndex = $items.index($target);
                var $first = $items.first();
                var $item = (0, _renderer2.default)($items[targetIndex + 1]);
                var loop = this.option("loopItemFocus");
                if (0 === $item.length && loop) {
                    $item = $first
                }
                return $item
            },
            _selectFocusedItem: function($target) {
                this.selectItem($target)
            },
            _updateFocusedItemState: function(target, isFocused, needCleanItemId) {
                var $target = (0, _renderer2.default)(target);
                if ($target.length) {
                    this._refreshActiveDescendant();
                    this._refreshItemId($target, needCleanItemId);
                    this._toggleFocusClass(isFocused, $target)
                }
            },
            _refreshActiveDescendant: function($target) {
                this.setAria("activedescendant", (0, _type.isDefined)(this.option("focusedElement")) ? this.getFocusedItemId() : null, $target)
            },
            _refreshItemId: function($target, needCleanItemId) {
                if (!needCleanItemId && this.option("focusedElement")) {
                    this.setAria("id", this.getFocusedItemId(), $target)
                } else {
                    this.setAria("id", null, $target)
                }
            },
            _setFocusedItem: function($target) {
                if (!$target || !$target.length) {
                    return
                }
                this._updateFocusedItemState($target, true);
                this.onFocusedItemChanged(this.getFocusedItemId());
                if (this.option("selectOnFocus")) {
                    this._selectFocusedItem($target)
                }
            },
            _findItemElementByItem: function(item) {
                var result = (0, _renderer2.default)();
                var that = this;
                this.itemElements().each(function() {
                    var $item = (0, _renderer2.default)(this);
                    if ($item.data(that._itemDataKey()) === item) {
                        result = $item;
                        return false
                    }
                });
                return result
            },
            _getIndexByItem: function(item) {
                return this.option("items").indexOf(item)
            },
            _itemOptionChanged: function(item, property, value, oldValue) {
                var $item = this._findItemElementByItem(item);
                if (!$item.length) {
                    return
                }
                if (!this.constructor.ItemClass.getInstance($item).setDataField(property, value)) {
                    this._refreshItem($item, item)
                }
                var isDisabling = "disabled" === property && value;
                if (isDisabling) {
                    this._resetItemFocus($item)
                }
            },
            _resetItemFocus: function($item) {
                if ($item.is(this.option("focusedElement"))) {
                    this.option("focusedElement", null)
                }
            },
            _refreshItem: function($item) {
                var itemData = this._getItemData($item);
                var index = $item.data(this._itemIndexKey());
                this._renderItem(this._renderedItemsCount + index, itemData, null, $item)
            },
            _optionChanged: function(args) {
                if ("items" === args.name) {
                    var matches = args.fullName.match(ITEM_PATH_REGEX);
                    if (matches && matches.length) {
                        var property = matches[matches.length - 1];
                        var itemPath = args.fullName.replace("." + property, "");
                        var item = this.option(itemPath);
                        this._itemOptionChanged(item, property, args.value, args.previousValue);
                        return
                    }
                }
                switch (args.name) {
                    case "items":
                    case "_itemAttributes":
                    case "itemTemplateProperty":
                    case "showItemDataTitle":
                        this._cleanRenderedItems();
                        this._invalidate();
                        break;
                    case "dataSource":
                        this._refreshDataSource();
                        this._renderEmptyMessage();
                        break;
                    case "noDataText":
                        this._renderEmptyMessage();
                        break;
                    case "itemTemplate":
                        this._invalidate();
                        break;
                    case "onItemRendered":
                        this._createItemRenderAction();
                        break;
                    case "onItemClick":
                        break;
                    case "onItemHold":
                    case "itemHoldTimeout":
                        this._attachHoldEvent();
                        break;
                    case "onItemContextMenu":
                        this._attachContextMenuEvent();
                        break;
                    case "onFocusedItemChanged":
                        this.onFocusedItemChanged = this._createActionByOption("onFocusedItemChanged");
                        break;
                    case "selectOnFocus":
                    case "loopItemFocus":
                    case "focusOnSelectedItem":
                        break;
                    case "focusedElement":
                        this._updateFocusedItemState(args.previousValue, false, true);
                        this._setFocusedItem((0, _renderer2.default)(args.value));
                        break;
                    case "displayExpr":
                        this._compileDisplayGetter();
                        this._initDefaultItemTemplate();
                        this._invalidate();
                        break;
                    case "visibleExpr":
                    case "disabledExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _invalidate: function() {
                this.option("focusedElement", null);
                return this.callBase.apply(this, arguments)
            },
            _loadNextPage: function() {
                var dataSource = this._dataSource;
                this._expectNextPageLoading();
                dataSource.pageIndex(1 + dataSource.pageIndex());
                return dataSource.load()
            },
            _expectNextPageLoading: function() {
                this._startIndexForAppendedItems = 0
            },
            _expectLastItemLoading: function() {
                this._startIndexForAppendedItems = -1
            },
            _forgetNextPageLoading: function() {
                this._startIndexForAppendedItems = null
            },
            _dataSourceChangedHandler: function(newItems) {
                var items = this.option("items");
                if (this._initialized && items && this._shouldAppendItems()) {
                    this._renderedItemsCount = items.length;
                    if (!this._isLastPage() || this._startIndexForAppendedItems !== -1) {
                        this.option().items = items.concat(newItems.slice(this._startIndexForAppendedItems))
                    }
                    this._forgetNextPageLoading();
                    this._refreshContent()
                } else {
                    this.option("items", newItems.slice())
                }
            },
            _refreshContent: function() {
                this._prepareContent();
                this._renderContent()
            },
            _dataSourceLoadErrorHandler: function() {
                this._forgetNextPageLoading();
                this.option("items", this.option("items"))
            },
            _shouldAppendItems: function() {
                return null != this._startIndexForAppendedItems && this._allowDynamicItemsAppend()
            },
            _allowDynamicItemsAppend: function() {
                return false
            },
            _clean: function() {
                this._cleanFocusState();
                this._cleanItemContainer()
            },
            _cleanItemContainer: function() {
                (0, _renderer2.default)(this._itemContainer()).empty()
            },
            _dispose: function() {
                this.callBase();
                clearTimeout(this._itemFocusTimeout)
            },
            _refresh: function() {
                this._cleanRenderedItems();
                this.callBase.apply(this, arguments)
            },
            _itemContainer: function() {
                return this.$element()
            },
            _itemClass: function() {
                return ITEM_CLASS
            },
            _itemContentClass: function() {
                return this._itemClass() + CONTENT_CLASS_POSTFIX
            },
            _selectedItemClass: function() {
                return SELECTED_ITEM_CLASS
            },
            _itemResponseWaitClass: function() {
                return ITEM_RESPONSE_WAIT_CLASS
            },
            _itemSelector: function() {
                return "." + this._itemClass()
            },
            _itemDataKey: function() {
                return ITEM_DATA_KEY
            },
            _itemIndexKey: function() {
                return ITEM_INDEX_KEY
            },
            _itemElements: function() {
                return this._itemContainer().find(this._itemSelector())
            },
            _initMarkup: function() {
                this.callBase();
                this.onFocusedItemChanged = this._createActionByOption("onFocusedItemChanged");
                this.$element().addClass(COLLECTION_CLASS);
                this._prepareContent()
            },
            _prepareContent: _common2.default.deferRenderer(function() {
                this._renderContentImpl()
            }),
            _renderContent: function() {
                this._fireContentReadyAction()
            },
            _render: function() {
                this.callBase();
                this._attachClickEvent();
                this._attachHoldEvent();
                this._attachContextMenuEvent()
            },
            _attachClickEvent: function() {
                var itemSelector = this._itemSelector();
                var clickEventNamespace = eventUtils.addNamespace(_click2.default.name, this.NAME);
                var pointerDownEventNamespace = eventUtils.addNamespace(_pointer2.default.down, this.NAME);
                var that = this;
                var pointerDownAction = new _action2.default(function(args) {
                    var event = args.event;
                    that._itemPointerDownHandler(event)
                });
                _events_engine2.default.off(this._itemContainer(), clickEventNamespace, itemSelector);
                _events_engine2.default.off(this._itemContainer(), pointerDownEventNamespace, itemSelector);
                _events_engine2.default.on(this._itemContainer(), clickEventNamespace, itemSelector, function(e) {
                    this._itemClickHandler(e)
                }.bind(this));
                _events_engine2.default.on(this._itemContainer(), pointerDownEventNamespace, itemSelector, function(e) {
                    pointerDownAction.execute({
                        element: (0, _renderer2.default)(e.target),
                        event: e
                    })
                })
            },
            _itemClickHandler: function(e, args, config) {
                this._itemDXEventHandler(e, "onItemClick", args, config)
            },
            _itemPointerDownHandler: function(e) {
                if (!this.option("focusStateEnabled")) {
                    return
                }
                this._itemFocusHandler = function() {
                    clearTimeout(this._itemFocusTimeout);
                    this._itemFocusHandler = null;
                    if (e.isDefaultPrevented()) {
                        return
                    }
                    var $target = (0, _renderer2.default)(e.target);
                    var $closestItem = $target.closest(this._itemElements());
                    var $closestFocusable = this._closestFocusable($target);
                    if ($closestItem.length && $closestFocusable && (0, _array.inArray)($closestFocusable.get(0), this._focusTarget()) !== -1) {
                        this.option("focusedElement", (0, _dom.getPublicElement)($closestItem))
                    }
                }.bind(this);
                this._itemFocusTimeout = setTimeout(this._forcePointerDownFocus.bind(this))
            },
            _closestFocusable: function($target) {
                if ($target.is(_selectors2.default.focusable)) {
                    return $target
                } else {
                    $target = $target.parent();
                    while ($target.length && !_dom_adapter2.default.isDocument($target.get(0))) {
                        if ($target.is(_selectors2.default.focusable)) {
                            return $target
                        }
                        $target = $target.parent()
                    }
                }
            },
            _forcePointerDownFocus: function() {
                this._itemFocusHandler && this._itemFocusHandler()
            },
            _updateFocusState: function() {
                this.callBase.apply(this, arguments);
                this._forcePointerDownFocus()
            },
            _attachHoldEvent: function() {
                var $itemContainer = this._itemContainer();
                var itemSelector = this._itemSelector();
                var eventName = eventUtils.addNamespace(_hold2.default.name, this.NAME);
                _events_engine2.default.off($itemContainer, eventName, itemSelector);
                _events_engine2.default.on($itemContainer, eventName, itemSelector, {
                    timeout: this._getHoldTimeout()
                }, this._itemHoldHandler.bind(this))
            },
            _getHoldTimeout: function() {
                return this.option("itemHoldTimeout")
            },
            _shouldFireHoldEvent: function() {
                return this.hasActionSubscription("onItemHold")
            },
            _itemHoldHandler: function(e) {
                if (this._shouldFireHoldEvent()) {
                    this._itemDXEventHandler(e, "onItemHold")
                } else {
                    e.cancel = true
                }
            },
            _attachContextMenuEvent: function() {
                var $itemContainer = this._itemContainer();
                var itemSelector = this._itemSelector();
                var eventName = eventUtils.addNamespace(_contextmenu2.default.name, this.NAME);
                _events_engine2.default.off($itemContainer, eventName, itemSelector);
                _events_engine2.default.on($itemContainer, eventName, itemSelector, this._itemContextMenuHandler.bind(this))
            },
            _shouldFireContextMenuEvent: function() {
                return this.hasActionSubscription("onItemContextMenu")
            },
            _itemContextMenuHandler: function(e) {
                if (this._shouldFireContextMenuEvent()) {
                    this._itemDXEventHandler(e, "onItemContextMenu")
                } else {
                    e.cancel = true
                }
            },
            _renderContentImpl: function() {
                var items = this.option("items") || [];
                if (this._renderedItemsCount) {
                    this._renderItems(items.slice(this._renderedItemsCount))
                } else {
                    this._renderItems(items)
                }
            },
            _renderItems: function(items) {
                if (items.length) {
                    _iterator2.default.each(items, function(index, itemData) {
                        this._renderItem(this._renderedItemsCount + index, itemData)
                    }.bind(this))
                }
                this._renderEmptyMessage()
            },
            _renderItem: function(index, itemData, $container, $itemToReplace) {
                $container = $container || this._itemContainer();
                var $itemFrame = this._renderItemFrame(index, itemData, $container, $itemToReplace);
                this._setElementData($itemFrame, itemData, index);
                $itemFrame.attr(this.option("_itemAttributes"));
                this._attachItemClickEvent(itemData, $itemFrame);
                var $itemContent = this._getItemContent($itemFrame);
                var renderContentPromise = this._renderItemContent({
                    index: index,
                    itemData: itemData,
                    container: (0, _dom.getPublicElement)($itemContent),
                    contentClass: this._itemContentClass(),
                    defaultTemplateName: this.option("itemTemplate")
                });
                var that = this;
                (0, _deferred.when)(renderContentPromise).done(function($itemContent) {
                    that._postprocessRenderItem({
                        itemElement: $itemFrame,
                        itemContent: $itemContent,
                        itemData: itemData,
                        itemIndex: index
                    });
                    that._executeItemRenderAction(index, itemData, (0, _dom.getPublicElement)($itemFrame))
                });
                return $itemFrame
            },
            _getItemContent: function($itemFrame) {
                var $itemContent = $itemFrame.find("." + ITEM_CONTENT_PLACEHOLDER_CLASS);
                $itemContent.removeClass(ITEM_CONTENT_PLACEHOLDER_CLASS);
                return $itemContent
            },
            _attachItemClickEvent: function(itemData, $itemElement) {
                if (!itemData || !itemData.onClick) {
                    return
                }
                _events_engine2.default.on($itemElement, _click2.default.name, function(e) {
                    this._itemEventHandlerByHandler($itemElement, itemData.onClick, {
                        event: e
                    })
                }.bind(this))
            },
            _renderItemContent: function(args) {
                var itemTemplateName = this._getItemTemplateName(args);
                var itemTemplate = this._getTemplate(itemTemplateName);
                this._addItemContentClasses(args);
                var $templateResult = (0, _renderer2.default)(this._createItemByTemplate(itemTemplate, args));
                if (!$templateResult.hasClass(TEMPLATE_WRAPPER_CLASS)) {
                    return args.container
                }
                return this._renderItemContentByNode(args, $templateResult)
            },
            _renderItemContentByNode: function(args, $node) {
                (0, _renderer2.default)(args.container).replaceWith($node);
                args.container = (0, _dom.getPublicElement)($node);
                this._addItemContentClasses(args);
                return $node
            },
            _addItemContentClasses: function(args) {
                var classes = [ITEM_CLASS + CONTENT_CLASS_POSTFIX, args.contentClass];
                (0, _renderer2.default)(args.container).addClass(classes.join(" "))
            },
            _appendItemToContainer: function($container, $itemFrame, index) {
                $itemFrame.appendTo($container)
            },
            _renderItemFrame: function(index, itemData, $container, $itemToReplace) {
                var $itemFrame = (0, _renderer2.default)("<div>");
                new this.constructor.ItemClass($itemFrame, this._itemOptions(), itemData || {});
                if ($itemToReplace && $itemToReplace.length) {
                    $itemToReplace.replaceWith($itemFrame)
                } else {
                    this._appendItemToContainer.call(this, $container, $itemFrame, index)
                }
                if (this.option("showItemDataTitle")) {
                    var displayValue = this._displayGetter ? this._displayGetter(itemData) : itemData;
                    $itemFrame.attr("title", displayValue)
                }
                return $itemFrame
            },
            _itemOptions: function() {
                var that = this;
                return {
                    watchMethod: function() {
                        return that.option("integrationOptions.watchMethod")
                    },
                    owner: that,
                    fieldGetter: function(field) {
                        var expr = that.option(field + "Expr");
                        var getter = (0, _data.compileGetter)(expr);
                        return getter
                    }
                }
            },
            _postprocessRenderItem: _common2.default.noop,
            _executeItemRenderAction: function(index, itemData, itemElement) {
                this._getItemRenderAction()({
                    itemElement: itemElement,
                    itemIndex: index,
                    itemData: itemData
                })
            },
            _setElementData: function(element, data, index) {
                element.addClass([ITEM_CLASS, this._itemClass()].join(" ")).data(this._itemDataKey(), data).data(this._itemIndexKey(), index)
            },
            _createItemRenderAction: function() {
                return this._itemRenderAction = this._createActionByOption("onItemRendered", {
                    element: this.element(),
                    excludeValidators: ["disabled", "readOnly"],
                    category: "rendering"
                })
            },
            _getItemRenderAction: function() {
                return this._itemRenderAction || this._createItemRenderAction()
            },
            _getItemTemplateName: function(args) {
                var data = args.itemData;
                var templateProperty = args.templateProperty || this.option("itemTemplateProperty");
                var template = data && data[templateProperty];
                return template || args.defaultTemplateName
            },
            _createItemByTemplate: function(itemTemplate, renderArgs) {
                return itemTemplate.render({
                    model: renderArgs.itemData,
                    container: renderArgs.container,
                    index: renderArgs.index
                })
            },
            _emptyMessageContainer: function() {
                return this._itemContainer()
            },
            _renderEmptyMessage: function(items) {
                items = items || this.option("items");
                var noDataText = this.option("noDataText");
                var hideNoData = !noDataText || items && items.length || this._isDataSourceLoading();
                if (hideNoData && this._$noData) {
                    this._$noData.remove();
                    this._$noData = null;
                    this.setAria("label", void 0)
                }
                if (!hideNoData) {
                    this._$noData = this._$noData || (0, _renderer2.default)("<div>").addClass("dx-empty-message");
                    this._$noData.appendTo(this._emptyMessageContainer()).html(noDataText);
                    this.setAria("label", noDataText)
                }
                this.$element().toggleClass(EMPTY_COLLECTION, !hideNoData)
            },
            _itemDXEventHandler: function(dxEvent, handlerOptionName, actionArgs, actionConfig) {
                this._itemEventHandler(dxEvent.target, handlerOptionName, (0, _extend.extend)(actionArgs, {
                    event: dxEvent
                }), actionConfig)
            },
            _itemEventHandler: function(initiator, handlerOptionName, actionArgs, actionConfig) {
                var action = this._createActionByOption(handlerOptionName, (0, _extend.extend)({
                    validatingTargetName: "itemElement"
                }, actionConfig));
                return this._itemEventHandlerImpl(initiator, action, actionArgs)
            },
            _itemEventHandlerByHandler: function(initiator, handler, actionArgs, actionConfig) {
                var action = this._createAction(handler, (0, _extend.extend)({
                    validatingTargetName: "itemElement"
                }, actionConfig));
                return this._itemEventHandlerImpl(initiator, action, actionArgs)
            },
            _itemEventHandlerImpl: function(initiator, action, actionArgs) {
                var $itemElement = this._closestItemElement((0, _renderer2.default)(initiator));
                var args = (0, _extend.extend)({}, actionArgs);
                return action((0, _extend.extend)(actionArgs, this._extendActionArgs($itemElement), args))
            },
            _extendActionArgs: function($itemElement) {
                return {
                    itemElement: (0, _dom.getPublicElement)($itemElement),
                    itemIndex: this._itemElements().index($itemElement),
                    itemData: this._getItemData($itemElement)
                }
            },
            _closestItemElement: function($element) {
                return (0, _renderer2.default)($element).closest(this._itemSelector())
            },
            _getItemData: function(itemElement) {
                return (0, _renderer2.default)(itemElement).data(this._itemDataKey())
            },
            _getSummaryItemsWidth: function(items, includeMargin) {
                var result = 0;
                if (items) {
                    _iterator2.default.each(items, function(_, item) {
                        result += (0, _renderer2.default)(item).outerWidth(includeMargin || false)
                    })
                }
                return result
            },
            getFocusedItemId: function() {
                if (!this._focusedItemId) {
                    this._focusedItemId = "dx-" + new _guid2.default
                }
                return this._focusedItemId
            },
            itemElements: function() {
                return this._itemElements()
            },
            itemsContainer: function() {
                return this._itemContainer()
            }
        }).include(_data_helper2.default);
        CollectionWidget.ItemClass = _item2.default;
        module.exports = CollectionWidget
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/data/data_source/operation_manager.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _utils = __webpack_require__( /*! ./utils */ 64);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var OperationManager = function() {
            function OperationManager() {
                _classCallCheck(this, OperationManager);
                this._counter = -1;
                this._deferreds = {}
            }
            _createClass(OperationManager, [{
                key: "add",
                value: function(deferred) {
                    this._counter++;
                    this._deferreds[this._counter] = deferred;
                    return this._counter
                }
            }, {
                key: "remove",
                value: function(operationId) {
                    return delete this._deferreds[operationId]
                }
            }, {
                key: "cancel",
                value: function(operationId) {
                    if (operationId in this._deferreds) {
                        this._deferreds[operationId].reject(_utils.CANCELED_TOKEN);
                        return true
                    }
                    return false
                }
            }, {
                key: "cancelAll",
                value: function() {
                    while (this._counter > -1) {
                        this.cancel(this._counter);
                        this._counter--
                    }
                }
            }]);
            return OperationManager
        }();
        exports.default = OperationManager
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/remote_query.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var queryAdapters = __webpack_require__( /*! ./query_adapters */ 190);
        var errorsModule = __webpack_require__( /*! ./errors */ 38);
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction;
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var arrayQueryImpl = __webpack_require__( /*! ./array_query */ 161);
        var remoteQueryImpl = function remoteQueryImpl(url, queryOptions, tasks) {
            tasks = tasks || [];
            queryOptions = queryOptions || {};
            var createTask = function(name, args) {
                return {
                    name: name,
                    args: args
                }
            };
            var exec = function(executorTask) {
                var d = new Deferred;
                var _adapterFactory;
                var _adapter;
                var _taskQueue;
                var _currentTask;
                var _mergedSortArgs;
                var rejectWithNotify = function(error) {
                    var handler = queryOptions.errorHandler;
                    if (handler) {
                        handler(error)
                    }
                    errorsModule._errorHandler(error);
                    d.reject(error)
                };

                function mergeSortTask(task) {
                    switch (task.name) {
                        case "sortBy":
                            _mergedSortArgs = [task.args];
                            return true;
                        case "thenBy":
                            if (!_mergedSortArgs) {
                                throw errorsModule.errors.Error("E4004")
                            }
                            _mergedSortArgs.push(task.args);
                            return true
                    }
                    return false
                }

                function unmergeSortTasks() {
                    var head = _taskQueue[0];
                    var unmergedTasks = [];
                    if (head && "multiSort" === head.name) {
                        _taskQueue.shift();
                        each(head.args[0], function() {
                            unmergedTasks.push(createTask(unmergedTasks.length ? "thenBy" : "sortBy", this))
                        })
                    }
                    _taskQueue = unmergedTasks.concat(_taskQueue)
                }
                try {
                    _adapterFactory = queryOptions.adapter;
                    if (!isFunction(_adapterFactory)) {
                        _adapterFactory = queryAdapters[_adapterFactory]
                    }
                    _adapter = _adapterFactory(queryOptions);
                    _taskQueue = [].concat(tasks).concat(executorTask);
                    var optimize = _adapter.optimize;
                    if (optimize) {
                        optimize(_taskQueue)
                    }
                    while (_taskQueue.length) {
                        _currentTask = _taskQueue[0];
                        if (!mergeSortTask(_currentTask)) {
                            if (_mergedSortArgs) {
                                _taskQueue.unshift(createTask("multiSort", [_mergedSortArgs]));
                                _mergedSortArgs = null;
                                continue
                            }
                            if ("enumerate" !== String(_currentTask.name)) {
                                if (!_adapter[_currentTask.name] || false === _adapter[_currentTask.name].apply(_adapter, _currentTask.args)) {
                                    break
                                }
                            }
                        }
                        _taskQueue.shift()
                    }
                    unmergeSortTasks();
                    _adapter.exec(url).done(function(result, extra) {
                        if (!_taskQueue.length) {
                            d.resolve(result, extra)
                        } else {
                            var clientChain = arrayQueryImpl(result, {
                                errorHandler: queryOptions.errorHandler
                            });
                            each(_taskQueue, function() {
                                clientChain = clientChain[this.name].apply(clientChain, this.args)
                            });
                            clientChain.done(d.resolve).fail(d.reject)
                        }
                    }).fail(rejectWithNotify)
                } catch (x) {
                    rejectWithNotify(x)
                }
                return d.promise()
            };
            var query = {};
            each(["sortBy", "thenBy", "filter", "slice", "select", "groupBy"], function() {
                var name = String(this);
                query[name] = function() {
                    return remoteQueryImpl(url, queryOptions, tasks.concat(createTask(name, arguments)))
                }
            });
            each(["count", "min", "max", "sum", "avg", "aggregate", "enumerate"], function() {
                var name = String(this);
                query[name] = function() {
                    return exec.call(this, createTask(name, arguments))
                }
            });
            return query
        };
        module.exports = remoteQueryImpl
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.edit.strategy.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var equalByValue = __webpack_require__( /*! ../../core/utils/common */ 3).equalByValue;
        var abstract = Class.abstract;
        var EditStrategy = Class.inherit({
            ctor: function(collectionWidget) {
                this._collectionWidget = collectionWidget
            },
            getIndexByItemData: abstract,
            getItemDataByIndex: abstract,
            getKeysByItems: abstract,
            getItemsByKeys: abstract,
            itemsGetter: abstract,
            getKeyByIndex: function(index) {
                var resultIndex = this._denormalizeItemIndex(index);
                return this.getKeysByItems([this.getItemDataByIndex(resultIndex)])[0]
            },
            _equalKeys: function(key1, key2) {
                if (this._collectionWidget._isKeySpecified()) {
                    return equalByValue(key1, key2)
                } else {
                    return key1 === key2
                }
            },
            beginCache: function() {
                this._cache = {}
            },
            endCache: function() {
                this._cache = null
            },
            getIndexByKey: abstract,
            getNormalizedIndex: function(value) {
                if (this._isNormalizedItemIndex(value)) {
                    return value
                }
                if (this._isItemIndex(value)) {
                    return this._normalizeItemIndex(value)
                }
                if (this._isDOMNode(value)) {
                    return this._getNormalizedItemIndex(value)
                }
                return this._normalizeItemIndex(this.getIndexByItemData(value))
            },
            getIndex: function(value) {
                if (this._isNormalizedItemIndex(value)) {
                    return this._denormalizeItemIndex(value)
                }
                if (this._isItemIndex(value)) {
                    return value
                }
                if (this._isDOMNode(value)) {
                    return this._denormalizeItemIndex(this._getNormalizedItemIndex(value))
                }
                return this.getIndexByItemData(value)
            },
            getItemElement: function(value) {
                if (this._isNormalizedItemIndex(value)) {
                    return this._getItemByNormalizedIndex(value)
                }
                if (this._isItemIndex(value)) {
                    return this._getItemByNormalizedIndex(this._normalizeItemIndex(value))
                }
                if (this._isDOMNode(value)) {
                    return $(value)
                }
                var normalizedItemIndex = this._normalizeItemIndex(this.getIndexByItemData(value));
                return this._getItemByNormalizedIndex(normalizedItemIndex)
            },
            deleteItemAtIndex: abstract,
            itemPlacementFunc: function(movingIndex, destinationIndex) {
                return this._itemsFromSameParent(movingIndex, destinationIndex) && movingIndex < destinationIndex ? "after" : "before"
            },
            moveItemAtIndexToIndex: abstract,
            _isNormalizedItemIndex: function(index) {
                return "number" === typeof index && Math.round(index) === index
            },
            _isDOMNode: function(value) {
                var $value;
                try {
                    $value = $(value)
                } catch (error) {
                    return false
                }
                return $value && $value.length && $value.get(0).nodeType
            },
            _isItemIndex: abstract,
            _getNormalizedItemIndex: abstract,
            _normalizeItemIndex: abstract,
            _denormalizeItemIndex: abstract,
            _getItemByNormalizedIndex: abstract,
            _itemsFromSameParent: abstract
        });
        module.exports = EditStrategy
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/selection/selection.strategy.deferred.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var SelectionStrategy = __webpack_require__( /*! ./selection.strategy */ 289);
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var dataQuery = __webpack_require__( /*! ../../data/query */ 45);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        module.exports = SelectionStrategy.inherit({
            getSelectedItems: function() {
                return this._loadFilteredData(this.options.selectionFilter)
            },
            getSelectedItemKeys: function() {
                var d = new Deferred;
                var that = this;
                var key = this.options.key();
                var select = typeUtils.isString(key) ? [key] : key;
                this._loadFilteredData(this.options.selectionFilter, null, select).done(function(items) {
                    var keys = items.map(function(item) {
                        return that.options.keyOf(item)
                    });
                    d.resolve(keys)
                }).fail(d.reject);
                return d.promise()
            },
            selectedItemKeys: function(keys, preserve, isDeselect, isSelectAll) {
                if (isSelectAll) {
                    var filter = this.options.filter();
                    if (!filter) {
                        this._setOption("selectionFilter", isDeselect ? [] : null)
                    } else {
                        this._addSelectionFilter(isDeselect, filter, isSelectAll)
                    }
                } else {
                    if (!preserve) {
                        this._setOption("selectionFilter", [])
                    }
                    for (var i = 0; i < keys.length; i++) {
                        if (isDeselect) {
                            this.removeSelectedItem(keys[i])
                        } else {
                            this.addSelectedItem(keys[i])
                        }
                    }
                }
                this.onSelectionChanged();
                return (new Deferred).resolve()
            },
            setSelectedItems: function(keys) {
                this._setOption("selectionFilter", null);
                for (var i = 0; i < keys.length; i++) {
                    this.addSelectedItem(keys[i])
                }
            },
            isItemDataSelected: function(itemData) {
                return this.isItemKeySelected(itemData)
            },
            isItemKeySelected: function(itemData) {
                var selectionFilter = this.options.selectionFilter;
                if (!selectionFilter) {
                    return true
                }
                return !!dataQuery([itemData]).filter(selectionFilter).toArray().length
            },
            _getFilterByKey: function(key) {
                var keyField = this.options.key();
                var filter = [keyField, "=", key];
                if (Array.isArray(keyField)) {
                    filter = [];
                    for (var i = 0; i < keyField.length; i++) {
                        filter.push([keyField[i], "=", key[keyField[i]]]);
                        if (i !== keyField.length - 1) {
                            filter.push("and")
                        }
                    }
                }
                return filter
            },
            addSelectedItem: function(key) {
                var filter = this._getFilterByKey(key);
                this._addSelectionFilter(false, filter)
            },
            removeSelectedItem: function(key) {
                var filter = this._getFilterByKey(key);
                this._addSelectionFilter(true, filter)
            },
            validate: function() {
                var key = this.options.key;
                if (key && void 0 === key()) {
                    throw errors.Error("E1042", "Deferred selection")
                }
            },
            _findSubFilter: function(selectionFilter, filter) {
                if (!selectionFilter) {
                    return -1
                }
                var filterString = JSON.stringify(filter);
                for (var index = 0; index < selectionFilter.length; index++) {
                    var subFilter = selectionFilter[index];
                    if (subFilter && JSON.stringify(subFilter) === filterString) {
                        return index
                    }
                }
                return -1
            },
            _isLastSubFilter: function(selectionFilter, filter) {
                if (selectionFilter && filter) {
                    return this._findSubFilter(selectionFilter, filter) === selectionFilter.length - 1 || 0 === this._findSubFilter([selectionFilter], filter)
                }
                return false
            },
            _addFilterOperator: function(selectionFilter, filterOperator) {
                if (selectionFilter.length > 1 && typeUtils.isString(selectionFilter[1]) && selectionFilter[1] !== filterOperator) {
                    selectionFilter = [selectionFilter]
                }
                if (selectionFilter.length) {
                    selectionFilter.push(filterOperator)
                }
                return selectionFilter
            },
            _denormalizeFilter: function(filter) {
                if (filter && typeUtils.isString(filter[0])) {
                    filter = [filter]
                }
                return filter
            },
            _addSelectionFilter: function(isDeselect, filter, isSelectAll) {
                var that = this;
                var currentFilter = isDeselect ? ["!", filter] : filter;
                var currentOperation = isDeselect ? "and" : "or";
                var needAddFilter = true;
                var selectionFilter = that.options.selectionFilter || [];
                selectionFilter = that._denormalizeFilter(selectionFilter);
                if (selectionFilter && selectionFilter.length) {
                    that._removeSameFilter(selectionFilter, filter, isDeselect, isSelectAll);
                    var filterIndex = that._removeSameFilter(selectionFilter, filter, !isDeselect);
                    var isKeyOperatorsAfterRemoved = this._isKeyFilter(filter) && this._hasKeyFiltersOnlyStartingFromIndex(selectionFilter, filterIndex);
                    needAddFilter = filter.length && !isKeyOperatorsAfterRemoved;
                    if (needAddFilter) {
                        selectionFilter = that._addFilterOperator(selectionFilter, currentOperation)
                    }
                }
                if (needAddFilter) {
                    selectionFilter.push(currentFilter)
                }
                selectionFilter = that._normalizeFilter(selectionFilter);
                that._setOption("selectionFilter", !isDeselect && !selectionFilter.length ? null : selectionFilter)
            },
            _normalizeFilter: function(filter) {
                if (filter && 1 === filter.length) {
                    filter = filter[0]
                }
                return filter
            },
            _removeFilterByIndex: function(filter, filterIndex, isSelectAll) {
                var operation = filter[1];
                if (filterIndex > 0) {
                    filter.splice(filterIndex - 1, 2)
                } else {
                    filter.splice(filterIndex, 2)
                }
                if (isSelectAll && "and" === operation) {
                    filter.splice(0, filter.length)
                }
            },
            _isSimpleKeyFilter: function(filter, key) {
                return 3 === filter.length && filter[0] === key && "=" === filter[1]
            },
            _isKeyFilter: function(filter) {
                if (2 === filter.length && "!" === filter[0]) {
                    return this._isKeyFilter(filter[1])
                }
                var keyField = this.options.key();
                if (Array.isArray(keyField)) {
                    if (filter.length !== 2 * keyField.length - 1) {
                        return false
                    }
                    for (var i = 0; i < keyField.length; i++) {
                        if (i > 0 && "and" !== filter[i]) {
                            return false
                        }
                        if (!this._isSimpleKeyFilter(filter[2 * i], keyField[i])) {
                            return false
                        }
                    }
                    return true
                }
                return this._isSimpleKeyFilter(filter, keyField)
            },
            _hasKeyFiltersOnlyStartingFromIndex: function(selectionFilter, filterIndex) {
                if (filterIndex >= 0) {
                    for (var i = filterIndex; i < selectionFilter.length; i++) {
                        if ("string" !== typeof selectionFilter[i] && !this._isKeyFilter(selectionFilter[i])) {
                            return false
                        }
                    }
                    return true
                }
                return false
            },
            _removeSameFilter: function(selectionFilter, filter, inverted, isSelectAll) {
                filter = inverted ? ["!", filter] : filter;
                if (JSON.stringify(filter) === JSON.stringify(selectionFilter)) {
                    selectionFilter.splice(0, selectionFilter.length);
                    return 0
                }
                var filterIndex = this._findSubFilter(selectionFilter, filter);
                if (filterIndex >= 0) {
                    this._removeFilterByIndex(selectionFilter, filterIndex, isSelectAll);
                    return filterIndex
                } else {
                    for (var i = 0; i < selectionFilter.length; i++) {
                        if (Array.isArray(selectionFilter[i]) && selectionFilter[i].length > 2) {
                            var _filterIndex = this._removeSameFilter(selectionFilter[i], filter, false, isSelectAll);
                            if (_filterIndex >= 0) {
                                if (!selectionFilter[i].length) {
                                    this._removeFilterByIndex(selectionFilter, i, isSelectAll)
                                } else {
                                    if (1 === selectionFilter[i].length) {
                                        selectionFilter[i] = selectionFilter[i][0]
                                    }
                                }
                                return _filterIndex
                            }
                        }
                    }
                    return -1
                }
            },
            getSelectAllState: function() {
                var filter = this.options.filter();
                var selectionFilter = this.options.selectionFilter;
                if (!selectionFilter) {
                    return true
                }
                if (!selectionFilter.length) {
                    return false
                }
                if (!filter || !filter.length) {
                    return
                }
                selectionFilter = this._denormalizeFilter(selectionFilter);
                if (this._isLastSubFilter(selectionFilter, filter)) {
                    return true
                }
                if (this._isLastSubFilter(selectionFilter, ["!", filter])) {
                    return false
                }
                return
            }
        })
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/selection/selection.strategy.standard.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var isDefined = typeUtils.isDefined;
        var getKeyHash = commonUtils.getKeyHash;
        var dataQuery = __webpack_require__( /*! ../../data/query */ 45);
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var SelectionFilterCreator = __webpack_require__( /*! ../../core/utils/selection_filter */ 302).SelectionFilterCreator;
        var when = deferredUtils.when;
        var Deferred = deferredUtils.Deferred;
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var SelectionStrategy = __webpack_require__( /*! ./selection.strategy */ 289);
        module.exports = SelectionStrategy.inherit({
            ctor: function(options) {
                this.callBase(options);
                this._initSelectedItemKeyHash()
            },
            _initSelectedItemKeyHash: function() {
                this._setOption("keyHashIndices", this.options.equalByReference ? null : {})
            },
            getSelectedItemKeys: function() {
                return this.options.selectedItemKeys.slice(0)
            },
            getSelectedItems: function() {
                return this.options.selectedItems.slice(0)
            },
            _preserveSelectionUpdate: function(items, isDeselect) {
                var keyOf = this.options.keyOf;
                var keyIndicesToRemoveMap;
                var keyIndex;
                var i;
                if (!keyOf) {
                    return
                }
                var isBatchDeselect = isDeselect && items.length > 1 && !this.options.equalByReference;
                if (isBatchDeselect) {
                    keyIndicesToRemoveMap = {}
                }
                for (i = 0; i < items.length; i++) {
                    var item = items[i];
                    var key = keyOf(item);
                    if (isDeselect) {
                        keyIndex = this.removeSelectedItem(key, keyIndicesToRemoveMap);
                        if (keyIndicesToRemoveMap && keyIndex >= 0) {
                            keyIndicesToRemoveMap[keyIndex] = true
                        }
                    } else {
                        this.addSelectedItem(key, item)
                    }
                }
                if (isBatchDeselect) {
                    this._batchRemoveSelectedItems(keyIndicesToRemoveMap)
                }
            },
            _batchRemoveSelectedItems: function(keyIndicesToRemoveMap) {
                var selectedItemKeys = this.options.selectedItemKeys.slice(0);
                var selectedItems = this.options.selectedItems.slice(0);
                this.options.selectedItemKeys.length = 0;
                this.options.selectedItems.length = 0;
                for (var i = 0; i < selectedItemKeys.length; i++) {
                    if (!keyIndicesToRemoveMap[i]) {
                        this.options.selectedItemKeys.push(selectedItemKeys[i]);
                        this.options.selectedItems.push(selectedItems[i])
                    }
                }
                this._initSelectedItemKeyHash();
                this.updateSelectedItemKeyHash(this.options.selectedItemKeys)
            },
            _loadSelectedItemsCore: function(keys, isDeselect, isSelectAll) {
                var deferred = new Deferred;
                var key = this.options.key();
                if (!keys.length && !isSelectAll) {
                    deferred.resolve([]);
                    return deferred
                }
                var filter = this.options.filter();
                if (isSelectAll && isDeselect && !filter) {
                    deferred.resolve(this.getSelectedItems());
                    return deferred
                }
                var selectionFilterCreator = new SelectionFilterCreator(keys, isSelectAll);
                var combinedFilter = selectionFilterCreator.getCombinedFilter(key, filter);
                var deselectedItems = [];
                if (isDeselect) {
                    deselectedItems = combinedFilter ? dataQuery(this.options.selectedItems).filter(combinedFilter).toArray() : this.options.selectedItems.slice(0)
                }
                var filteredItems = deselectedItems.length ? deselectedItems : this.options.plainItems(true).filter(this.options.isSelectableItem).map(this.options.getItemData);
                var localFilter = selectionFilterCreator.getLocalFilter(this.options.keyOf, this.equalKeys.bind(this), this.options.equalByReference, key);
                filteredItems = filteredItems.filter(localFilter);
                if (deselectedItems.length || !isSelectAll && filteredItems.length === keys.length) {
                    deferred.resolve(filteredItems)
                } else {
                    deferred = this._loadFilteredData(combinedFilter, localFilter, null, isSelectAll)
                }
                return deferred
            },
            _replaceSelectionUpdate: function(items) {
                var internalKeys = [];
                var keyOf = this.options.keyOf;
                if (!keyOf) {
                    return
                }
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    var key = keyOf(item);
                    internalKeys.push(key)
                }
                this.setSelectedItems(internalKeys, items)
            },
            _warnOnIncorrectKeys: function(keys) {
                var allowNullValue = this.options.allowNullValue;
                for (var i = 0; i < keys.length; i++) {
                    var key = keys[i];
                    if ((!allowNullValue || null !== key) && !this.isItemKeySelected(key)) {
                        errors.log("W1002", key)
                    }
                }
            },
            _loadSelectedItems: function(keys, isDeselect, isSelectAll) {
                var that = this;
                var deferred = new Deferred;
                when(that._lastLoadDeferred).always(function() {
                    that._loadSelectedItemsCore(keys, isDeselect, isSelectAll).done(deferred.resolve).fail(deferred.reject)
                });
                that._lastLoadDeferred = deferred;
                return deferred
            },
            selectedItemKeys: function(keys, preserve, isDeselect, isSelectAll) {
                var that = this;
                var deferred = that._loadSelectedItems(keys, isDeselect, isSelectAll);
                deferred.done(function(items) {
                    if (preserve) {
                        that._preserveSelectionUpdate(items, isDeselect)
                    } else {
                        that._replaceSelectionUpdate(items)
                    }
                    if (!isSelectAll && !isDeselect) {
                        that._warnOnIncorrectKeys(keys)
                    }
                    that.onSelectionChanged()
                });
                return deferred
            },
            addSelectedItem: function(key, itemData) {
                if (isDefined(itemData) && itemData.disabled) {
                    if (this.options.disabledItemKeys.indexOf(key) === -1) {
                        this.options.disabledItemKeys.push(key)
                    }
                    return
                }
                var keyHash = this._getKeyHash(key);
                if (this._indexOfSelectedItemKey(keyHash) === -1) {
                    if (!typeUtils.isObject(keyHash) && this.options.keyHashIndices) {
                        this.options.keyHashIndices[keyHash] = [this.options.selectedItemKeys.length]
                    }
                    this.options.selectedItemKeys.push(key);
                    this.options.addedItemKeys.push(key);
                    this.options.addedItems.push(itemData);
                    this.options.selectedItems.push(itemData)
                }
            },
            _getSelectedIndexByKey: function(key, ignoreIndicesMap) {
                var selectedItemKeys = this.options.selectedItemKeys;
                for (var index = 0; index < selectedItemKeys.length; index++) {
                    if ((!ignoreIndicesMap || !ignoreIndicesMap[index]) && this.equalKeys(selectedItemKeys[index], key)) {
                        return index
                    }
                }
                return -1
            },
            _getSelectedIndexByHash: function(key, ignoreIndicesMap) {
                var indices = this.options.keyHashIndices[key];
                if (indices && indices.length > 1 && ignoreIndicesMap) {
                    indices = indices.filter(function(index) {
                        return !ignoreIndicesMap[index]
                    })
                }
                return indices && indices[0] >= 0 ? indices[0] : -1
            },
            _indexOfSelectedItemKey: function(key, ignoreIndicesMap) {
                var selectedIndex;
                if (this.options.equalByReference) {
                    selectedIndex = this.options.selectedItemKeys.indexOf(key)
                } else {
                    if (typeUtils.isObject(key)) {
                        selectedIndex = this._getSelectedIndexByKey(key, ignoreIndicesMap)
                    } else {
                        selectedIndex = this._getSelectedIndexByHash(key, ignoreIndicesMap)
                    }
                }
                return selectedIndex
            },
            _shiftSelectedKeyIndices: function(keyIndex) {
                for (var currentKeyIndex = keyIndex; currentKeyIndex < this.options.selectedItemKeys.length; currentKeyIndex++) {
                    var currentKey = this.options.selectedItemKeys[currentKeyIndex];
                    var currentKeyHash = getKeyHash(currentKey);
                    var currentKeyIndices = this.options.keyHashIndices[currentKeyHash];
                    if (!currentKeyIndices) {
                        continue
                    }
                    for (var i = 0; i < currentKeyIndices.length; i++) {
                        if (currentKeyIndices[i] > keyIndex) {
                            currentKeyIndices[i]--
                        }
                    }
                }
            },
            removeSelectedItem: function(key, keyIndicesToRemoveMap) {
                var keyHash = this._getKeyHash(key);
                var isBatchDeselect = !!keyIndicesToRemoveMap;
                var keyIndex = this._indexOfSelectedItemKey(keyHash, keyIndicesToRemoveMap);
                if (keyIndex < 0) {
                    return keyIndex
                }
                this.options.removedItemKeys.push(key);
                this.options.removedItems.push(this.options.selectedItems[keyIndex]);
                if (isBatchDeselect) {
                    return keyIndex
                }
                this.options.selectedItemKeys.splice(keyIndex, 1);
                this.options.selectedItems.splice(keyIndex, 1);
                if (typeUtils.isObject(keyHash) || !this.options.keyHashIndices) {
                    return keyIndex
                }
                var keyIndices = this.options.keyHashIndices[keyHash];
                if (!keyIndices) {
                    return keyIndex
                }
                keyIndices.shift();
                if (!keyIndices.length) {
                    delete this.options.keyHashIndices[keyHash]
                }
                this._shiftSelectedKeyIndices(keyIndex);
                return keyIndex
            },
            _updateAddedItemKeys: function(keys, items) {
                for (var i = 0; i < keys.length; i++) {
                    if (!this.isItemKeySelected(keys[i])) {
                        this.options.addedItemKeys.push(keys[i]);
                        this.options.addedItems.push(items[i])
                    }
                }
            },
            _updateRemovedItemKeys: function(keys, oldSelectedKeys, oldSelectedItems) {
                for (var i = 0; i < oldSelectedKeys.length; i++) {
                    if (!this.isItemKeySelected(oldSelectedKeys[i])) {
                        this.options.removedItemKeys.push(oldSelectedKeys[i]);
                        this.options.removedItems.push(oldSelectedItems[i])
                    }
                }
            },
            _getKeyHash: function(key) {
                return this.options.equalByReference ? key : getKeyHash(key)
            },
            setSelectedItems: function(keys, items) {
                this._updateAddedItemKeys(keys, items);
                var oldSelectedKeys = this.options.selectedItemKeys;
                var oldSelectedItems = this.options.selectedItems;
                if (!this.options.equalByReference) {
                    this._initSelectedItemKeyHash();
                    this.updateSelectedItemKeyHash(keys)
                }
                this._setOption("selectedItemKeys", keys);
                this._setOption("selectedItems", items);
                this._updateRemovedItemKeys(keys, oldSelectedKeys, oldSelectedItems)
            },
            isItemDataSelected: function(itemData) {
                var key = this.options.keyOf(itemData);
                return this.isItemKeySelected(key)
            },
            isItemKeySelected: function(key) {
                var keyHash = this._getKeyHash(key);
                var index = this._indexOfSelectedItemKey(keyHash);
                return index !== -1
            },
            getSelectAllState: function(visibleOnly) {
                if (visibleOnly) {
                    return this._getVisibleSelectAllState()
                } else {
                    return this._getFullSelectAllState()
                }
            }
        })
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/event_registrator.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _event_registrator_callbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 130);
        var _event_registrator_callbacks2 = _interopRequireDefault(_event_registrator_callbacks);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _module = __webpack_require__( /*! ./module */ 189);
        var _module2 = _interopRequireDefault(_module);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _event_registrator_callbacks2.default.add(function(name) {
            var ngEventName = name.slice(0, 2) + name.charAt(2).toUpperCase() + name.slice(3);
            _module2.default.directive(ngEventName, ["$parse", function($parse) {
                return function(scope, element, attr) {
                    var attrValue = attr[ngEventName].trim();
                    var handler;
                    var eventOptions = {};
                    if ("{" === attrValue.charAt(0)) {
                        eventOptions = scope.$eval(attrValue);
                        handler = $parse(eventOptions.execute)
                    } else {
                        handler = $parse(attr[ngEventName])
                    }
                    _events_engine2.default.on(element, name, eventOptions, function(e) {
                        scope.$apply(function() {
                            handler(scope, {
                                $event: e
                            })
                        })
                    })
                }
            }])
        })
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/components.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var ngModule = __webpack_require__( /*! ./module */ 189);
        ngModule.service("dxDigestCallbacks", ["$rootScope", function($rootScope) {
            var begin = Callbacks();
            var prioritizedEnd = Callbacks();
            var end = Callbacks();
            var digestPhase = false;
            $rootScope.$watch(function() {
                if (digestPhase) {
                    return
                }
                digestPhase = true;
                begin.fire();
                $rootScope.$$postDigest(function() {
                    digestPhase = false;
                    prioritizedEnd.fire();
                    end.fire()
                })
            });
            return {
                begin: {
                    add: function(callback) {
                        if (digestPhase) {
                            callback()
                        }
                        begin.add(callback)
                    },
                    remove: begin.remove.bind(begin)
                },
                end: {
                    add: end.add.bind(end),
                    addPrioritized: prioritizedEnd.add.bind(prioritizedEnd),
                    remove: end.remove.bind(end)
                }
            }
        }])
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/action_executors.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _action = __webpack_require__( /*! ../../core/action */ 105);
        var _action2 = _interopRequireDefault(_action);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _action2.default.registerExecutor({
            ngExpression: {
                execute: function(e) {
                    if ("string" === typeof e.action) {
                        e.context.$eval(e.action)
                    }
                }
            }
        })
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 62);
        if (ko) {
            var errors = __webpack_require__( /*! ../core/errors */ 22);
            var compareVersion = __webpack_require__( /*! ../core/utils/version */ 60).compare;
            if (compareVersion(ko.version, [2, 3]) < 0) {
                throw errors.Error("E0013")
            }
            __webpack_require__( /*! ./knockout/component_registrator */ 505);
            __webpack_require__( /*! ./knockout/event_registrator */ 507);
            __webpack_require__( /*! ./knockout/components */ 508);
            __webpack_require__( /*! ./knockout/validation */ 509);
            __webpack_require__( /*! ./knockout/variable_wrapper_utils */ 510);
            __webpack_require__( /*! ./knockout/clean_node */ 511);
            __webpack_require__( /*! ./knockout/clean_node_old */ 512)
        }
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/component_registrator.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _knockout = __webpack_require__( /*! knockout */ 62);
        var _knockout2 = _interopRequireDefault(_knockout);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _errors = __webpack_require__( /*! ../../core/errors */ 22);
        var _errors2 = _interopRequireDefault(_errors);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _component_registrator_callbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 159);
        var _component_registrator_callbacks2 = _interopRequireDefault(_component_registrator_callbacks);
        var _ui = __webpack_require__( /*! ../../ui/widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _template = __webpack_require__( /*! ./template */ 506);
        var _editor = __webpack_require__( /*! ../../ui/editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _locker = __webpack_require__( /*! ../../core/utils/locker */ 288);
        var _locker2 = _interopRequireDefault(_locker);
        var _utils = __webpack_require__( /*! ./utils */ 290);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var LOCKS_DATA_KEY = "dxKoLocks";
        var CREATED_WITH_KO_DATA_KEY = "dxKoCreation";
        var editorsBindingHandlers = [];
        var registerComponentKoBinding = function(componentName, componentClass) {
            if (componentClass.subclassOf(_editor2.default)) {
                editorsBindingHandlers.push(componentName)
            }
            _knockout2.default.bindingHandlers[componentName] = {
                init: function(domNode, valueAccessor) {
                    var $element = (0, _renderer2.default)(domNode);
                    var optionChangedCallbacks = (0, _callbacks2.default)();
                    var optionsByReference = {};
                    var component;
                    var knockoutConfig = (0, _config2.default)().knockout;
                    var isBindingPropertyPredicateName = knockoutConfig && knockoutConfig.isBindingPropertyPredicateName;
                    var isBindingPropertyPredicate;
                    var ctorOptions = {
                        onInitializing: function() {
                            optionsByReference = this._getOptionsByReference();
                            _knockout2.default.computed(function() {
                                var model = _knockout2.default.unwrap(valueAccessor());
                                if (component) {
                                    component.beginUpdate()
                                }
                                isBindingPropertyPredicate = isBindingPropertyPredicateName && model && model[isBindingPropertyPredicateName];
                                unwrapModel(model);
                                if (component) {
                                    component.endUpdate()
                                }
                            }, null, {
                                disposeWhenNodeIsRemoved: domNode
                            });
                            component = this
                        },
                        modelByElement: function($element) {
                            if ($element.length) {
                                var node = (0, _utils.getClosestNodeWithContext)($element.get(0));
                                return _knockout2.default.dataFor(node)
                            }
                        },
                        nestedComponentOptions: function(component) {
                            return {
                                modelByElement: component.option("modelByElement"),
                                nestedComponentOptions: component.option("nestedComponentOptions")
                            }
                        },
                        _optionChangedCallbacks: optionChangedCallbacks,
                        integrationOptions: {
                            watchMethod: function(fn, callback, options) {
                                options = options || {};
                                var skipCallback = options.skipImmediate;
                                var watcher = _knockout2.default.computed(function() {
                                    var newValue = _knockout2.default.unwrap(fn());
                                    if (!skipCallback) {
                                        callback(newValue)
                                    }
                                    skipCallback = false
                                });
                                return function() {
                                    watcher.dispose()
                                }
                            },
                            templates: {
                                "dx-polymorph-widget": {
                                    render: function(options) {
                                        var widgetName = _knockout2.default.utils.unwrapObservable(options.model.widget);
                                        if (!widgetName) {
                                            return
                                        }
                                        if ("button" === widgetName || "tabs" === widgetName || "dropDownMenu" === widgetName) {
                                            var deprecatedName = widgetName;
                                            widgetName = _inflector2.default.camelize("dx-" + widgetName);
                                            _errors2.default.log("W0001", "dxToolbar - 'widget' item field", deprecatedName, "16.1", "Use: '" + widgetName + "' instead")
                                        }
                                        var markup = (0, _renderer2.default)("<div>").attr("data-bind", widgetName + ": options").get(0);
                                        (0, _renderer2.default)(options.container).append(markup);
                                        _knockout2.default.applyBindings(options.model, markup)
                                    }
                                }
                            },
                            createTemplate: function(element) {
                                return new _template.KoTemplate(element)
                            }
                        }
                    };
                    var optionNameToModelMap = {};
                    var applyModelValueToOption = function(optionName, modelValue, unwrap) {
                        var locks = $element.data(LOCKS_DATA_KEY);
                        var optionValue = unwrap ? _knockout2.default.unwrap(modelValue) : modelValue;
                        if (_knockout2.default.isWriteableObservable(modelValue)) {
                            optionNameToModelMap[optionName] = modelValue
                        }
                        if (component) {
                            if (locks.locked(optionName)) {
                                return
                            }
                            locks.obtain(optionName);
                            try {
                                if (_knockout2.default.ignoreDependencies) {
                                    _knockout2.default.ignoreDependencies(component.option, component, [optionName, optionValue])
                                } else {
                                    component.option(optionName, optionValue)
                                }
                            } finally {
                                locks.release(optionName)
                            }
                        } else {
                            ctorOptions[optionName] = optionValue
                        }
                    };
                    var handleOptionChanged = function(args) {
                        var optionName = args.fullName;
                        var optionValue = args.value;
                        if (!(optionName in optionNameToModelMap)) {
                            return
                        }
                        var $element = this._$element;
                        var locks = $element.data(LOCKS_DATA_KEY);
                        if (locks.locked(optionName)) {
                            return
                        }
                        locks.obtain(optionName);
                        try {
                            optionNameToModelMap[optionName](optionValue)
                        } finally {
                            locks.release(optionName)
                        }
                    };
                    var createComponent = function() {
                        optionChangedCallbacks.add(handleOptionChanged);
                        $element.data(CREATED_WITH_KO_DATA_KEY, true).data(LOCKS_DATA_KEY, new _locker2.default);
                        new componentClass($element, ctorOptions);
                        ctorOptions = null
                    };
                    var unwrapModelValue = function(currentModel, propertyName, propertyPath) {
                        if (propertyPath === isBindingPropertyPredicateName) {
                            return
                        }
                        if (!isBindingPropertyPredicate || isBindingPropertyPredicate(propertyPath, propertyName, currentModel)) {
                            var unwrappedPropertyValue;
                            _knockout2.default.computed(function() {
                                var propertyValue = currentModel[propertyName];
                                applyModelValueToOption(propertyPath, propertyValue, true);
                                unwrappedPropertyValue = _knockout2.default.unwrap(propertyValue)
                            }, null, {
                                disposeWhenNodeIsRemoved: domNode
                            });
                            if ((0, _type.isPlainObject)(unwrappedPropertyValue)) {
                                if (!optionsByReference[propertyPath]) {
                                    unwrapModel(unwrappedPropertyValue, propertyPath)
                                }
                            }
                        } else {
                            applyModelValueToOption(propertyPath, currentModel[propertyName], false)
                        }
                    };

                    function unwrapModel(model, propertyPath) {
                        for (var propertyName in model) {
                            if (Object.prototype.hasOwnProperty.call(model, propertyName)) {
                                unwrapModelValue(model, propertyName, propertyPath ? [propertyPath, propertyName].join(".") : propertyName)
                            }
                        }
                    }
                    createComponent();
                    return {
                        controlsDescendantBindings: componentClass.subclassOf(_ui2.default)
                    }
                }
            };
            if ("dxValidator" === componentName) {
                _knockout2.default.bindingHandlers.dxValidator.after = editorsBindingHandlers
            }
        };
        _component_registrator_callbacks2.default.add(function(name, componentClass) {
            registerComponentKoBinding(name, componentClass)
        })
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/template.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.KoTemplate = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _knockout = __webpack_require__( /*! knockout */ 62);
        var _knockout2 = _interopRequireDefault(_knockout);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _template_base = __webpack_require__( /*! ../../core/templates/template_base */ 78);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _utils = __webpack_require__( /*! ./utils */ 290);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var getParentContext = function(data) {
            var parentNode = (0, _dom_adapter.createElement)("div");
            _knockout2.default.applyBindingsToNode(parentNode, null, data);
            var parentContext = _knockout2.default.contextFor(parentNode);
            _knockout2.default.cleanNode(parentNode);
            return parentContext
        };
        exports.KoTemplate = function(_TemplateBase) {
            _inherits(KoTemplate, _TemplateBase);
            var _super = _createSuper(KoTemplate);

            function KoTemplate(element) {
                var _this;
                _classCallCheck(this, KoTemplate);
                _this = _super.call(this);
                _this._element = element;
                _this._template = (0, _renderer2.default)("<div>").append((0, _dom.normalizeTemplateElement)(element));
                _this._registerKoTemplate();
                return _this
            }
            _createClass(KoTemplate, [{
                key: "_registerKoTemplate",
                value: function() {
                    var template = this._template.get(0);
                    new _knockout2.default.templateSources.anonymousTemplate(template).nodes(template)
                }
            }, {
                key: "_prepareDataForContainer",
                value: function(data, container) {
                    if (container && container.length) {
                        var node = (0, _utils.getClosestNodeWithContext)(container.get(0));
                        var containerContext = _knockout2.default.contextFor(node);
                        data = void 0 !== data ? data : _knockout2.default.dataFor(node) || {};
                        if (containerContext) {
                            return data === containerContext.$data ? containerContext : containerContext.createChildContext(data)
                        }
                    }
                    return getParentContext(data).createChildContext(data)
                }
            }, {
                key: "_renderCore",
                value: function(options) {
                    var model = this._prepareDataForContainer(options.model, (0, _renderer2.default)(options.container));
                    if ((0, _type.isDefined)(options.index)) {
                        model.$index = options.index
                    }
                    var $placeholder = (0, _renderer2.default)("<div>").appendTo(options.container);
                    var $result;
                    _knockout2.default.renderTemplate(this._template.get(0), model, {
                        afterRender: function(nodes) {
                            $result = (0, _renderer2.default)(nodes)
                        }
                    }, $placeholder.get(0), "replaceNode");
                    return $result
                }
            }, {
                key: "source",
                value: function() {
                    return (0, _renderer2.default)(this._element).clone()
                }
            }, {
                key: "dispose",
                value: function() {
                    this._template.remove()
                }
            }]);
            return KoTemplate
        }(_template_base.TemplateBase)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/event_registrator.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _knockout = __webpack_require__( /*! knockout */ 62);
        var _knockout2 = _interopRequireDefault(_knockout);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _event_registrator_callbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 130);
        var _event_registrator_callbacks2 = _interopRequireDefault(_event_registrator_callbacks);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _event_registrator_callbacks2.default.add(function(name) {
            var koBindingEventName = eventUtils.addNamespace(name, name + "Binding");
            _knockout2.default.bindingHandlers[name] = {
                update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
                    var $element = (0, _renderer2.default)(element);
                    var unwrappedValue = _knockout2.default.utils.unwrapObservable(valueAccessor());
                    var eventSource = unwrappedValue.execute ? unwrappedValue.execute : unwrappedValue;
                    _events_engine2.default.off($element, koBindingEventName);
                    _events_engine2.default.on($element, koBindingEventName, (0, _type.isPlainObject)(unwrappedValue) ? unwrappedValue : {}, function(e) {
                        eventSource.call(viewModel, viewModel, e)
                    })
                }
            }
        })
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/components.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 62);
        var iconUtils = __webpack_require__( /*! ../../core/utils/icon */ 53);
        ko.bindingHandlers.dxControlsDescendantBindings = {
            init: function(_, valueAccessor) {
                return {
                    controlsDescendantBindings: ko.unwrap(valueAccessor())
                }
            }
        };
        ko.bindingHandlers.dxIcon = {
            init: function(element, valueAccessor) {
                var options = ko.utils.unwrapObservable(valueAccessor()) || {};
                var iconElement = iconUtils.getImageContainer(options);
                ko.virtualElements.emptyNode(element);
                if (iconElement) {
                    ko.virtualElements.prepend(element, iconElement.get(0))
                }
            },
            update: function(element, valueAccessor) {
                var options = ko.utils.unwrapObservable(valueAccessor()) || {};
                var iconElement = iconUtils.getImageContainer(options);
                ko.virtualElements.emptyNode(element);
                if (iconElement) {
                    ko.virtualElements.prepend(element, iconElement.get(0))
                }
            }
        };
        ko.virtualElements.allowedBindings.dxIcon = true
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/validation.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _events_strategy = __webpack_require__( /*! ../../core/events_strategy */ 100);
        var _validation_engine = __webpack_require__( /*! ../../ui/validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _knockout = __webpack_require__( /*! knockout */ 62);
        var _knockout2 = _interopRequireDefault(_knockout);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var VALIDATION_STATUS_VALID = "valid";
        var VALIDATION_STATUS_PENDING = "pending";
        var koDxValidator = _class2.default.inherit({
            ctor: function(target, _ref) {
                var _this = this;
                var name = _ref.name,
                    validationRules = _ref.validationRules;
                this.target = target;
                this.name = name;
                this.isValid = _knockout2.default.observable(true);
                this.validationError = _knockout2.default.observable();
                this.validationErrors = _knockout2.default.observable();
                this.validationStatus = _knockout2.default.observable(VALIDATION_STATUS_VALID);
                this._eventsStrategy = new _events_strategy.EventsStrategy(this);
                this.validationRules = (0, _iterator.map)(validationRules, function(rule, index) {
                    return (0, _extend.extend)({}, rule, {
                        validator: _this,
                        index: index
                    })
                });
                this._validationInfo = {
                    result: null,
                    deferred: null
                }
            },
            _updateValidationResult: function(result) {
                if (!this._validationInfo.result || this._validationInfo.result.id !== result.id) {
                    var complete = this._validationInfo.deferred && this._validationInfo.result.complete;
                    this._validationInfo.result = (0, _extend.extend)({}, result, {
                        complete: complete
                    })
                } else {
                    for (var prop in result) {
                        if ("id" !== prop && "complete" !== prop) {
                            this._validationInfo.result[prop] = result[prop]
                        }
                    }
                }
            },
            validate: function() {
                var _this2 = this;
                var currentResult = this._validationInfo && this._validationInfo.result;
                var value = this.target();
                if (currentResult && currentResult.status === VALIDATION_STATUS_PENDING && currentResult.value === value) {
                    return (0, _extend.extend)({}, currentResult)
                }
                var result = _validation_engine2.default.validate(value, this.validationRules, this.name);
                result.id = (new _guid2.default).toString();
                this._applyValidationResult(result);
                result.complete && result.complete.then(function(res) {
                    if (res.id === _this2._validationInfo.result.id) {
                        _this2._applyValidationResult(res)
                    }
                });
                return (0, _extend.extend)({}, this._validationInfo.result)
            },
            reset: function() {
                this.target(null);
                var result = {
                    id: null,
                    isValid: true,
                    brokenRule: null,
                    pendingRules: null,
                    status: VALIDATION_STATUS_VALID,
                    complete: null
                };
                this._applyValidationResult(result);
                return result
            },
            _applyValidationResult: function(result) {
                result.validator = this;
                this._updateValidationResult(result);
                this.target.dxValidator.isValid(this._validationInfo.result.isValid);
                this.target.dxValidator.validationError(this._validationInfo.result.brokenRule);
                this.target.dxValidator.validationErrors(this._validationInfo.result.brokenRules);
                this.target.dxValidator.validationStatus(this._validationInfo.result.status);
                if (result.status === VALIDATION_STATUS_PENDING) {
                    if (!this._validationInfo.deferred) {
                        this._validationInfo.deferred = new _deferred.Deferred;
                        this._validationInfo.result.complete = this._validationInfo.deferred.promise()
                    }
                    this._eventsStrategy.fireEvent("validating", [this._validationInfo.result]);
                    return
                }
                if (result.status !== VALIDATION_STATUS_PENDING) {
                    this._eventsStrategy.fireEvent("validated", [result]);
                    if (this._validationInfo.deferred) {
                        this._validationInfo.deferred.resolve(result);
                        this._validationInfo.deferred = null
                    }
                }
            },
            on: function(eventName, eventHandler) {
                this._eventsStrategy.on(eventName, eventHandler);
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            }
        });
        _knockout2.default.extenders.dxValidator = function(target, option) {
            target.dxValidator = new koDxValidator(target, option);
            target.subscribe(target.dxValidator.validate.bind(target.dxValidator));
            return target
        };
        _validation_engine2.default.registerModelForValidation = function(model) {
            (0, _iterator.each)(model, function(name, member) {
                if (_knockout2.default.isObservable(member) && member.dxValidator) {
                    _validation_engine2.default.registerValidatorInGroup(model, member.dxValidator)
                }
            })
        };
        _validation_engine2.default.unregisterModelForValidation = function(model) {
            (0, _iterator.each)(model, function(name, member) {
                if (_knockout2.default.isObservable(member) && member.dxValidator) {
                    _validation_engine2.default.removeRegisteredValidator(model, member.dxValidator)
                }
            })
        };
        _validation_engine2.default.validateModel = _validation_engine2.default.validateGroup
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/variable_wrapper_utils.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 62);
        var variableWrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94);
        variableWrapper.inject({
            isWrapped: ko.isObservable,
            isWritableWrapped: ko.isWritableObservable,
            wrap: ko.observable,
            unwrap: function(value) {
                if (ko.isObservable(value)) {
                    return ko.utils.unwrapObservable(value)
                }
                return this.callBase(value)
            },
            assign: function(variable, value) {
                if (ko.isObservable(variable)) {
                    variable(value)
                } else {
                    this.callBase(variable, value)
                }
            }
        })
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/clean_node.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var elementData = __webpack_require__( /*! ../../core/element_data */ 41);
        var afterCleanData = elementData.afterCleanData;
        var strategyChanging = elementData.strategyChanging;
        var ko = __webpack_require__( /*! knockout */ 62);
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var originalKOCleanExternalData = ko.utils.domNodeDisposal.cleanExternalData;
        var patchCleanData = function() {
            afterCleanData(function(nodes) {
                var i;
                for (i = 0; i < nodes.length; i++) {
                    nodes[i].cleanedByJquery = true
                }
                for (i = 0; i < nodes.length; i++) {
                    if (!nodes[i].cleanedByKo) {
                        ko.cleanNode(nodes[i])
                    }
                    delete nodes[i].cleanedByKo
                }
                for (i = 0; i < nodes.length; i++) {
                    delete nodes[i].cleanedByJquery
                }
            });
            ko.utils.domNodeDisposal.cleanExternalData = function(node) {
                node.cleanedByKo = true;
                if (!node.cleanedByJquery) {
                    elementData.cleanData([node])
                }
            }
        };
        var restoreOriginCleanData = function() {
            afterCleanData(function() {});
            ko.utils.domNodeDisposal.cleanExternalData = originalKOCleanExternalData
        };
        patchCleanData();
        strategyChanging.add(function(strategy) {
            var isJQuery = !!strategy.fn;
            if (isJQuery && compareVersion(strategy.fn.jquery, [2, 0]) < 0) {
                restoreOriginCleanData()
            }
        })
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/clean_node_old.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 62);
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var strategyChanging = __webpack_require__( /*! ../../core/element_data */ 41).strategyChanging;
        var patchCleanData = function(jQuery) {
            var cleanKoData = function(element, andSelf) {
                var cleanNode = function() {
                    ko.cleanNode(this)
                };
                if (andSelf) {
                    element.each(cleanNode)
                } else {
                    element.find("*").each(cleanNode)
                }
            };
            var originalEmpty = jQuery.fn.empty;
            jQuery.fn.empty = function() {
                cleanKoData(this, false);
                return originalEmpty.apply(this, arguments)
            };
            var originalRemove = jQuery.fn.remove;
            jQuery.fn.remove = function(selector, keepData) {
                if (!keepData) {
                    var subject = this;
                    if (selector) {
                        subject = subject.filter(selector)
                    }
                    cleanKoData(subject, true)
                }
                return originalRemove.call(this, selector, keepData)
            };
            var originalHtml = jQuery.fn.html;
            jQuery.fn.html = function(value) {
                if ("string" === typeof value) {
                    cleanKoData(this, false)
                }
                return originalHtml.apply(this, arguments)
            };
            var originalReplaceWith = jQuery.fn.replaceWith;
            jQuery.fn.replaceWith = function() {
                var result = originalReplaceWith.apply(this, arguments);
                if (!this.parent().length) {
                    cleanKoData(this, true)
                }
                return result
            }
        };
        strategyChanging.add(function(strategy) {
            var isJQuery = !!strategy.fn;
            if (isJQuery && compareVersion(strategy.fn.jquery, [2, 0]) < 0) {
                patchCleanData(strategy)
            }
        })
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/message.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 136);
        var _globalize = __webpack_require__( /*! globalize */ 79);
        var _globalize2 = _interopRequireDefault(_globalize);
        var _message = __webpack_require__( /*! ../message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _core = __webpack_require__( /*! ../core */ 83);
        var _core2 = _interopRequireDefault(_core);
        __webpack_require__( /*! globalize/message */ 79);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        if (_globalize2.default && _globalize2.default.formatMessage) {
            var DEFAULT_LOCALE = "en";
            var originalLoadMessages = _globalize2.default.loadMessages;
            _globalize2.default.loadMessages = function(messages) {
                _message2.default.load(messages)
            };
            var globalizeMessageLocalization = {
                engine: function() {
                    return "globalize"
                },
                ctor: function() {
                    this.load(this._dictionary)
                },
                load: function(messages) {
                    this.callBase(messages);
                    originalLoadMessages(messages)
                },
                getMessagesByLocales: function() {
                    return _globalize2.default.cldr.get("globalize-messages")
                },
                getFormatter: function(key, locale) {
                    var currentLocale = locale || _core2.default.locale();
                    var formatter = this._getFormatterBase(key, locale);
                    if (!formatter) {
                        formatter = this._formatterByGlobalize(key, locale)
                    }
                    if (!formatter && currentLocale !== DEFAULT_LOCALE) {
                        formatter = this.getFormatter(key, DEFAULT_LOCALE)
                    }
                    return formatter
                },
                _formatterByGlobalize: function(key, locale) {
                    var currentGlobalize = !locale || locale === _core2.default.locale() ? _globalize2.default : new _globalize2.default(locale);
                    var result;
                    if (this._messageLoaded(key, locale)) {
                        result = currentGlobalize.messageFormatter(key)
                    }
                    return result
                },
                _messageLoaded: function(key, locale) {
                    var currentCldr = locale ? new _globalize2.default(locale).cldr : _globalize2.default.locale();
                    var value = currentCldr.get(["globalize-messages/{bundle}", key]);
                    return !!value
                },
                _loadSingle: function(key, value, locale) {
                    var data = {};
                    data[locale] = {};
                    data[locale][key] = value;
                    this.load(data)
                }
            };
            _message2.default.inject(globalizeMessageLocalization)
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/date.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 136);
        __webpack_require__( /*! ./number */ 192);
        __webpack_require__( /*! globalize/date */ 79);
        var _globalize = __webpack_require__( /*! globalize */ 79);
        var _globalize2 = _interopRequireDefault(_globalize);
        var _date = __webpack_require__( /*! ../date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var timeData = {
            supplemental: {
                version: {
                    _cldrVersion: "28",
                    _unicodeVersion: "8.0.0",
                    _number: "$Revision: 11969 $"
                },
                timeData: {
                    "001": {
                        _allowed: "H h",
                        _preferred: "H"
                    },
                    DE: {
                        _allowed: "H",
                        _preferred: "H"
                    },
                    JP: {
                        _allowed: "H K h",
                        _preferred: "H"
                    },
                    RU: {
                        _allowed: "H",
                        _preferred: "H"
                    },
                    US: {
                        _allowed: "H h",
                        _preferred: "h"
                    }
                }
            }
        };
        var enCaGregorian = {
            main: {
                en: {
                    identity: {
                        version: {
                            _cldrVersion: "28",
                            _number: "$Revision: 11972 $"
                        },
                        language: "en"
                    },
                    dates: {
                        calendars: {
                            gregorian: {
                                months: {
                                    format: {
                                        abbreviated: {
                                            1: "Jan",
                                            2: "Feb",
                                            3: "Mar",
                                            4: "Apr",
                                            5: "May",
                                            6: "Jun",
                                            7: "Jul",
                                            8: "Aug",
                                            9: "Sep",
                                            10: "Oct",
                                            11: "Nov",
                                            12: "Dec"
                                        },
                                        narrow: {
                                            1: "J",
                                            2: "F",
                                            3: "M",
                                            4: "A",
                                            5: "M",
                                            6: "J",
                                            7: "J",
                                            8: "A",
                                            9: "S",
                                            10: "O",
                                            11: "N",
                                            12: "D"
                                        },
                                        wide: {
                                            1: "January",
                                            2: "February",
                                            3: "March",
                                            4: "April",
                                            5: "May",
                                            6: "June",
                                            7: "July",
                                            8: "August",
                                            9: "September",
                                            10: "October",
                                            11: "November",
                                            12: "December"
                                        }
                                    },
                                    "stand-alone": {
                                        abbreviated: {
                                            1: "Jan",
                                            2: "Feb",
                                            3: "Mar",
                                            4: "Apr",
                                            5: "May",
                                            6: "Jun",
                                            7: "Jul",
                                            8: "Aug",
                                            9: "Sep",
                                            10: "Oct",
                                            11: "Nov",
                                            12: "Dec"
                                        },
                                        narrow: {
                                            1: "J",
                                            2: "F",
                                            3: "M",
                                            4: "A",
                                            5: "M",
                                            6: "J",
                                            7: "J",
                                            8: "A",
                                            9: "S",
                                            10: "O",
                                            11: "N",
                                            12: "D"
                                        },
                                        wide: {
                                            1: "January",
                                            2: "February",
                                            3: "March",
                                            4: "April",
                                            5: "May",
                                            6: "June",
                                            7: "July",
                                            8: "August",
                                            9: "September",
                                            10: "October",
                                            11: "November",
                                            12: "December"
                                        }
                                    }
                                },
                                days: {
                                    format: {
                                        abbreviated: {
                                            sun: "Sun",
                                            mon: "Mon",
                                            tue: "Tue",
                                            wed: "Wed",
                                            thu: "Thu",
                                            fri: "Fri",
                                            sat: "Sat"
                                        },
                                        narrow: {
                                            sun: "S",
                                            mon: "M",
                                            tue: "T",
                                            wed: "W",
                                            thu: "T",
                                            fri: "F",
                                            sat: "S"
                                        },
                                        "short": {
                                            sun: "Su",
                                            mon: "Mo",
                                            tue: "Tu",
                                            wed: "We",
                                            thu: "Th",
                                            fri: "Fr",
                                            sat: "Sa"
                                        },
                                        wide: {
                                            sun: "Sunday",
                                            mon: "Monday",
                                            tue: "Tuesday",
                                            wed: "Wednesday",
                                            thu: "Thursday",
                                            fri: "Friday",
                                            sat: "Saturday"
                                        }
                                    },
                                    "stand-alone": {
                                        abbreviated: {
                                            sun: "Sun",
                                            mon: "Mon",
                                            tue: "Tue",
                                            wed: "Wed",
                                            thu: "Thu",
                                            fri: "Fri",
                                            sat: "Sat"
                                        },
                                        narrow: {
                                            sun: "S",
                                            mon: "M",
                                            tue: "T",
                                            wed: "W",
                                            thu: "T",
                                            fri: "F",
                                            sat: "S"
                                        },
                                        "short": {
                                            sun: "Su",
                                            mon: "Mo",
                                            tue: "Tu",
                                            wed: "We",
                                            thu: "Th",
                                            fri: "Fr",
                                            sat: "Sa"
                                        },
                                        wide: {
                                            sun: "Sunday",
                                            mon: "Monday",
                                            tue: "Tuesday",
                                            wed: "Wednesday",
                                            thu: "Thursday",
                                            fri: "Friday",
                                            sat: "Saturday"
                                        }
                                    }
                                },
                                quarters: {
                                    format: {
                                        abbreviated: {
                                            1: "Q1",
                                            2: "Q2",
                                            3: "Q3",
                                            4: "Q4"
                                        },
                                        narrow: {
                                            1: "1",
                                            2: "2",
                                            3: "3",
                                            4: "4"
                                        },
                                        wide: {
                                            1: "1st quarter",
                                            2: "2nd quarter",
                                            3: "3rd quarter",
                                            4: "4th quarter"
                                        }
                                    },
                                    "stand-alone": {
                                        abbreviated: {
                                            1: "Q1",
                                            2: "Q2",
                                            3: "Q3",
                                            4: "Q4"
                                        },
                                        narrow: {
                                            1: "1",
                                            2: "2",
                                            3: "3",
                                            4: "4"
                                        },
                                        wide: {
                                            1: "1st quarter",
                                            2: "2nd quarter",
                                            3: "3rd quarter",
                                            4: "4th quarter"
                                        }
                                    }
                                },
                                dayPeriods: {
                                    format: {
                                        abbreviated: {
                                            midnight: "midnight",
                                            am: "AM",
                                            "am-alt-variant": "am",
                                            noon: "noon",
                                            pm: "PM",
                                            "pm-alt-variant": "pm",
                                            morning1: "in the morning",
                                            afternoon1: "in the afternoon",
                                            evening1: "in the evening",
                                            night1: "at night"
                                        },
                                        narrow: {
                                            midnight: "mi",
                                            am: "a",
                                            "am-alt-variant": "am",
                                            noon: "n",
                                            pm: "p",
                                            "pm-alt-variant": "pm",
                                            morning1: "in the morning",
                                            afternoon1: "in the afternoon",
                                            evening1: "in the evening",
                                            night1: "at night"
                                        },
                                        wide: {
                                            midnight: "midnight",
                                            am: "AM",
                                            "am-alt-variant": "am",
                                            noon: "noon",
                                            pm: "PM",
                                            "pm-alt-variant": "pm",
                                            morning1: "in the morning",
                                            afternoon1: "in the afternoon",
                                            evening1: "in the evening",
                                            night1: "at night"
                                        }
                                    },
                                    "stand-alone": {
                                        abbreviated: {
                                            midnight: "midnight",
                                            am: "AM",
                                            "am-alt-variant": "am",
                                            noon: "noon",
                                            pm: "PM",
                                            "pm-alt-variant": "pm",
                                            morning1: "in the morning",
                                            afternoon1: "in the afternoon",
                                            evening1: "in the evening",
                                            night1: "at night"
                                        },
                                        narrow: {
                                            midnight: "midnight",
                                            am: "AM",
                                            "am-alt-variant": "am",
                                            noon: "noon",
                                            pm: "PM",
                                            "pm-alt-variant": "pm",
                                            morning1: "in the morning",
                                            afternoon1: "in the afternoon",
                                            evening1: "in the evening",
                                            night1: "at night"
                                        },
                                        wide: {
                                            midnight: "midnight",
                                            am: "AM",
                                            "am-alt-variant": "am",
                                            noon: "noon",
                                            pm: "PM",
                                            "pm-alt-variant": "pm",
                                            morning1: "morning",
                                            afternoon1: "afternoon",
                                            evening1: "evening",
                                            night1: "night"
                                        }
                                    }
                                },
                                eras: {
                                    eraNames: {
                                        0: "Before Christ",
                                        "0-alt-variant": "Before Common Era",
                                        1: "Anno Domini",
                                        "1-alt-variant": "Common Era"
                                    },
                                    eraAbbr: {
                                        0: "BC",
                                        "0-alt-variant": "BCE",
                                        1: "AD",
                                        "1-alt-variant": "CE"
                                    },
                                    eraNarrow: {
                                        0: "B",
                                        "0-alt-variant": "BCE",
                                        1: "A",
                                        "1-alt-variant": "CE"
                                    }
                                },
                                dateFormats: {
                                    full: "EEEE, MMMM d, y",
                                    "long": "MMMM d, y",
                                    medium: "MMM d, y",
                                    "short": "M/d/yy"
                                },
                                timeFormats: {
                                    full: "h:mm:ss a zzzz",
                                    "long": "h:mm:ss a z",
                                    medium: "h:mm:ss a",
                                    "short": "h:mm a"
                                },
                                dateTimeFormats: {
                                    full: "{1} 'at' {0}",
                                    "long": "{1} 'at' {0}",
                                    medium: "{1}, {0}",
                                    "short": "{1}, {0}",
                                    availableFormats: {
                                        d: "d",
                                        E: "ccc",
                                        Ed: "d E",
                                        Ehm: "E h:mm a",
                                        EHm: "E HH:mm",
                                        Ehms: "E h:mm:ss a",
                                        EHms: "E HH:mm:ss",
                                        Gy: "y G",
                                        GyMMM: "MMM y G",
                                        GyMMMd: "MMM d, y G",
                                        GyMMMEd: "E, MMM d, y G",
                                        h: "h a",
                                        H: "HH",
                                        hm: "h:mm a",
                                        Hm: "HH:mm",
                                        hms: "h:mm:ss a",
                                        Hms: "HH:mm:ss",
                                        hmsv: "h:mm:ss a v",
                                        Hmsv: "HH:mm:ss v",
                                        hmv: "h:mm a v",
                                        Hmv: "HH:mm v",
                                        M: "L",
                                        Md: "M/d",
                                        MEd: "E, M/d",
                                        MMM: "LLL",
                                        MMMd: "MMM d",
                                        MMMEd: "E, MMM d",
                                        MMMMd: "MMMM d",
                                        ms: "mm:ss",
                                        y: "y",
                                        yM: "M/y",
                                        yMd: "M/d/y",
                                        yMEd: "E, M/d/y",
                                        yMMM: "MMM y",
                                        yMMMd: "MMM d, y",
                                        yMMMEd: "E, MMM d, y",
                                        yMMMM: "MMMM y",
                                        yQQQ: "QQQ y",
                                        yQQQQ: "QQQQ y"
                                    },
                                    appendItems: {
                                        Day: "{0} ({2}: {1})",
                                        "Day-Of-Week": "{0} {1}",
                                        Era: "{0} {1}",
                                        Hour: "{0} ({2}: {1})",
                                        Minute: "{0} ({2}: {1})",
                                        Month: "{0} ({2}: {1})",
                                        Quarter: "{0} ({2}: {1})",
                                        Second: "{0} ({2}: {1})",
                                        Timezone: "{0} {1}",
                                        Week: "{0} ({2}: {1})",
                                        Year: "{0} {1}"
                                    },
                                    intervalFormats: {
                                        intervalFormatFallback: "{0} \u2013 {1}",
                                        d: {
                                            d: "d \u2013 d"
                                        },
                                        h: {
                                            a: "h a \u2013 h a",
                                            h: "h \u2013 h a"
                                        },
                                        H: {
                                            H: "HH \u2013 HH"
                                        },
                                        hm: {
                                            a: "h:mm a \u2013 h:mm a",
                                            h: "h:mm \u2013 h:mm a",
                                            m: "h:mm \u2013 h:mm a"
                                        },
                                        Hm: {
                                            H: "HH:mm \u2013 HH:mm",
                                            m: "HH:mm \u2013 HH:mm"
                                        },
                                        hmv: {
                                            a: "h:mm a \u2013 h:mm a v",
                                            h: "h:mm \u2013 h:mm a v",
                                            m: "h:mm \u2013 h:mm a v"
                                        },
                                        Hmv: {
                                            H: "HH:mm \u2013 HH:mm v",
                                            m: "HH:mm \u2013 HH:mm v"
                                        },
                                        hv: {
                                            a: "h a \u2013 h a v",
                                            h: "h \u2013 h a v"
                                        },
                                        Hv: {
                                            H: "HH \u2013 HH v"
                                        },
                                        M: {
                                            M: "M \u2013 M"
                                        },
                                        Md: {
                                            d: "M/d \u2013 M/d",
                                            M: "M/d \u2013 M/d"
                                        },
                                        MEd: {
                                            d: "E, M/d \u2013 E, M/d",
                                            M: "E, M/d \u2013 E, M/d"
                                        },
                                        MMM: {
                                            M: "MMM \u2013 MMM"
                                        },
                                        MMMd: {
                                            d: "MMM d \u2013 d",
                                            M: "MMM d \u2013 MMM d"
                                        },
                                        MMMEd: {
                                            d: "E, MMM d \u2013 E, MMM d",
                                            M: "E, MMM d \u2013 E, MMM d"
                                        },
                                        y: {
                                            y: "y \u2013 y"
                                        },
                                        yM: {
                                            M: "M/y \u2013 M/y",
                                            y: "M/y \u2013 M/y"
                                        },
                                        yMd: {
                                            d: "M/d/y \u2013 M/d/y",
                                            M: "M/d/y \u2013 M/d/y",
                                            y: "M/d/y \u2013 M/d/y"
                                        },
                                        yMEd: {
                                            d: "E, M/d/y \u2013 E, M/d/y",
                                            M: "E, M/d/y \u2013 E, M/d/y",
                                            y: "E, M/d/y \u2013 E, M/d/y"
                                        },
                                        yMMM: {
                                            M: "MMM \u2013 MMM y",
                                            y: "MMM y \u2013 MMM y"
                                        },
                                        yMMMd: {
                                            d: "MMM d \u2013 d, y",
                                            M: "MMM d \u2013 MMM d, y",
                                            y: "MMM d, y \u2013 MMM d, y"
                                        },
                                        yMMMEd: {
                                            d: "E, MMM d \u2013 E, MMM d, y",
                                            M: "E, MMM d \u2013 E, MMM d, y",
                                            y: "E, MMM d, y \u2013 E, MMM d, y"
                                        },
                                        yMMMM: {
                                            M: "MMMM \u2013 MMMM y",
                                            y: "MMMM y \u2013 MMMM y"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        };
        var weekData = {
            supplemental: {
                version: {
                    _cldrVersion: "28",
                    _unicodeVersion: "8.0.0",
                    _number: "$Revision: 11969 $"
                },
                weekData: {
                    minDays: {
                        "001": "1",
                        US: "1",
                        DE: "4"
                    },
                    firstDay: {
                        "001": "mon",
                        DE: "mon",
                        RU: "mon",
                        JP: "sun",
                        US: "sun"
                    },
                    weekendStart: {
                        "001": "sat"
                    },
                    weekendEnd: {
                        "001": "sun"
                    }
                }
            }
        };
        var ACCEPTABLE_JSON_FORMAT_PROPERTIES = ["skeleton", "date", "time", "datetime", "raw"];
        var RTL_MARKS_REGEX = /[\u200E\u200F]/g;
        if (_globalize2.default && _globalize2.default.formatDate) {
            if ("en" === _globalize2.default.locale().locale) {
                _globalize2.default.load(weekData, timeData, enCaGregorian);
                _globalize2.default.locale("en")
            }
            var formattersCache = {};
            var FORMATS_TO_GLOBALIZE_MAP = {
                shortdate: {
                    path: "dateTimeFormats/availableFormats/yMd"
                },
                shorttime: {
                    path: "timeFormats/short"
                },
                longdate: {
                    path: "dateFormats/full"
                },
                longtime: {
                    path: "timeFormats/medium"
                },
                monthandday: {
                    path: "dateTimeFormats/availableFormats/MMMMd"
                },
                monthandyear: {
                    path: "dateTimeFormats/availableFormats/yMMMM"
                },
                quarterandyear: {
                    path: "dateTimeFormats/availableFormats/yQQQ"
                },
                day: {
                    path: "dateTimeFormats/availableFormats/d"
                },
                year: {
                    path: "dateTimeFormats/availableFormats/y"
                },
                shortdateshorttime: {
                    path: "dateTimeFormats/short",
                    parts: ["shorttime", "shortdate"]
                },
                longdatelongtime: {
                    path: "dateTimeFormats/medium",
                    parts: ["longtime", "longdate"]
                },
                month: {
                    pattern: "LLLL"
                },
                shortyear: {
                    pattern: "yy"
                },
                dayofweek: {
                    pattern: "EEEE"
                },
                quarter: {
                    pattern: "QQQ"
                },
                millisecond: {
                    pattern: "SSS"
                },
                hour: {
                    pattern: "HH"
                },
                minute: {
                    pattern: "mm"
                },
                second: {
                    pattern: "ss"
                }
            };
            var globalizeDateLocalization = {
                engine: function() {
                    return "globalize"
                },
                _getPatternByFormat: function(format) {
                    var that = this;
                    var lowerFormat = format.toLowerCase();
                    var globalizeFormat = FORMATS_TO_GLOBALIZE_MAP[lowerFormat];
                    if ("datetime-local" === lowerFormat) {
                        return "yyyy-MM-ddTHH':'mm':'ss"
                    }
                    if (!globalizeFormat) {
                        return
                    }
                    var result = globalizeFormat.path && that._getFormatStringByPath(globalizeFormat.path) || globalizeFormat.pattern;
                    if (globalizeFormat.parts) {
                        _iterator2.default.each(globalizeFormat.parts, function(index, part) {
                            result = result.replace("{" + index + "}", that._getPatternByFormat(part))
                        })
                    }
                    return result
                },
                _getFormatStringByPath: function(path) {
                    return _globalize2.default.locale().main("dates/calendars/gregorian/" + path)
                },
                getPeriodNames: function() {
                    var json = _globalize2.default.locale().main("dates/calendars/gregorian/dayPeriods/stand-alone/wide");
                    return [json.am, json.pm]
                },
                getMonthNames: function(format, type) {
                    var months = _globalize2.default.locale().main("dates/calendars/gregorian/months/" + ("format" === type ? type : "stand-alone") + "/" + (format || "wide"));
                    return _iterator2.default.map(months, function(month) {
                        return month
                    })
                },
                getDayNames: function(format) {
                    var days = _globalize2.default.locale().main("dates/calendars/gregorian/days/stand-alone/" + (format || "wide"));
                    return _iterator2.default.map(days, function(day) {
                        return day
                    })
                },
                getTimeSeparator: function() {
                    return _globalize2.default.locale().main("numbers/symbols-numberSystem-latn/timeSeparator")
                },
                removeRtlMarks: function(text) {
                    return text.replace(RTL_MARKS_REGEX, "")
                },
                format: function(date, _format) {
                    if (!date) {
                        return
                    }
                    if (!_format) {
                        return date
                    }
                    var formatter;
                    var formatCacheKey;
                    if ("function" === typeof _format) {
                        return _format(date)
                    }
                    if (_format.formatter) {
                        return _format.formatter(date)
                    }
                    _format = _format.type || _format;
                    if ("string" === typeof _format) {
                        formatCacheKey = _globalize2.default.locale().locale + ":" + _format;
                        formatter = formattersCache[formatCacheKey];
                        if (!formatter) {
                            _format = {
                                raw: this._getPatternByFormat(_format) || _format
                            };
                            formatter = formattersCache[formatCacheKey] = _globalize2.default.dateFormatter(_format)
                        }
                    } else {
                        if (!this._isAcceptableFormat(_format)) {
                            return
                        }
                        formatter = _globalize2.default.dateFormatter(_format)
                    }
                    return this.removeRtlMarks(formatter(date))
                },
                parse: function(text, format) {
                    if (!text) {
                        return
                    }
                    if (!format || "function" === typeof format || (0, _type.isObject)(format) && !this._isAcceptableFormat(format)) {
                        if (format) {
                            var parsedValue = this.callBase(text, format);
                            if (parsedValue) {
                                return parsedValue
                            }
                        }
                        return _globalize2.default.parseDate(text)
                    }
                    if (format.parser) {
                        return format.parser(text)
                    }
                    if ("string" === typeof format) {
                        format = {
                            raw: this._getPatternByFormat(format) || format
                        }
                    }
                    return _globalize2.default.parseDate(text, format)
                },
                _isAcceptableFormat: function(format) {
                    if (format.parser) {
                        return true
                    }
                    for (var i = 0; i < ACCEPTABLE_JSON_FORMAT_PROPERTIES.length; i++) {
                        if (Object.prototype.hasOwnProperty.call(format, ACCEPTABLE_JSON_FORMAT_PROPERTIES[i])) {
                            return true
                        }
                    }
                },
                firstDayOfWeekIndex: function() {
                    var firstDay = _globalize2.default.locale().supplemental.weekData.firstDay();
                    return (0, _array.inArray)(firstDay, this._getDayKeys())
                },
                _getDayKeys: function() {
                    var days = _globalize2.default.locale().main("dates/calendars/gregorian/days/format/short");
                    return _iterator2.default.map(days, function(day, key) {
                        return key
                    })
                }
            };
            _date2.default.resetInjection();
            _date2.default.inject(globalizeDateLocalization)
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/currency.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _open_xml_currency_format = __webpack_require__( /*! ../open_xml_currency_format */ 272);
        var _open_xml_currency_format2 = _interopRequireDefault(_open_xml_currency_format);
        __webpack_require__( /*! ./core */ 136);
        __webpack_require__( /*! ./number */ 192);
        __webpack_require__( /*! ../currency */ 131);
        __webpack_require__( /*! globalize/currency */ 79);
        var _globalize = __webpack_require__( /*! globalize */ 79);
        var _globalize2 = _interopRequireDefault(_globalize);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _number = __webpack_require__( /*! ../number */ 49);
        var _number2 = _interopRequireDefault(_number);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var enCurrencyUSD = {
            main: {
                en: {
                    identity: {
                        version: {
                            _cldrVersion: "28",
                            _number: "$Revision: 11972 $"
                        },
                        language: "en"
                    },
                    numbers: {
                        currencies: {
                            USD: {
                                displayName: "US Dollar",
                                "displayName-count-one": "US dollar",
                                "displayName-count-other": "US dollars",
                                symbol: "$",
                                "symbol-alt-narrow": "$"
                            }
                        }
                    }
                }
            }
        };
        var currencyData = {
            supplemental: {
                version: {
                    _cldrVersion: "28",
                    _unicodeVersion: "8.0.0",
                    _number: "$Revision: 11969 $"
                },
                currencyData: {
                    fractions: {
                        DEFAULT: {
                            _rounding: "0",
                            _digits: "2"
                        }
                    }
                }
            }
        };
        if (_globalize2.default && _globalize2.default.formatCurrency) {
            if ("en" === _globalize2.default.locale().locale) {
                _globalize2.default.load(enCurrencyUSD, currencyData);
                _globalize2.default.locale("en")
            }
            var formattersCache = {};
            var getFormatter = function(currency, format) {
                var formatter;
                var formatCacheKey;
                if ("object" === _typeof(format)) {
                    formatCacheKey = _globalize2.default.locale().locale + ":" + currency + ":" + JSON.stringify(format)
                } else {
                    formatCacheKey = _globalize2.default.locale().locale + ":" + currency + ":" + format
                }
                formatter = formattersCache[formatCacheKey];
                if (!formatter) {
                    formatter = formattersCache[formatCacheKey] = _globalize2.default.currencyFormatter(currency, format)
                }
                return formatter
            };
            var globalizeCurrencyLocalization = {
                _formatNumberCore: function(value, format, formatConfig) {
                    if ("currency" === format) {
                        var currency = formatConfig && formatConfig.currency || (0, _config2.default)().defaultCurrency;
                        return getFormatter(currency, this._normalizeFormatConfig(format, formatConfig, value))(value)
                    }
                    return this.callBase.apply(this, arguments)
                },
                _normalizeFormatConfig: function(format, formatConfig, value) {
                    var config = this.callBase(format, formatConfig, value);
                    if ("currency" === format) {
                        config.style = "accounting"
                    }
                    return config
                },
                format: function(value, _format) {
                    if ("number" !== typeof value) {
                        return value
                    }
                    _format = this._normalizeFormat(_format);
                    if (_format) {
                        if ("default" === _format.currency) {
                            _format.currency = (0, _config2.default)().defaultCurrency
                        }
                        if ("currency" === _format.type) {
                            return this._formatNumber(value, this._parseNumberFormatString("currency"), _format)
                        } else {
                            if (!_format.type && _format.currency) {
                                return getFormatter(_format.currency, _format)(value)
                            }
                        }
                    }
                    return this.callBase.apply(this, arguments)
                },
                getCurrencySymbol: function(currency) {
                    if (!currency) {
                        currency = (0, _config2.default)().defaultCurrency
                    }
                    return _globalize2.default.cldr.main("numbers/currencies/" + currency)
                },
                getOpenXmlCurrencyFormat: function(currency) {
                    var currencySymbol = this.getCurrencySymbol(currency).symbol;
                    var accountingFormat = _globalize2.default.cldr.main("numbers/currencyFormats-numberSystem-latn").accounting;
                    return (0, _open_xml_currency_format2.default)(currencySymbol, accountingFormat)
                }
            };
            _number2.default.inject(globalizeCurrencyLocalization)
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/data_source.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./data_source/data_source */ 61).DataSource
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/local_store.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var abstract = Class.abstract;
        var errors = __webpack_require__( /*! ./errors */ 38).errors;
        var ArrayStore = __webpack_require__( /*! ./array_store */ 70);
        var LocalStoreBackend = Class.inherit({
            ctor: function(store, storeOptions) {
                this._store = store;
                this._dirty = !!storeOptions.data;
                this.save();
                var immediate = this._immediate = storeOptions.immediate;
                var flushInterval = Math.max(100, storeOptions.flushInterval || 1e4);
                if (!immediate) {
                    var saveProxy = this.save.bind(this);
                    setInterval(saveProxy, flushInterval);
                    eventsEngine.on(window, "beforeunload", saveProxy);
                    if (window.cordova) {
                        domAdapter.listen(domAdapter.getDocument(), "pause", saveProxy, false)
                    }
                }
            },
            notifyChanged: function() {
                this._dirty = true;
                if (this._immediate) {
                    this.save()
                }
            },
            load: function() {
                this._store._array = this._loadImpl();
                this._dirty = false
            },
            save: function() {
                if (!this._dirty) {
                    return
                }
                this._saveImpl(this._store._array);
                this._dirty = false
            },
            _loadImpl: abstract,
            _saveImpl: abstract
        });
        var DomLocalStoreBackend = LocalStoreBackend.inherit({
            ctor: function(store, storeOptions) {
                var name = storeOptions.name;
                if (!name) {
                    throw errors.Error("E4013")
                }
                this._key = "dx-data-localStore-" + name;
                this.callBase(store, storeOptions)
            },
            _loadImpl: function() {
                var raw = window.localStorage.getItem(this._key);
                if (raw) {
                    return JSON.parse(raw)
                }
                return []
            },
            _saveImpl: function(array) {
                if (!array.length) {
                    window.localStorage.removeItem(this._key)
                } else {
                    window.localStorage.setItem(this._key, JSON.stringify(array))
                }
            }
        });
        var localStoreBackends = {
            dom: DomLocalStoreBackend
        };
        var LocalStore = ArrayStore.inherit({
            ctor: function(options) {
                if ("string" === typeof options) {
                    options = {
                        name: options
                    }
                } else {
                    options = options || {}
                }
                this.callBase(options);
                this._backend = new localStoreBackends[options.backend || "dom"](this, options);
                this._backend.load()
            },
            clear: function() {
                this.callBase();
                this._backend.notifyChanged()
            },
            _insertImpl: function(values) {
                var b = this._backend;
                return this.callBase(values).done(b.notifyChanged.bind(b))
            },
            _updateImpl: function(key, values) {
                var b = this._backend;
                return this.callBase(key, values).done(b.notifyChanged.bind(b))
            },
            _removeImpl: function(key) {
                var b = this._backend;
                return this.callBase(key).done(b.notifyChanged.bind(b))
            }
        }, "local");
        module.exports = LocalStore
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/data/endpoint_selector.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../core/errors */ 22);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var proxyUrlFormatter = __webpack_require__( /*! ./proxy_url_formatter */ 292);
        var IS_WINJS_ORIGIN;
        var IS_LOCAL_ORIGIN;

        function isLocalHostName(url) {
            return /^(localhost$|127\.)/i.test(url)
        }
        var EndpointSelector = function(config) {
            this.config = config;
            IS_WINJS_ORIGIN = "ms-appx:" === window.location.protocol;
            IS_LOCAL_ORIGIN = isLocalHostName(window.location.hostname)
        };
        EndpointSelector.prototype = {
            urlFor: function(key) {
                var bag = this.config[key];
                if (!bag) {
                    throw errors.Error("E0006")
                }
                if (proxyUrlFormatter.isProxyUsed()) {
                    return proxyUrlFormatter.formatProxyUrl(bag.local)
                }
                if (bag.production) {
                    if (IS_WINJS_ORIGIN && !Debug.debuggerEnabled || !IS_WINJS_ORIGIN && !IS_LOCAL_ORIGIN) {
                        return bag.production
                    }
                }
                return bag.local
            }
        };
        module.exports = EndpointSelector
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/data.odata.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./data */ 291);
        DevExpress.data.ODataStore = __webpack_require__( /*! ../../data/odata/store */ 293);
        DevExpress.data.ODataContext = __webpack_require__( /*! ../../data/odata/context */ 520);
        DevExpress.data.utils = DevExpress.data.utils || {};
        DevExpress.data.utils.odata = {};
        DevExpress.data.utils.odata.keyConverters = __webpack_require__( /*! ../../data/odata/utils */ 96).keyConverters;
        DevExpress.data.EdmLiteral = __webpack_require__( /*! ../../data/odata/utils */ 96).EdmLiteral;
        var ODataUtilsModule = __webpack_require__( /*! ../../data/odata/utils */ 96);
        DevExpress.data.utils.odata.serializePropName = ODataUtilsModule.serializePropName;
        DevExpress.data.utils.odata.serializeValue = ODataUtilsModule.serializeValue;
        DevExpress.data.utils.odata.serializeKey = ODataUtilsModule.serializeKey;
        DevExpress.data.utils.odata.sendRequest = ODataUtilsModule.sendRequest;
        DevExpress.data.OData__internals = ODataUtilsModule.OData__internals;
        DevExpress.data.queryAdapters = DevExpress.data.queryAdapters || {};
        DevExpress.data.queryAdapters.odata = __webpack_require__( /*! ../../data/odata/query_adapter */ 162).odata
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/data/odata/context.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _errors = __webpack_require__( /*! ../errors */ 38);
        var _errors2 = _interopRequireDefault(_errors);
        var _store = __webpack_require__( /*! ./store */ 293);
        var _store2 = _interopRequireDefault(_store);
        var _request_dispatcher = __webpack_require__( /*! ./request_dispatcher */ 294);
        var _request_dispatcher2 = _interopRequireDefault(_request_dispatcher);
        var _utils = __webpack_require__( /*! ./utils */ 96);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        __webpack_require__( /*! ./query_adapter */ 162);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ODataContext = _class2.default.inherit({
            ctor: function(options) {
                var _this = this;
                this._requestDispatcher = new _request_dispatcher2.default(options);
                this._errorHandler = options.errorHandler;
                (0, _iterator.each)(options.entities || [], function(entityAlias, entityOptions) {
                    _this[entityAlias] = new _store2.default((0, _extend.extend)({}, options, {
                        url: "".concat(_this._requestDispatcher.url, "/").concat(encodeURIComponent(entityOptions.name || entityAlias))
                    }, entityOptions))
                })
            },
            get: function(operationName, params) {
                return this.invoke(operationName, params, "GET")
            },
            invoke: function(operationName) {
                var params = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
                var httpMethod = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "POST";
                httpMethod = httpMethod.toLowerCase();
                var d = new _deferred.Deferred;
                var url = "".concat(this._requestDispatcher.url, "/").concat(encodeURIComponent(operationName));
                var payload;
                if (4 === this.version()) {
                    if ("get" === httpMethod) {
                        url = (0, _utils.formatFunctionInvocationUrl)(url, (0, _utils.escapeServiceOperationParams)(params, this.version()));
                        params = null
                    } else {
                        if ("post" === httpMethod) {
                            payload = params;
                            params = null
                        }
                    }
                }(0, _deferred.when)(this._requestDispatcher.sendRequest(url, httpMethod, (0, _utils.escapeServiceOperationParams)(params, this.version()), payload)).done(function(r) {
                    if ((0, _type.isPlainObject)(r) && operationName in r) {
                        r = r[operationName]
                    }
                    d.resolve(r)
                }).fail(this._errorHandler).fail(_errors2.default._errorHandler).fail(d.reject);
                return d.promise()
            },
            objectLink: function(entityAlias, key) {
                var store = this[entityAlias];
                if (!store) {
                    throw _errors2.default.errors.Error("E4015", entityAlias)
                }
                if (!(0, _type.isDefined)(key)) {
                    return null
                }
                return {
                    __metadata: {
                        uri: store._byKeyUrl(key, true)
                    }
                }
            },
            version: function() {
                return this._requestDispatcher.version
            }
        });
        module.exports = ODataContext
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/ui.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 155);
        module.exports = DevExpress.ui = {}
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.async.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiCollection_widget = __webpack_require__( /*! ./ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var AsyncCollectionWidget = _uiCollection_widget2.default.inherit({
            _initMarkup: function() {
                this._deferredItems = [];
                this.callBase()
            },
            _renderItemContent: function(args) {
                var renderContentDeferred = new _deferred.Deferred;
                var itemDeferred = new _deferred.Deferred;
                var that = this;
                this._deferredItems[args.index] = itemDeferred;
                var $itemContent = this.callBase.call(that, args);
                itemDeferred.done(function() {
                    renderContentDeferred.resolve($itemContent)
                });
                return renderContentDeferred.promise()
            },
            _createItemByTemplate: function(itemTemplate, renderArgs) {
                var _this = this;
                return itemTemplate.render({
                    model: renderArgs.itemData,
                    container: renderArgs.container,
                    index: renderArgs.index,
                    onRendered: function() {
                        _this._deferredItems[renderArgs.index].resolve()
                    }
                })
            },
            _postProcessRenderItems: _common.noop,
            _renderItemsAsync: function() {
                var _this2 = this;
                var d = new _deferred.Deferred;
                _deferred.when.apply(this, this._deferredItems).done(function() {
                    _this2._postProcessRenderItems();
                    d.resolve()
                });
                return d.promise()
            },
            _clean: function() {
                this.callBase();
                this._deferredItems = []
            }
        });
        module.exports = AsyncCollectionWidget
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/speed_dial_action/repaint_floating_action_button.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _speed_dial_main_item = __webpack_require__( /*! ./speed_dial_main_item */ 309);
        module.exports = _speed_dial_main_item.repaint
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/speed_dial_action/speed_dial_item.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _utils2 = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var _utils3 = _interopRequireDefault(_utils2);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FAB_CLASS = "dx-fa-button";
        var FAB_ICON_CLASS = "dx-fa-button-icon";
        var FAB_LABEL_CLASS = "dx-fa-button-label";
        var FAB_LABEL_WRAPPER_CLASS = "dx-fa-button-label-wrapper";
        var FAB_CONTENT_REVERSE_CLASS = "dx-fa-button-content-reverse";
        var OVERLAY_CONTENT_SELECTOR = ".dx-overlay-content";
        var SpeedDialItem = function(_Overlay) {
            _inherits(SpeedDialItem, _Overlay);
            var _super = _createSuper(SpeedDialItem);

            function SpeedDialItem() {
                _classCallCheck(this, SpeedDialItem);
                return _super.apply(this, arguments)
            }
            _createClass(SpeedDialItem, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(SpeedDialItem.prototype), "_getDefaultOptions", this).call(this), {
                        shading: false,
                        useInkRipple: false,
                        callOverlayRenderShading: false,
                        width: "auto",
                        zIndex: 1500
                    })
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    return _get(_getPrototypeOf(SpeedDialItem.prototype), "_defaultOptionsRules", this).call(this).concat([{
                        device: function() {
                            return _themes2.default.isMaterial()
                        },
                        options: {
                            useInkRipple: true
                        }
                    }])
                }
            }, {
                key: "_render",
                value: function() {
                    this.$element().addClass(FAB_CLASS);
                    this._renderIcon();
                    this._renderLabel();
                    _get(_getPrototypeOf(SpeedDialItem.prototype), "_render", this).call(this);
                    this.option("useInkRipple") && this._renderInkRipple();
                    this._renderClick()
                }
            }, {
                key: "_renderLabel",
                value: function() {
                    !!this._$label && this._$label.remove();
                    var labelText = this.option("label");
                    if (!labelText) {
                        this._$label = null;
                        return
                    }
                    var $element = (0, _renderer2.default)("<div>").addClass(FAB_LABEL_CLASS);
                    var $wrapper = (0, _renderer2.default)("<div>").addClass(FAB_LABEL_WRAPPER_CLASS);
                    this._$label = $wrapper.prependTo(this.$content()).append($element.text(labelText));
                    this.$content().toggleClass(FAB_CONTENT_REVERSE_CLASS, this._isPositionLeft(this.option("parentPosition")))
                }
            }, {
                key: "_isPositionLeft",
                value: function(position) {
                    var currentLocation = position ? position.at ? position.at.x ? position.at.x : position.at : "string" === typeof position ? position : "" : "";
                    return "left" === currentLocation.split(" ")[0]
                }
            }, {
                key: "_renderButtonIcon",
                value: function($element, icon, iconClass) {
                    !!$element && $element.remove();
                    $element = (0, _renderer2.default)("<div>").addClass(iconClass);
                    var $iconElement = (0, _icon.getImageContainer)(icon);
                    $element.append($iconElement).appendTo(this.$content());
                    return $element
                }
            }, {
                key: "_renderIcon",
                value: function() {
                    this._$icon = this._renderButtonIcon(this._$icon, this._options.silent("icon"), FAB_ICON_CLASS)
                }
            }, {
                key: "_renderWrapper",
                value: function() {
                    if (this._options.silent("callOverlayRenderShading")) {
                        _get(_getPrototypeOf(SpeedDialItem.prototype), "_renderWrapper", this).call(this)
                    }
                }
            }, {
                key: "_getVisibleActions",
                value: function(actions) {
                    var currentActions = actions || this.option("actions");
                    return currentActions.filter(function(action) {
                        return action.option("visible")
                    })
                }
            }, {
                key: "_getActionComponent",
                value: function() {
                    return this.option("actionComponent") || this._getVisibleActions()[0] || this.option("actions")[0]
                }
            }, {
                key: "_initContentReadyAction",
                value: function() {
                    this._contentReadyAction = this._getActionComponent()._createActionByOption("onContentReady", {
                        excludeValidators: ["disabled", "readOnly"]
                    }, true)
                }
            }, {
                key: "_fireContentReadyAction",
                value: function() {
                    this._contentReadyAction({
                        actionElement: this.$element()
                    })
                }
            }, {
                key: "_updateZIndexStackPosition",
                value: function() {
                    var zIndex = this.option("zIndex");
                    this._$wrapper.css("zIndex", zIndex);
                    this._$content.css("zIndex", zIndex)
                }
            }, {
                key: "_fixWrapperPosition",
                value: function() {
                    var $wrapper = this._$wrapper;
                    var $container = this._getContainer();
                    $wrapper.css("position", this._isWindow($container) ? "fixed" : "absolute")
                }
            }, {
                key: "_setClickAction",
                value: function() {
                    var _this = this;
                    var eventName = (0, _utils.addNamespace)(_click2.default.name, this.NAME);
                    var overlayContent = this.$element().find(OVERLAY_CONTENT_SELECTOR);
                    _events_engine2.default.off(overlayContent, eventName);
                    _events_engine2.default.on(overlayContent, eventName, function(e) {
                        var clickActionArgs = {
                            event: e,
                            actionElement: _this.element(),
                            element: _this._getActionComponent().$element()
                        };
                        _this._clickAction(clickActionArgs)
                    })
                }
            }, {
                key: "_defaultActionArgs",
                value: function() {
                    return {
                        component: this._getActionComponent()
                    }
                }
            }, {
                key: "_renderClick",
                value: function() {
                    this._clickAction = this._getActionComponent()._createActionByOption("onClick");
                    this._setClickAction()
                }
            }, {
                key: "_renderInkRipple",
                value: function() {
                    this._inkRipple = _utils3.default.render()
                }
            }, {
                key: "_getInkRippleContainer",
                value: function() {
                    return this._$icon
                }
            }, {
                key: "_toggleActiveState",
                value: function($element, value, e) {
                    _get(_getPrototypeOf(SpeedDialItem.prototype), "_toggleActiveState", this).apply(this, arguments);
                    if (!this._inkRipple) {
                        return
                    }
                    var config = {
                        element: this._getInkRippleContainer(),
                        event: e
                    };
                    if (value) {
                        this._inkRipple.showWave(config)
                    } else {
                        this._inkRipple.hideWave(config)
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "icon":
                            this._renderIcon();
                            break;
                        case "onClick":
                            this._renderClick();
                            break;
                        case "label":
                            this._renderLabel();
                            break;
                        case "visible":
                            this._currentVisible = args.previousValue;
                            args.value ? this._show() : this._hide();
                            break;
                        case "useInkRipple":
                            this._render();
                            break;
                        default:
                            _get(_getPrototypeOf(SpeedDialItem.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return SpeedDialItem
        }(_overlay2.default);
        module.exports = SpeedDialItem
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/autocomplete.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../core/utils/common */ 3).noop;
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 225);
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var AUTOCOMPLETE_CLASS = "dx-autocomplete";
        var AUTOCOMPLETE_POPUP_WRAPPER_CLASS = "dx-autocomplete-popup-wrapper";
        var Autocomplete = DropDownList.inherit({
            _supportedKeys: function() {
                var item = this._list ? this._list.option("focusedElement") : null;
                var parent = this.callBase();
                item = item && $(item);
                return extend({}, parent, {
                    upArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (item && !this._calcNextItem(-1)) {
                            this._clearFocusedItem();
                            return false
                        }
                        return true
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (item && !this._calcNextItem(1)) {
                            this._clearFocusedItem();
                            return false
                        }
                        return true
                    },
                    enter: function() {
                        if (!item) {
                            this.close()
                        }
                        parent.enter.apply(this, arguments);
                        return this.option("opened")
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    minSearchLength: 1,
                    maxItemCount: 10,
                    noDataText: "",
                    showDropDownButton: false,
                    searchEnabled: true
                })
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(AUTOCOMPLETE_CLASS);
                this.setAria("autocomplete", "inline")
            },
            _displayGetterExpr: function() {
                return this.option("valueExpr")
            },
            _popupConfig: function() {
                return extend(this.callBase(), {
                    closeOnOutsideClick: function(e) {
                        return !$(e.target).closest(this.$element()).length
                    }.bind(this)
                })
            },
            _renderDimensions: function() {
                this.callBase();
                this._setPopupOption("width")
            },
            _popupWrapperClass: function() {
                return this.callBase() + " " + AUTOCOMPLETE_POPUP_WRAPPER_CLASS
            },
            _listConfig: function() {
                return extend(this.callBase(), {
                    pageLoadMode: "none"
                })
            },
            _listItemClickHandler: function(e) {
                var value = this._displayGetter(e.itemData);
                this.option("value", value);
                this.close()
            },
            _setListDataSource: function() {
                if (!this._list) {
                    return
                }
                this._list.option("selectedItems", []);
                this.callBase()
            },
            _refreshSelected: noop,
            _searchCanceled: function() {
                this.callBase();
                this.close()
            },
            _loadItem: function(value, cache) {
                var selectedItem = this._getItemFromPlain(value, cache);
                return (new Deferred).resolve(selectedItem).promise()
            },
            _dataSourceOptions: function() {
                return {
                    paginate: true,
                    pageSize: this.option("maxItemCount")
                }
            },
            _searchDataSource: function() {
                this._dataSource.pageSize(this.option("maxItemCount"));
                this.callBase();
                this._clearFocusedItem()
            },
            _clearFocusedItem: function() {
                if (this._list) {
                    this._list.option("focusedElement", null);
                    this._list.option("selectedIndex", -1)
                }
            },
            _renderValueEventName: function() {
                return "input keyup"
            },
            _valueChangeEventHandler: function(e) {
                var value = this._input().val() || null;
                return this.callBase(e, value)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "maxItemCount":
                        this._searchDataSource();
                        break;
                    case "valueExpr":
                        this._compileDisplayGetter();
                        this._setListOption("displayExpr", this._displayGetterExpr());
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            reset: function() {
                this.callBase();
                this.close()
            }
        });
        registerComponent("dxAutocomplete", Autocomplete);
        module.exports = Autocomplete
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_editor/ui.drop_down_button.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _button = __webpack_require__( /*! ../text_box/texteditor_button_collection/button */ 194);
        var _button2 = _interopRequireDefault(_button);
        var _button3 = __webpack_require__( /*! ../button */ 37);
        var _button4 = _interopRequireDefault(_button3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DROP_DOWN_EDITOR_BUTTON_CLASS = "dx-dropdowneditor-button";
        var DROP_DOWN_EDITOR_BUTTON_VISIBLE = "dx-dropdowneditor-button-visible";
        var BUTTON_MESSAGE = "dxDropDownEditor-selectLabel";
        var ClearButton = function(_TextEditorButton) {
            _inherits(ClearButton, _TextEditorButton);
            var _super = _createSuper(ClearButton);

            function ClearButton() {
                _classCallCheck(this, ClearButton);
                return _super.apply(this, arguments)
            }
            _createClass(ClearButton, [{
                key: "_attachEvents",
                value: function(instance) {
                    var editor = this.editor;
                    instance.option("onClick", function(e) {
                        !editor.option("openOnFieldClick") && editor._openHandler(e)
                    });
                    _events_engine2.default.on(instance.$element(), "mousedown", function(e) {
                        if (editor.$element().is(".dx-state-focused")) {
                            e.preventDefault()
                        }
                    })
                }
            }, {
                key: "_create",
                value: function() {
                    var editor = this.editor;
                    var $element = (0, _renderer2.default)("<div>");
                    var options = this._getOptions();
                    this._addToContainer($element);
                    var instance = editor._createComponent($element, _button4.default, options);
                    instance.setAria("label", _message2.default.format(BUTTON_MESSAGE));
                    this._legacyRender(editor.$element(), $element, options.visible);
                    return {
                        $element: $element,
                        instance: instance
                    }
                }
            }, {
                key: "_getOptions",
                value: function() {
                    var editor = this.editor;
                    var visible = this._isVisible();
                    var isReadOnly = editor.option("readOnly");
                    var template = editor._getTemplateByOption("dropDownButtonTemplate");
                    return {
                        focusStateEnabled: false,
                        hoverStateEnabled: false,
                        activeStateEnabled: false,
                        useInkRipple: false,
                        disabled: isReadOnly,
                        visible: visible,
                        template: template
                    }
                }
            }, {
                key: "_isVisible",
                value: function() {
                    var editor = this.editor;
                    return _get(_getPrototypeOf(ClearButton.prototype), "_isVisible", this).call(this) && editor.option("showDropDownButton")
                }
            }, {
                key: "_legacyRender",
                value: function($editor, $element, isVisible) {
                    $editor.toggleClass(DROP_DOWN_EDITOR_BUTTON_VISIBLE, isVisible);
                    if ($element) {
                        $element.removeClass("dx-button");
                        $element.addClass(DROP_DOWN_EDITOR_BUTTON_CLASS)
                    }
                }
            }, {
                key: "update",
                value: function() {
                    var shouldUpdate = _get(_getPrototypeOf(ClearButton.prototype), "update", this).call(this);
                    if (shouldUpdate) {
                        var editor = this.editor,
                            instance = this.instance;
                        var $editor = editor.$element();
                        var options = this._getOptions();
                        instance && instance.option(options);
                        this._legacyRender($editor, instance && instance.$element(), options.visible)
                    }
                }
            }]);
            return ClearButton
        }(_button2.default);
        exports.default = ClearButton
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/text_box.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var navigator = windowUtils.getNavigator();
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var TextEditor = __webpack_require__( /*! ./ui.text_editor */ 310);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var ua = navigator.userAgent;
        var ignoreKeys = ["backspace", "tab", "enter", "pageUp", "pageDown", "end", "home", "leftArrow", "rightArrow", "downArrow", "upArrow", "del"];
        var TEXTBOX_CLASS = "dx-textbox";
        var SEARCHBOX_CLASS = "dx-searchbox";
        var ICON_CLASS = "dx-icon";
        var SEARCH_ICON_CLASS = "dx-icon-search";
        var TextBox = TextEditor.inherit({
            ctor: function(element, options) {
                if (options) {
                    this._showClearButton = options.showClearButton
                }
                this.callBase.apply(this, arguments)
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: "",
                    mode: "text",
                    maxLength: null
                })
            },
            _initMarkup: function() {
                this.$element().addClass(TEXTBOX_CLASS);
                this.callBase();
                this.setAria("role", "textbox")
            },
            _renderContentImpl: function() {
                this._renderMaxLengthHandlers();
                this.callBase()
            },
            _renderInputType: function() {
                this.callBase();
                this._renderSearchMode()
            },
            _renderMaxLengthHandlers: function() {
                if (this._isAndroidOrIE()) {
                    eventsEngine.on(this._input(), eventUtils.addNamespace("keydown", this.NAME), this._onKeyDownCutOffHandler.bind(this));
                    eventsEngine.on(this._input(), eventUtils.addNamespace("change", this.NAME), this._onChangeCutOffHandler.bind(this))
                }
            },
            _renderProps: function() {
                this.callBase();
                this._toggleMaxLengthProp()
            },
            _toggleMaxLengthProp: function() {
                var maxLength = this._getMaxLength();
                if (maxLength && maxLength > 0) {
                    this._input().attr("maxLength", maxLength)
                } else {
                    this._input().removeAttr("maxLength")
                }
            },
            _renderSearchMode: function() {
                var $element = this._$element;
                if ("search" === this.option("mode")) {
                    $element.addClass(SEARCHBOX_CLASS);
                    this._renderSearchIcon();
                    if (void 0 === this._showClearButton) {
                        this._showClearButton = this.option("showClearButton");
                        this.option("showClearButton", true)
                    }
                } else {
                    $element.removeClass(SEARCHBOX_CLASS);
                    this._$searchIcon && this._$searchIcon.remove();
                    this.option("showClearButton", void 0 === this._showClearButton ? this.option("showClearButton") : this._showClearButton);
                    delete this._showClearButton
                }
            },
            _renderSearchIcon: function() {
                var $searchIcon = $("<div>").addClass(ICON_CLASS).addClass(SEARCH_ICON_CLASS);
                $searchIcon.prependTo(this._input().parent());
                this._$searchIcon = $searchIcon
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "maxLength":
                        this._toggleMaxLengthProp();
                        this._renderMaxLengthHandlers();
                        break;
                    case "mask":
                        this.callBase(args);
                        this._toggleMaxLengthProp();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _onKeyDownCutOffHandler: function(e) {
                var actualMaxLength = this._getMaxLength();
                if (actualMaxLength) {
                    var $input = $(e.target);
                    var key = eventUtils.normalizeKeyName(e);
                    this._cutOffExtraChar($input);
                    return $input.val().length < actualMaxLength || inArray(key, ignoreKeys) !== -1 || "" !== window.getSelection().toString()
                } else {
                    return true
                }
            },
            _onChangeCutOffHandler: function(e) {
                var $input = $(e.target);
                if (this.option("maxLength")) {
                    this._cutOffExtraChar($input)
                }
            },
            _cutOffExtraChar: function($input) {
                var actualMaxLength = this._getMaxLength();
                var textInput = $input.val();
                if (actualMaxLength && textInput.length > actualMaxLength) {
                    $input.val(textInput.substr(0, actualMaxLength))
                }
            },
            _getMaxLength: function() {
                var isMaskSpecified = !!this.option("mask");
                return isMaskSpecified ? null : this.option("maxLength")
            },
            _isAndroidOrIE: function() {
                var realDevice = devices.real();
                var version = realDevice.version.join(".");
                return browser.msie || "android" === realDevice.platform && version && /^(2\.|4\.1)/.test(version) && !/chrome/i.test(ua)
            }
        });
        TextBox.__internals = {
            uaAccessor: function(value) {
                if (!arguments.length) {
                    return window.DevExpress.ui
                }
                ua = value
            },
            SEARCHBOX_CLASS: SEARCHBOX_CLASS,
            SEARCH_ICON_CLASS: SEARCH_ICON_CLASS
        };
        registerComponent("dxTextBox", TextBox);
        module.exports = TextBox
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.mask.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var caret = __webpack_require__( /*! ./utils.caret */ 311);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var focused = __webpack_require__( /*! ../widget/selectors */ 66).focused;
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var stringUtils = __webpack_require__( /*! ../../core/utils/string */ 43);
        var wheelEvent = __webpack_require__( /*! ../../events/core/wheel */ 133);
        var MaskRules = __webpack_require__( /*! ./ui.text_editor.mask.rule */ 529);
        var TextEditorBase = __webpack_require__( /*! ./ui.text_editor.base */ 530);
        var DefaultMaskStrategy = __webpack_require__( /*! ./ui.text_editor.mask.strategy.default */ 534).default;
        var AndroidMaskStrategy = __webpack_require__( /*! ./ui.text_editor.mask.strategy.android */ 535).default;
        var stubCaret = function() {
            return {}
        };
        var EMPTY_CHAR = " ";
        var ESCAPED_CHAR = "\\";
        var TEXTEDITOR_MASKED_CLASS = "dx-texteditor-masked";
        var FORWARD_DIRECTION = "forward";
        var BACKWARD_DIRECTION = "backward";
        var buildInMaskRules = {
            0: /[0-9]/,
            9: /[0-9\s]/,
            "#": /[-+0-9\s]/,
            L: function(char) {
                return isLiteralChar(char)
            },
            l: function(char) {
                return isLiteralChar(char) || isSpaceChar(char)
            },
            C: /\S/,
            c: /./,
            A: function(char) {
                return isLiteralChar(char) || isNumericChar(char)
            },
            a: function(char) {
                return isLiteralChar(char) || isNumericChar(char) || isSpaceChar(char)
            }
        };

        function isNumericChar(char) {
            return /[0-9]/.test(char)
        }

        function isLiteralChar(char) {
            var code = char.charCodeAt();
            return 64 < code && code < 91 || 96 < code && code < 123 || code > 127
        }

        function isSpaceChar(char) {
            return " " === char
        }
        var TextEditorMask = TextEditorBase.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    mask: "",
                    maskChar: "_",
                    maskRules: {},
                    maskInvalidMessage: messageLocalization.format("validation-mask"),
                    useMaskedValue: false,
                    showMaskMode: "always"
                })
            },
            _supportedKeys: function() {
                var that = this;
                var keyHandlerMap = {
                    backspace: that._maskStrategy.getHandler("backspace"),
                    del: that._maskStrategy.getHandler("del"),
                    enter: that._changeHandler
                };
                var result = that.callBase();
                each(keyHandlerMap, function(key, callback) {
                    var parentHandler = result[key];
                    result[key] = function(e) {
                        that.option("mask") && callback.call(that, e);
                        parentHandler && parentHandler(e)
                    }
                });
                return result
            },
            _getSubmitElement: function() {
                return !this.option("mask") ? this.callBase() : this._$hiddenElement
            },
            _init: function() {
                this.callBase();
                this._initMaskStrategy()
            },
            _initMaskStrategy: function() {
                var device = devices.real();
                this._maskStrategy = device.android && device.version[0] > 4 ? new AndroidMaskStrategy(this) : new DefaultMaskStrategy(this)
            },
            _initMarkup: function() {
                this._renderHiddenElement();
                this.callBase()
            },
            _attachMouseWheelEventHandlers: function() {
                var hasMouseWheelHandler = this._onMouseWheel !== noop;
                if (!hasMouseWheelHandler) {
                    return
                }
                var input = this._input();
                var eventName = eventUtils.addNamespace(wheelEvent.name, this.NAME);
                var mouseWheelAction = this._createAction(function(e) {
                    if (focused(input)) {
                        var dxEvent = e.event;
                        this._onMouseWheel(dxEvent);
                        dxEvent.preventDefault();
                        dxEvent.stopPropagation()
                    }
                }.bind(this));
                eventsEngine.off(input, eventName);
                eventsEngine.on(input, eventName, function(e) {
                    mouseWheelAction({
                        event: e
                    })
                })
            },
            _onMouseWheel: noop,
            _render: function() {
                this.callBase();
                this._renderMask();
                this._attachMouseWheelEventHandlers()
            },
            _renderHiddenElement: function() {
                if (this.option("mask")) {
                    this._$hiddenElement = $("<input>").attr("type", "hidden").appendTo(this._inputWrapper())
                }
            },
            _removeHiddenElement: function() {
                this._$hiddenElement && this._$hiddenElement.remove()
            },
            _renderMask: function() {
                this.$element().removeClass(TEXTEDITOR_MASKED_CLASS);
                this._maskRulesChain = null;
                this._maskStrategy.detachEvents();
                if (!this.option("mask")) {
                    return
                }
                this.$element().addClass(TEXTEDITOR_MASKED_CLASS);
                this._maskStrategy.attachEvents();
                this._parseMask();
                this._renderMaskedValue()
            },
            _suppressCaretChanging: function(callback, args) {
                var originalCaret = caret;
                caret = stubCaret;
                try {
                    callback.apply(this, args)
                } finally {
                    caret = originalCaret
                }
            },
            _changeHandler: function(e) {
                var $input = this._input();
                var inputValue = $input.val();
                if (inputValue === this._changedValue) {
                    return
                }
                this._changedValue = inputValue;
                var changeEvent = eventUtils.createEvent(e, {
                    type: "change"
                });
                eventsEngine.trigger($input, changeEvent)
            },
            _parseMask: function() {
                this._maskRules = extend({}, buildInMaskRules, this.option("maskRules"));
                this._maskRulesChain = this._parseMaskRule(0)
            },
            _parseMaskRule: function(index) {
                var mask = this.option("mask");
                if (index >= mask.length) {
                    return new MaskRules.EmptyMaskRule
                }
                var currentMaskChar = mask[index];
                var isEscapedChar = currentMaskChar === ESCAPED_CHAR;
                var result = isEscapedChar ? new MaskRules.StubMaskRule({
                    maskChar: mask[index + 1]
                }) : this._getMaskRule(currentMaskChar);
                result.next(this._parseMaskRule(index + 1 + isEscapedChar));
                return result
            },
            _getMaskRule: function(pattern) {
                var ruleConfig;
                each(this._maskRules, function(rulePattern, allowedChars) {
                    if (rulePattern === pattern) {
                        ruleConfig = {
                            pattern: rulePattern,
                            allowedChars: allowedChars
                        };
                        return false
                    }
                });
                return isDefined(ruleConfig) ? new MaskRules.MaskRule(extend({
                    maskChar: this.option("maskChar")
                }, ruleConfig)) : new MaskRules.StubMaskRule({
                    maskChar: pattern
                })
            },
            _renderMaskedValue: function() {
                if (!this._maskRulesChain) {
                    return
                }
                var value = this.option("value") || "";
                this._maskRulesChain.clear(this._normalizeChainArguments());
                var chainArgs = {
                    length: value.length
                };
                chainArgs[this._isMaskedValueMode() ? "text" : "value"] = value;
                this._handleChain(chainArgs);
                this._displayMask()
            },
            _replaceSelectedText: function(text, selection, char) {
                if (void 0 === char) {
                    return text
                }
                var textBefore = text.slice(0, selection.start);
                var textAfter = text.slice(selection.end);
                var edited = textBefore + char + textAfter;
                return edited
            },
            _isMaskedValueMode: function() {
                return this.option("useMaskedValue")
            },
            _displayMask: function(caret) {
                caret = caret || this._caret();
                this._renderValue();
                this._caret(caret)
            },
            _isValueEmpty: function() {
                return stringUtils.isEmpty(this._value)
            },
            _shouldShowMask: function() {
                var showMaskMode = this.option("showMaskMode");
                if ("onFocus" === showMaskMode) {
                    return focused(this._input()) || !this._isValueEmpty()
                }
                return true
            },
            _showMaskPlaceholder: function() {
                if (this._shouldShowMask()) {
                    var text = this._maskRulesChain.text();
                    this.option("text", text);
                    if ("onFocus" === this.option("showMaskMode")) {
                        this._renderDisplayText(text)
                    }
                }
            },
            _renderValue: function() {
                if (this._maskRulesChain) {
                    var text = this._maskRulesChain.text();
                    this._showMaskPlaceholder();
                    if (this._$hiddenElement) {
                        var value = this._maskRulesChain.value();
                        var hiddenElementValue = this._isMaskedValueMode() ? text : value;
                        this._$hiddenElement.val(!stringUtils.isEmpty(value) ? hiddenElementValue : "")
                    }
                }
                return this.callBase()
            },
            _valueChangeEventHandler: function(e) {
                if (!this._maskRulesChain) {
                    this.callBase.apply(this, arguments);
                    return
                }
                this._saveValueChangeEvent(e);
                this.option("value", this._convertToValue().replace(/\s+$/, ""))
            },
            _isControlKeyFired: function(e) {
                return this._isControlKey(eventUtils.normalizeKeyName(e)) || e.ctrlKey || e.metaKey
            },
            _handleChain: function(args) {
                var handledCount = this._maskRulesChain.handle(this._normalizeChainArguments(args));
                this._value = this._maskRulesChain.value();
                this._textValue = this._maskRulesChain.text();
                return handledCount
            },
            _normalizeChainArguments: function(args) {
                args = args || {};
                args.index = 0;
                args.fullText = this._maskRulesChain.text();
                return args
            },
            _convertToValue: function(text) {
                if (this._isMaskedValueMode()) {
                    text = this._replaceMaskCharWithEmpty(text || this._textValue || "")
                } else {
                    text = text || this._value || ""
                }
                return text
            },
            _replaceMaskCharWithEmpty: function(text) {
                return text.replace(new RegExp(this.option("maskChar"), "g"), EMPTY_CHAR)
            },
            _maskKeyHandler: function(e, keyHandler) {
                var _this = this;
                if (this.option("readOnly")) {
                    return
                }
                this.setForwardDirection();
                e.preventDefault();
                this._handleSelection();
                var previousText = this._input().val();
                var raiseInputEvent = function() {
                    if (previousText !== _this._input().val()) {
                        _this._maskStrategy.runWithoutEventProcessing(function() {
                            return eventsEngine.trigger(_this._input(), "input")
                        })
                    }
                };
                var handled = keyHandler();
                if (handled) {
                    handled.then(raiseInputEvent)
                } else {
                    this.setForwardDirection();
                    this._adjustCaret();
                    this._displayMask();
                    this._maskRulesChain.reset();
                    raiseInputEvent()
                }
            },
            _handleKey: function(key, direction) {
                this._direction(direction || FORWARD_DIRECTION);
                this._adjustCaret(key);
                this._handleKeyChain(key);
                this._moveCaret()
            },
            _handleSelection: function() {
                if (!this._hasSelection()) {
                    return
                }
                var caret = this._caret();
                var emptyChars = new Array(caret.end - caret.start + 1).join(EMPTY_CHAR);
                this._handleKeyChain(emptyChars)
            },
            _handleKeyChain: function(chars) {
                var caret = this._caret();
                var start = this.isForwardDirection() ? caret.start : caret.start - 1;
                var end = this.isForwardDirection() ? caret.end : caret.end - 1;
                var length = start === end ? 1 : end - start;
                this._handleChain({
                    text: chars,
                    start: start,
                    length: length
                })
            },
            _tryMoveCaretBackward: function() {
                this.setBackwardDirection();
                var currentCaret = this._caret().start;
                this._adjustCaret();
                return !currentCaret || currentCaret !== this._caret().start
            },
            _adjustCaret: function(char) {
                var caret = this._maskRulesChain.adjustedCaret(this._caret().start, this.isForwardDirection(), char);
                this._caret({
                    start: caret,
                    end: caret
                })
            },
            _moveCaret: function() {
                var currentCaret = this._caret().start;
                var maskRuleIndex = currentCaret + (this.isForwardDirection() ? 0 : -1);
                var caret = this._maskRulesChain.isAccepted(maskRuleIndex) ? currentCaret + (this.isForwardDirection() ? 1 : -1) : currentCaret;
                this._caret({
                    start: caret,
                    end: caret
                })
            },
            _caret: function(position) {
                var $input = this._input();
                if (!$input.length) {
                    return
                }
                if (!arguments.length) {
                    return caret($input)
                }
                caret($input, position)
            },
            _hasSelection: function() {
                var caret = this._caret();
                return caret.start !== caret.end
            },
            _direction: function(direction) {
                if (!arguments.length) {
                    return this._typingDirection
                }
                this._typingDirection = direction
            },
            setForwardDirection: function() {
                this._direction(FORWARD_DIRECTION)
            },
            setBackwardDirection: function() {
                this._direction(BACKWARD_DIRECTION)
            },
            isForwardDirection: function() {
                return this._direction() === FORWARD_DIRECTION
            },
            _clean: function() {
                this._maskStrategy && this._maskStrategy.clean();
                this.callBase()
            },
            _validateMask: function() {
                if (!this._maskRulesChain) {
                    return
                }
                var isValid = stringUtils.isEmpty(this.option("value")) || this._maskRulesChain.isValid(this._normalizeChainArguments());
                this.option({
                    isValid: isValid,
                    validationError: isValid ? null : {
                        editorSpecific: true,
                        message: this.option("maskInvalidMessage")
                    }
                })
            },
            _updateHiddenElement: function() {
                this._removeHiddenElement();
                if (this.option("mask")) {
                    this._input().removeAttr("name");
                    this._renderHiddenElement()
                }
                this._setSubmitElementName(this.option("name"))
            },
            _updateMaskOption: function() {
                this._updateHiddenElement();
                this._renderMask();
                this._validateMask()
            },
            _processEmptyMask: function(mask) {
                if (mask) {
                    return
                }
                var value = this.option("value");
                this.option({
                    text: value,
                    isValid: true
                });
                this.validationRequest.fire({
                    value: value,
                    editor: this
                });
                this._renderValue()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "mask":
                        this._updateMaskOption();
                        this._processEmptyMask(args.value);
                        break;
                    case "maskChar":
                    case "maskRules":
                    case "useMaskedValue":
                        this._updateMaskOption();
                        break;
                    case "value":
                        this._renderMaskedValue();
                        this._validateMask();
                        this.callBase(args);
                        this._changedValue = this._input().val();
                        break;
                    case "maskInvalidMessage":
                        break;
                    case "showMaskMode":
                        this.option("text", "");
                        this._renderValue();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = TextEditorMask
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.mask.rule.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var isFunction = typeUtils.isFunction;
        var EMPTY_CHAR = " ";
        var BaseMaskRule = Class.inherit({
            ctor: function(config) {
                this._value = EMPTY_CHAR;
                extend(this, config)
            },
            next: function(rule) {
                if (!arguments.length) {
                    return this._next
                }
                this._next = rule
            },
            text: noop,
            value: noop,
            rawValue: noop,
            handle: noop,
            _prepareHandlingArgs: function(args, config) {
                config = config || {};
                var handlingProperty = Object.prototype.hasOwnProperty.call(args, "value") ? "value" : "text";
                args[handlingProperty] = typeUtils.isDefined(config.str) ? config.str : args[handlingProperty];
                args.start = typeUtils.isDefined(config.start) ? config.start : args.start;
                args.length = typeUtils.isDefined(config.length) ? config.length : args.length;
                args.index = args.index + 1;
                return args
            },
            reset: noop,
            clear: noop,
            first: function(index) {
                index = index || 0;
                return this.next().first(index + 1)
            },
            isAccepted: function() {
                return false
            },
            adjustedCaret: function(caret, isForwardDirection, char) {
                return isForwardDirection ? this._adjustedForward(caret, 0, char) : this._adjustedBackward(caret, 0, char)
            },
            _adjustedForward: noop,
            _adjustedBackward: noop,
            isValid: noop
        });
        var EmptyMaskRule = BaseMaskRule.inherit({
            next: noop,
            handle: function() {
                return 0
            },
            text: function() {
                return ""
            },
            value: function() {
                return ""
            },
            first: function() {
                return 0
            },
            rawValue: function() {
                return ""
            },
            adjustedCaret: function() {
                return 0
            },
            isValid: function() {
                return true
            }
        });
        var MaskRule = BaseMaskRule.inherit({
            text: function() {
                return (this._value !== EMPTY_CHAR ? this._value : this.maskChar) + this.next().text()
            },
            value: function() {
                return this._value + this.next().value()
            },
            rawValue: function() {
                return this._value + this.next().rawValue()
            },
            handle: function(args) {
                var str = Object.prototype.hasOwnProperty.call(args, "value") ? args.value : args.text;
                if (!str || !str.length || !args.length) {
                    return 0
                }
                if (args.start) {
                    return this.next().handle(this._prepareHandlingArgs(args, {
                        start: args.start - 1
                    }))
                }
                var char = str[0];
                var rest = str.substring(1);
                this._tryAcceptChar(char, args);
                return this._accepted() ? this.next().handle(this._prepareHandlingArgs(args, {
                    str: rest,
                    length: args.length - 1
                })) + 1 : this.handle(this._prepareHandlingArgs(args, {
                    str: rest,
                    length: args.length - 1
                }))
            },
            clear: function(args) {
                this._tryAcceptChar(EMPTY_CHAR, args);
                this.next().clear(this._prepareHandlingArgs(args))
            },
            reset: function() {
                this._accepted(false);
                this.next().reset()
            },
            _tryAcceptChar: function(char, args) {
                this._accepted(false);
                if (!this._isAllowed(char, args)) {
                    return
                }
                var acceptedChar = char === EMPTY_CHAR ? this.maskChar : char;
                args.fullText = args.fullText.substring(0, args.index) + acceptedChar + args.fullText.substring(args.index + 1);
                this._accepted(true);
                this._value = char
            },
            _accepted: function(value) {
                if (!arguments.length) {
                    return !!this._isAccepted
                }
                this._isAccepted = !!value
            },
            first: function(index) {
                return this._value === EMPTY_CHAR ? index || 0 : this.callBase(index)
            },
            _isAllowed: function(char, args) {
                if (char === EMPTY_CHAR) {
                    return true
                }
                return this._isValid(char, args)
            },
            _isValid: function(char, args) {
                var allowedChars = this.allowedChars;
                if (allowedChars instanceof RegExp) {
                    return allowedChars.test(char)
                }
                if (isFunction(allowedChars)) {
                    return allowedChars(char, args.index, args.fullText)
                }
                if (Array.isArray(allowedChars)) {
                    return inArray(char, allowedChars) > -1
                }
                return allowedChars === char
            },
            isAccepted: function(caret) {
                return 0 === caret ? this._accepted() : this.next().isAccepted(caret - 1)
            },
            _adjustedForward: function(caret, index, char) {
                if (index >= caret) {
                    return index
                }
                return this.next()._adjustedForward(caret, index + 1, char) || index + 1
            },
            _adjustedBackward: function(caret, index) {
                if (index >= caret - 1) {
                    return caret
                }
                return this.next()._adjustedBackward(caret, index + 1) || index + 1
            },
            isValid: function(args) {
                return this._isValid(this._value, args) && this.next().isValid(this._prepareHandlingArgs(args))
            }
        });
        var StubMaskRule = MaskRule.inherit({
            value: function() {
                return this.next().value()
            },
            handle: function(args) {
                var hasValueProperty = Object.prototype.hasOwnProperty.call(args, "value");
                var str = hasValueProperty ? args.value : args.text;
                if (!str.length || !args.length) {
                    return 0
                }
                if (args.start || hasValueProperty) {
                    return this.next().handle(this._prepareHandlingArgs(args, {
                        start: args.start && args.start - 1
                    }))
                }
                var char = str[0];
                var rest = str.substring(1);
                this._tryAcceptChar(char);
                var nextArgs = this._isAllowed(char) ? this._prepareHandlingArgs(args, {
                    str: rest,
                    length: args.length - 1
                }) : args;
                return this.next().handle(nextArgs) + 1
            },
            clear: function(args) {
                this._accepted(false);
                this.next().clear(this._prepareHandlingArgs(args))
            },
            _tryAcceptChar: function(char) {
                this._accepted(this._isValid(char))
            },
            _isValid: function(char) {
                return char === this.maskChar
            },
            first: function(index) {
                index = index || 0;
                return this.next().first(index + 1)
            },
            _adjustedForward: function(caret, index, char) {
                if (index >= caret && char === this.maskChar) {
                    return index
                }
                if (caret === index + 1 && this._accepted()) {
                    return caret
                }
                return this.next()._adjustedForward(caret, index + 1, char)
            },
            _adjustedBackward: function(caret, index) {
                if (index >= caret - 1) {
                    return 0
                }
                return this.next()._adjustedBackward(caret, index + 1)
            },
            isValid: function(args) {
                return this.next().isValid(this._prepareHandlingArgs(args))
            }
        });
        module.exports.MaskRule = MaskRule;
        module.exports.StubMaskRule = StubMaskRule;
        module.exports.EmptyMaskRule = EmptyMaskRule
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.base.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _selectors = __webpack_require__( /*! ../widget/selectors */ 66);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _uiText_editor = __webpack_require__( /*! ./ui.text_editor.clear */ 531);
        var _uiText_editor2 = _interopRequireDefault(_uiText_editor);
        var _index = __webpack_require__( /*! ./texteditor_button_collection/index */ 532);
        var _index2 = _interopRequireDefault(_index);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _load_indicator = __webpack_require__( /*! ../load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TEXTEDITOR_CLASS = "dx-texteditor";
        var TEXTEDITOR_INPUT_CONTAINER_CLASS = "dx-texteditor-input-container";
        var TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input";
        var TEXTEDITOR_INPUT_SELECTOR = "." + TEXTEDITOR_INPUT_CLASS;
        var TEXTEDITOR_CONTAINER_CLASS = "dx-texteditor-container";
        var TEXTEDITOR_BUTTONS_CONTAINER_CLASS = "dx-texteditor-buttons-container";
        var TEXTEDITOR_PLACEHOLDER_CLASS = "dx-placeholder";
        var TEXTEDITOR_EMPTY_INPUT_CLASS = "dx-texteditor-empty";
        var TEXTEDITOR_STYLING_MODE_PREFIX = "dx-editor-";
        var ALLOWED_STYLE_CLASSES = [TEXTEDITOR_STYLING_MODE_PREFIX + "outlined", TEXTEDITOR_STYLING_MODE_PREFIX + "filled", TEXTEDITOR_STYLING_MODE_PREFIX + "underlined"];
        var STATE_INVISIBLE_CLASS = "dx-state-invisible";
        var TEXTEDITOR_PENDING_INDICATOR_CLASS = "dx-pending-indicator";
        var TEXTEDITOR_VALIDATION_PENDING_CLASS = "dx-validation-pending";
        var TEXTEDITOR_VALID_CLASS = "dx-valid";
        var EVENTS_LIST = ["KeyDown", "KeyPress", "KeyUp", "Change", "Cut", "Copy", "Paste", "Input"];
        var CONTROL_KEYS = ["tab", "enter", "shift", "control", "alt", "escape", "pageUp", "pageDown", "end", "home", "leftArrow", "upArrow", "rightArrow", "downArrow"];

        function checkButtonsOptionType(buttons) {
            if ((0, _type.isDefined)(buttons) && !Array.isArray(buttons)) {
                throw _ui2.default.Error("E1053")
            }
        }
        var TextEditorBase = _editor2.default.inherit({
            ctor: function(_, options) {
                if (options) {
                    checkButtonsOptionType(options.buttons)
                }
                this._buttonCollection = new _index2.default(this, this._getDefaultButtons());
                this._$beforeButtonsContainer = null;
                this._$afterButtonsContainer = null;
                this.callBase.apply(this, arguments)
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    buttons: void 0,
                    value: "",
                    spellcheck: false,
                    showClearButton: false,
                    valueChangeEvent: "change",
                    placeholder: "",
                    inputAttr: {},
                    onFocusIn: null,
                    onFocusOut: null,
                    onKeyDown: null,
                    onKeyPress: null,
                    onKeyUp: null,
                    onChange: null,
                    onInput: null,
                    onCut: null,
                    onCopy: null,
                    onPaste: null,
                    onEnterKey: null,
                    mode: "text",
                    hoverStateEnabled: true,
                    focusStateEnabled: true,
                    text: void 0,
                    displayValueFormatter: function(value) {
                        return (0, _type.isDefined)(value) && false !== value ? value : ""
                    },
                    stylingMode: (0, _config2.default)().editorStylingMode || "outlined",
                    showValidationMark: true
                })
            },
            _defaultOptionsRules: function() {
                var themeName = _themes2.default.current();
                return this.callBase().concat([{
                    device: function() {
                        return _themes2.default.isMaterial(themeName)
                    },
                    options: {
                        stylingMode: (0, _config2.default)().editorStylingMode || "underlined"
                    }
                }])
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    onKeyPress: {
                        since: "20.1",
                        message: "This event is removed from the web standards and will be deprecated in modern browsers soon."
                    }
                })
            },
            _getDefaultButtons: function() {
                return [{
                    name: "clear",
                    Ctor: _uiText_editor2.default
                }]
            },
            _isClearButtonVisible: function() {
                return this.option("showClearButton") && !this.option("readOnly")
            },
            _input: function() {
                return this.$element().find(TEXTEDITOR_INPUT_SELECTOR).first()
            },
            _isFocused: function() {
                return (0, _selectors.focused)(this._input()) || this.callBase()
            },
            _inputWrapper: function() {
                return this.$element()
            },
            _buttonsContainer: function() {
                return this._inputWrapper().find("." + TEXTEDITOR_BUTTONS_CONTAINER_CLASS).eq(0)
            },
            _isControlKey: function(key) {
                return CONTROL_KEYS.indexOf(key) !== -1
            },
            _renderStylingMode: function() {
                var _this = this;
                var optionName = "stylingMode";
                var optionValue = this.option(optionName);
                ALLOWED_STYLE_CLASSES.forEach(function(className) {
                    return _this.$element().removeClass(className)
                });
                var stylingModeClass = TEXTEDITOR_STYLING_MODE_PREFIX + optionValue;
                if (ALLOWED_STYLE_CLASSES.indexOf(stylingModeClass) === -1) {
                    var defaultOptionValue = this._getDefaultOptions()[optionName];
                    var platformOptionValue = this._convertRulesToOptions(this._defaultOptionsRules())[optionName];
                    stylingModeClass = TEXTEDITOR_STYLING_MODE_PREFIX + (platformOptionValue || defaultOptionValue)
                }
                this.$element().addClass(stylingModeClass);
                this._updateButtonsStyling(optionValue)
            },
            _initMarkup: function() {
                this.$element().addClass(TEXTEDITOR_CLASS);
                this._renderInput();
                this._renderStylingMode();
                this._renderInputType();
                this._renderPlaceholder();
                this._renderProps();
                this.callBase();
                this._renderValue()
            },
            _render: function() {
                this._renderPlaceholder();
                this._refreshValueChangeEvent();
                this._renderEvents();
                this._renderEnterKeyAction();
                this._renderEmptinessEvent();
                this.callBase()
            },
            _renderInput: function() {
                this._$textEditorContainer = (0, _renderer2.default)("<div>").addClass(TEXTEDITOR_CONTAINER_CLASS).appendTo(this.$element());
                this._$textEditorInputContainer = (0, _renderer2.default)("<div>").addClass(TEXTEDITOR_INPUT_CONTAINER_CLASS).appendTo(this._$textEditorContainer);
                this._$textEditorInputContainer.append(this._createInput());
                this._renderButtonContainers()
            },
            _getInputContainer: function() {
                return this._$textEditorInputContainer
            },
            _renderPendingIndicator: function() {
                this.$element().addClass(TEXTEDITOR_VALIDATION_PENDING_CLASS);
                var $inputContainer = this._getInputContainer();
                var $indicatorElement = (0, _renderer2.default)("<div>").addClass(TEXTEDITOR_PENDING_INDICATOR_CLASS).appendTo($inputContainer);
                this._pendingIndicator = this._createComponent($indicatorElement, _load_indicator2.default)
            },
            _disposePendingIndicator: function() {
                if (!this._pendingIndicator) {
                    return
                }
                this._pendingIndicator.dispose();
                this._pendingIndicator.$element().remove();
                this._pendingIndicator = null;
                this.$element().removeClass(TEXTEDITOR_VALIDATION_PENDING_CLASS)
            },
            _renderValidationState: function() {
                this.callBase();
                var isPending = "pending" === this.option("validationStatus");
                var $element = this.$element();
                if (isPending) {
                    !this._pendingIndicator && this._renderPendingIndicator();
                    this._showValidMark = false
                } else {
                    if ("invalid" === this.option("validationStatus")) {
                        this._showValidMark = false
                    }
                    if (!this._showValidMark && true === this.option("showValidationMark")) {
                        this._showValidMark = "valid" === this.option("validationStatus") && !!this._pendingIndicator
                    }
                    this._disposePendingIndicator()
                }
                $element.toggleClass(TEXTEDITOR_VALID_CLASS, !!this._showValidMark)
            },
            _renderButtonContainers: function() {
                var buttons = this.option("buttons");
                this._$beforeButtonsContainer = this._buttonCollection.renderBeforeButtons(buttons, this._$textEditorContainer);
                this._$afterButtonsContainer = this._buttonCollection.renderAfterButtons(buttons, this._$textEditorContainer)
            },
            _clean: function() {
                this._buttonCollection.clean();
                this._disposePendingIndicator();
                this._$beforeButtonsContainer = null;
                this._$afterButtonsContainer = null;
                this._$textEditorContainer = null;
                this.callBase()
            },
            _createInput: function() {
                var $input = (0, _renderer2.default)("<input>");
                this._applyInputAttributes($input, this.option("inputAttr"));
                return $input
            },
            _setSubmitElementName: function(name) {
                var inputAttrName = this.option("inputAttr.name");
                return this.callBase(name || inputAttrName || "")
            },
            _applyInputAttributes: function($input, customAttributes) {
                $input.attr("autocomplete", "off").attr(customAttributes).addClass(TEXTEDITOR_INPUT_CLASS).css("minHeight", this.option("height") ? "0" : "")
            },
            _updateButtons: function(names) {
                this._buttonCollection.updateButtons(names)
            },
            _updateButtonsStyling: function(editorStylingMode) {
                var _this2 = this;
                (0, _iterator.each)(this.option("buttons"), function(_, buttonOptions) {
                    if (buttonOptions.options && !buttonOptions.options.stylingMode) {
                        var buttonInstance = _this2.getButton(buttonOptions.name);
                        buttonInstance.option && buttonInstance.option("stylingMode", "underlined" === editorStylingMode ? "text" : "contained")
                    }
                })
            },
            _renderValue: function() {
                var renderInputPromise = this._renderInputValue();
                return renderInputPromise.promise()
            },
            _renderInputValue: function(value) {
                value = value || this.option("value");
                var text = this.option("text");
                var displayValue = this.option("displayValue");
                var displayValueFormatter = this.option("displayValueFormatter");
                if (void 0 !== displayValue && null !== value) {
                    text = displayValueFormatter(displayValue)
                } else {
                    if (!(0, _type.isDefined)(text)) {
                        text = displayValueFormatter(value)
                    }
                }
                this.option("text", text);
                if (this._input().val() !== ((0, _type.isDefined)(text) ? text : "")) {
                    this._renderDisplayText(text)
                } else {
                    this._toggleEmptinessEventHandler()
                }
                return (new _deferred.Deferred).resolve()
            },
            _renderDisplayText: function(text) {
                this._input().val(text);
                this._toggleEmptinessEventHandler()
            },
            _isValueValid: function() {
                if (this._input().length) {
                    var validity = this._input().get(0).validity;
                    if (validity) {
                        return validity.valid
                    }
                }
                return true
            },
            _toggleEmptiness: function(isEmpty) {
                this.$element().toggleClass(TEXTEDITOR_EMPTY_INPUT_CLASS, isEmpty);
                this._togglePlaceholder(isEmpty)
            },
            _togglePlaceholder: function(isEmpty) {
                if (!this._$placeholder) {
                    return
                }
                this._$placeholder.toggleClass(STATE_INVISIBLE_CLASS, !isEmpty)
            },
            _renderProps: function() {
                this._toggleReadOnlyState();
                this._toggleSpellcheckState();
                this._toggleTabIndex()
            },
            _toggleDisabledState: function(value) {
                this.callBase.apply(this, arguments);
                var $input = this._input();
                if (value) {
                    $input.attr("disabled", true)
                } else {
                    $input.removeAttr("disabled")
                }
            },
            _toggleTabIndex: function() {
                var $input = this._input();
                var disabled = this.option("disabled");
                var focusStateEnabled = this.option("focusStateEnabled");
                if (disabled || !focusStateEnabled) {
                    $input.attr("tabIndex", -1)
                } else {
                    $input.removeAttr("tabIndex")
                }
            },
            _toggleReadOnlyState: function() {
                this._input().prop("readOnly", this._readOnlyPropValue());
                this.callBase()
            },
            _readOnlyPropValue: function() {
                return this.option("readOnly")
            },
            _toggleSpellcheckState: function() {
                this._input().prop("spellcheck", this.option("spellcheck"))
            },
            _renderPlaceholder: function() {
                this._renderPlaceholderMarkup();
                this._attachPlaceholderEvents()
            },
            _renderPlaceholderMarkup: function() {
                if (this._$placeholder) {
                    this._$placeholder.remove();
                    this._$placeholder = null
                }
                var $input = this._input();
                var placeholderText = this.option("placeholder");
                var $placeholder = this._$placeholder = (0, _renderer2.default)("<div>").attr("data-dx_placeholder", placeholderText);
                $placeholder.insertAfter($input);
                $placeholder.addClass(TEXTEDITOR_PLACEHOLDER_CLASS)
            },
            _attachPlaceholderEvents: function() {
                var _this3 = this;
                var startEvent = eventUtils.addNamespace(_pointer2.default.up, this.NAME);
                _events_engine2.default.on(this._$placeholder, startEvent, function() {
                    _events_engine2.default.trigger(_this3._input(), "focus")
                });
                this._toggleEmptinessEventHandler()
            },
            _placeholder: function() {
                return this._$placeholder || (0, _renderer2.default)()
            },
            _clearValueHandler: function(e) {
                var $input = this._input();
                e.stopPropagation();
                this._saveValueChangeEvent(e);
                this._clearValue();
                !this._isFocused() && _events_engine2.default.trigger($input, "focus");
                _events_engine2.default.trigger($input, "input")
            },
            _clearValue: function() {
                this.reset()
            },
            _renderEvents: function() {
                var _this4 = this;
                var $input = this._input();
                (0, _iterator.each)(EVENTS_LIST, function(_, event) {
                    if (_this4.hasActionSubscription("on" + event)) {
                        var action = _this4._createActionByOption("on" + event, {
                            excludeValidators: ["readOnly"]
                        });
                        _events_engine2.default.on($input, eventUtils.addNamespace(event.toLowerCase(), _this4.NAME), function(e) {
                            if (_this4._disposed) {
                                return
                            }
                            action({
                                event: e
                            })
                        })
                    }
                })
            },
            _refreshEvents: function() {
                var _this5 = this;
                var $input = this._input();
                (0, _iterator.each)(EVENTS_LIST, function(_, event) {
                    _events_engine2.default.off($input, eventUtils.addNamespace(event.toLowerCase(), _this5.NAME))
                });
                this._renderEvents()
            },
            _keyPressHandler: function() {
                this.option("text", this._input().val())
            },
            _keyDownHandler: function(e) {
                var $input = this._input();
                var isCtrlEnter = e.ctrlKey && "enter" === eventUtils.normalizeKeyName(e);
                var isNewValue = $input.val() !== this.option("value");
                if (isCtrlEnter && isNewValue) {
                    _events_engine2.default.trigger($input, "change")
                }
            },
            _renderValueChangeEvent: function() {
                var keyPressEvent = eventUtils.addNamespace(this._renderValueEventName(), "".concat(this.NAME, "TextChange"));
                var valueChangeEvent = eventUtils.addNamespace(this.option("valueChangeEvent"), "".concat(this.NAME, "ValueChange"));
                var keyDownEvent = eventUtils.addNamespace("keydown", "".concat(this.NAME, "TextChange"));
                var $input = this._input();
                _events_engine2.default.on($input, keyPressEvent, this._keyPressHandler.bind(this));
                _events_engine2.default.on($input, valueChangeEvent, this._valueChangeEventHandler.bind(this));
                _events_engine2.default.on($input, keyDownEvent, this._keyDownHandler.bind(this))
            },
            _cleanValueChangeEvent: function() {
                var valueChangeNamespace = ".".concat(this.NAME, "ValueChange");
                var textChangeNamespace = ".".concat(this.NAME, "TextChange");
                _events_engine2.default.off(this._input(), valueChangeNamespace);
                _events_engine2.default.off(this._input(), textChangeNamespace)
            },
            _refreshValueChangeEvent: function() {
                this._cleanValueChangeEvent();
                this._renderValueChangeEvent()
            },
            _renderValueEventName: function() {
                return "input change keypress"
            },
            _focusTarget: function() {
                return this._input()
            },
            _focusEventTarget: function() {
                return this.element()
            },
            _preventNestedFocusEvent: function(event) {
                if (event.isDefaultPrevented()) {
                    return true
                }
                var result = this._isNestedTarget(event.relatedTarget);
                if ("focusin" === event.type) {
                    result = result && this._isNestedTarget(event.target)
                }
                result && event.preventDefault();
                return result
            },
            _isNestedTarget: function(target) {
                return !!this.$element().find(target).length
            },
            _focusClassTarget: function() {
                return this.$element()
            },
            _focusInHandler: function(event) {
                this._preventNestedFocusEvent(event);
                this.callBase.apply(this, arguments)
            },
            _focusOutHandler: function(event) {
                this._preventNestedFocusEvent(event);
                this.callBase.apply(this, arguments)
            },
            _toggleFocusClass: function(isFocused, $element) {
                this.callBase(isFocused, this._focusClassTarget($element))
            },
            _hasFocusClass: function(element) {
                return this.callBase((0, _renderer2.default)(element || this.$element()))
            },
            _renderEmptinessEvent: function() {
                var $input = this._input();
                _events_engine2.default.on($input, "input blur", this._toggleEmptinessEventHandler.bind(this))
            },
            _toggleEmptinessEventHandler: function() {
                var text = this._input().val();
                var isEmpty = ("" === text || null === text) && this._isValueValid();
                this._toggleEmptiness(isEmpty)
            },
            _valueChangeEventHandler: function(e, formattedValue) {
                this._saveValueChangeEvent(e);
                this.option("value", arguments.length > 1 ? formattedValue : this._input().val());
                this._saveValueChangeEvent(void 0)
            },
            _renderEnterKeyAction: function() {
                this._enterKeyAction = this._createActionByOption("onEnterKey", {
                    excludeValidators: ["readOnly"]
                });
                _events_engine2.default.off(this._input(), "keyup.onEnterKey.dxTextEditor");
                _events_engine2.default.on(this._input(), "keyup.onEnterKey.dxTextEditor", this._enterKeyHandlerUp.bind(this))
            },
            _enterKeyHandlerUp: function(e) {
                if (this._disposed) {
                    return
                }
                if ("enter" === eventUtils.normalizeKeyName(e)) {
                    this._enterKeyAction({
                        event: e
                    })
                }
            },
            _updateValue: function() {
                this.option("text", void 0);
                this._renderValue()
            },
            _dispose: function() {
                this._enterKeyAction = void 0;
                this.callBase()
            },
            _getSubmitElement: function() {
                return this._input()
            },
            _optionChanged: function(args) {
                var name = args.name;
                if ((0, _array.inArray)(name.replace("on", ""), EVENTS_LIST) > -1) {
                    this._refreshEvents();
                    return
                }
                switch (name) {
                    case "valueChangeEvent":
                        this._refreshValueChangeEvent();
                        this._refreshFocusEvent();
                        this._refreshEvents();
                        break;
                    case "onValueChanged":
                        this._createValueChangeAction();
                        break;
                    case "focusStateEnabled":
                        this.callBase(args);
                        this._toggleTabIndex();
                        break;
                    case "spellcheck":
                        this._toggleSpellcheckState();
                        break;
                    case "mode":
                        this._renderInputType();
                        break;
                    case "onEnterKey":
                        this._renderEnterKeyAction();
                        break;
                    case "placeholder":
                        this._renderPlaceholder();
                        break;
                    case "readOnly":
                    case "disabled":
                        this._updateButtons();
                        this.callBase(args);
                        break;
                    case "showClearButton":
                        this._updateButtons(["clear"]);
                        break;
                    case "text":
                        break;
                    case "value":
                        this._updateValue();
                        this.callBase(args);
                        break;
                    case "inputAttr":
                        this._applyInputAttributes(this._input(), args.value);
                        break;
                    case "stylingMode":
                        this._renderStylingMode();
                        break;
                    case "buttons":
                        if (args.fullName === args.name) {
                            checkButtonsOptionType(args.value)
                        }
                        this._$beforeButtonsContainer && this._$beforeButtonsContainer.remove();
                        this._$afterButtonsContainer && this._$afterButtonsContainer.remove();
                        this._buttonCollection.clean();
                        this._renderButtonContainers();
                        break;
                    case "displayValueFormatter":
                        this._invalidate();
                        break;
                    case "showValidationMark":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _renderInputType: function() {
                this._setInputType(this.option("mode"))
            },
            _setInputType: function(type) {
                var input = this._input();
                if ("search" === type) {
                    type = "text"
                }
                try {
                    input.prop("type", type)
                } catch (e) {
                    input.prop("type", "text")
                }
            },
            getButton: function(name) {
                return this._buttonCollection.getButton(name)
            },
            focus: function() {
                _events_engine2.default.trigger(this._input(), "focus")
            },
            blur: function() {
                if (this._input().is(_dom_adapter2.default.getActiveElement())) {
                    _dom2.default.resetActiveElement()
                }
            },
            reset: function() {
                if (this._showValidMark) {
                    this._showValidMark = false;
                    this._renderValidationState()
                }
                var defaultOptions = this._getDefaultOptions();
                if (this.option("value") === defaultOptions.value) {
                    this.option("text", "");
                    this._renderValue()
                } else {
                    this.option("value", defaultOptions.value)
                }
            },
            on: function(eventName, eventHandler) {
                var result = this.callBase(eventName, eventHandler);
                var event = eventName.charAt(0).toUpperCase() + eventName.substr(1);
                if (EVENTS_LIST.indexOf(event) >= 0) {
                    this._refreshEvents()
                }
                return result
            }
        });
        module.exports = TextEditorBase
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.clear.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _button = __webpack_require__( /*! ./texteditor_button_collection/button */ 194);
        var _button2 = _interopRequireDefault(_button);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _click = __webpack_require__( /*! ../../events/click */ 19);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var STATE_INVISIBLE_CLASS = "dx-state-invisible";
        var TEXTEDITOR_CLEAR_BUTTON_CLASS = "dx-clear-button-area";
        var TEXTEDITOR_CLEAR_ICON_CLASS = "dx-icon-clear";
        var TEXTEDITOR_ICON_CLASS = "dx-icon";
        var TEXTEDITOR_SHOW_CLEAR_BUTTON_CLASS = "dx-show-clear-button";
        var ClearButton = function(_TextEditorButton) {
            _inherits(ClearButton, _TextEditorButton);
            var _super = _createSuper(ClearButton);

            function ClearButton() {
                _classCallCheck(this, ClearButton);
                return _super.apply(this, arguments)
            }
            _createClass(ClearButton, [{
                key: "_create",
                value: function() {
                    var $element = (0, _renderer2.default)("<span>").addClass(TEXTEDITOR_CLEAR_BUTTON_CLASS).append((0, _renderer2.default)("<span>").addClass(TEXTEDITOR_ICON_CLASS).addClass(TEXTEDITOR_CLEAR_ICON_CLASS));
                    this._addToContainer($element);
                    this.update(true);
                    return {
                        instance: $element,
                        $element: $element
                    }
                }
            }, {
                key: "_isVisible",
                value: function() {
                    var editor = this.editor;
                    return editor._isClearButtonVisible()
                }
            }, {
                key: "_attachEvents",
                value: function(instance, $button) {
                    var editor = this.editor;
                    var editorName = editor.NAME;
                    _events_engine2.default.on($button, (0, _utils.addNamespace)(_pointer.down, editorName), function(e) {
                        "mouse" === e.pointerType ? e.preventDefault() : editor._clearValueHandler(e)
                    });
                    _events_engine2.default.on($button, (0, _utils.addNamespace)(_click.name, editorName), function(e) {
                        return editor._clearValueHandler(e)
                    })
                }
            }, {
                key: "_legacyRender",
                value: function($editor, isVisible) {
                    $editor.toggleClass(TEXTEDITOR_SHOW_CLEAR_BUTTON_CLASS, isVisible)
                }
            }, {
                key: "update",
                value: function() {
                    var rendered = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : false;
                    !rendered && _get(_getPrototypeOf(ClearButton.prototype), "update", this).call(this);
                    var editor = this.editor,
                        instance = this.instance;
                    var $editor = editor.$element();
                    var isVisible = this._isVisible();
                    instance && instance.toggleClass(STATE_INVISIBLE_CLASS, !isVisible);
                    this._legacyRender($editor, isVisible)
                }
            }]);
            return ClearButton
        }(_button2.default);
        exports.default = ClearButton
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/texteditor_button_collection/index.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _custom = __webpack_require__( /*! ./custom */ 533);
        var _custom2 = _interopRequireDefault(_custom);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../../core/utils/array */ 14);
        var _ui = __webpack_require__( /*! ../../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function checkButtonInfo(buttonInfo) {
            var checkButtonType = function() {
                if (!buttonInfo || "object" !== _typeof(buttonInfo) || Array.isArray(buttonInfo)) {
                    throw _ui2.default.Error("E1053")
                }
            };
            var checkLocation = function() {
                var location = buttonInfo.location;
                if ("location" in buttonInfo && "after" !== location && "before" !== location) {
                    buttonInfo.location = "after"
                }
            };
            var checkNameIsDefined = function() {
                if (!("name" in buttonInfo)) {
                    throw _ui2.default.Error("E1054")
                }
            };
            var checkNameIsString = function() {
                var name = buttonInfo.name;
                if ("string" !== typeof name) {
                    throw _ui2.default.Error("E1055")
                }
            };
            checkButtonType();
            checkNameIsDefined();
            checkNameIsString();
            checkLocation()
        }

        function checkNamesUniqueness(existingNames, newName) {
            if (existingNames.indexOf(newName) !== -1) {
                throw _ui2.default.Error("E1055", newName)
            }
            existingNames.push(newName)
        }

        function isPredefinedButtonName(name, predefinedButtonsInfo) {
            return !!(0, _array.find)(predefinedButtonsInfo, function(info) {
                return info.name === name
            })
        }
        var TextEditorButtonCollection = function() {
            function TextEditorButtonCollection(editor, defaultButtonsInfo) {
                _classCallCheck(this, TextEditorButtonCollection);
                this.buttons = [];
                this.defaultButtonsInfo = defaultButtonsInfo;
                this.editor = editor
            }
            _createClass(TextEditorButtonCollection, [{
                key: "_compileButtonInfo",
                value: function(buttons) {
                    var _this = this;
                    var names = [];
                    return buttons.map(function(button) {
                        var isStringButton = "string" === typeof button;
                        if (!isStringButton) {
                            checkButtonInfo(button)
                        }
                        var isDefaultButton = isStringButton || isPredefinedButtonName(button.name, _this.defaultButtonsInfo);
                        if (isDefaultButton) {
                            var defaultButtonInfo = (0, _array.find)(_this.defaultButtonsInfo, function(_ref) {
                                var name = _ref.name;
                                return name === button || name === button.name
                            });
                            if (!defaultButtonInfo) {
                                throw _ui2.default.Error("E1056", _this.editor.NAME, button)
                            }
                            checkNamesUniqueness(names, button);
                            return defaultButtonInfo
                        } else {
                            var name = button.name;
                            checkNamesUniqueness(names, name);
                            return (0, _extend.extend)(button, {
                                Ctor: _custom2.default
                            })
                        }
                    })
                }
            }, {
                key: "_createButton",
                value: function(buttonsInfo) {
                    var Ctor = buttonsInfo.Ctor,
                        options = buttonsInfo.options,
                        name = buttonsInfo.name;
                    var button = new Ctor(name, this.editor, options);
                    this.buttons.push(button);
                    return button
                }
            }, {
                key: "_renderButtons",
                value: function(buttons, $container, targetLocation) {
                    var _this2 = this;
                    var $buttonsContainer = null;
                    var buttonsInfo = buttons ? this._compileButtonInfo(buttons) : this.defaultButtonsInfo;
                    var getButtonsContainer = function() {
                        $buttonsContainer = $buttonsContainer || (0, _renderer2.default)("<div>").addClass(TEXTEDITOR_BUTTONS_CONTAINER_CLASS);
                        "before" === targetLocation ? $container.prepend($buttonsContainer) : $container.append($buttonsContainer);
                        return $buttonsContainer
                    };
                    buttonsInfo.forEach(function(buttonsInfo) {
                        var _buttonsInfo$location = buttonsInfo.location,
                            location = void 0 === _buttonsInfo$location ? "after" : _buttonsInfo$location;
                        if (location === targetLocation) {
                            _this2._createButton(buttonsInfo).render(getButtonsContainer())
                        }
                    });
                    return $buttonsContainer
                }
            }, {
                key: "clean",
                value: function() {
                    this.buttons.forEach(function(button) {
                        return button.dispose()
                    });
                    this.buttons = []
                }
            }, {
                key: "getButton",
                value: function(buttonName) {
                    var button = (0, _array.find)(this.buttons, function(_ref2) {
                        var name = _ref2.name;
                        return name === buttonName
                    });
                    return button && button.instance
                }
            }, {
                key: "renderAfterButtons",
                value: function(buttons, $container) {
                    return this._renderButtons(buttons, $container, "after")
                }
            }, {
                key: "renderBeforeButtons",
                value: function(buttons, $container) {
                    return this._renderButtons(buttons, $container, "before")
                }
            }, {
                key: "updateButtons",
                value: function(names) {
                    this.buttons.forEach(function(button) {
                        if (!names || names.indexOf(button.name) !== -1) {
                            button.update()
                        }
                    })
                }
            }]);
            return TextEditorButtonCollection
        }();
        exports.default = TextEditorButtonCollection
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/texteditor_button_collection/custom.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _button = __webpack_require__( /*! ./button */ 194);
        var _button2 = _interopRequireDefault(_button);
        var _button3 = __webpack_require__( /*! ../../button */ 37);
        var _button4 = _interopRequireDefault(_button3);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _hover = __webpack_require__( /*! ../../../events/hover */ 156);
        var _hover2 = _interopRequireDefault(_hover);
        var _click = __webpack_require__( /*! ../../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var CUSTOM_BUTTON_HOVERED_CLASS = "dx-custom-button-hovered";
        var CustomButton = function(_TextEditorButton) {
            _inherits(CustomButton, _TextEditorButton);
            var _super = _createSuper(CustomButton);

            function CustomButton() {
                _classCallCheck(this, CustomButton);
                return _super.apply(this, arguments)
            }
            _createClass(CustomButton, [{
                key: "_attachEvents",
                value: function(instance, $element) {
                    var editor = this.editor;
                    _events_engine2.default.on($element, _hover2.default.start, function() {
                        editor.$element().addClass(CUSTOM_BUTTON_HOVERED_CLASS)
                    });
                    _events_engine2.default.on($element, _hover2.default.end, function() {
                        editor.$element().removeClass(CUSTOM_BUTTON_HOVERED_CLASS)
                    });
                    _events_engine2.default.on($element, _click2.default.name, function(e) {
                        e.stopPropagation()
                    })
                }
            }, {
                key: "_create",
                value: function() {
                    var editor = this.editor;
                    var $element = (0, _renderer2.default)("<div>");
                    this._addToContainer($element);
                    var instance = editor._createComponent($element, _button4.default, (0, _extend.extend)({}, this.options, {
                        disabled: this._isDisabled(),
                        integrationOptions: {
                            skipTemplates: ["content"]
                        }
                    }));
                    return {
                        $element: $element,
                        instance: instance
                    }
                }
            }, {
                key: "update",
                value: function() {
                    var isUpdated = _get(_getPrototypeOf(CustomButton.prototype), "update", this).call(this);
                    if (this.instance) {
                        this.instance.option("disabled", this._isDisabled())
                    }
                    return isUpdated
                }
            }, {
                key: "_isVisible",
                value: function() {
                    var editor = this.editor;
                    return editor.option("visible")
                }
            }, {
                key: "_isDisabled",
                value: function() {
                    var isDefinedByUser = void 0 !== this.options.disabled;
                    if (isDefinedByUser) {
                        return this.instance ? this.instance.option("disabled") : this.options.disabled
                    } else {
                        return this.editor.option("readOnly")
                    }
                }
            }]);
            return CustomButton
        }(_button2.default);
        exports.default = CustomButton
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.mask.strategy.default.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _uiText_editorMaskStrategy = __webpack_require__( /*! ./ui.text_editor.mask.strategy.base */ 312);
        var _uiText_editorMaskStrategy2 = _interopRequireDefault(_uiText_editorMaskStrategy);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var _promise2 = _interopRequireDefault(_promise);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var BACKSPACE_INPUT_TYPE = "deleteContentBackward";
        var EMPTY_CHAR = " ";
        var DefaultMaskStrategy = function(_BaseMaskStrategy) {
            _inherits(DefaultMaskStrategy, _BaseMaskStrategy);
            var _super = _createSuper(DefaultMaskStrategy);

            function DefaultMaskStrategy() {
                _classCallCheck(this, DefaultMaskStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(DefaultMaskStrategy, [{
                key: "_getStrategyName",
                value: function() {
                    return "default"
                }
            }, {
                key: "getHandleEventNames",
                value: function() {
                    return [].concat(_toConsumableArray(_get(_getPrototypeOf(DefaultMaskStrategy.prototype), "getHandleEventNames", this).call(this)), ["keyPress"])
                }
            }, {
                key: "_keyPressHandler",
                value: function(event) {
                    if (this._keyPressHandled) {
                        return
                    }
                    this._keyPressHandled = true;
                    if (this.editor._isControlKeyFired(event)) {
                        return
                    }
                    var editor = this.editor;
                    editor._maskKeyHandler(event, function() {
                        return editor._handleKey((0, _utils.getChar)(event))
                    })
                }
            }, {
                key: "_inputHandler",
                value: function(event) {
                    if (this._backspaceInputHandled(event.originalEvent && event.originalEvent.inputType)) {
                        this._handleBackspaceInput(event)
                    }
                    if (event.originalEvent) {
                        this._autoFillHandler(event)
                    }
                    if (this._keyPressHandled) {
                        return
                    }
                    this._keyPressHandled = true;
                    var inputValue = this.editorInput().val();
                    var caret = this.editorCaret();
                    if (!caret.end) {
                        return
                    }
                    caret.start = caret.end - 1;
                    var oldValue = inputValue.substring(0, caret.start) + inputValue.substring(caret.end);
                    var char = inputValue[caret.start];
                    var editor = this.editor;
                    this.editorInput().val(oldValue);
                    editor._caret({
                        start: caret.start,
                        end: caret.start
                    });
                    editor._maskKeyHandler(event, function() {
                        return editor._handleKey(char)
                    })
                }
            }, {
                key: "_backspaceHandler",
                value: function(event) {
                    var _this = this;
                    var editor = this.editor;
                    this._keyPressHandled = true;
                    var afterBackspaceHandler = function(needAdjustCaret, callBack) {
                        if (needAdjustCaret) {
                            editor._direction(_this.DIRECTION.FORWARD);
                            editor._adjustCaret()
                        }
                        var currentCaret = _this.editorCaret();
                        return new _promise2.default(function(resolve) {
                            clearTimeout(_this._backspaceHandlerTimeout);
                            _this._backspaceHandlerTimeout = setTimeout(function() {
                                callBack(currentCaret);
                                resolve()
                            })
                        })
                    };
                    editor._maskKeyHandler(event, function() {
                        if (editor._hasSelection()) {
                            return afterBackspaceHandler(true, function(currentCaret) {
                                editor._displayMask(currentCaret);
                                editor._maskRulesChain.reset()
                            })
                        }
                        if (editor._tryMoveCaretBackward()) {
                            return afterBackspaceHandler(false, function(currentCaret) {
                                _this.editorCaret(currentCaret)
                            })
                        }
                        editor._handleKey(EMPTY_CHAR, _this.DIRECTION.BACKWARD);
                        return afterBackspaceHandler(true, function(currentCaret) {
                            editor._displayMask(currentCaret);
                            editor._maskRulesChain.reset()
                        })
                    })
                }
            }, {
                key: "_backspaceInputHandled",
                value: function(inputType) {
                    return inputType === BACKSPACE_INPUT_TYPE && !this._keyPressHandled
                }
            }, {
                key: "_handleBackspaceInput",
                value: function(event) {
                    var _this$editorCaret = this.editorCaret(),
                        start = _this$editorCaret.start,
                        end = _this$editorCaret.end;
                    this.editorCaret({
                        start: start + 1,
                        end: end + 1
                    });
                    this._backspaceHandler(event)
                }
            }]);
            return DefaultMaskStrategy
        }(_uiText_editorMaskStrategy2.default);
        exports.default = DefaultMaskStrategy
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/text_box/ui.text_editor.mask.strategy.android.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _uiText_editorMaskStrategy = __webpack_require__( /*! ./ui.text_editor.mask.strategy.base */ 312);
        var _uiText_editorMaskStrategy2 = _interopRequireDefault(_uiText_editorMaskStrategy);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DELETE_INPUT_TYPE = "deleteContentBackward";
        var AndroidMaskStrategy = function(_BaseMaskStrategy) {
            _inherits(AndroidMaskStrategy, _BaseMaskStrategy);
            var _super = _createSuper(AndroidMaskStrategy);

            function AndroidMaskStrategy() {
                _classCallCheck(this, AndroidMaskStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(AndroidMaskStrategy, [{
                key: "_getStrategyName",
                value: function() {
                    return "android"
                }
            }, {
                key: "getHandleEventNames",
                value: function() {
                    return [].concat(_toConsumableArray(_get(_getPrototypeOf(AndroidMaskStrategy.prototype), "getHandleEventNames", this).call(this)), ["beforeInput"])
                }
            }, {
                key: "_beforeInputHandler",
                value: function() {
                    this._prevCaret = this.editorCaret()
                }
            }, {
                key: "_inputHandler",
                value: function(_ref) {
                    var originalEvent = _ref.originalEvent;
                    if (!originalEvent) {
                        return
                    }
                    var inputType = originalEvent.inputType,
                        data = originalEvent.data;
                    var currentCaret = this.editorCaret();
                    if (inputType === DELETE_INPUT_TYPE) {
                        var length = this._prevCaret.end - this._prevCaret.start || 1;
                        this.editor.setBackwardDirection();
                        this._updateEditorMask({
                            start: currentCaret.start,
                            length: length,
                            text: this._getEmptyString(length)
                        })
                    } else {
                        if (!currentCaret.end) {
                            return
                        }
                        this._autoFillHandler(originalEvent);
                        this.editorCaret(currentCaret);
                        var _length = this._prevCaret.end - this._prevCaret.start;
                        var newData = data + (_length ? this._getEmptyString(_length - data.length) : "");
                        this.editor.setForwardDirection();
                        var hasValidChars = this._updateEditorMask({
                            start: this._prevCaret.start,
                            length: _length || newData.length,
                            text: newData
                        });
                        if (!hasValidChars) {
                            this.editorCaret(this._prevCaret)
                        }
                    }
                }
            }, {
                key: "_getEmptyString",
                value: function(length) {
                    return Array(length + 1).join(" ")
                }
            }, {
                key: "_updateEditorMask",
                value: function(args) {
                    var textLength = args.text.length;
                    var updatedCharsCount = this.editor._handleChain(args);
                    if (this.editor.isForwardDirection()) {
                        var _this$editorCaret = this.editorCaret(),
                            start = _this$editorCaret.start,
                            end = _this$editorCaret.end;
                        var correction = updatedCharsCount - textLength;
                        if (start <= updatedCharsCount && updatedCharsCount > 1) {
                            this.editorCaret({
                                start: start + correction,
                                end: end + correction
                            })
                        }
                        this.editor.isForwardDirection() && this.editor._adjustCaret()
                    }
                    this.editor._displayMask();
                    return !!updatedCharsCount
                }
            }]);
            return AndroidMaskStrategy
        }(_uiText_editorMaskStrategy2.default);
        exports.default = AndroidMaskStrategy
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.search.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ListEdit = __webpack_require__( /*! ./ui.list.edit */ 313);
        var searchBoxMixin = __webpack_require__( /*! ../widget/ui.search_box_mixin */ 231);
        var ListSearch = ListEdit.inherit(searchBoxMixin).inherit({
            _addWidgetPrefix: function(className) {
                return "dx-list-" + className
            },
            _getCombinedFilter: function() {
                var filter;
                var storeLoadOptions;
                var dataSource = this._dataSource;
                if (dataSource) {
                    storeLoadOptions = {
                        filter: dataSource.filter()
                    };
                    dataSource._addSearchFilter(storeLoadOptions);
                    filter = storeLoadOptions.filter
                }
                return filter
            },
            _initDataSource: function() {
                var value = this.option("searchValue");
                var expr = this.option("searchExpr");
                var mode = this.option("searchMode");
                this.callBase();
                if (this._dataSource) {
                    value && value.length && this._dataSource.searchValue(value);
                    mode.length && this._dataSource.searchOperation(searchBoxMixin.getOperationBySearchMode(mode));
                    expr && this._dataSource.searchExpr(expr)
                }
            }
        });
        module.exports = ListSearch
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.strategy.grouped.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var queryByOptions = __webpack_require__( /*! ../../data/store_helper */ 86).queryByOptions;
        var query = __webpack_require__( /*! ../../data/query */ 45);
        var EditStrategy = __webpack_require__( /*! ../collection/ui.collection_widget.edit.strategy.plain */ 191);
        var LIST_ITEM_CLASS = "dx-list-item";
        var LIST_GROUP_CLASS = "dx-list-group";
        var SELECTION_SHIFT = 20;
        var SELECTION_MASK = 2303;
        var combineIndex = function(indices) {
            return (indices.group << SELECTION_SHIFT) + indices.item
        };
        var splitIndex = function(combinedIndex) {
            return {
                group: combinedIndex >> SELECTION_SHIFT,
                item: combinedIndex & SELECTION_MASK
            }
        };
        var GroupedEditStrategy = EditStrategy.inherit({
            _groupElements: function() {
                return this._collectionWidget._itemContainer().find("." + LIST_GROUP_CLASS)
            },
            _groupItemElements: function($group) {
                return $group.find("." + LIST_ITEM_CLASS)
            },
            getIndexByItemData: function(itemData) {
                var groups = this._collectionWidget.option("items");
                var index = false;
                if (!itemData) {
                    return false
                }
                if (itemData.items && itemData.items.length) {
                    itemData = itemData.items[0]
                }
                each(groups, function(groupIndex, group) {
                    if (!group.items) {
                        return false
                    }
                    each(group.items, function(itemIndex, item) {
                        if (item !== itemData) {
                            return true
                        }
                        index = {
                            group: groupIndex,
                            item: itemIndex
                        };
                        return false
                    });
                    if (index) {
                        return false
                    }
                });
                return index
            },
            getItemDataByIndex: function(index) {
                var items = this._collectionWidget.option("items");
                if (isNumeric(index)) {
                    return this.itemsGetter()[index]
                }
                return index && items[index.group] && items[index.group].items[index.item] || null
            },
            itemsGetter: function() {
                var resultItems = [];
                var items = this._collectionWidget.option("items");
                for (var i = 0; i < items.length; i++) {
                    if (items[i] && items[i].items) {
                        resultItems = resultItems.concat(items[i].items)
                    } else {
                        resultItems.push(items[i])
                    }
                }
                return resultItems
            },
            deleteItemAtIndex: function(index) {
                var indices = splitIndex(index);
                var itemGroup = this._collectionWidget.option("items")[indices.group].items;
                itemGroup.splice(indices.item, 1)
            },
            getKeysByItems: function(items) {
                var plainItems = [];
                var i;
                for (i = 0; i < items.length; i++) {
                    if (items[i] && items[i].items) {
                        plainItems = plainItems.concat(items[i].items)
                    } else {
                        plainItems.push(items[i])
                    }
                }
                var result = [];
                for (i = 0; i < plainItems.length; i++) {
                    result.push(this._collectionWidget.keyOf(plainItems[i]))
                }
                return result
            },
            getIndexByKey: function(key, items) {
                var groups = items || this._collectionWidget.option("items");
                var index = -1;
                var that = this;
                each(groups, function(groupIndex, group) {
                    if (!group.items) {
                        return
                    }
                    var keys = that.getKeysByItems(group.items);
                    each(keys, function(keyIndex, itemKey) {
                        if (that._equalKeys(itemKey, key)) {
                            index = {
                                group: groupIndex,
                                item: keyIndex
                            };
                            return false
                        }
                    });
                    if (index !== -1) {
                        return false
                    }
                });
                return index
            },
            _getGroups: function(items) {
                var dataSource = this._collectionWidget.getDataSource();
                var group = dataSource && dataSource.group();
                if (group) {
                    return queryByOptions(query(items), {
                        group: group
                    }).toArray()
                }
                return this._collectionWidget.option("items")
            },
            getItemsByKeys: function(keys, items) {
                var result = [];
                each(keys, function(_, key) {
                    var getItemMeta = function(groups) {
                        var index = this.getIndexByKey(key, groups);
                        var group = index && groups[index.group];
                        if (!group) {
                            return
                        }
                        return {
                            groupKey: group.key,
                            item: group.items[index.item]
                        }
                    }.bind(this);
                    var itemMeta = getItemMeta(this._getGroups(items));
                    if (!itemMeta) {
                        return
                    }
                    var groupKey = itemMeta.groupKey;
                    var item = itemMeta.item;
                    var selectedGroup;
                    each(result, function(_, item) {
                        if (item.key === groupKey) {
                            selectedGroup = item;
                            return false
                        }
                    });
                    if (!selectedGroup) {
                        selectedGroup = {
                            key: groupKey,
                            items: []
                        };
                        result.push(selectedGroup)
                    }
                    selectedGroup.items.push(item)
                }.bind(this));
                return result
            },
            moveItemAtIndexToIndex: function(movingIndex, destinationIndex) {
                var items = this._collectionWidget.option("items");
                var movingIndices = splitIndex(movingIndex);
                var destinationIndices = splitIndex(destinationIndex);
                var movingItemGroup = items[movingIndices.group].items;
                var destinationItemGroup = items[destinationIndices.group].items;
                var movedItemData = movingItemGroup[movingIndices.item];
                movingItemGroup.splice(movingIndices.item, 1);
                destinationItemGroup.splice(destinationIndices.item, 0, movedItemData)
            },
            _isItemIndex: function(index) {
                return index && isNumeric(index.group) && isNumeric(index.item)
            },
            _getNormalizedItemIndex: function(itemElement) {
                var $item = $(itemElement);
                var $group = $item.closest("." + LIST_GROUP_CLASS);
                if (!$group.length) {
                    return -1
                }
                return combineIndex({
                    group: this._groupElements().index($group),
                    item: this._groupItemElements($group).index($item)
                })
            },
            _normalizeItemIndex: function(index) {
                return combineIndex(index)
            },
            _denormalizeItemIndex: function(index) {
                return splitIndex(index)
            },
            _getItemByNormalizedIndex: function(index) {
                var indices = splitIndex(index);
                var $group = this._groupElements().eq(indices.group);
                return this._groupItemElements($group).eq(indices.item)
            },
            _itemsFromSameParent: function(firstIndex, secondIndex) {
                return splitIndex(firstIndex).group === splitIndex(secondIndex).group
            }
        });
        module.exports = GroupedEditStrategy
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.provider.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var decoratorRegistry = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106);
        __webpack_require__( /*! ./ui.list.edit.decorator.static */ 539);
        __webpack_require__( /*! ./ui.list.edit.decorator.switchable.button */ 540);
        __webpack_require__( /*! ./ui.list.edit.decorator.switchable.slide */ 541);
        __webpack_require__( /*! ./ui.list.edit.decorator.swipe */ 542);
        __webpack_require__( /*! ./ui.list.edit.decorator.context */ 543);
        __webpack_require__( /*! ./ui.list.edit.decorator.selection */ 548);
        __webpack_require__( /*! ./ui.list.edit.decorator.reorder */ 550);
        var editOptionsRegistry = [];
        var registerOption = function(enabledFunc, decoratorTypeFunc, decoratorSubTypeFunc) {
            editOptionsRegistry.push({
                enabled: enabledFunc,
                decoratorType: decoratorTypeFunc,
                decoratorSubType: decoratorSubTypeFunc
            })
        };
        registerOption(function() {
            return this.option("menuItems").length
        }, function() {
            return "menu"
        }, function() {
            return this.option("menuMode")
        });
        registerOption(function() {
            return !this.option("menuItems").length && this.option("allowItemDeleting")
        }, function() {
            var mode = this.option("itemDeleteMode");
            return "toggle" === mode || "slideButton" === mode || "swipe" === mode || "static" === mode ? "delete" : "menu"
        }, function() {
            var mode = this.option("itemDeleteMode");
            if ("slideItem" === mode) {
                mode = "slide"
            }
            if ("hold" === mode) {
                mode = "context"
            }
            return mode
        });
        registerOption(function() {
            return "none" !== this.option("selectionMode") && this.option("showSelectionControls")
        }, function() {
            return "selection"
        }, function() {
            return "default"
        });
        registerOption(function() {
            return this.option("itemDragging.allowReordering") || this.option("itemDragging.allowDropInsideItem") || this.option("itemDragging.group")
        }, function() {
            return "reorder"
        }, function() {
            return "default"
        });
        var LIST_ITEM_BEFORE_BAG_CLASS = "dx-list-item-before-bag";
        var LIST_ITEM_AFTER_BAG_CLASS = "dx-list-item-after-bag";
        var DECORATOR_BEFORE_BAG_CREATE_METHOD = "beforeBag";
        var DECORATOR_AFTER_BAG_CREATE_METHOD = "afterBag";
        var DECORATOR_MODIFY_ELEMENT_METHOD = "modifyElement";
        var DECORATOR_AFTER_RENDER_METHOD = "afterRender";
        var DECORATOR_GET_EXCLUDED_SELECTORS_METHOD = "getExcludedSelectors";
        var EditProvider = Class.inherit({
            ctor: function(list) {
                this._list = list;
                this._fetchRequiredDecorators()
            },
            dispose: function() {
                if (this._decorators && this._decorators.length) {
                    each(this._decorators, function(_, decorator) {
                        decorator.dispose()
                    })
                }
            },
            _fetchRequiredDecorators: function() {
                this._decorators = [];
                each(editOptionsRegistry, function(_, option) {
                    var optionEnabled = option.enabled.call(this._list);
                    if (optionEnabled) {
                        var decoratorType = option.decoratorType.call(this._list);
                        var decoratorSubType = option.decoratorSubType.call(this._list);
                        var decorator = this._createDecorator(decoratorType, decoratorSubType);
                        this._decorators.push(decorator)
                    }
                }.bind(this))
            },
            _createDecorator: function(type, subType) {
                var decoratorClass = this._findDecorator(type, subType);
                return new decoratorClass(this._list)
            },
            _findDecorator: function(type, subType) {
                var foundDecorator = decoratorRegistry.registry[type][subType];
                if (!foundDecorator) {
                    throw errors.Error("E1012", type, subType)
                }
                return foundDecorator
            },
            modifyItemElement: function(args) {
                var $itemElement = $(args.itemElement);
                var config = {
                    $itemElement: $itemElement
                };
                this._prependBeforeBags($itemElement, config);
                this._appendAfterBags($itemElement, config);
                this._applyDecorators(DECORATOR_MODIFY_ELEMENT_METHOD, config)
            },
            afterItemsRendered: function() {
                this._applyDecorators(DECORATOR_AFTER_RENDER_METHOD)
            },
            _prependBeforeBags: function($itemElement, config) {
                var $beforeBags = this._collectDecoratorsMarkup(DECORATOR_BEFORE_BAG_CREATE_METHOD, config, LIST_ITEM_BEFORE_BAG_CLASS);
                $itemElement.prepend($beforeBags)
            },
            _appendAfterBags: function($itemElement, config) {
                var $afterBags = this._collectDecoratorsMarkup(DECORATOR_AFTER_BAG_CREATE_METHOD, config, LIST_ITEM_AFTER_BAG_CLASS);
                $itemElement.append($afterBags)
            },
            _collectDecoratorsMarkup: function(method, config, containerClass) {
                var $collector = $("<div>");
                each(this._decorators, function() {
                    var $container = $("<div>").addClass(containerClass);
                    this[method](extend({
                        $container: $container
                    }, config));
                    if ($container.children().length) {
                        $collector.append($container)
                    }
                });
                return $collector.children()
            },
            _applyDecorators: function(method, config) {
                each(this._decorators, function() {
                    this[method](config)
                })
            },
            _handlerExists: function(name) {
                if (!this._decorators) {
                    return false
                }
                var decorators = this._decorators;
                var length = decorators.length;
                for (var i = 0; i < length; i++) {
                    if (decorators[i][name] !== noop) {
                        return true
                    }
                }
                return false
            },
            _eventHandler: function(name, $itemElement, e) {
                if (!this._decorators) {
                    return false
                }
                var response = false;
                var decorators = this._decorators;
                var length = decorators.length;
                for (var i = 0; i < length; i++) {
                    response = decorators[i][name]($itemElement, e);
                    if (response) {
                        break
                    }
                }
                return response
            },
            handleClick: function($itemElement, e) {
                return this._eventHandler("handleClick", $itemElement, e)
            },
            handleKeyboardEvents: function(currentFocusedIndex, moveFocusUp) {
                return this._eventHandler("handleKeyboardEvents", currentFocusedIndex, moveFocusUp)
            },
            handleEnterPressing: function() {
                return this._eventHandler("handleEnterPressing")
            },
            contextMenuHandlerExists: function() {
                return this._handlerExists("handleContextMenu")
            },
            handleContextMenu: function($itemElement, e) {
                return this._eventHandler("handleContextMenu", $itemElement, e)
            },
            getExcludedItemSelectors: function() {
                var excludedSelectors = [];
                this._applyDecorators(DECORATOR_GET_EXCLUDED_SELECTORS_METHOD, excludedSelectors);
                return excludedSelectors.join(",")
            }
        });
        module.exports = EditProvider
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.static.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Button = __webpack_require__( /*! ../button */ 37);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var STATIC_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-static-delete-button-container";
        var STATIC_DELETE_BUTTON_CLASS = "dx-list-static-delete-button";
        registerDecorator("delete", "static", EditDecorator.inherit({
            afterBag: function(config) {
                var $itemElement = config.$itemElement;
                var $container = config.$container;
                var $button = $("<div>").addClass(STATIC_DELETE_BUTTON_CLASS);
                this._list._createComponent($button, Button, {
                    icon: "remove",
                    onClick: function(args) {
                        args.event.stopPropagation();
                        this._deleteItem($itemElement)
                    }.bind(this),
                    integrationOptions: {}
                });
                $container.addClass(STATIC_DELETE_BUTTON_CONTAINER_CLASS).append($button)
            },
            _deleteItem: function($itemElement) {
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                this._list.deleteItem($itemElement)
            }
        }))
    },
    /*!**********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.switchable.button.js ***!
      \**********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var Button = __webpack_require__( /*! ../button */ 37);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var SwitchableEditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator.switchable */ 314);
        var SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-switchable-delete-button-container";
        var SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS = "dx-list-switchable-delete-button-wrapper";
        var SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS = "dx-list-switchable-delete-button-inner-wrapper";
        var SWITCHABLE_DELETE_BUTTON_CLASS = "dx-list-switchable-delete-button";
        var SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION = 200;
        var SwitchableButtonEditDecorator = SwitchableEditDecorator.inherit({
            _init: function() {
                this.callBase.apply(this, arguments);
                var $buttonContainer = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS);
                var $buttonWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS);
                var $buttonInnerWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS);
                var $button = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_CLASS);
                this._list._createComponent($button, Button, {
                    text: messageLocalization.format("dxListEditDecorator-delete"),
                    type: "danger",
                    onClick: function(e) {
                        this._deleteItem();
                        e.event.stopPropagation()
                    }.bind(this),
                    integrationOptions: {}
                });
                $buttonContainer.append($buttonWrapper);
                $buttonWrapper.append($buttonInnerWrapper);
                $buttonInnerWrapper.append($button);
                this._$buttonContainer = $buttonContainer
            },
            _enablePositioning: function($itemElement) {
                this.callBase.apply(this, arguments);
                fx.stop(this._$buttonContainer, true);
                this._$buttonContainer.appendTo($itemElement)
            },
            _disablePositioning: function() {
                this.callBase.apply(this, arguments);
                this._$buttonContainer.detach()
            },
            _animatePrepareDeleteReady: function() {
                var rtl = this._isRtlEnabled();
                var listWidth = this._list.$element().width();
                var buttonWidth = this._buttonWidth();
                var fromValue = rtl ? listWidth : -buttonWidth;
                var toValue = rtl ? listWidth - buttonWidth : 0;
                return fx.animate(this._$buttonContainer, {
                    type: "custom",
                    duration: SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION,
                    from: {
                        right: fromValue
                    },
                    to: {
                        right: toValue
                    }
                })
            },
            _animateForgetDeleteReady: function() {
                var rtl = this._isRtlEnabled();
                var listWidth = this._list.$element().width();
                var buttonWidth = this._buttonWidth();
                var fromValue = rtl ? listWidth - buttonWidth : 0;
                var toValue = rtl ? listWidth : -buttonWidth;
                return fx.animate(this._$buttonContainer, {
                    type: "custom",
                    duration: SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION,
                    from: {
                        right: fromValue
                    },
                    to: {
                        right: toValue
                    }
                })
            },
            _buttonWidth: function() {
                if (!this._buttonContainerWidth) {
                    this._buttonContainerWidth = this._$buttonContainer.outerWidth()
                }
                return this._buttonContainerWidth
            },
            dispose: function() {
                if (this._$buttonContainer) {
                    this._$buttonContainer.remove()
                }
                this.callBase.apply(this, arguments)
            }
        });
        var TOGGLE_DELETE_SWITCH_CONTAINER_CLASS = "dx-list-toggle-delete-switch-container";
        var TOGGLE_DELETE_SWITCH_CLASS = "dx-list-toggle-delete-switch";
        registerDecorator("delete", "toggle", SwitchableButtonEditDecorator.inherit({
            beforeBag: function(config) {
                var $itemElement = config.$itemElement;
                var $container = config.$container;
                var $toggle = $("<div>").addClass(TOGGLE_DELETE_SWITCH_CLASS);
                this._list._createComponent($toggle, Button, {
                    icon: "toggle-delete",
                    onClick: function(e) {
                        fx.stop(this._$buttonContainer, false);
                        this._toggleDeleteReady($itemElement);
                        e.event.stopPropagation()
                    }.bind(this),
                    integrationOptions: {}
                });
                $container.addClass(TOGGLE_DELETE_SWITCH_CONTAINER_CLASS);
                $container.append($toggle)
            }
        }));
        registerDecorator("delete", "slideButton", SwitchableButtonEditDecorator.inherit({
            _shouldHandleSwipe: true,
            _swipeEndHandler: function($itemElement, args) {
                if (0 !== args.targetOffset) {
                    fx.stop(this._$buttonContainer, false);
                    this._toggleDeleteReady($itemElement)
                }
                return true
            }
        }));
        module.exports = SwitchableButtonEditDecorator
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.switchable.slide.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 134);
        var EditDecoratorMenuHelperMixin = __webpack_require__( /*! ./ui.list.edit.decorator_menu_helper */ 315);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var SwitchableEditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator.switchable */ 314);
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var themes = __webpack_require__( /*! ../themes */ 32);
        var ActionSheet = __webpack_require__( /*! ../action_sheet */ 224);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator";
        var CLICK_EVENT_NAME = eventUtils.addNamespace(clickEvent.name, LIST_EDIT_DECORATOR);
        var ACTIVE_EVENT_NAME = eventUtils.addNamespace(feedbackEvents.active, LIST_EDIT_DECORATOR);
        var SLIDE_MENU_CLASS = "dx-list-slide-menu";
        var SLIDE_MENU_WRAPPER_CLASS = "dx-list-slide-menu-wrapper";
        var SLIDE_MENU_CONTENT_CLASS = "dx-list-slide-menu-content";
        var SLIDE_MENU_BUTTONS_CONTAINER_CLASS = "dx-list-slide-menu-buttons-container";
        var SLIDE_MENU_BUTTONS_CLASS = "dx-list-slide-menu-buttons";
        var SLIDE_MENU_BUTTON_CLASS = "dx-list-slide-menu-button";
        var SLIDE_MENU_BUTTON_MENU_CLASS = "dx-list-slide-menu-button-menu";
        var SLIDE_MENU_BUTTON_DELETE_CLASS = "dx-list-slide-menu-button-delete";
        var SLIDE_MENU_ANIMATION_DURATION = 400;
        var SLIDE_MENU_ANIMATION_EASING = "cubic-bezier(0.075, 0.82, 0.165, 1)";
        registerDecorator("menu", "slide", SwitchableEditDecorator.inherit({
            _shouldHandleSwipe: true,
            _init: function() {
                this.callBase.apply(this, arguments);
                this._$buttonsContainer = $("<div>").addClass(SLIDE_MENU_BUTTONS_CONTAINER_CLASS);
                eventsEngine.on(this._$buttonsContainer, ACTIVE_EVENT_NAME, noop);
                this._$buttons = $("<div>").addClass(SLIDE_MENU_BUTTONS_CLASS).appendTo(this._$buttonsContainer);
                this._renderMenu();
                this._renderDeleteButton()
            },
            _renderMenu: function() {
                if (!this._menuEnabled()) {
                    return
                }
                var menuItems = this._menuItems();
                if (1 === menuItems.length) {
                    var menuItem = menuItems[0];
                    this._renderMenuButton(menuItem.text, function(e) {
                        e.stopPropagation();
                        this._fireAction(menuItem)
                    }.bind(this))
                } else {
                    var $menu = $("<div>").addClass(SLIDE_MENU_CLASS);
                    this._menu = this._list._createComponent($menu, ActionSheet, {
                        showTitle: false,
                        items: menuItems,
                        onItemClick: function(args) {
                            this._fireAction(args.itemData)
                        }.bind(this),
                        integrationOptions: {}
                    });
                    $menu.appendTo(this._list.$element());
                    var $menuButton = this._renderMenuButton(messageLocalization.format("dxListEditDecorator-more"), function(e) {
                        e.stopPropagation();
                        this._menu.show()
                    }.bind(this));
                    this._menu.option("target", $menuButton)
                }
            },
            _renderMenuButton: function(text, action) {
                var $menuButton = $("<div>").addClass(SLIDE_MENU_BUTTON_CLASS).addClass(SLIDE_MENU_BUTTON_MENU_CLASS).text(text);
                this._$buttons.append($menuButton);
                eventsEngine.on($menuButton, CLICK_EVENT_NAME, action);
                return $menuButton
            },
            _renderDeleteButton: function() {
                if (!this._deleteEnabled()) {
                    return
                }
                var $deleteButton = $("<div>").addClass(SLIDE_MENU_BUTTON_CLASS).addClass(SLIDE_MENU_BUTTON_DELETE_CLASS).text(themes.isMaterial() ? "" : messageLocalization.format("dxListEditDecorator-delete"));
                eventsEngine.on($deleteButton, CLICK_EVENT_NAME, function(e) {
                    e.stopPropagation();
                    this._deleteItem()
                }.bind(this));
                this._$buttons.append($deleteButton)
            },
            _fireAction: function(menuItem) {
                this._fireMenuAction($(this._cachedNode), menuItem.action);
                this._cancelDeleteReadyItem()
            },
            modifyElement: function(config) {
                this.callBase.apply(this, arguments);
                var $itemElement = config.$itemElement;
                $itemElement.addClass(SLIDE_MENU_WRAPPER_CLASS);
                var $slideMenuContent = $("<div>").addClass(SLIDE_MENU_CONTENT_CLASS);
                $itemElement.wrapInner($slideMenuContent)
            },
            _getDeleteButtonContainer: function() {
                return this._$buttonsContainer
            },
            handleClick: function(_, e) {
                if ($(e.target).closest("." + SLIDE_MENU_CONTENT_CLASS).length) {
                    return this.callBase.apply(this, arguments)
                }
                return false
            },
            _swipeStartHandler: function($itemElement) {
                this._enablePositioning($itemElement);
                this._cacheItemData($itemElement);
                this._setPositions(this._getPositions(0))
            },
            _swipeUpdateHandler: function($itemElement, args) {
                var rtl = this._isRtlEnabled();
                var signCorrection = rtl ? -1 : 1;
                var isItemReadyToDelete = this._isReadyToDelete($itemElement);
                var moveJustStarted = this._getCurrentPositions().content === this._getStartPositions().content;
                if (moveJustStarted && !isItemReadyToDelete && args.offset * signCorrection > 0) {
                    args.cancel = true;
                    return
                }
                var offset = this._cachedItemWidth * args.offset;
                var startOffset = isItemReadyToDelete ? -this._cachedButtonWidth * signCorrection : 0;
                var correctedOffset = (offset + startOffset) * signCorrection;
                var percent = correctedOffset < 0 ? Math.abs((offset + startOffset) / this._cachedButtonWidth) : 0;
                this._setPositions(this._getPositions(percent));
                return true
            },
            _getStartPositions: function() {
                var rtl = this._isRtlEnabled();
                var signCorrection = rtl ? -1 : 1;
                return {
                    content: 0,
                    buttonsContainer: rtl ? -this._cachedButtonWidth : this._cachedItemWidth,
                    buttons: -this._cachedButtonWidth * signCorrection
                }
            },
            _getPositions: function(percent) {
                var rtl = this._isRtlEnabled();
                var signCorrection = rtl ? -1 : 1;
                var startPositions = this._getStartPositions();
                return {
                    content: startPositions.content - percent * this._cachedButtonWidth * signCorrection,
                    buttonsContainer: startPositions.buttonsContainer - Math.min(percent, 1) * this._cachedButtonWidth * signCorrection,
                    buttons: startPositions.buttons + Math.min(percent, 1) * this._cachedButtonWidth * signCorrection
                }
            },
            _getCurrentPositions: function() {
                return {
                    content: translator.locate(this._$cachedContent).left,
                    buttonsContainer: translator.locate(this._$buttonsContainer).left,
                    buttons: translator.locate(this._$buttons).left
                }
            },
            _setPositions: function(positions) {
                translator.move(this._$cachedContent, {
                    left: positions.content
                });
                translator.move(this._$buttonsContainer, {
                    left: positions.buttonsContainer
                });
                translator.move(this._$buttons, {
                    left: positions.buttons
                })
            },
            _cacheItemData: function($itemElement) {
                if ($itemElement[0] === this._cachedNode) {
                    return
                }
                this._$cachedContent = $itemElement.find("." + SLIDE_MENU_CONTENT_CLASS);
                this._cachedItemWidth = $itemElement.outerWidth();
                this._cachedButtonWidth = this._cachedButtonWidth || this._$buttons.outerWidth();
                this._$buttonsContainer.width(this._cachedButtonWidth);
                if (this._$cachedContent.length) {
                    this._cachedNode = $itemElement[0]
                }
            },
            _minButtonContainerLeftOffset: function() {
                return this._cachedItemWidth - this._cachedButtonWidth
            },
            _swipeEndHandler: function($itemElement, args) {
                this._cacheItemData($itemElement);
                var signCorrection = this._isRtlEnabled() ? 1 : -1;
                var offset = this._cachedItemWidth * args.offset;
                var endedAtReadyToDelete = !this._isReadyToDelete($itemElement) && offset * signCorrection > .2 * this._cachedButtonWidth;
                var readyToDelete = args.targetOffset === signCorrection && endedAtReadyToDelete;
                this._toggleDeleteReady($itemElement, readyToDelete);
                return true
            },
            _enablePositioning: function($itemElement) {
                fx.stop(this._$cachedContent, true);
                this.callBase.apply(this, arguments);
                this._$buttonsContainer.appendTo($itemElement)
            },
            _disablePositioning: function() {
                this.callBase.apply(this, arguments);
                this._$buttonsContainer.detach()
            },
            _animatePrepareDeleteReady: function() {
                return this._animateToPositions(this._getPositions(1))
            },
            _animateForgetDeleteReady: function($itemElement) {
                this._cacheItemData($itemElement);
                return this._animateToPositions(this._getPositions(0))
            },
            _animateToPositions: function(positions) {
                var that = this;
                var currentPosition = this._getCurrentPositions();
                var durationTimePart = Math.min(Math.abs(currentPosition.content - positions.content) / this._cachedButtonWidth, 1);
                return fx.animate(this._$cachedContent, {
                    from: currentPosition,
                    to: positions,
                    easing: SLIDE_MENU_ANIMATION_EASING,
                    duration: SLIDE_MENU_ANIMATION_DURATION * durationTimePart,
                    strategy: "frame",
                    draw: function(positions) {
                        that._setPositions(positions)
                    }
                })
            },
            dispose: function() {
                if (this._menu) {
                    this._menu.$element().remove()
                }
                if (this._$buttonsContainer) {
                    this._$buttonsContainer.remove()
                }
                this.callBase.apply(this, arguments)
            }
        }).include(EditDecoratorMenuHelperMixin))
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.swipe.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        registerDecorator("delete", "swipe", EditDecorator.inherit({
            _shouldHandleSwipe: true,
            _renderItemPosition: function($itemElement, offset, animate) {
                var deferred = new Deferred;
                var itemOffset = offset * this._itemElementWidth;
                if (animate) {
                    fx.animate($itemElement, {
                        to: {
                            left: itemOffset
                        },
                        type: "slide",
                        complete: function() {
                            deferred.resolve($itemElement, offset)
                        }
                    })
                } else {
                    translator.move($itemElement, {
                        left: itemOffset
                    });
                    deferred.resolve()
                }
                return deferred.promise()
            },
            _swipeStartHandler: function($itemElement) {
                this._itemElementWidth = $itemElement.width();
                return true
            },
            _swipeUpdateHandler: function($itemElement, args) {
                this._renderItemPosition($itemElement, args.offset);
                return true
            },
            _swipeEndHandler: function($itemElement, args) {
                var offset = args.targetOffset;
                this._renderItemPosition($itemElement, offset, true).done(function($itemElement, offset) {
                    if (Math.abs(offset)) {
                        this._list.deleteItem($itemElement).fail(function() {
                            this._renderItemPosition($itemElement, 0, true)
                        }.bind(this))
                    }
                }.bind(this));
                return true
            }
        }))
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.context.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var EditDecoratorMenuHelperMixin = __webpack_require__( /*! ./ui.list.edit.decorator_menu_helper */ 315);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var Overlay = __webpack_require__( /*! ../overlay */ 58);
        var ListBase = __webpack_require__( /*! ./ui.list.base */ 226);
        var CONTEXTMENU_CLASS = "dx-list-context-menu";
        var CONTEXTMENU_MENUCONTENT_CLASS = "dx-list-context-menucontent";
        registerDecorator("menu", "context", EditDecorator.inherit({
            _init: function() {
                var $menu = $("<div>").addClass(CONTEXTMENU_CLASS);
                this._list.$element().append($menu);
                this._menu = this._renderOverlay($menu)
            },
            _renderOverlay: function($element) {
                return this._list._createComponent($element, Overlay, {
                    shading: false,
                    deferRendering: true,
                    closeOnTargetScroll: true,
                    closeOnOutsideClick: function(e) {
                        return !$(e.target).closest("." + CONTEXTMENU_CLASS).length
                    },
                    animation: {
                        show: {
                            type: "slide",
                            duration: 300,
                            from: {
                                height: 0,
                                opacity: 1
                            },
                            to: {
                                height: function() {
                                    return this._$menuList.outerHeight()
                                }.bind(this),
                                opacity: 1
                            }
                        },
                        hide: {
                            type: "slide",
                            duration: 0,
                            from: {
                                opacity: 1
                            },
                            to: {
                                opacity: 0
                            }
                        }
                    },
                    height: function() {
                        return this._$menuList ? this._$menuList.outerHeight() : 0
                    }.bind(this),
                    width: function() {
                        return this._list.$element().outerWidth()
                    }.bind(this),
                    onContentReady: this._renderMenuContent.bind(this)
                })
            },
            _renderMenuContent: function(e) {
                var $overlayContent = e.component.$content();
                var items = this._menuItems().slice();
                if (this._deleteEnabled()) {
                    items.push({
                        text: messageLocalization.format("dxListEditDecorator-delete"),
                        action: this._deleteItem.bind(this)
                    })
                }
                this._$menuList = $("<div>");
                this._list._createComponent(this._$menuList, ListBase, {
                    items: items,
                    onItemClick: this._menuItemClickHandler.bind(this),
                    height: "auto",
                    integrationOptions: {}
                });
                $overlayContent.addClass(CONTEXTMENU_MENUCONTENT_CLASS);
                $overlayContent.append(this._$menuList)
            },
            _menuItemClickHandler: function(args) {
                this._menu.hide();
                this._fireMenuAction(this._$itemWithMenu, args.itemData.action)
            },
            _deleteItem: function() {
                this._list.deleteItem(this._$itemWithMenu)
            },
            handleContextMenu: function($itemElement) {
                this._$itemWithMenu = $itemElement;
                this._menu.option({
                    position: {
                        my: "top",
                        at: "bottom",
                        of: $itemElement,
                        collision: "flip"
                    }
                });
                this._menu.show();
                return true
            },
            dispose: function() {
                if (this._menu) {
                    this._menu.$element().remove()
                }
                this.callBase.apply(this, arguments)
            }
        }).include(EditDecoratorMenuHelperMixin))
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/list/item.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var CollectionWidgetItem = __webpack_require__( /*! ../collection/item */ 135);
        var LIST_ITEM_BADGE_CONTAINER_CLASS = "dx-list-item-badge-container";
        var LIST_ITEM_BADGE_CLASS = "dx-list-item-badge";
        var BADGE_CLASS = "dx-badge";
        var LIST_ITEM_CHEVRON_CONTAINER_CLASS = "dx-list-item-chevron-container";
        var LIST_ITEM_CHEVRON_CLASS = "dx-list-item-chevron";
        var ListItem = CollectionWidgetItem.inherit({
            _renderWatchers: function() {
                this.callBase();
                this._startWatcher("badge", this._renderBadge.bind(this));
                this._startWatcher("showChevron", this._renderShowChevron.bind(this))
            },
            _renderBadge: function(badge) {
                this._$element.children("." + LIST_ITEM_BADGE_CONTAINER_CLASS).remove();
                if (!badge) {
                    return
                }
                var $badge = $("<div>").addClass(LIST_ITEM_BADGE_CONTAINER_CLASS).append($("<div>").addClass(LIST_ITEM_BADGE_CLASS).addClass(BADGE_CLASS).text(badge));
                var $chevron = this._$element.children("." + LIST_ITEM_CHEVRON_CONTAINER_CLASS).first();
                $chevron.length > 0 ? $badge.insertBefore($chevron) : $badge.appendTo(this._$element)
            },
            _renderShowChevron: function(showChevron) {
                this._$element.children("." + LIST_ITEM_CHEVRON_CONTAINER_CLASS).remove();
                if (!showChevron) {
                    return
                }
                var $chevronContainer = $("<div>").addClass(LIST_ITEM_CHEVRON_CONTAINER_CLASS);
                var $chevron = $("<div>").addClass(LIST_ITEM_CHEVRON_CLASS);
                $chevronContainer.append($chevron).appendTo(this._$element)
            }
        });
        module.exports = ListItem
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scroll_view.native.pull_down.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 228);
        var LoadIndicator = __webpack_require__( /*! ../load_indicator */ 72);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-loading";
        var SCROLLVIEW_PULLDOWN_READY_CLASS = "dx-scrollview-pull-down-ready";
        var SCROLLVIEW_PULLDOWN_IMAGE_CLASS = "dx-scrollview-pull-down-image";
        var SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator";
        var SCROLLVIEW_PULLDOWN_TEXT_CLASS = "dx-scrollview-pull-down-text";
        var SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS = "dx-scrollview-pull-down-text-visible";
        var STATE_RELEASED = 0;
        var STATE_READY = 1;
        var STATE_REFRESHING = 2;
        var STATE_LOADING = 3;
        var PULLDOWN_RELEASE_TIME = 400;
        var PullDownNativeScrollViewStrategy = NativeStrategy.inherit({
            _init: function(scrollView) {
                this.callBase(scrollView);
                this._$topPocket = scrollView._$topPocket;
                this._$pullDown = scrollView._$pullDown;
                this._$bottomPocket = scrollView._$bottomPocket;
                this._$refreshingText = scrollView._$refreshingText;
                this._$scrollViewContent = $(scrollView.content());
                this._initCallbacks()
            },
            _initCallbacks: function() {
                this.pullDownCallbacks = Callbacks();
                this.releaseCallbacks = Callbacks();
                this.reachBottomCallbacks = Callbacks()
            },
            render: function() {
                this.callBase();
                this._renderPullDown();
                this._releaseState()
            },
            _renderPullDown: function() {
                var $image = $("<div>").addClass(SCROLLVIEW_PULLDOWN_IMAGE_CLASS);
                var $loadContainer = $("<div>").addClass(SCROLLVIEW_PULLDOWN_INDICATOR_CLASS);
                var $loadIndicator = new LoadIndicator($("<div>")).$element();
                var $text = this._$pullDownText = $("<div>").addClass(SCROLLVIEW_PULLDOWN_TEXT_CLASS);
                this._$pullingDownText = $("<div>").text(this.option("pullingDownText")).appendTo($text);
                this._$pulledDownText = $("<div>").text(this.option("pulledDownText")).appendTo($text);
                this._$refreshingText = $("<div>").text(this.option("refreshingText")).appendTo($text);
                this._$pullDown.empty().append($image).append($loadContainer.append($loadIndicator)).append($text)
            },
            _releaseState: function() {
                this._state = STATE_RELEASED;
                this._refreshPullDownText()
            },
            _pushBackFromBoundary: function() {
                if (!this._isLocked() && !this._component.isEmpty()) {
                    this.callBase()
                }
            },
            _refreshPullDownText: function() {
                var that = this;
                var pullDownTextItems = [{
                    element: this._$pullingDownText,
                    visibleState: STATE_RELEASED
                }, {
                    element: this._$pulledDownText,
                    visibleState: STATE_READY
                }, {
                    element: this._$refreshingText,
                    visibleState: STATE_REFRESHING
                }];
                each(pullDownTextItems, function(_, item) {
                    var action = that._state === item.visibleState ? "addClass" : "removeClass";
                    item.element[action](SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS)
                })
            },
            update: function() {
                this.callBase();
                this._setTopPocketOffset()
            },
            _updateDimensions: function() {
                this.callBase();
                this._topPocketSize = this._$topPocket.height();
                this._bottomPocketSize = this._$bottomPocket.height();
                if (browser.msie) {
                    this._scrollOffset = Math.round(100 * (this._$container.height() - this._$content.height())) / 100
                } else {
                    this._scrollOffset = this._$container.height() - this._$content.height()
                }
            },
            _allowedDirections: function() {
                var allowedDirections = this.callBase();
                allowedDirections.vertical = allowedDirections.vertical || this._pullDownEnabled;
                return allowedDirections
            },
            _setTopPocketOffset: function() {
                this._$topPocket.css({
                    top: -this._topPocketSize
                })
            },
            handleEnd: function() {
                this.callBase();
                this._complete()
            },
            handleStop: function() {
                this.callBase();
                this._complete()
            },
            _complete: function() {
                if (this._state === STATE_READY) {
                    this._setPullDownOffset(this._topPocketSize);
                    clearTimeout(this._pullDownRefreshTimeout);
                    this._pullDownRefreshTimeout = setTimeout(function() {
                        this._pullDownRefreshing()
                    }.bind(this), 400)
                }
            },
            _setPullDownOffset: function(offset) {
                translator.move(this._$topPocket, {
                    top: offset
                });
                translator.move(this._$scrollViewContent, {
                    top: offset
                })
            },
            handleScroll: function(e) {
                this.callBase(e);
                if (this._state === STATE_REFRESHING) {
                    return
                }
                var currentLocation = this.location().top;
                var scrollDelta = (this._location || 0) - currentLocation;
                this._location = currentLocation;
                if (this._isPullDown()) {
                    this._pullDownReady()
                } else {
                    if (scrollDelta > 0 && this._isReachBottom()) {
                        this._reachBottom()
                    } else {
                        this._stateReleased()
                    }
                }
            },
            _isPullDown: function() {
                return this._pullDownEnabled && this._location >= this._topPocketSize
            },
            _isReachBottom: function() {
                return this._reachBottomEnabled && this._location - (this._scrollOffset + this._bottomPocketSize) <= .5
            },
            _reachBottom: function() {
                if (this._state === STATE_LOADING) {
                    return
                }
                this._state = STATE_LOADING;
                this.reachBottomCallbacks.fire()
            },
            _pullDownReady: function() {
                if (this._state === STATE_READY) {
                    return
                }
                this._state = STATE_READY;
                this._$pullDown.addClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this._refreshPullDownText()
            },
            _stateReleased: function() {
                if (this._state === STATE_RELEASED) {
                    return
                }
                this._$pullDown.removeClass(SCROLLVIEW_PULLDOWN_REFRESHING_CLASS).removeClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this._releaseState()
            },
            _pullDownRefreshing: function() {
                if (this._state === STATE_REFRESHING) {
                    return
                }
                this._state = STATE_REFRESHING;
                this._$pullDown.addClass(SCROLLVIEW_PULLDOWN_REFRESHING_CLASS).removeClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this._refreshPullDownText();
                this.pullDownCallbacks.fire()
            },
            pullDownEnable: function(enabled) {
                if (enabled) {
                    this._updateDimensions();
                    this._setTopPocketOffset()
                }
                this._pullDownEnabled = enabled
            },
            reachBottomEnable: function(enabled) {
                this._reachBottomEnabled = enabled
            },
            pendingRelease: function() {
                this._state = STATE_READY
            },
            release: function() {
                var deferred = new Deferred;
                this._updateDimensions();
                clearTimeout(this._releaseTimeout);
                if (this._state === STATE_LOADING) {
                    this._state = STATE_RELEASED
                }
                this._releaseTimeout = setTimeout(function() {
                    this._setPullDownOffset(0);
                    this._stateReleased();
                    this.releaseCallbacks.fire();
                    this._updateAction();
                    deferred.resolve()
                }.bind(this), PULLDOWN_RELEASE_TIME);
                return deferred.promise()
            },
            dispose: function() {
                clearTimeout(this._pullDownRefreshTimeout);
                clearTimeout(this._releaseTimeout);
                this.callBase()
            }
        });
        module.exports = PullDownNativeScrollViewStrategy
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scroll_view.native.swipe_down.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 228);
        var LoadIndicator = __webpack_require__( /*! ../load_indicator */ 72);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var SCROLLVIEW_PULLDOWN_DOWN_LOADING_CLASS = "dx-scrollview-pull-down-loading";
        var SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator";
        var SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-refreshing";
        var PULLDOWN_ICON_CLASS = "dx-icon-pulldown";
        var STATE_RELEASED = 0;
        var STATE_READY = 1;
        var STATE_REFRESHING = 2;
        var STATE_TOUCHED = 4;
        var STATE_PULLED = 5;
        var SwipeDownNativeScrollViewStrategy = NativeStrategy.inherit({
            _init: function(scrollView) {
                this.callBase(scrollView);
                this._$topPocket = scrollView._$topPocket;
                this._$bottomPocket = scrollView._$bottomPocket;
                this._$pullDown = scrollView._$pullDown;
                this._$scrollViewContent = scrollView.content();
                this._initCallbacks();
                this._location = 0
            },
            _initCallbacks: function() {
                this.pullDownCallbacks = Callbacks();
                this.releaseCallbacks = Callbacks();
                this.reachBottomCallbacks = Callbacks()
            },
            render: function() {
                this.callBase();
                this._renderPullDown();
                this._releaseState()
            },
            _renderPullDown: function() {
                var $loadContainer = $("<div>").addClass(SCROLLVIEW_PULLDOWN_INDICATOR_CLASS);
                var $loadIndicator = new LoadIndicator($("<div>")).$element();
                this._$icon = $("<div>").addClass(PULLDOWN_ICON_CLASS);
                this._$pullDown.empty().append(this._$icon).append($loadContainer.append($loadIndicator))
            },
            _releaseState: function() {
                this._state = STATE_RELEASED;
                this._releasePullDown();
                this._updateDimensions()
            },
            _releasePullDown: function() {
                this._$pullDown.css({
                    opacity: 0
                })
            },
            _updateDimensions: function() {
                this.callBase();
                this._topPocketSize = this._$topPocket.height();
                this._bottomPocketSize = this._$bottomPocket.height();
                this._scrollOffset = this._$container.height() - this._$content.height()
            },
            _allowedDirections: function() {
                var allowedDirections = this.callBase();
                allowedDirections.vertical = allowedDirections.vertical || this._pullDownEnabled;
                return allowedDirections
            },
            handleInit: function(e) {
                this.callBase(e);
                if (this._state === STATE_RELEASED && 0 === this._location) {
                    this._startClientY = eventUtils.eventData(e.originalEvent).y;
                    this._state = STATE_TOUCHED
                }
            },
            handleMove: function(e) {
                this.callBase(e);
                this._deltaY = eventUtils.eventData(e.originalEvent).y - this._startClientY;
                if (this._state === STATE_TOUCHED) {
                    if (this._pullDownEnabled && this._deltaY > 0) {
                        this._state = STATE_PULLED
                    } else {
                        this._complete()
                    }
                }
                if (this._state === STATE_PULLED) {
                    e.preventDefault();
                    this._movePullDown()
                }
            },
            _movePullDown: function() {
                var pullDownHeight = this._getPullDownHeight();
                var top = Math.min(3 * pullDownHeight, this._deltaY + this._getPullDownStartPosition());
                var angle = 180 * top / pullDownHeight / 3;
                this._$pullDown.css({
                    opacity: 1
                }).toggleClass(SCROLLVIEW_PULLDOWN_REFRESHING_CLASS, top < pullDownHeight);
                translator.move(this._$pullDown, {
                    top: top
                });
                this._$icon.css({
                    transform: "rotate(" + angle + "deg)"
                })
            },
            _isPullDown: function() {
                return this._pullDownEnabled && this._state === STATE_PULLED && this._deltaY >= this._getPullDownHeight() - this._getPullDownStartPosition()
            },
            _getPullDownHeight: function() {
                return Math.round(.05 * this._$element.outerHeight())
            },
            _getPullDownStartPosition: function() {
                return -Math.round(1.5 * this._$pullDown.outerHeight())
            },
            handleEnd: function() {
                if (this._isPullDown()) {
                    this._pullDownRefreshing()
                }
                this._complete()
            },
            handleStop: function() {
                this._complete()
            },
            _complete: function() {
                if (this._state === STATE_TOUCHED || this._state === STATE_PULLED) {
                    this._releaseState()
                }
            },
            handleScroll: function(e) {
                this.callBase(e);
                if (this._state === STATE_REFRESHING) {
                    return
                }
                var currentLocation = this.location().top;
                var scrollDelta = this._location - currentLocation;
                this._location = currentLocation;
                if (scrollDelta > 0 && this._isReachBottom()) {
                    this._reachBottom()
                } else {
                    this._stateReleased()
                }
            },
            _isReachBottom: function() {
                return this._reachBottomEnabled && this._location <= this._scrollOffset + this._bottomPocketSize
            },
            _reachBottom: function() {
                this.reachBottomCallbacks.fire()
            },
            _stateReleased: function() {
                if (this._state === STATE_RELEASED) {
                    return
                }
                this._$pullDown.removeClass(SCROLLVIEW_PULLDOWN_DOWN_LOADING_CLASS);
                this._releaseState()
            },
            _pullDownRefreshing: function() {
                this._state = STATE_REFRESHING;
                this._pullDownRefreshHandler()
            },
            _pullDownRefreshHandler: function() {
                this._refreshPullDown();
                this.pullDownCallbacks.fire()
            },
            _refreshPullDown: function() {
                this._$pullDown.addClass(SCROLLVIEW_PULLDOWN_DOWN_LOADING_CLASS);
                translator.move(this._$pullDown, {
                    top: this._getPullDownHeight()
                })
            },
            pullDownEnable: function(enabled) {
                this._$topPocket.toggle(enabled);
                this._pullDownEnabled = enabled
            },
            reachBottomEnable: function(enabled) {
                this._reachBottomEnabled = enabled
            },
            pendingRelease: function() {
                this._state = STATE_READY
            },
            release: function() {
                var deferred = new Deferred;
                this._updateDimensions();
                clearTimeout(this._releaseTimeout);
                this._releaseTimeout = setTimeout(function() {
                    this._stateReleased();
                    this.releaseCallbacks.fire();
                    this._updateAction();
                    deferred.resolve()
                }.bind(this), 800);
                return deferred.promise()
            },
            dispose: function() {
                clearTimeout(this._pullDownRefreshTimeout);
                clearTimeout(this._releaseTimeout);
                this.callBase()
            }
        });
        module.exports = SwipeDownNativeScrollViewStrategy
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scroll_view.simulated.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var math = Math;
        var simulatedStrategy = __webpack_require__( /*! ./ui.scrollable.simulated */ 317);
        var LoadIndicator = __webpack_require__( /*! ../load_indicator */ 72);
        var SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-loading";
        var SCROLLVIEW_PULLDOWN_READY_CLASS = "dx-scrollview-pull-down-ready";
        var SCROLLVIEW_PULLDOWN_IMAGE_CLASS = "dx-scrollview-pull-down-image";
        var SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator";
        var SCROLLVIEW_PULLDOWN_TEXT_CLASS = "dx-scrollview-pull-down-text";
        var SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS = "dx-scrollview-pull-down-text-visible";
        var STATE_RELEASED = 0;
        var STATE_READY = 1;
        var STATE_REFRESHING = 2;
        var STATE_LOADING = 3;
        var ScrollViewScroller = simulatedStrategy.Scroller.inherit({
            ctor: function() {
                this._topPocketSize = 0;
                this.callBase.apply(this, arguments);
                this._initCallbacks();
                this._releaseState()
            },
            _releaseState: function() {
                this._state = STATE_RELEASED;
                this._refreshPullDownText()
            },
            _refreshPullDownText: function() {
                var that = this;
                var pullDownTextItems = [{
                    element: this._$pullingDownText,
                    visibleState: STATE_RELEASED
                }, {
                    element: this._$pulledDownText,
                    visibleState: STATE_READY
                }, {
                    element: this._$refreshingText,
                    visibleState: STATE_REFRESHING
                }];
                each(pullDownTextItems, function(_, item) {
                    var action = that._state === item.visibleState ? "addClass" : "removeClass";
                    item.element[action](SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS)
                })
            },
            _initCallbacks: function() {
                this.pullDownCallbacks = Callbacks();
                this.releaseCallbacks = Callbacks();
                this.reachBottomCallbacks = Callbacks()
            },
            _updateBounds: function() {
                var considerPockets = "horizontal" !== this._direction;
                this._topPocketSize = considerPockets ? Math.round(this._$topPocket[this._dimension]()) : 0;
                this._bottomPocketSize = considerPockets ? Math.round(this._$bottomPocket[this._dimension]()) : 0;
                this.callBase();
                this._bottomBound = this._minOffset + this._bottomPocketSize
            },
            _updateScrollbar: function() {
                this._scrollbar.option({
                    containerSize: this._containerSize(),
                    contentSize: this._contentSize() - this._topPocketSize - this._bottomPocketSize,
                    scaleRatio: this._getScaleRatio()
                })
            },
            _moveContent: function() {
                this.callBase();
                if (this._isPullDown()) {
                    this._pullDownReady()
                } else {
                    if (this._isReachBottom()) {
                        this._reachBottomReady()
                    } else {
                        if (this._state !== STATE_RELEASED) {
                            this._stateReleased()
                        }
                    }
                }
            },
            _moveScrollbar: function() {
                this._scrollbar.moveTo(this._topPocketSize + this._location)
            },
            _isPullDown: function() {
                return this._pullDownEnabled && this._location >= 0
            },
            _isReachBottom: function() {
                return this._reachBottomEnabled && this._location - this._bottomBound <= .5
            },
            _scrollComplete: function() {
                if (this._inBounds() && this._state === STATE_READY) {
                    this._pullDownRefreshing()
                } else {
                    if (this._inBounds() && this._state === STATE_LOADING) {
                        this._reachBottomLoading()
                    } else {
                        this.callBase()
                    }
                }
            },
            _reachBottomReady: function() {
                if (this._state === STATE_LOADING) {
                    return
                }
                this._state = STATE_LOADING;
                this._minOffset = this._getMinOffset()
            },
            _getMaxOffset: function() {
                return -this._topPocketSize
            },
            _getMinOffset: function() {
                return math.min(this.callBase(), -this._topPocketSize)
            },
            _reachBottomLoading: function() {
                this.reachBottomCallbacks.fire()
            },
            _pullDownReady: function() {
                if (this._state === STATE_READY) {
                    return
                }
                this._state = STATE_READY;
                this._maxOffset = 0;
                this._$pullDown.addClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this._refreshPullDownText()
            },
            _stateReleased: function() {
                if (this._state === STATE_RELEASED) {
                    return
                }
                this._releaseState();
                this._updateBounds();
                this._$pullDown.removeClass(SCROLLVIEW_PULLDOWN_REFRESHING_CLASS).removeClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this.releaseCallbacks.fire()
            },
            _pullDownRefreshing: function() {
                if (this._state === STATE_REFRESHING) {
                    return
                }
                this._state = STATE_REFRESHING;
                this._$pullDown.addClass(SCROLLVIEW_PULLDOWN_REFRESHING_CLASS).removeClass(SCROLLVIEW_PULLDOWN_READY_CLASS);
                this._refreshPullDownText();
                this.pullDownCallbacks.fire()
            },
            _releaseHandler: function() {
                if (this._state === STATE_RELEASED) {
                    this._moveToBounds()
                }
                this._update();
                if (this._releaseTask) {
                    this._releaseTask.abort()
                }
                this._releaseTask = commonUtils.executeAsync(this._release.bind(this));
                return this._releaseTask.promise
            },
            _release: function() {
                this._stateReleased();
                this._scrollComplete()
            },
            _reachBottomEnablingHandler: function(enabled) {
                if (this._reachBottomEnabled === enabled) {
                    return
                }
                this._reachBottomEnabled = enabled;
                this._updateBounds()
            },
            _pullDownEnablingHandler: function(enabled) {
                if (this._pullDownEnabled === enabled) {
                    return
                }
                this._pullDownEnabled = enabled;
                this._considerTopPocketChange();
                this._updateHandler()
            },
            _considerTopPocketChange: function() {
                this._location -= this._$topPocket.height() || -this._topPocketSize;
                this._maxOffset = 0;
                this._move()
            },
            _pendingReleaseHandler: function() {
                this._state = STATE_READY
            },
            dispose: function() {
                if (this._releaseTask) {
                    this._releaseTask.abort()
                }
                this.callBase()
            }
        });
        var SimulatedScrollViewStrategy = simulatedStrategy.SimulatedStrategy.inherit({
            _init: function(scrollView) {
                this.callBase(scrollView);
                this._$pullDown = scrollView._$pullDown;
                this._$topPocket = scrollView._$topPocket;
                this._$bottomPocket = scrollView._$bottomPocket;
                this._initCallbacks()
            },
            _initCallbacks: function() {
                this.pullDownCallbacks = Callbacks();
                this.releaseCallbacks = Callbacks();
                this.reachBottomCallbacks = Callbacks()
            },
            render: function() {
                this._renderPullDown();
                this.callBase()
            },
            _renderPullDown: function() {
                var $image = $("<div>").addClass(SCROLLVIEW_PULLDOWN_IMAGE_CLASS);
                var $loadContainer = $("<div>").addClass(SCROLLVIEW_PULLDOWN_INDICATOR_CLASS);
                var $loadIndicator = new LoadIndicator($("<div>")).$element();
                var $text = this._$pullDownText = $("<div>").addClass(SCROLLVIEW_PULLDOWN_TEXT_CLASS);
                this._$pullingDownText = $("<div>").text(this.option("pullingDownText")).appendTo($text);
                this._$pulledDownText = $("<div>").text(this.option("pulledDownText")).appendTo($text);
                this._$refreshingText = $("<div>").text(this.option("refreshingText")).appendTo($text);
                this._$pullDown.empty().append($image).append($loadContainer.append($loadIndicator)).append($text)
            },
            pullDownEnable: function(enabled) {
                this._eventHandler("pullDownEnabling", enabled)
            },
            reachBottomEnable: function(enabled) {
                this._eventHandler("reachBottomEnabling", enabled)
            },
            _createScroller: function(direction) {
                var that = this;
                var scroller = that._scrollers[direction] = new ScrollViewScroller(that._scrollerOptions(direction));
                scroller.pullDownCallbacks.add(function() {
                    that.pullDownCallbacks.fire()
                });
                scroller.releaseCallbacks.add(function() {
                    that.releaseCallbacks.fire()
                });
                scroller.reachBottomCallbacks.add(function() {
                    that.reachBottomCallbacks.fire()
                })
            },
            _scrollerOptions: function(direction) {
                return extend(this.callBase(direction), {
                    $topPocket: this._$topPocket,
                    $bottomPocket: this._$bottomPocket,
                    $pullDown: this._$pullDown,
                    $pullDownText: this._$pullDownText,
                    $pullingDownText: this._$pullingDownText,
                    $pulledDownText: this._$pulledDownText,
                    $refreshingText: this._$refreshingText
                })
            },
            pendingRelease: function() {
                this._eventHandler("pendingRelease")
            },
            release: function() {
                return this._eventHandler("release").done(this._updateAction)
            },
            location: function location() {
                var location = this.callBase();
                location.top += this._$topPocket.height();
                return location
            },
            dispose: function() {
                each(this._scrollers, function() {
                    this.dispose()
                });
                this.callBase()
            }
        });
        module.exports = SimulatedScrollViewStrategy
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.selection.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var CheckBox = __webpack_require__( /*! ../check_box */ 120);
        var RadioButton = __webpack_require__( /*! ../radio_group/radio_button */ 549);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106).register;
        var EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var SELECT_DECORATOR_ENABLED_CLASS = "dx-list-select-decorator-enabled";
        var SELECT_DECORATOR_SELECT_ALL_CLASS = "dx-list-select-all";
        var SELECT_DECORATOR_SELECT_ALL_CHECKBOX_CLASS = "dx-list-select-all-checkbox";
        var SELECT_DECORATOR_SELECT_ALL_LABEL_CLASS = "dx-list-select-all-label";
        var SELECT_CHECKBOX_CONTAINER_CLASS = "dx-list-select-checkbox-container";
        var SELECT_CHECKBOX_CLASS = "dx-list-select-checkbox";
        var SELECT_RADIO_BUTTON_CONTAINER_CLASS = "dx-list-select-radiobutton-container";
        var SELECT_RADIO_BUTTON_CLASS = "dx-list-select-radiobutton";
        var FOCUSED_STATE_CLASS = "dx-state-focused";
        var CLICK_EVENT_NAME = eventUtils.addNamespace(clickEvent.name, "dxListEditDecorator");
        registerDecorator("selection", "default", EditDecorator.inherit({
            _init: function() {
                this.callBase.apply(this, arguments);
                var selectionMode = this._list.option("selectionMode");
                this._singleStrategy = "single" === selectionMode;
                this._containerClass = this._singleStrategy ? SELECT_RADIO_BUTTON_CONTAINER_CLASS : SELECT_CHECKBOX_CONTAINER_CLASS;
                this._controlClass = this._singleStrategy ? SELECT_RADIO_BUTTON_CLASS : SELECT_CHECKBOX_CLASS;
                this._controlWidget = this._singleStrategy ? RadioButton : CheckBox;
                this._list.$element().addClass(SELECT_DECORATOR_ENABLED_CLASS)
            },
            beforeBag: function(config) {
                var $itemElement = config.$itemElement;
                var $container = config.$container;
                var $control = $("<div>").addClass(this._controlClass);
                new this._controlWidget($control, extend(this._commonOptions(), {
                    value: this._isSelected($itemElement),
                    focusStateEnabled: false,
                    hoverStateEnabled: false,
                    onValueChanged: function(e) {
                        this._processCheckedState($itemElement, e.value);
                        e.event && e.event.stopPropagation()
                    }.bind(this)
                }));
                $container.addClass(this._containerClass);
                $container.append($control)
            },
            modifyElement: function(config) {
                this.callBase.apply(this, arguments);
                var $itemElement = config.$itemElement;
                var control = this._controlWidget.getInstance($itemElement.find("." + this._controlClass));
                eventsEngine.on($itemElement, "stateChanged", function(e, state) {
                    control.option("value", state)
                }.bind(this))
            },
            _updateSelectAllState: function() {
                if (!this._$selectAll) {
                    return
                }
                this._selectAllCheckBox.option("value", this._list.isSelectAll())
            },
            afterRender: function() {
                if ("all" !== this._list.option("selectionMode")) {
                    return
                }
                if (!this._$selectAll) {
                    this._renderSelectAll()
                } else {
                    this._updateSelectAllState()
                }
            },
            handleKeyboardEvents: function(currentFocusedIndex, moveFocusUp) {
                var moveFocusDown = !moveFocusUp;
                var list = this._list;
                var $selectAll = this._$selectAll;
                var lastItemIndex = list._getLastItemIndex();
                var isFocusOutOfList = moveFocusUp && 0 === currentFocusedIndex || moveFocusDown && currentFocusedIndex === lastItemIndex;
                var hasSelectAllItem = !!$selectAll;
                if (hasSelectAllItem && isFocusOutOfList) {
                    list.option("focusedElement", $selectAll);
                    list.scrollToItem(list.option("focusedElement"));
                    return true
                }
                return false
            },
            handleEnterPressing: function() {
                if (this._$selectAll && this._$selectAll.hasClass(FOCUSED_STATE_CLASS)) {
                    this._selectAllCheckBox.option("value", !this._selectAllCheckBox.option("value"));
                    return true
                }
            },
            _renderSelectAll: function() {
                var $selectAll = this._$selectAll = $("<div>").addClass(SELECT_DECORATOR_SELECT_ALL_CLASS);
                var list = this._list;
                var downArrowHandler = list._supportedKeys().downArrow.bind(list);
                this._selectAllCheckBox = list._createComponent($("<div>").addClass(SELECT_DECORATOR_SELECT_ALL_CHECKBOX_CLASS).appendTo($selectAll), CheckBox, {
                    focusStateEnabled: false,
                    hoverStateEnabled: false
                });
                this._selectAllCheckBox.registerKeyHandler("downArrow", downArrowHandler);
                $("<div>").addClass(SELECT_DECORATOR_SELECT_ALL_LABEL_CLASS).text(this._list.option("selectAllText")).appendTo($selectAll);
                this._list.itemsContainer().prepend($selectAll);
                this._updateSelectAllState();
                this._attachSelectAllHandler()
            },
            _attachSelectAllHandler: function() {
                this._selectAllCheckBox.option("onValueChanged", this._selectAllHandler.bind(this));
                eventsEngine.off(this._$selectAll, CLICK_EVENT_NAME);
                eventsEngine.on(this._$selectAll, CLICK_EVENT_NAME, this._selectAllClickHandler.bind(this))
            },
            _selectAllHandler: function(e) {
                e.event && e.event.stopPropagation();
                var isSelectedAll = this._selectAllCheckBox.option("value");
                var result = this._list._createActionByOption("onSelectAllValueChanged")({
                    value: isSelectedAll
                });
                if (false === result) {
                    return
                }
                if (true === isSelectedAll) {
                    this._selectAllItems()
                } else {
                    if (false === isSelectedAll) {
                        this._unselectAllItems()
                    }
                }
            },
            _checkSelectAllCapability: function() {
                var list = this._list;
                var dataSource = list.getDataSource();
                if ("allPages" === list.option("selectAllMode") && list.option("grouped") && (!dataSource || !dataSource.group())) {
                    errors.log("W1010");
                    return false
                }
                return true
            },
            _selectAllItems: function() {
                if (!this._checkSelectAllCapability()) {
                    return
                }
                this._list._selection.selectAll("page" === this._list.option("selectAllMode"))
            },
            _unselectAllItems: function() {
                if (!this._checkSelectAllCapability()) {
                    return
                }
                this._list._selection.deselectAll("page" === this._list.option("selectAllMode"))
            },
            _selectAllClickHandler: function() {
                this._selectAllCheckBox.option("value", !this._selectAllCheckBox.option("value"))
            },
            _isSelected: function($itemElement) {
                return this._list.isItemSelected($itemElement)
            },
            _processCheckedState: function($itemElement, checked) {
                if (checked) {
                    this._list.selectItem($itemElement)
                } else {
                    this._list.unselectItem($itemElement)
                }
            },
            dispose: function() {
                this._disposeSelectAll();
                this._list.$element().removeClass(SELECT_DECORATOR_ENABLED_CLASS);
                this.callBase.apply(this, arguments)
            },
            _disposeSelectAll: function() {
                if (this._$selectAll) {
                    this._$selectAll.remove();
                    this._$selectAll = null
                }
            }
        }))
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/radio_group/radio_button.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var Editor = __webpack_require__( /*! ../editor/editor */ 48);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var RADIO_BUTTON_CLASS = "dx-radiobutton";
        var RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon";
        var RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot";
        var RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked";
        var RADIO_BUTTON_ICON_CHECKED_CLASS = "dx-radiobutton-icon-checked";
        var RadioButton = Editor.inherit({
            _supportedKeys: function() {
                var click = function(e) {
                    e.preventDefault();
                    this._clickAction({
                        event: e
                    })
                };
                return extend(this.callBase(), {
                    space: click
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    value: false,
                    useInkRipple: false
                })
            },
            _canValueBeChangedByClick: function() {
                return true
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(RADIO_BUTTON_CLASS)
            },
            _initMarkup: function() {
                this.callBase();
                this._renderIcon();
                this.option("useInkRipple") && this._renderInkRipple();
                this._renderCheckedState(this.option("value"));
                this._renderClick();
                this.setAria("role", "radio")
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render({
                    waveSizeCoefficient: 3.3,
                    useHoldAnimation: false,
                    wavesNumber: 2,
                    isCentered: true
                })
            },
            _renderInkWave: function(element, dxEvent, doRender, waveIndex) {
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: element,
                    event: dxEvent,
                    wave: waveIndex
                };
                if (doRender) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _updateFocusState: function(e, value) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$icon, e, value, 0)
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                this._renderInkWave(this._$icon, e, value, 1)
            },
            _renderIcon: function() {
                this._$icon = $("<div>").addClass(RADIO_BUTTON_ICON_CLASS);
                $("<div>").addClass(RADIO_BUTTON_ICON_DOT_CLASS).appendTo(this._$icon);
                this.$element().append(this._$icon)
            },
            _renderCheckedState: function(checked) {
                this.$element().toggleClass(RADIO_BUTTON_CHECKED_CLASS, checked).find("." + RADIO_BUTTON_ICON_CLASS).toggleClass(RADIO_BUTTON_ICON_CHECKED_CLASS, checked);
                this.setAria("checked", checked)
            },
            _renderClick: function() {
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                this._clickAction = this._createAction(function(args) {
                    this._clickHandler(args.event)
                }.bind(this));
                eventsEngine.off(this.$element(), eventName);
                eventsEngine.on(this.$element(), eventName, function(e) {
                    this._clickAction({
                        event: e
                    })
                }.bind(this))
            },
            _clickHandler: function(e) {
                this._saveValueChangeEvent(e);
                this.option("value", true)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "value":
                        this._renderCheckedState(args.value);
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxRadioButton", RadioButton);
        module.exports = RadioButton
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/list/ui.list.edit.decorator.reorder.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _uiListEdit = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 106);
        var _uiListEdit2 = __webpack_require__( /*! ./ui.list.edit.decorator */ 143);
        var _uiListEdit3 = _interopRequireDefault(_uiListEdit2);
        var _sortable = __webpack_require__( /*! ../sortable */ 230);
        var _sortable2 = _interopRequireDefault(_sortable);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var REORDER_HANDLE_CONTAINER_CLASS = "dx-list-reorder-handle-container";
        var REORDER_HANDLE_CLASS = "dx-list-reorder-handle";
        var REORDERING_ITEM_GHOST_CLASS = "dx-list-item-ghost-reordering";
        var STATE_HOVER_CLASS = "dx-state-hover";
        (0, _uiListEdit.register)("reorder", "default", _uiListEdit3.default.inherit({
            _init: function() {
                var list = this._list;
                this._groupedEnabled = this._list.option("grouped");
                this._lockedDrag = false;
                var filter = this._groupedEnabled ? "> .dx-list-group > .dx-list-group-body > .dx-list-item" : "> .dx-list-item";
                this._sortable = list._createComponent(list._scrollView.content(), _sortable2.default, (0, _extend.extend)({
                    component: list,
                    contentTemplate: null,
                    allowReordering: false,
                    filter: filter,
                    container: list.$element(),
                    dragDirection: list.option("itemDragging.group") ? "both" : "vertical",
                    handle: ".".concat(REORDER_HANDLE_CLASS),
                    dragTemplate: this._dragTemplate,
                    onDragStart: this._dragStartHandler.bind(this),
                    onDragChange: this._dragChangeHandler.bind(this),
                    onReorder: this._reorderHandler.bind(this)
                }, list.option("itemDragging")))
            },
            _dragTemplate: function(e) {
                return (0, _renderer2.default)(e.itemElement).clone().width((0, _renderer2.default)(e.itemElement).width()).addClass(REORDERING_ITEM_GHOST_CLASS).addClass(STATE_HOVER_CLASS)
            },
            _dragStartHandler: function(e) {
                if (this._lockedDrag) {
                    e.cancel = true;
                    return
                }
            },
            _dragChangeHandler: function(e) {
                if (this._groupedEnabled && !this._sameParent(e.fromIndex, e.toIndex)) {
                    e.cancel = true;
                    return
                }
            },
            _sameParent: function(fromIndex, toIndex) {
                var $dragging = this._list.getItemElementByFlatIndex(fromIndex);
                var $over = this._list.getItemElementByFlatIndex(toIndex);
                return $over.parent().get(0) === $dragging.parent().get(0)
            },
            _reorderHandler: function(e) {
                var $targetElement = this._list.getItemElementByFlatIndex(e.toIndex);
                this._list.reorderItem((0, _renderer2.default)(e.itemElement), $targetElement)
            },
            afterBag: function(config) {
                var _this = this;
                var $handle = (0, _renderer2.default)("<div>").addClass(REORDER_HANDLE_CLASS);
                _events_engine2.default.on($handle, "dxpointerdown", function(e) {
                    _this._lockedDrag = !(0, _utils.isMouseEvent)(e)
                });
                _events_engine2.default.on($handle, "dxhold", {
                    timeout: 30
                }, function(e) {
                    e.cancel = true;
                    _this._lockedDrag = false
                });
                config.$container.addClass(REORDER_HANDLE_CONTAINER_CLASS).append($handle)
            }
        }))
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/calendar/ui.calendar.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _math = __webpack_require__( /*! ../../core/utils/math */ 31);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _swipeable = __webpack_require__( /*! ../../events/gesture/swipeable */ 158);
        var _swipeable2 = _interopRequireDefault(_swipeable);
        var _uiCalendar = __webpack_require__( /*! ./ui.calendar.navigator */ 552);
        var _uiCalendar2 = _interopRequireDefault(_uiCalendar);
        var _uiCalendar3 = __webpack_require__( /*! ./ui.calendar.views */ 553);
        var _uiCalendar4 = _interopRequireDefault(_uiCalendar3);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _date_serialization2 = _interopRequireDefault(_date_serialization);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _function_template = __webpack_require__( /*! ../../core/templates/function_template */ 113);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var CALENDAR_CLASS = "dx-calendar";
        var CALENDAR_BODY_CLASS = "dx-calendar-body";
        var CALENDAR_CELL_CLASS = "dx-calendar-cell";
        var CALENDAR_FOOTER_CLASS = "dx-calendar-footer";
        var CALENDAR_TODAY_BUTTON_CLASS = "dx-calendar-today-button";
        var CALENDAR_HAS_FOOTER_CLASS = "dx-calendar-with-footer";
        var CALENDAR_VIEWS_WRAPPER_CLASS = "dx-calendar-views-wrapper";
        var CALENDAR_VIEW_CLASS = "dx-calendar-view";
        var FOCUSED_STATE_CLASS = "dx-state-focused";
        var ANIMATION_DURATION_SHOW_VIEW = 250;
        var POP_ANIMATION_FROM = .6;
        var POP_ANIMATION_TO = 1;
        var CALENDAR_INPUT_STANDARD_PATTERN = "yyyy-MM-dd";
        var CALENDAR_DATE_VALUE_KEY = "dxDateValueKey";
        var LEVEL_COMPARE_MAP = {
            month: 3,
            year: 2,
            decade: 1,
            century: 0
        };
        var ZOOM_LEVEL = {
            MONTH: "month",
            YEAR: "year",
            DECADE: "decade",
            CENTURY: "century"
        };
        var Calendar = _editor2.default.inherit({
            _activeStateUnit: "." + CALENDAR_CELL_CLASS,
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    currentDate: new Date,
                    value: null,
                    dateSerializationFormat: void 0,
                    min: new Date(1e3, 0),
                    max: new Date(3e3, 0),
                    firstDayOfWeek: void 0,
                    zoomLevel: ZOOM_LEVEL.MONTH,
                    maxZoomLevel: ZOOM_LEVEL.MONTH,
                    minZoomLevel: ZOOM_LEVEL.CENTURY,
                    showTodayButton: false,
                    cellTemplate: "cell",
                    disabledDates: null,
                    onCellClick: null,
                    onContouredChanged: null,
                    hasFocus: function(element) {
                        return element.hasClass(FOCUSED_STATE_CLASS)
                    }
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _supportedKeys: function() {
                return (0, _extend.extend)(this.callBase(), {
                    rightArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._waitRenderView(1)
                        } else {
                            this._moveCurrentDateByOffset(1 * this._getRtlCorrection())
                        }
                    },
                    leftArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._waitRenderView(-1)
                        } else {
                            this._moveCurrentDateByOffset(-1 * this._getRtlCorrection())
                        }
                    },
                    upArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._navigateUp()
                        } else {
                            if (_fx2.default.isAnimating(this._view.$element())) {
                                return
                            }
                            this._moveCurrentDateByOffset(-1 * this._view.option("colCount"))
                        }
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._navigateDown()
                        } else {
                            if (_fx2.default.isAnimating(this._view.$element())) {
                                return
                            }
                            this._moveCurrentDateByOffset(1 * this._view.option("colCount"))
                        }
                    },
                    home: function(e) {
                        e.preventDefault();
                        var zoomLevel = this.option("zoomLevel");
                        var currentDate = this.option("currentDate");
                        var min = this._dateOption("min");
                        if (this._view.isDateDisabled(currentDate)) {
                            return
                        }
                        var date = _date2.default.sameView(zoomLevel, currentDate, min) ? min : _date2.default.getViewFirstCellDate(zoomLevel, currentDate);
                        this._moveToClosestAvailableDate(date)
                    },
                    end: function(e) {
                        e.preventDefault();
                        var zoomLevel = this.option("zoomLevel");
                        var currentDate = this.option("currentDate");
                        var max = this._dateOption("max");
                        if (this._view.isDateDisabled(currentDate)) {
                            return
                        }
                        var date = _date2.default.sameView(zoomLevel, currentDate, max) ? max : _date2.default.getViewLastCellDate(zoomLevel, currentDate);
                        this._moveToClosestAvailableDate(date)
                    },
                    pageUp: function(e) {
                        e.preventDefault();
                        this._waitRenderView(-1 * this._getRtlCorrection())
                    },
                    pageDown: function(e) {
                        e.preventDefault();
                        this._waitRenderView(1 * this._getRtlCorrection())
                    },
                    tab: _common.noop,
                    enter: function(e) {
                        if (!this._isMaxZoomLevel()) {
                            this._navigateDown()
                        } else {
                            if (!this._view.isDateDisabled(this.option("currentDate"))) {
                                var value = this._updateTimeComponent(this.option("currentDate"));
                                this._dateValue(value, e)
                            }
                        }
                    }
                })
            },
            _getSerializationFormat: function(optionName) {
                var value = this.option(optionName || "value");
                if (this.option("dateSerializationFormat")) {
                    return this.option("dateSerializationFormat")
                }
                if (_type2.default.isNumeric(value)) {
                    return "number"
                }
                if (!_type2.default.isString(value)) {
                    return
                }
                return _date_serialization2.default.getDateSerializationFormat(value)
            },
            _convertToDate: function(value, optionName) {
                return _date_serialization2.default.deserializeDate(value)
            },
            _dateValue: function(value, dxEvent) {
                if (dxEvent) {
                    this._saveValueChangeEvent(dxEvent)
                }
                this._dateOption("value", value)
            },
            _dateOption: function(optionName, optionValue) {
                if (1 === arguments.length) {
                    return this._convertToDate(this.option(optionName), optionName)
                }
                var serializationFormat = this._getSerializationFormat(optionName);
                this.option(optionName, _date_serialization2.default.serializeDate(optionValue, serializationFormat))
            },
            _shiftDate: function(zoomLevel, date, offset, reverse) {
                switch (zoomLevel) {
                    case ZOOM_LEVEL.MONTH:
                        date.setDate(date.getDate() + offset * reverse);
                        break;
                    case ZOOM_LEVEL.YEAR:
                        date.setMonth(date.getMonth() + offset * reverse);
                        break;
                    case ZOOM_LEVEL.DECADE:
                        date.setFullYear(date.getFullYear() + offset * reverse);
                        break;
                    case ZOOM_LEVEL.CENTURY:
                        date.setFullYear(date.getFullYear() + 10 * offset * reverse)
                }
            },
            _moveCurrentDateByOffset: function(offset) {
                var baseDate = this.option("currentDate");
                var currentDate = new Date(baseDate);
                var zoomLevel = this.option("zoomLevel");
                this._shiftDate(zoomLevel, currentDate, offset, 1);
                var maxDate = this._getMaxDate();
                var minDate = this._getMinDate();
                var isDateForwardInNeighborView = this._areDatesInNeighborView(zoomLevel, currentDate, baseDate);
                var isDateForwardInRange = (0, _math.inRange)(currentDate, minDate, maxDate) && isDateForwardInNeighborView;
                var dateForward = new Date(currentDate);
                while (isDateForwardInRange) {
                    if (isDateForwardInRange && !this._view.isDateDisabled(dateForward)) {
                        currentDate = dateForward;
                        break
                    }
                    this._shiftDate(zoomLevel, dateForward, offset, 1);
                    isDateForwardInNeighborView = this._areDatesInNeighborView(zoomLevel, dateForward, baseDate);
                    isDateForwardInRange = (0, _math.inRange)(dateForward, minDate, maxDate) && isDateForwardInNeighborView
                }
                if (this._view.isDateDisabled(baseDate) || this._view.isDateDisabled(currentDate)) {
                    this._waitRenderView(offset > 0 ? 1 : -1)
                } else {
                    this.option("currentDate", currentDate)
                }
            },
            _areDatesInSameView: function(zoomLevel, date1, date2) {
                switch (zoomLevel) {
                    case ZOOM_LEVEL.MONTH:
                        return date1.getMonth() === date2.getMonth();
                    case ZOOM_LEVEL.YEAR:
                        return date1.getYear() === date2.getYear();
                    case ZOOM_LEVEL.DECADE:
                        return parseInt(date1.getYear() / 10) === parseInt(date2.getYear() / 10);
                    case ZOOM_LEVEL.CENTURY:
                        return parseInt(date1.getYear() / 100) === parseInt(date2.getYear() / 100)
                }
            },
            _areDatesInNeighborView: function(zoomLevel, date1, date2) {
                var monthMinDistance = function(a, b) {
                    var abs = Math.abs(a - b);
                    return Math.min(abs, 12 - abs)
                };
                switch (zoomLevel) {
                    case ZOOM_LEVEL.MONTH:
                        return monthMinDistance(date1.getMonth(), date2.getMonth()) <= 1;
                    case ZOOM_LEVEL.YEAR:
                        return Math.abs(date1.getYear() - date2.getYear()) <= 1;
                    case ZOOM_LEVEL.DECADE:
                        return Math.abs(date1.getYear() - date2.getYear()) <= 10;
                    case ZOOM_LEVEL.CENTURY:
                        return Math.abs(date1.getYear() - date2.getYear()) <= 100
                }
            },
            _moveToClosestAvailableDate: function() {
                var baseDate = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.option("currentDate");
                var currentDate = new Date(baseDate);
                var zoomLevel = this.option("zoomLevel");
                var isCurrentDateAvailable = !this._isDateNotAvailable(currentDate);
                var isDateForwardAvailable = isCurrentDateAvailable;
                var isDateBackwardAvailable = isCurrentDateAvailable;
                var isDateForwardInStartView;
                var isDateBackwardInStartView;
                var dateForward = new Date(currentDate);
                var dateBackward = new Date(currentDate);
                do {
                    if (isDateForwardAvailable) {
                        currentDate = dateForward;
                        break
                    }
                    if (isDateBackwardAvailable) {
                        currentDate = dateBackward;
                        break
                    }
                    this._shiftDate(zoomLevel, dateForward, 1, 1);
                    this._shiftDate(zoomLevel, dateBackward, 1, -1);
                    isDateForwardInStartView = this._areDatesInSameView(zoomLevel, dateForward, baseDate);
                    isDateBackwardInStartView = this._areDatesInSameView(zoomLevel, dateBackward, baseDate);
                    isDateForwardAvailable = isDateForwardInStartView && !this._isDateNotAvailable(dateForward);
                    isDateBackwardAvailable = isDateBackwardInStartView && !this._isDateNotAvailable(dateBackward)
                } while (isDateForwardInStartView || isDateBackwardInStartView);
                this.option("currentDate", currentDate)
            },
            _isDateNotAvailable: function(date) {
                var maxDate = this._getMaxDate();
                var minDate = this._getMinDate();
                return !(0, _math.inRange)(date, minDate, maxDate) || this._view.isDateDisabled(date)
            },
            _init: function() {
                this.callBase();
                this._correctZoomLevel();
                this._initCurrentDate();
                this._initActions()
            },
            _correctZoomLevel: function() {
                var minZoomLevel = this.option("minZoomLevel");
                var maxZoomLevel = this.option("maxZoomLevel");
                var zoomLevel = this.option("zoomLevel");
                if (LEVEL_COMPARE_MAP[maxZoomLevel] < LEVEL_COMPARE_MAP[minZoomLevel]) {
                    return
                }
                if (LEVEL_COMPARE_MAP[zoomLevel] > LEVEL_COMPARE_MAP[maxZoomLevel]) {
                    this.option("zoomLevel", maxZoomLevel)
                } else {
                    if (LEVEL_COMPARE_MAP[zoomLevel] < LEVEL_COMPARE_MAP[minZoomLevel]) {
                        this.option("zoomLevel", minZoomLevel)
                    }
                }
            },
            _initCurrentDate: function() {
                var currentDate = this._getNormalizedDate(this._dateOption("value")) || this._getNormalizedDate(this.option("currentDate"));
                this.option("currentDate", currentDate)
            },
            _getNormalizedDate: function(date) {
                date = _date2.default.normalizeDate(date, this._getMinDate(), this._getMaxDate());
                return _type2.default.isDefined(date) ? new Date(date) : date
            },
            _initActions: function() {
                this._cellClickAction = this._createActionByOption("onCellClick");
                this._onContouredChanged = this._createActionByOption("onContouredChanged")
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates({
                    cell: new _function_template.FunctionTemplate(function(options) {
                        var data = options.model;
                        (0, _renderer2.default)(options.container).append((0, _renderer2.default)("<span>").text(data && data.text || String(data)))
                    })
                });
                this.callBase()
            },
            _updateCurrentDate: function(date) {
                if (_fx2.default.isAnimating(this._$viewsWrapper)) {
                    _fx2.default.stop(this._$viewsWrapper, true)
                }
                var min = this._getMinDate();
                var max = this._getMaxDate();
                if (min > max) {
                    this.option("currentDate", new Date);
                    return
                }
                var normalizedDate = this._getNormalizedDate(date);
                if (date.getTime() !== normalizedDate.getTime()) {
                    this.option("currentDate", new Date(normalizedDate));
                    return
                }
                var offset = this._getViewsOffset(this._view.option("date"), normalizedDate);
                if (0 !== offset && !this._isMaxZoomLevel() && this._isOtherViewCellClicked) {
                    offset = 0
                }
                if (this._view && 0 !== offset && !this._suppressNavigation) {
                    this._navigate(offset, normalizedDate)
                } else {
                    this._renderNavigator();
                    this._setViewContoured(normalizedDate);
                    this._updateAriaId(normalizedDate)
                }
            },
            _setViewContoured: function(date) {
                if (this.option("hasFocus")(this._focusTarget())) {
                    this._view.option("contouredDate", date)
                }
            },
            _getMinDate: function() {
                if (this.min) {
                    return this.min
                }
                this.min = this._dateOption("min") || new Date(1e3, 0);
                return this.min
            },
            _getMaxDate: function() {
                if (this.max) {
                    return this.max
                }
                this.max = this._dateOption("max") || new Date(3e3, 0);
                return this.max
            },
            _getViewsOffset: function(startDate, endDate) {
                var zoomLevel = this.option("zoomLevel");
                if (zoomLevel === ZOOM_LEVEL.MONTH) {
                    return this._getMonthsOffset(startDate, endDate)
                }
                var zoomCorrection;
                switch (zoomLevel) {
                    case ZOOM_LEVEL.CENTURY:
                        zoomCorrection = 100;
                        break;
                    case ZOOM_LEVEL.DECADE:
                        zoomCorrection = 10;
                        break;
                    default:
                        zoomCorrection = 1
                }
                return parseInt(endDate.getFullYear() / zoomCorrection) - parseInt(startDate.getFullYear() / zoomCorrection)
            },
            _getMonthsOffset: function(startDate, endDate) {
                var yearOffset = endDate.getFullYear() - startDate.getFullYear();
                var monthOffset = endDate.getMonth() - startDate.getMonth();
                return 12 * yearOffset + monthOffset
            },
            _waitRenderView: function(offset) {
                var _this = this;
                if (this._alreadyViewRender) {
                    return
                }
                this._alreadyViewRender = true;
                var date = this._getDateByOffset(offset * this._getRtlCorrection());
                this._moveToClosestAvailableDate(date);
                this._waitRenderViewTimeout = setTimeout(function() {
                    _this._alreadyViewRender = false
                })
            },
            _getRtlCorrection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _getDateByOffset: function(offset, date) {
                date = new Date(date || this.option("currentDate"));
                var currentDay = date.getDate();
                var difference = _date2.default.getDifferenceInMonth(this.option("zoomLevel")) * offset;
                date.setDate(1);
                date.setMonth(date.getMonth() + difference);
                var lastDay = _date2.default.getLastMonthDate(date).getDate();
                date.setDate(currentDay > lastDay ? lastDay : currentDay);
                return date
            },
            _focusTarget: function() {
                return this.$element()
            },
            _initMarkup: function() {
                this._renderSubmitElement();
                this.callBase();
                var $element = this.$element();
                $element.addClass(CALENDAR_CLASS);
                this._renderBody();
                $element.append(this.$body);
                this._renderViews();
                this._renderNavigator();
                $element.append(this._navigator.$element());
                this._renderSwipeable();
                this._renderFooter();
                this._updateAriaSelected();
                this._updateAriaId();
                this._moveToClosestAvailableDate()
            },
            _render: function() {
                this.callBase();
                this._setViewContoured(this.option("currentDate"))
            },
            _renderBody: function() {
                if (!this._$viewsWrapper) {
                    this.$body = (0, _renderer2.default)("<div>").addClass(CALENDAR_BODY_CLASS);
                    this._$viewsWrapper = (0, _renderer2.default)("<div>").addClass(CALENDAR_VIEWS_WRAPPER_CLASS);
                    this.$body.append(this._$viewsWrapper)
                }
            },
            _getKeyboardListeners: function() {
                return this.callBase().concat([this._view])
            },
            _renderViews: function() {
                this.$element().addClass(CALENDAR_VIEW_CLASS + "-" + this.option("zoomLevel"));
                var currentDate = this.option("currentDate");
                this._view = this._renderSpecificView(currentDate);
                if (_window2.default.hasWindow()) {
                    var beforeDate = this._getDateByOffset(-1, currentDate);
                    this._beforeView = this._isViewAvailable(beforeDate) ? this._renderSpecificView(beforeDate) : null;
                    var afterDate = this._getDateByOffset(1, currentDate);
                    afterDate.setDate(1);
                    this._afterView = this._isViewAvailable(afterDate) ? this._renderSpecificView(afterDate) : null
                }
                this._translateViews()
            },
            _renderSpecificView: function(date) {
                var specificView = _uiCalendar4.default[this.option("zoomLevel")];
                var $view = (0, _renderer2.default)("<div>").appendTo(this._$viewsWrapper);
                var config = this._viewConfig(date);
                return new specificView($view, config)
            },
            _viewConfig: function(date) {
                var disabledDates = this.option("disabledDates");
                disabledDates = _type2.default.isFunction(disabledDates) ? this._injectComponent(disabledDates.bind(this)) : disabledDates;
                return {
                    date: date,
                    min: this._getMinDate(),
                    max: this._getMaxDate(),
                    firstDayOfWeek: this.option("firstDayOfWeek"),
                    value: this._dateOption("value"),
                    rtlEnabled: this.option("rtlEnabled"),
                    disabled: this.option("disabled"),
                    tabIndex: void 0,
                    focusStateEnabled: this.option("focusStateEnabled"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    disabledDates: disabledDates,
                    onCellClick: this._cellClickHandler.bind(this),
                    cellTemplate: this._getTemplateByOption("cellTemplate"),
                    allowValueSelection: this._isMaxZoomLevel()
                }
            },
            _injectComponent: function(func) {
                var that = this;
                return function(params) {
                    (0, _extend.extend)(params, {
                        component: that
                    });
                    return func(params)
                }
            },
            _isViewAvailable: function(date) {
                var zoomLevel = this.option("zoomLevel");
                var min = _date2.default.getViewMinBoundaryDate(zoomLevel, this._getMinDate());
                var max = _date2.default.getViewMaxBoundaryDate(zoomLevel, this._getMaxDate());
                return _date2.default.dateInRange(date, min, max)
            },
            _translateViews: function() {
                _translator2.default.move(this._view.$element(), {
                    left: 0,
                    top: 0
                });
                this._beforeView && _translator2.default.move(this._beforeView.$element(), {
                    left: this._getViewPosition(-1),
                    top: 0
                });
                this._afterView && _translator2.default.move(this._afterView.$element(), {
                    left: this._getViewPosition(1),
                    top: 0
                })
            },
            _getViewPosition: function(coefficient) {
                var rtlCorrection = this.option("rtlEnabled") && !_browser2.default.msie ? -1 : 1;
                return 100 * coefficient * rtlCorrection + "%"
            },
            _cellClickHandler: function(e) {
                var zoomLevel = this.option("zoomLevel");
                var nextView = _date2.default.getViewDown(zoomLevel);
                var isMaxZoomLevel = this._isMaxZoomLevel();
                if (nextView && !isMaxZoomLevel) {
                    this._navigateDown(e.event.currentTarget)
                } else {
                    var newValue = this._updateTimeComponent(e.value);
                    this._dateValue(newValue, e.event);
                    this._cellClickAction(e)
                }
            },
            _updateTimeComponent: function(date) {
                var result = new Date(date);
                var currentValue = this._dateOption("value");
                if (currentValue) {
                    result.setHours(currentValue.getHours());
                    result.setMinutes(currentValue.getMinutes());
                    result.setSeconds(currentValue.getSeconds());
                    result.setMilliseconds(currentValue.getMilliseconds())
                }
                return result
            },
            _isMaxZoomLevel: function() {
                return this.option("zoomLevel") === this.option("maxZoomLevel")
            },
            _navigateDown: function(cell) {
                var zoomLevel = this.option("zoomLevel");
                if (this._isMaxZoomLevel()) {
                    return
                }
                var nextView = _date2.default.getViewDown(zoomLevel);
                if (!nextView) {
                    return
                }
                var newCurrentDate = this._view.option("contouredDate") || this._view.option("date");
                if (cell) {
                    newCurrentDate = (0, _renderer2.default)(cell).data(CALENDAR_DATE_VALUE_KEY)
                }
                this._isOtherViewCellClicked = true;
                this.option("currentDate", newCurrentDate);
                this.option("zoomLevel", nextView);
                this._isOtherViewCellClicked = false;
                this._renderNavigator();
                this._animateShowView();
                this._moveToClosestAvailableDate();
                this._setViewContoured(this._getNormalizedDate(this.option("currentDate")))
            },
            _renderNavigator: function() {
                if (!this._navigator) {
                    this._navigator = new _uiCalendar2.default((0, _renderer2.default)("<div>"), this._navigatorConfig())
                }
                this._navigator.option("text", this._view.getNavigatorCaption());
                this._updateButtonsVisibility()
            },
            _navigatorConfig: function() {
                return {
                    text: this._view.getNavigatorCaption(),
                    onClick: this._navigatorClickHandler.bind(this),
                    onCaptionClick: this._navigateUp.bind(this),
                    rtlEnabled: this.option("rtlEnabled")
                }
            },
            _navigatorClickHandler: function(e) {
                var currentDate = this._getDateByOffset(e.direction, this.option("currentDate"));
                this._moveToClosestAvailableDate(currentDate);
                this._updateNavigatorCaption(-e.direction * this._getRtlCorrection())
            },
            _navigateUp: function() {
                var zoomLevel = this.option("zoomLevel");
                var nextView = _date2.default.getViewUp(zoomLevel);
                if (!nextView || this._isMinZoomLevel(zoomLevel)) {
                    return
                }
                this.option("zoomLevel", nextView);
                this._renderNavigator();
                this._animateShowView();
                this._moveToClosestAvailableDate();
                this._setViewContoured(this._getNormalizedDate(this.option("currentDate")))
            },
            _isMinZoomLevel: function(zoomLevel) {
                var min = this._getMinDate();
                var max = this._getMaxDate();
                return _date2.default.sameView(zoomLevel, min, max) || this.option("minZoomLevel") === zoomLevel
            },
            _updateButtonsVisibility: function() {
                this._navigator.toggleButton("next", !_type2.default.isDefined(this._getRequiredView("next")));
                this._navigator.toggleButton("prev", !_type2.default.isDefined(this._getRequiredView("prev")))
            },
            _renderSwipeable: function() {
                if (!this._swipeable) {
                    this._swipeable = this._createComponent(this.$element(), _swipeable2.default, {
                        onStart: this._swipeStartHandler.bind(this),
                        onUpdated: this._swipeUpdateHandler.bind(this),
                        onEnd: this._swipeEndHandler.bind(this),
                        itemSizeFunc: this._viewWidth.bind(this)
                    })
                }
            },
            _swipeStartHandler: function(e) {
                _fx2.default.stop(this._$viewsWrapper, true);
                e.event.maxLeftOffset = this._getRequiredView("next") ? 1 : 0;
                e.event.maxRightOffset = this._getRequiredView("prev") ? 1 : 0
            },
            _getRequiredView: function(name) {
                var view;
                var isRtl = this.option("rtlEnabled");
                if ("next" === name) {
                    view = isRtl ? this._beforeView : this._afterView
                } else {
                    if ("prev" === name) {
                        view = isRtl ? this._afterView : this._beforeView
                    }
                }
                return view
            },
            _swipeUpdateHandler: function(e) {
                var offset = e.event.offset;
                _translator2.default.move(this._$viewsWrapper, {
                    left: offset * this._viewWidth(),
                    top: 0
                });
                this._updateNavigatorCaption(offset)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.event.targetOffset;
                var moveOffset = !targetOffset ? 0 : targetOffset / Math.abs(targetOffset);
                if (0 === moveOffset) {
                    this._animateWrapper(0, ANIMATION_DURATION_SHOW_VIEW);
                    return
                }
                var date = this._getDateByOffset(-moveOffset * this._getRtlCorrection());
                if (this._isDateInInvalidRange(date)) {
                    if (moveOffset >= 0) {
                        date = new Date(this._getMinDate())
                    } else {
                        date = new Date(this._getMaxDate())
                    }
                }
                this.option("currentDate", date)
            },
            _viewWidth: function() {
                if (!this._viewWidthValue) {
                    this._viewWidthValue = this.$element().width()
                }
                return this._viewWidthValue
            },
            _updateNavigatorCaption: function(offset) {
                offset *= this._getRtlCorrection();
                var view = this._view;
                if (offset > .5 && this._beforeView) {
                    view = this._beforeView
                } else {
                    if (offset < -.5 && this._afterView) {
                        view = this._afterView
                    }
                }
                this._navigator.option("text", view.getNavigatorCaption())
            },
            _isDateInInvalidRange: function(date) {
                if (this._view.isBoundary(date)) {
                    return
                }
                var min = this._getMinDate();
                var max = this._getMaxDate();
                var normalizedDate = _date2.default.normalizeDate(date, min, max);
                return normalizedDate === min || normalizedDate === max
            },
            _renderFooter: function() {
                var showTodayButton = this.option("showTodayButton");
                if (showTodayButton) {
                    var $todayButton = this._createComponent((0, _renderer2.default)("<a>"), _button2.default, {
                        focusStateEnabled: false,
                        text: _message2.default.format("dxCalendar-todayButtonText"),
                        onClick: function() {
                            this._toTodayView()
                        }.bind(this),
                        integrationOptions: {}
                    }).$element().addClass(CALENDAR_TODAY_BUTTON_CLASS);
                    this._$footer = (0, _renderer2.default)("<div>").addClass(CALENDAR_FOOTER_CLASS).append($todayButton);
                    this.$element().append(this._$footer)
                }
                this.$element().toggleClass(CALENDAR_HAS_FOOTER_CLASS, showTodayButton)
            },
            _renderSubmitElement: function() {
                this._$submitElement = (0, _renderer2.default)("<input>").attr("type", "hidden").appendTo(this.$element());
                this._setSubmitValue(this.option("value"))
            },
            _setSubmitValue: function(value) {
                var dateValue = this._convertToDate(value);
                this._getSubmitElement().val(_date_serialization2.default.serializeDate(dateValue, CALENDAR_INPUT_STANDARD_PATTERN))
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _animateShowView: function() {
                _fx2.default.stop(this._view.$element(), true);
                return this._popAnimationView(this._view, POP_ANIMATION_FROM, POP_ANIMATION_TO, ANIMATION_DURATION_SHOW_VIEW).promise()
            },
            _popAnimationView: function(view, from, to, duration) {
                return _fx2.default.animate(view.$element(), {
                    type: "pop",
                    from: {
                        scale: from,
                        opacity: from
                    },
                    to: {
                        scale: to,
                        opacity: to
                    },
                    duration: duration
                })
            },
            _navigate: function(offset, value) {
                if (0 !== offset && 1 !== Math.abs(offset) && this._isViewAvailable(value)) {
                    var newView = this._renderSpecificView(value);
                    if (offset > 0) {
                        this._afterView && this._afterView.$element().remove();
                        this._afterView = newView
                    } else {
                        this._beforeView && this._beforeView.$element().remove();
                        this._beforeView = newView
                    }
                    this._translateViews()
                }
                var rtlCorrection = this._getRtlCorrection();
                var offsetSign = offset > 0 ? 1 : offset < 0 ? -1 : 0;
                var endPosition = -rtlCorrection * offsetSign * this._viewWidth();
                var viewsWrapperPosition = this._$viewsWrapper.position().left;
                if (viewsWrapperPosition !== endPosition) {
                    if (this._preventViewChangeAnimation) {
                        this._wrapperAnimationEndHandler(offset, value)
                    } else {
                        this._animateWrapper(endPosition, ANIMATION_DURATION_SHOW_VIEW).done(this._wrapperAnimationEndHandler.bind(this, offset, value))
                    }
                }
            },
            _animateWrapper: function(to, duration) {
                return _fx2.default.animate(this._$viewsWrapper, {
                    type: "slide",
                    from: {
                        left: this._$viewsWrapper.position().left
                    },
                    to: {
                        left: to
                    },
                    duration: duration
                })
            },
            _toTodayView: function() {
                var today = new Date;
                if (this._isMaxZoomLevel()) {
                    this._dateOption("value", today);
                    return
                }
                this._preventViewChangeAnimation = true;
                this.option("zoomLevel", this.option("maxZoomLevel"));
                this._dateOption("value", today);
                this._animateShowView();
                this._preventViewChangeAnimation = false
            },
            _wrapperAnimationEndHandler: function(offset, newDate) {
                this._rearrangeViews(offset);
                this._translateViews();
                this._resetLocation();
                this._renderNavigator();
                this._setViewContoured(newDate);
                this._updateAriaId(newDate)
            },
            _rearrangeViews: function(offset) {
                if (0 === offset) {
                    return
                }
                var viewOffset;
                var viewToCreateKey;
                var viewToRemoveKey;
                if (offset < 0) {
                    viewOffset = 1;
                    viewToCreateKey = "_beforeView";
                    viewToRemoveKey = "_afterView"
                } else {
                    viewOffset = -1;
                    viewToCreateKey = "_afterView";
                    viewToRemoveKey = "_beforeView"
                }
                if (!this[viewToCreateKey]) {
                    return
                }
                var destinationDate = this[viewToCreateKey].option("date");
                if (this[viewToRemoveKey]) {
                    this[viewToRemoveKey].$element().remove()
                }
                if (offset === viewOffset) {
                    this[viewToRemoveKey] = this._view
                } else {
                    this[viewToRemoveKey] = this._renderSpecificView(this._getDateByOffset(viewOffset, destinationDate));
                    this._view.$element().remove()
                }
                this._view = this[viewToCreateKey];
                var dateByOffset = this._getDateByOffset(-viewOffset, destinationDate);
                this[viewToCreateKey] = this._isViewAvailable(dateByOffset) ? this._renderSpecificView(dateByOffset) : null
            },
            _resetLocation: function() {
                _translator2.default.move(this._$viewsWrapper, {
                    left: 0,
                    top: 0
                })
            },
            _clean: function() {
                this.callBase();
                this._clearViewWidthCache();
                delete this._$viewsWrapper;
                delete this._navigator;
                delete this._$footer
            },
            _clearViewWidthCache: function() {
                delete this._viewWidthValue
            },
            _disposeViews: function() {
                this._view.$element().remove();
                this._beforeView && this._beforeView.$element().remove();
                this._afterView && this._afterView.$element().remove();
                delete this._view;
                delete this._beforeView;
                delete this._afterView
            },
            _dispose: function() {
                clearTimeout(this._waitRenderViewTimeout);
                this.callBase()
            },
            _refreshViews: function() {
                this._disposeViews();
                this._renderViews()
            },
            _visibilityChanged: function() {
                this._translateViews()
            },
            _focusInHandler: function() {
                this.callBase.apply(this, arguments);
                this._view.option("contouredDate", this.option("currentDate"))
            },
            _focusOutHandler: function() {
                this.callBase.apply(this, arguments);
                this._view.option("contouredDate", null)
            },
            _updateViewsValue: function(value) {
                var newValue = value ? new Date(value) : null;
                this._view.option("value", newValue);
                this._beforeView && this._beforeView.option("value", newValue);
                this._afterView && this._afterView.option("value", newValue)
            },
            _updateAriaSelected: function(value, previousValue) {
                value = value || this._dateOption("value");
                var $prevSelectedCell = this._view._getCellByDate(previousValue);
                var $selectedCell = this._view._getCellByDate(value);
                this.setAria("selected", void 0, $prevSelectedCell);
                this.setAria("selected", true, $selectedCell);
                if (value && this.option("currentDate").getTime() === value.getTime()) {
                    this._updateAriaId(value)
                }
            },
            _updateAriaId: function(value) {
                value = value || this.option("currentDate");
                var ariaId = "dx-" + new _guid2.default;
                var $newCell = this._view._getCellByDate(value);
                this.setAria("id", ariaId, $newCell);
                this.setAria("activedescendant", ariaId);
                this._onContouredChanged(ariaId)
            },
            _suppressingNavigation: function(callback, args) {
                this._suppressNavigation = true;
                callback.apply(this, args);
                delete this._suppressNavigation
            },
            _optionChanged: function(args) {
                var value = args.value;
                var previousValue = args.previousValue;
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._clearViewWidthCache();
                        break;
                    case "min":
                    case "max":
                        this.min = void 0;
                        this.max = void 0;
                        this._suppressingNavigation(this._updateCurrentDate, [this.option("currentDate")]);
                        this._refreshViews();
                        this._renderNavigator();
                        break;
                    case "firstDayOfWeek":
                        this._refreshViews();
                        this._updateButtonsVisibility();
                        break;
                    case "currentDate":
                        this.setAria("id", void 0, this._view._getCellByDate(previousValue));
                        this._updateCurrentDate(value);
                        break;
                    case "zoomLevel":
                        this.$element().removeClass(CALENDAR_VIEW_CLASS + "-" + previousValue);
                        this._correctZoomLevel();
                        this._refreshViews();
                        this._renderNavigator();
                        this._updateAriaId();
                        break;
                    case "minZoomLevel":
                    case "maxZoomLevel":
                        this._correctZoomLevel();
                        this._updateButtonsVisibility();
                        break;
                    case "value":
                        value = this._convertToDate(value);
                        previousValue = this._convertToDate(previousValue);
                        this._updateAriaSelected(value, previousValue);
                        this.option("currentDate", _type2.default.isDefined(value) ? new Date(value) : new Date);
                        this._updateViewsValue(value);
                        this._setSubmitValue(value);
                        this.callBase(args);
                        break;
                    case "disabled":
                        this._view.option("disabled", value);
                        this.callBase(args);
                        break;
                    case "onCellClick":
                        this._view.option("onCellClick", value);
                        break;
                    case "onContouredChanged":
                        this._onContouredChanged = this._createActionByOption("onContouredChanged");
                        break;
                    case "disabledDates":
                    case "dateSerializationFormat":
                    case "cellTemplate":
                    case "showTodayButton":
                        this._invalidate();
                        break;
                    case "hasFocus":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        (0, _component_registrator2.default)("dxCalendar", Calendar);
        module.exports = Calendar
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/calendar/ui.calendar.navigator.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var Widget = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var Button = __webpack_require__( /*! ../button */ 37);
        var CALENDAR_NAVIGATOR_CLASS = "dx-calendar-navigator";
        var CALENDAR_NAVIGATOR_PREVIOUS_MONTH_CLASS = "dx-calendar-navigator-previous-month";
        var CALENDAR_NAVIGATOR_NEXT_MONTH_CLASS = "dx-calendar-navigator-next-month";
        var CALENDAR_NAVIGATOR_PREVIOUS_VIEW_CLASS = "dx-calendar-navigator-previous-view";
        var CALENDAR_NAVIGATOR_NEXT_VIEW_CLASS = "dx-calendar-navigator-next-view";
        var CALENDAR_NAVIGATOR_DISABLED_LINK_CLASS = "dx-calendar-disabled-navigator-link";
        var CALENDAR_NAVIGATOR_CAPTION_BUTTON_CLASS = "dx-calendar-caption-button";
        var Navigator = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    onClick: null,
                    onCaptionClick: null,
                    text: ""
                })
            },
            _init: function() {
                this.callBase();
                this._initActions()
            },
            _initActions: function() {
                this._clickAction = this._createActionByOption("onClick");
                this._captionClickAction = this._createActionByOption("onCaptionClick")
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(CALENDAR_NAVIGATOR_CLASS);
                this._renderButtons();
                this._renderCaption()
            },
            _renderButtons: function() {
                var that = this;
                var direction = this.option("rtlEnabled") ? -1 : 1;
                this._prevButton = this._createComponent($("<a>"), Button, {
                    focusStateEnabled: false,
                    icon: "chevronleft",
                    onClick: function(e) {
                        that._clickAction({
                            direction: -direction,
                            event: e
                        })
                    },
                    integrationOptions: {}
                });
                var $prevButton = this._prevButton.$element().addClass(CALENDAR_NAVIGATOR_PREVIOUS_VIEW_CLASS).addClass(CALENDAR_NAVIGATOR_PREVIOUS_MONTH_CLASS);
                this._nextButton = this._createComponent($("<a>"), Button, {
                    focusStateEnabled: false,
                    icon: "chevronright",
                    onClick: function(e) {
                        that._clickAction({
                            direction: direction,
                            event: e
                        })
                    },
                    integrationOptions: {}
                });
                var $nextButton = this._nextButton.$element().addClass(CALENDAR_NAVIGATOR_NEXT_VIEW_CLASS).addClass(CALENDAR_NAVIGATOR_NEXT_MONTH_CLASS);
                this._caption = this._createComponent($("<a>").addClass(CALENDAR_NAVIGATOR_CAPTION_BUTTON_CLASS), Button, {
                    focusStateEnabled: false,
                    onClick: function(e) {
                        that._captionClickAction({
                            event: e
                        })
                    },
                    integrationOptions: {}
                });
                var $caption = this._caption.$element();
                this.$element().append($prevButton, $caption, $nextButton)
            },
            _renderCaption: function() {
                this._caption.option("text", this.option("text"))
            },
            toggleButton: function(buttonPrefix, value) {
                var buttonName = "_" + buttonPrefix + "Button";
                var button = this[buttonName];
                if (button) {
                    button.option("disabled", value);
                    button.$element().toggleClass(CALENDAR_NAVIGATOR_DISABLED_LINK_CLASS, value)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "text":
                        this._renderCaption();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = Navigator
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/calendar/ui.calendar.views.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiCalendar = __webpack_require__( /*! ./ui.calendar.base_view */ 554);
        var _uiCalendar2 = _interopRequireDefault(_uiCalendar);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _date2 = __webpack_require__( /*! ../../localization/date */ 35);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var CALENDAR_OTHER_MONTH_CLASS = "dx-calendar-other-month";
        var CALENDAR_OTHER_VIEW_CLASS = "dx-calendar-other-view";
        var Views = {
            month: _uiCalendar2.default.inherit({
                _getViewName: function() {
                    return "month"
                },
                _getDefaultOptions: function() {
                    return (0, _extend.extend)(this.callBase(), {
                        firstDayOfWeek: void 0,
                        rowCount: 6,
                        colCount: 7
                    })
                },
                _renderImpl: function() {
                    this.callBase();
                    this._renderHeader()
                },
                _renderBody: function() {
                    this.callBase();
                    this._$table.find(".".concat(CALENDAR_OTHER_VIEW_CLASS)).addClass(CALENDAR_OTHER_MONTH_CLASS)
                },
                _renderFocusTarget: _common.noop,
                getCellAriaLabel: function(date) {
                    return (0, _date2.format)(date, "longdate")
                },
                _renderHeader: function() {
                    var $headerRow = (0, _renderer2.default)("<tr>");
                    var $header = (0, _renderer2.default)("<thead>").append($headerRow);
                    this._$table.prepend($header);
                    for (var colIndex = 0, colCount = this.option("colCount"); colIndex < colCount; colIndex++) {
                        this._renderHeaderCell(colIndex, $headerRow)
                    }
                },
                _renderHeaderCell: function(cellIndex, $headerRow) {
                    var _this$_getDayCaption = this._getDayCaption(this._getFirstDayOfWeek() + cellIndex),
                        fullCaption = _this$_getDayCaption.full,
                        abbrCaption = _this$_getDayCaption.abbreviated;
                    var $cell = (0, _renderer2.default)("<th>").attr({
                        scope: "col",
                        abbr: fullCaption
                    }).text(abbrCaption);
                    this._appendCell($headerRow, $cell)
                },
                getNavigatorCaption: function() {
                    return (0, _date2.format)(this.option("date"), "monthandyear")
                },
                _isTodayCell: function(cellDate) {
                    var today = new Date;
                    return (0, _date.sameDate)(cellDate, today)
                },
                _isDateOutOfRange: function(cellDate) {
                    var minDate = this.option("min");
                    var maxDate = this.option("max");
                    return !(0, _date.dateInRange)(cellDate, minDate, maxDate, "date")
                },
                _isOtherView: function(cellDate) {
                    return cellDate.getMonth() !== this.option("date").getMonth()
                },
                _getCellText: function(cellDate) {
                    return (0, _date2.format)(cellDate, "d")
                },
                _getDayCaption: function(day) {
                    var daysInWeek = this.option("colCount");
                    var dayIndex = day % daysInWeek;
                    return {
                        full: (0, _date2.getDayNames)()[dayIndex],
                        abbreviated: (0, _date2.getDayNames)("abbreviated")[dayIndex]
                    }
                },
                _getFirstCellData: function() {
                    var firstDay = (0, _date.getFirstMonthDate)(this.option("date"));
                    var firstMonthDayOffset = this._getFirstDayOfWeek() - firstDay.getDay();
                    var daysInWeek = this.option("colCount");
                    if (firstMonthDayOffset >= 0) {
                        firstMonthDayOffset -= daysInWeek
                    }
                    firstDay.setDate(firstDay.getDate() + firstMonthDayOffset);
                    return firstDay
                },
                _getNextCellData: function(date) {
                    date = new Date(date);
                    date.setDate(date.getDate() + 1);
                    return date
                },
                _getFirstDayOfWeek: function() {
                    return (0, _type.isDefined)(this.option("firstDayOfWeek")) ? this.option("firstDayOfWeek") : (0, _date2.firstDayOfWeekIndex)()
                },
                _getCellByDate: function(date) {
                    return this._$table.find("td[data-value='".concat((0, _date_serialization.serializeDate)(date, (0, _date.getShortDateFormat)()), "']"))
                },
                isBoundary: function(date) {
                    return (0, _date.sameMonthAndYear)(date, this.option("min")) || (0, _date.sameMonthAndYear)(date, this.option("max"))
                },
                _getDefaultDisabledDatesHandler: function(disabledDates) {
                    return function(args) {
                        var isDisabledDate = disabledDates.some(function(item) {
                            return (0, _date.sameDate)(item, args.date)
                        });
                        if (isDisabledDate) {
                            return true
                        }
                    }
                }
            }),
            year: _uiCalendar2.default.inherit({
                _getViewName: function() {
                    return "year"
                },
                _isTodayCell: function(cellDate) {
                    return (0, _date.sameMonthAndYear)(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    return !(0, _date.dateInRange)(cellDate, (0, _date.getFirstMonthDate)(this.option("min")), (0, _date.getLastMonthDate)(this.option("max")))
                },
                _isOtherView: function() {
                    return false
                },
                _getCellText: function(cellDate) {
                    return (0, _date2.getMonthNames)("abbreviated")[cellDate.getMonth()]
                },
                _getFirstCellData: function() {
                    var data = new Date(this.option("date"));
                    data.setDate(1);
                    data.setMonth(0);
                    return data
                },
                _getNextCellData: function(date) {
                    date = new Date(date);
                    date.setMonth(date.getMonth() + 1);
                    return date
                },
                _getCellByDate: function(date) {
                    var foundDate = new Date(date);
                    foundDate.setDate(1);
                    return this._$table.find("td[data-value='".concat((0, _date_serialization.serializeDate)(foundDate, (0, _date.getShortDateFormat)()), "']"))
                },
                getCellAriaLabel: function(date) {
                    return (0, _date2.format)(date, "monthandyear")
                },
                getNavigatorCaption: function() {
                    return (0, _date2.format)(this.option("date"), "yyyy")
                },
                isBoundary: function(date) {
                    return (0, _date.sameYear)(date, this.option("min")) || (0, _date.sameYear)(date, this.option("max"))
                }
            }),
            decade: _uiCalendar2.default.inherit({
                _getViewName: function() {
                    return "decade"
                },
                _isTodayCell: function(cellDate) {
                    return (0, _date.sameYear)(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    var min = this.option("min");
                    var max = this.option("max");
                    return !(0, _date.dateInRange)(cellDate.getFullYear(), min && min.getFullYear(), max && max.getFullYear())
                },
                _isOtherView: function(cellDate) {
                    var date = new Date(cellDate);
                    date.setMonth(1);
                    return !(0, _date.sameDecade)(date, this.option("date"))
                },
                _getCellText: function(cellDate) {
                    return (0, _date2.format)(cellDate, "yyyy")
                },
                _getFirstCellData: function() {
                    var year = (0, _date.getFirstYearInDecade)(this.option("date")) - 1;
                    return new Date(year, 0, 1)
                },
                _getNextCellData: function(date) {
                    date = new Date(date);
                    date.setFullYear(date.getFullYear() + 1);
                    return date
                },
                getNavigatorCaption: function() {
                    var currentDate = this.option("date");
                    var firstYearInDecade = (0, _date.getFirstYearInDecade)(currentDate);
                    var startDate = new Date(currentDate);
                    var endDate = new Date(currentDate);
                    startDate.setFullYear(firstYearInDecade);
                    endDate.setFullYear(firstYearInDecade + 9);
                    return (0, _date2.format)(startDate, "yyyy") + "-" + (0, _date2.format)(endDate, "yyyy")
                },
                _isValueOnCurrentView: function(currentDate, value) {
                    return (0, _date.sameDecade)(currentDate, value)
                },
                _getCellByDate: function(date) {
                    var foundDate = new Date(date);
                    foundDate.setDate(1);
                    foundDate.setMonth(0);
                    return this._$table.find("td[data-value='".concat((0, _date_serialization.serializeDate)(foundDate, (0, _date.getShortDateFormat)()), "']"))
                },
                isBoundary: function(date) {
                    return (0, _date.sameDecade)(date, this.option("min")) || (0, _date.sameDecade)(date, this.option("max"))
                }
            }),
            century: _uiCalendar2.default.inherit({
                _getViewName: function() {
                    return "century"
                },
                _isTodayCell: function(cellDate) {
                    return (0, _date.sameDecade)(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    var decade = (0, _date.getFirstYearInDecade)(cellDate);
                    var minDecade = (0, _date.getFirstYearInDecade)(this.option("min"));
                    var maxDecade = (0, _date.getFirstYearInDecade)(this.option("max"));
                    return !(0, _date.dateInRange)(decade, minDecade, maxDecade)
                },
                _isOtherView: function(cellDate) {
                    var date = new Date(cellDate);
                    date.setMonth(1);
                    return !(0, _date.sameCentury)(date, this.option("date"))
                },
                _getCellText: function(cellDate) {
                    var startDate = (0, _date2.format)(cellDate, "yyyy");
                    var endDate = new Date(cellDate);
                    endDate.setFullYear(endDate.getFullYear() + 9);
                    return startDate + " - " + (0, _date2.format)(endDate, "yyyy")
                },
                _getFirstCellData: function() {
                    var decade = (0, _date.getFirstDecadeInCentury)(this.option("date")) - 10;
                    return new Date(decade, 0, 1)
                },
                _getNextCellData: function(date) {
                    date = new Date(date);
                    date.setFullYear(date.getFullYear() + 10);
                    return date
                },
                _getCellByDate: function(date) {
                    var foundDate = new Date(date);
                    foundDate.setDate(1);
                    foundDate.setMonth(0);
                    foundDate.setFullYear((0, _date.getFirstYearInDecade)(foundDate));
                    return this._$table.find("td[data-value='".concat((0, _date_serialization.serializeDate)(foundDate, (0, _date.getShortDateFormat)()), "']"))
                },
                getNavigatorCaption: function() {
                    var currentDate = this.option("date");
                    var firstDecadeInCentury = (0, _date.getFirstDecadeInCentury)(currentDate);
                    var startDate = new Date(currentDate);
                    var endDate = new Date(currentDate);
                    startDate.setFullYear(firstDecadeInCentury);
                    endDate.setFullYear(firstDecadeInCentury + 99);
                    return (0, _date2.format)(startDate, "yyyy") + "-" + (0, _date2.format)(endDate, "yyyy")
                },
                isBoundary: function(date) {
                    return (0, _date.sameCentury)(date, this.option("min")) || (0, _date.sameCentury)(date, this.option("max"))
                }
            })
        };
        module.exports = Views
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/calendar/ui.calendar.base_view.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _click = __webpack_require__( /*! ../../events/click */ 19);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var abstract = _ui2.default.abstract;
        var CALENDAR_OTHER_VIEW_CLASS = "dx-calendar-other-view";
        var CALENDAR_CELL_CLASS = "dx-calendar-cell";
        var CALENDAR_EMPTY_CELL_CLASS = "dx-calendar-empty-cell";
        var CALENDAR_TODAY_CLASS = "dx-calendar-today";
        var CALENDAR_SELECTED_DATE_CLASS = "dx-calendar-selected-date";
        var CALENDAR_CONTOURED_DATE_CLASS = "dx-calendar-contoured-date";
        var CALENDAR_DXCLICK_EVENT_NAME = (0, _utils.addNamespace)(_click.name, "dxCalendar");
        var CALENDAR_DATE_VALUE_KEY = "dxDateValueKey";
        var BaseView = _ui2.default.inherit({
            _getViewName: function() {
                return "base"
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    date: new Date,
                    focusStateEnabled: false,
                    cellTemplate: null,
                    disabledDates: null,
                    onCellClick: null,
                    rowCount: 3,
                    colCount: 4,
                    allowValueSelection: true
                })
            },
            _init: function() {
                this.callBase();
                var value = this.option("value");
                this.option("value", new Date(value));
                if (!this.option("value").valueOf()) {
                    this.option("value", new Date(0, 0, 0, 0, 0, 0))
                }
            },
            _initMarkup: function() {
                this.callBase();
                this._renderImpl()
            },
            _renderImpl: function() {
                this.$element().append(this._createTable());
                this._createDisabledDatesHandler();
                this._renderBody();
                this._renderContouredDate();
                this._renderValue();
                this._renderEvents()
            },
            _createTable: function() {
                this._$table = (0, _renderer2.default)("<table>");
                this.setAria({
                    label: (0, _message.format)("dxCalendar-ariaWidgetName"),
                    role: "grid"
                }, this._$table);
                return this._$table
            },
            _renderBody: function() {
                this.$body = (0, _renderer2.default)("<tbody>").appendTo(this._$table);
                var rowData = {
                    cellDate: this._getFirstCellData(),
                    prevCellDate: null
                };
                for (var rowIndex = 0, rowCount = this.option("rowCount"); rowIndex < rowCount; rowIndex++) {
                    rowData.row = this._createRow();
                    for (var colIndex = 0, colCount = this.option("colCount"); colIndex < colCount; colIndex++) {
                        this._renderCell(rowData, colIndex)
                    }
                }
            },
            _createRow: function() {
                var row = _dom_adapter2.default.createElement("tr");
                this.setAria("role", "row", (0, _renderer2.default)(row));
                this.$body.get(0).appendChild(row);
                return row
            },
            _appendCell: function(row, cell) {
                if (!this._appendMethodName) {
                    this._cacheAppendMethodName()
                }(0, _renderer2.default)(row)[this._appendMethodName](cell)
            },
            _cacheAppendMethodName: function(rtlEnabled) {
                this._appendMethodName = (null !== rtlEnabled && void 0 !== rtlEnabled ? rtlEnabled : this.option("rtlEnabled")) ? "prepend" : "append"
            },
            _createCell: function(cellDate) {
                var cell = _dom_adapter2.default.createElement("td");
                var $cell = (0, _renderer2.default)(cell);
                cell.className = this._getClassNameByDate(cellDate);
                cell.setAttribute("data-value", (0, _date_serialization.serializeDate)(cellDate, (0, _date.getShortDateFormat)()));
                _element_data2.default.data(cell, CALENDAR_DATE_VALUE_KEY, cellDate);
                this.setAria({
                    role: "gridcell",
                    label: this.getCellAriaLabel(cellDate)
                }, $cell);
                return {
                    cell: cell,
                    $cell: $cell
                }
            },
            _renderCell: function(params, cellIndex) {
                var cellDate = params.cellDate,
                    prevCellDate = params.prevCellDate,
                    row = params.row;
                if (prevCellDate) {
                    (0, _date.fixTimezoneGap)(prevCellDate, cellDate)
                }
                params.prevCellDate = cellDate;
                var _this$_createCell = this._createCell(cellDate),
                    cell = _this$_createCell.cell,
                    $cell = _this$_createCell.$cell;
                var cellTemplate = this.option("cellTemplate");
                this._appendCell(row, cell);
                if (cellTemplate) {
                    cellTemplate.render(this._prepareCellTemplateData(cellDate, cellIndex, $cell))
                } else {
                    cell.innerHTML = this._getCellText(cellDate)
                }
                params.cellDate = this._getNextCellData(cellDate)
            },
            _getClassNameByDate: function(cellDate) {
                var className = CALENDAR_CELL_CLASS;
                if (this._isTodayCell(cellDate)) {
                    className += " ".concat(CALENDAR_TODAY_CLASS)
                }
                if (this._isDateOutOfRange(cellDate) || this.isDateDisabled(cellDate)) {
                    className += " ".concat(CALENDAR_EMPTY_CELL_CLASS)
                }
                if (this._isOtherView(cellDate)) {
                    className += " ".concat(CALENDAR_OTHER_VIEW_CLASS)
                }
                return className
            },
            _prepareCellTemplateData: function(cellDate, cellIndex, $cell) {
                return {
                    model: {
                        text: this._getCellText(cellDate),
                        date: cellDate,
                        view: this._getViewName()
                    },
                    container: _dom2.default.getPublicElement($cell),
                    index: cellIndex
                }
            },
            _renderEvents: function() {
                var _this = this;
                this._createCellClickAction();
                _events_engine2.default.off(this._$table, CALENDAR_DXCLICK_EVENT_NAME);
                _events_engine2.default.on(this._$table, CALENDAR_DXCLICK_EVENT_NAME, "td", function(e) {
                    if (!(0, _renderer2.default)(e.currentTarget).hasClass(CALENDAR_EMPTY_CELL_CLASS)) {
                        _this._cellClickAction({
                            event: e,
                            value: (0, _renderer2.default)(e.currentTarget).data(CALENDAR_DATE_VALUE_KEY)
                        })
                    }
                })
            },
            _createCellClickAction: function() {
                this._cellClickAction = this._createActionByOption("onCellClick")
            },
            _createDisabledDatesHandler: function() {
                var disabledDates = this.option("disabledDates");
                this._disabledDatesHandler = Array.isArray(disabledDates) ? this._getDefaultDisabledDatesHandler(disabledDates) : disabledDates || _common.noop
            },
            _getDefaultDisabledDatesHandler: function(disabledDates) {
                return _common.noop
            },
            _isTodayCell: abstract,
            _isDateOutOfRange: abstract,
            isDateDisabled: function(cellDate) {
                var dateParts = {
                    date: cellDate,
                    view: this._getViewName()
                };
                return this._disabledDatesHandler(dateParts)
            },
            _isOtherView: abstract,
            _getCellText: abstract,
            _getFirstCellData: abstract,
            _getNextCellData: abstract,
            _renderContouredDate: function(contouredDate) {
                if (!this.option("focusStateEnabled")) {
                    return
                }
                contouredDate = contouredDate || this.option("contouredDate");
                var $oldContouredCell = this._$table.find(".".concat(CALENDAR_CONTOURED_DATE_CLASS));
                var $newContouredCell = this._getCellByDate(contouredDate);
                $oldContouredCell.removeClass(CALENDAR_CONTOURED_DATE_CLASS);
                $newContouredCell.addClass(CALENDAR_CONTOURED_DATE_CLASS)
            },
            _changeValue: function(cellDate) {
                if (cellDate) {
                    var value = this.option("value");
                    var newValue = value ? new Date(value) : new Date;
                    newValue.setDate(cellDate.getDate());
                    newValue.setMonth(cellDate.getMonth());
                    newValue.setFullYear(cellDate.getFullYear());
                    newValue.setDate(cellDate.getDate());
                    this.option("value", newValue)
                } else {
                    this.option("value", null)
                }
            },
            _renderValue: function() {
                if (!this.option("allowValueSelection")) {
                    return
                }
                var value = this.option("value");
                var selectedCell = this._getCellByDate(value);
                if (this._selectedCell) {
                    this._selectedCell.removeClass(CALENDAR_SELECTED_DATE_CLASS)
                }
                selectedCell.addClass(CALENDAR_SELECTED_DATE_CLASS);
                this._selectedCell = selectedCell
            },
            getCellAriaLabel: function(date) {
                return this._getCellText(date)
            },
            _getFirstAvailableDate: function() {
                var date = this.option("date");
                var min = this.option("min");
                date = (0, _date.getFirstDateView)(this._getViewName(), date);
                return new Date(min && date < min ? min : date)
            },
            _getCellByDate: abstract,
            isBoundary: abstract,
            _optionChanged: function(args) {
                var name = args.name,
                    value = args.value;
                switch (name) {
                    case "value":
                        this._renderValue();
                        break;
                    case "contouredDate":
                        this._renderContouredDate(value);
                        break;
                    case "onCellClick":
                        this._createCellClickAction();
                        break;
                    case "disabledDates":
                    case "cellTemplate":
                        this._invalidate();
                        break;
                    case "rtlEnabled":
                        this._cacheAppendMethodName(value);
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = BaseView
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/color_box/color_box.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var Color = __webpack_require__( /*! ../../color */ 91);
        var ColorView = __webpack_require__( /*! ./color_view */ 322);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var DropDownEditor = __webpack_require__( /*! ../drop_down_editor/ui.drop_down_editor */ 178);
        var COLOR_BOX_CLASS = "dx-colorbox";
        var COLOR_BOX_INPUT_CLASS = COLOR_BOX_CLASS + "-input";
        var COLOR_BOX_INPUT_CONTAINER_CLASS = COLOR_BOX_INPUT_CLASS + "-container";
        var COLOR_BOX_COLOR_RESULT_PREVIEW_CLASS = COLOR_BOX_CLASS + "-color-result-preview";
        var COLOR_BOX_COLOR_IS_NOT_DEFINED = COLOR_BOX_CLASS + "-color-is-not-defined";
        var COLOR_BOX_OVERLAY_CLASS = COLOR_BOX_CLASS + "-overlay";
        var COLOR_BOX_CONTAINER_CELL_CLASS = "dx-colorview-container-cell";
        var COLOR_BOX_BUTTON_CELL_CLASS = "dx-colorview-button-cell";
        var COLOR_BOX_BUTTONS_CONTAINER_CLASS = "dx-colorview-buttons-container";
        var COLOR_BOX_APPLY_BUTTON_CLASS = "dx-colorview-apply-button";
        var COLOR_BOX_CANCEL_BUTTON_CLASS = "dx-colorview-cancel-button";
        var colorEditorPrototype = ColorView.prototype;
        var colorUtils = {
            makeTransparentBackground: colorEditorPrototype._makeTransparentBackground.bind(colorEditorPrototype),
            makeRgba: colorEditorPrototype._makeRgba.bind(colorEditorPrototype)
        };
        var ColorBox = DropDownEditor.inherit({
            _supportedKeys: function() {
                var arrowHandler = function(e) {
                    e.stopPropagation();
                    if (this.option("opened")) {
                        e.preventDefault();
                        return true
                    }
                };
                var upArrowHandler = function(e) {
                    if (!this.option("opened")) {
                        e.preventDefault();
                        return false
                    }
                    if (e.altKey) {
                        this.close();
                        return false
                    }
                    return true
                };
                var downArrowHandler = function(e) {
                    if (!this.option("opened") && !e.altKey) {
                        e.preventDefault();
                        return false
                    }
                    if (!this.option("opened") && e.altKey) {
                        this._validatedOpening();
                        return false
                    }
                    return true
                };
                return extend(this.callBase(), {
                    tab: function(e) {
                        if (this.option("opened")) {
                            e.preventDefault();
                            this._colorView._rgbInputs[0].focus()
                        }
                    },
                    enter: this._enterKeyHandler,
                    leftArrow: arrowHandler,
                    rightArrow: arrowHandler,
                    upArrow: upArrowHandler,
                    downArrow: downArrowHandler
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    editAlphaChannel: false,
                    applyValueMode: "useButtons",
                    keyStep: 1,
                    fieldTemplate: null,
                    buttonsLocation: "bottom after"
                })
            },
            _popupHidingHandler: function() {
                this.callBase();
                if ("useButtons" === this.option("applyValueMode")) {
                    this._updateColorViewValue(this.option("value"))
                }
            },
            _popupConfig: function() {
                return extend(this.callBase(), {
                    height: "auto",
                    width: ""
                })
            },
            _contentReadyHandler: function() {
                this._createColorView();
                this._addPopupBottomClasses()
            },
            _addPopupBottomClasses: function() {
                var $popupBottom = this._popup.bottomToolbar();
                if ($popupBottom) {
                    $popupBottom.addClass(COLOR_BOX_CONTAINER_CELL_CLASS).addClass(COLOR_BOX_BUTTON_CELL_CLASS).find(".dx-toolbar-items-container").addClass(COLOR_BOX_BUTTONS_CONTAINER_CLASS);
                    $popupBottom.find(".dx-popup-done").addClass(COLOR_BOX_APPLY_BUTTON_CLASS);
                    $popupBottom.find(".dx-popup-cancel").addClass(COLOR_BOX_CANCEL_BUTTON_CLASS)
                }
            },
            _createColorView: function() {
                this._popup.overlayContent().addClass(COLOR_BOX_OVERLAY_CLASS);
                var $colorView = $("<div>").appendTo(this._popup.$content());
                this._colorView = this._createComponent($colorView, ColorView, this._colorViewConfig());
                this._colorView.registerKeyHandler("escape", this._escapeHandler.bind(this));
                eventsEngine.on($colorView, "focus", function() {
                    this.focus()
                }.bind(this))
            },
            _escapeHandler: function() {
                this.close();
                this.focus()
            },
            _applyNewColor: function(value) {
                this.option("value", value);
                if (value) {
                    colorUtils.makeTransparentBackground(this._$colorResultPreview, value)
                }
                if (this._colorViewEnterKeyPressed) {
                    this.close();
                    this._colorViewEnterKeyPressed = false
                }
            },
            _colorViewConfig: function() {
                var that = this;
                return {
                    value: that.option("value"),
                    matchValue: that.option("value"),
                    editAlphaChannel: that.option("editAlphaChannel"),
                    applyValueMode: that.option("applyValueMode"),
                    focusStateEnabled: that.option("focusStateEnabled"),
                    stylingMode: this.option("stylingMode"),
                    onEnterKeyPressed: function() {
                        that._colorViewEnterKeyPressed = true;
                        if (that._colorView.option("value") !== that.option("value")) {
                            that._applyNewColor(that._colorView.option("value"));
                            that.close()
                        }
                    },
                    onValueChanged: function(args) {
                        if (colorUtils.makeRgba(args.value) === args.previousValue) {
                            return
                        }
                        var instantlyMode = "instantly" === that.option("applyValueMode");
                        if (!instantlyMode && !that._colorViewEnterKeyPressed) {
                            return
                        }
                        that._applyNewColor(args.value)
                    }
                }
            },
            _enterKeyHandler: function() {
                var newValue = this._input().val();
                var value = this.option("value");
                var oldValue = this.option("editAlphaChannel") ? colorUtils.makeRgba(value) : value;
                if (!newValue) {
                    return false
                }
                var color = new Color(newValue);
                if (color.colorIsInvalid) {
                    this._input().val(oldValue);
                    return
                }
                if (newValue !== oldValue) {
                    this._applyColorFromInput(newValue);
                    this.option("value", this.option("editAlphaChannel") ? colorUtils.makeRgba(newValue) : newValue)
                }
                if (this._colorView) {
                    var colorViewValue = this._colorView.option("value");
                    if (value !== colorViewValue) {
                        this.option("value", colorViewValue)
                    }
                }
                this.close();
                return false
            },
            _applyButtonHandler: function() {
                this._applyNewColor(this._colorView.option("value"));
                this.callBase()
            },
            _cancelButtonHandler: function() {
                this._resetInputValue();
                this.callBase()
            },
            _getKeyboardListeners: function() {
                return this.callBase().concat([this._colorView])
            },
            _init: function() {
                this.callBase()
            },
            _initMarkup: function() {
                this.$element().addClass(COLOR_BOX_CLASS);
                this.callBase()
            },
            _renderInput: function() {
                this.callBase();
                this._input().addClass(COLOR_BOX_INPUT_CLASS);
                this._renderColorPreview()
            },
            _renderColorPreview: function() {
                this.$element().wrapInner($("<div>").addClass(COLOR_BOX_INPUT_CONTAINER_CLASS));
                this._$colorBoxInputContainer = this.$element().children().eq(0);
                this._$colorResultPreview = $("<div>").addClass(COLOR_BOX_COLOR_RESULT_PREVIEW_CLASS).appendTo(this._$textEditorInputContainer);
                if (!this.option("value")) {
                    this._$colorBoxInputContainer.addClass(COLOR_BOX_COLOR_IS_NOT_DEFINED)
                } else {
                    colorUtils.makeTransparentBackground(this._$colorResultPreview, this.option("value"))
                }
            },
            _renderValue: function() {
                var value = this.option("value");
                this.option("text", this.option("editAlphaChannel") ? colorUtils.makeRgba(value) : value);
                return this.callBase()
            },
            _resetInputValue: function() {
                var $input = this._input();
                var value = this.option("value");
                $input.val(value);
                this._updateColorViewValue(value)
            },
            _updateColorViewValue: function(value) {
                if (this._colorView) {
                    this._colorView.option({
                        value: value,
                        matchValue: value
                    })
                }
            },
            _valueChangeEventHandler: function(e) {
                var value = this._input().val();
                if (value) {
                    value = this._applyColorFromInput(value);
                    this._updateColorViewValue(value)
                }
                this.callBase(e, value)
            },
            _applyColorFromInput: function(value) {
                var newColor = new Color(value);
                if (newColor.colorIsInvalid) {
                    this._resetInputValue();
                    value = this.option("value")
                }
                return value
            },
            _optionChanged: function(args) {
                var value = args.value;
                var name = args.name;
                switch (name) {
                    case "value":
                        this._$colorBoxInputContainer.toggleClass(COLOR_BOX_COLOR_IS_NOT_DEFINED, !value);
                        if (value) {
                            colorUtils.makeTransparentBackground(this._$colorResultPreview, value)
                        } else {
                            this._$colorResultPreview.removeAttr("style")
                        }
                        this._updateColorViewValue(value);
                        this.callBase(args);
                        break;
                    case "applyButtonText":
                    case "cancelButtonText":
                        this.callBase(args);
                        this._popup && this._addPopupBottomClasses();
                        break;
                    case "editAlphaChannel":
                    case "keyStep":
                        if (this._colorView) {
                            this._colorView.option(name, value)
                        }
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxColorBox", ColorBox);
        module.exports = ColorBox
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var NumberBoxMask = __webpack_require__( /*! ./number_box.mask */ 557);
        registerComponent("dxNumberBox", NumberBoxMask);
        module.exports = NumberBoxMask
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.mask.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric;
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 31).fitIntoRange;
        var inRange = __webpack_require__( /*! ../../core/utils/math */ 31).inRange;
        var number = __webpack_require__( /*! ../../localization/number */ 49);
        var maskCaret = __webpack_require__( /*! ./number_box.caret */ 558);
        var getLDMLFormat = __webpack_require__( /*! ../../localization/ldml/number */ 297).getFormat;
        var NumberBoxBase = __webpack_require__( /*! ./number_box.base */ 559);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _require = __webpack_require__( /*! ../../core/utils/common */ 3),
            ensureDefined = _require.ensureDefined,
            escapeRegExp = _require.escapeRegExp;
        var NUMBER_FORMATTER_NAMESPACE = "dxNumberFormatter";
        var MOVE_FORWARD = 1;
        var MOVE_BACKWARD = -1;
        var MINUS = "-";
        var MINUS_KEY = "minus";
        var NUMPUD_MINUS_KEY_IE = "Subtract";
        var INPUT_EVENT = "input";
        var CARET_TIMEOUT_DURATION = browser.msie ? 300 : 0;
        var NumberBoxMask = NumberBoxBase.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    useMaskBehavior: true,
                    format: null
                })
            },
            _isDeleteKey: function(key) {
                return "del" === key
            },
            _supportedKeys: function() {
                if (!this._useMaskBehavior()) {
                    return this.callBase()
                }
                var that = this;
                return extend(this.callBase(), {
                    minus: that._revertSign.bind(that),
                    del: that._removeHandler.bind(that),
                    backspace: that._removeHandler.bind(that),
                    leftArrow: that._arrowHandler.bind(that, MOVE_BACKWARD),
                    rightArrow: that._arrowHandler.bind(that, MOVE_FORWARD),
                    home: that._moveCaretToBoundaryEventHandler.bind(that, MOVE_FORWARD),
                    enter: that._updateFormattedValue.bind(that),
                    end: that._moveCaretToBoundaryEventHandler.bind(that, MOVE_BACKWARD)
                })
            },
            _focusInHandler: function(e) {
                if (!this._preventNestedFocusEvent(e)) {
                    this.clearCaretTimeout();
                    this._caretTimeout = setTimeout(function() {
                        this._caretTimeout = null;
                        var caret = this._caret();
                        if (caret.start === caret.end && this._useMaskBehavior()) {
                            var text = this._getInputVal();
                            var decimalSeparator = number.getDecimalSeparator();
                            var decimalSeparatorIndex = text.indexOf(decimalSeparator);
                            if (decimalSeparatorIndex >= 0) {
                                this._caret({
                                    start: decimalSeparatorIndex,
                                    end: decimalSeparatorIndex
                                })
                            } else {
                                this._moveCaretToBoundaryEventHandler(MOVE_BACKWARD, e)
                            }
                        }
                    }.bind(this), CARET_TIMEOUT_DURATION)
                }
                this.callBase(e)
            },
            _focusOutHandler: function(e) {
                var shouldHandleEvent = !this._preventNestedFocusEvent(e);
                if (shouldHandleEvent) {
                    this._focusOutOccurs = true;
                    if (this._useMaskBehavior()) {
                        this._updateFormattedValue()
                    }
                }
                this.callBase(e);
                if (shouldHandleEvent) {
                    this._focusOutOccurs = false
                }
            },
            _hasValueBeenChanged: function(inputValue) {
                var format = this._getFormatPattern();
                var value = this.option("value");
                var formatted = this._format(value, format) || "";
                return formatted !== inputValue
            },
            _updateFormattedValue: function() {
                var inputValue = this._getInputVal();
                if (this._hasValueBeenChanged(inputValue)) {
                    this._parsedValue = this._tryParse(inputValue, this._caret());
                    this._adjustParsedValue();
                    this._setTextByParsedValue();
                    if (this._parsedValue !== this.option("value")) {
                        eventsEngine.trigger(this._input(), "change")
                    }
                }
            },
            _arrowHandler: function(step, e) {
                if (!this._useMaskBehavior()) {
                    return
                }
                var text = this._getInputVal();
                var format = this._getFormatPattern();
                var nextCaret = maskCaret.getCaretWithOffset(this._caret(), step);
                if (!maskCaret.isCaretInBoundaries(nextCaret, text, format)) {
                    nextCaret = step === MOVE_FORWARD ? nextCaret.end : nextCaret.start;
                    e.preventDefault();
                    this._caret(maskCaret.getCaretInBoundaries(nextCaret, text, format))
                }
            },
            _moveCaretToBoundary: function(direction) {
                var boundaries = maskCaret.getCaretBoundaries(this._getInputVal(), this._getFormatPattern());
                var newCaret = maskCaret.getCaretWithOffset(direction === MOVE_FORWARD ? boundaries.start : boundaries.end, 0);
                this._caret(newCaret)
            },
            _moveCaretToBoundaryEventHandler: function(direction, e) {
                if (!this._useMaskBehavior() || e && e.shiftKey) {
                    return
                }
                this._moveCaretToBoundary(direction);
                e && e.preventDefault()
            },
            _shouldMoveCaret: function(text, caret) {
                var decimalSeparator = number.getDecimalSeparator();
                var isDecimalSeparatorNext = text.charAt(caret.end) === decimalSeparator;
                var isZeroNext = "0" === text.charAt(caret.end);
                var moveToFloat = (this._lastKey === decimalSeparator || "." === this._lastKey) && isDecimalSeparatorNext;
                var zeroToZeroReplace = "0" === this._lastKey && isZeroNext;
                return moveToFloat || zeroToZeroReplace
            },
            _getInputVal: function() {
                return number.convertDigits(this._input().val(), true)
            },
            _keyboardHandler: function(e) {
                this.clearCaretTimeout();
                this._lastKey = number.convertDigits(eventUtils.getChar(e), true);
                this._lastKeyName = eventUtils.normalizeKeyName(e);
                if (!this._shouldHandleKey(e.originalEvent)) {
                    return this.callBase(e)
                }
                var normalizedText = this._getInputVal();
                var caret = this._caret();
                var enteredChar = this._lastKeyName === MINUS_KEY ? "" : this._lastKey;
                var newValue = this._tryParse(normalizedText, caret, enteredChar);
                if (this._shouldMoveCaret(normalizedText, caret)) {
                    this._moveCaret(1);
                    e.originalEvent.preventDefault()
                }
                if (void 0 === newValue) {
                    if (this._lastKeyName !== MINUS_KEY) {
                        e.originalEvent.preventDefault()
                    }
                } else {
                    this._parsedValue = newValue
                }
                return this.callBase(e)
            },
            _keyPressHandler: function(e) {
                if (!this._useMaskBehavior()) {
                    this.callBase(e)
                }
            },
            _removeHandler: function(e) {
                var caret = this._caret();
                var text = this._getInputVal();
                var start = caret.start;
                var end = caret.end;
                this._lastKey = eventUtils.getChar(e);
                this._lastKeyName = eventUtils.normalizeKeyName(e);
                var isDeleteKey = this._isDeleteKey(this._lastKeyName);
                var isBackspaceKey = !isDeleteKey;
                if (start === end) {
                    var caretPosition = start;
                    var canDelete = isBackspaceKey && caretPosition > 0 || isDeleteKey && caretPosition < text.length;
                    if (canDelete) {
                        isDeleteKey && end++;
                        isBackspaceKey && start--
                    } else {
                        e.preventDefault();
                        return
                    }
                }
                var char = text.slice(start, end);
                if (this._isStub(char)) {
                    this._moveCaret(isDeleteKey ? 1 : -1);
                    if (this._parsedValue < 0 || 1 / this._parsedValue === -(1 / 0)) {
                        this._revertSign(e);
                        this._setTextByParsedValue()
                    }
                    e.preventDefault();
                    return
                }
                var decimalSeparator = number.getDecimalSeparator();
                if (char === decimalSeparator) {
                    var decimalSeparatorIndex = text.indexOf(decimalSeparator);
                    if (this._isNonStubAfter(decimalSeparatorIndex + 1)) {
                        this._moveCaret(isDeleteKey ? 1 : -1);
                        e.preventDefault()
                    }
                    return
                }
                if (end - start < text.length) {
                    var editedText = this._replaceSelectedText(text, {
                        start: start,
                        end: end
                    }, "");
                    var noDigits = editedText.search(/[0-9]/) < 0;
                    if (noDigits && this._isValueInRange(0)) {
                        this._parsedValue = this._parsedValue < 0 || 1 / this._parsedValue === -(1 / 0) ? -0 : 0;
                        return
                    }
                }
                var valueAfterRemoving = this._tryParse(text, {
                    start: start,
                    end: end
                }, "");
                if (void 0 === valueAfterRemoving) {
                    e.preventDefault()
                } else {
                    this._parsedValue = valueAfterRemoving
                }
            },
            _isPercentFormat: function() {
                var format = this._getFormatPattern();
                var noEscapedFormat = format.replace(/'[^']+'/g, "");
                return noEscapedFormat.indexOf("%") !== -1
            },
            _parse: function(text, format) {
                var formatOption = this.option("format");
                var isCustomParser = typeUtils.isFunction(formatOption.parser);
                var parser = isCustomParser ? formatOption.parser : number.parse;
                var formatPointIndex = format.indexOf(".");
                var textPointIndex = text.indexOf(number.getDecimalSeparator());
                var formatIntegerPartLength = formatPointIndex !== -1 ? formatPointIndex : format.length;
                var textIntegerPartLength = textPointIndex !== -1 ? textPointIndex : text.length;
                if (textIntegerPartLength > formatIntegerPartLength && format.indexOf("#") === -1) {
                    text = text.substr(textIntegerPartLength - formatIntegerPartLength)
                }
                return parser(text, format)
            },
            _format: function(value, format) {
                var formatOption = this.option("format");
                var isCustomFormatter = typeUtils.isFunction(formatOption.formatter);
                var formatter = isCustomFormatter ? formatOption.formatter : number.format;
                return formatter(value, format)
            },
            _getFormatPattern: function() {
                var format = this.option("format");
                var isLDMLPattern = "string" === typeof format && (format.indexOf("0") >= 0 || format.indexOf("#") >= 0);
                if (isLDMLPattern) {
                    return format
                } else {
                    return getLDMLFormat(function(value) {
                        var text = this._format(value, format);
                        return number.convertDigits(text, true)
                    }.bind(this))
                }
            },
            _getFormatForSign: function(text) {
                var format = this._getFormatPattern();
                var signParts = format.split(";");
                var sign = number.getSign(text, format);
                signParts[1] = signParts[1] || "-" + signParts[0];
                return sign < 0 ? signParts[1] : signParts[0]
            },
            _removeStubs: function(text, excludeComma) {
                var format = this._getFormatForSign(text);
                var thousandsSeparator = number.getThousandsSeparator();
                var stubs = this._getStubs(format);
                var result = text;
                if (stubs.length) {
                    var prefixStubs = stubs[0];
                    var postfixRegex = new RegExp("(" + escapeRegExp(stubs[1] || "") + ")$", "g");
                    var decoratorsRegex = new RegExp("[-" + escapeRegExp(excludeComma ? "" : thousandsSeparator) + "]", "g");
                    result = result.replace(prefixStubs, "").replace(postfixRegex, "").replace(decoratorsRegex, "")
                }
                return result
            },
            _getStubs: function(format) {
                var regExpResult = /[^']([#0.,]+)/g.exec(format);
                var pattern = regExpResult && regExpResult[0].trim();
                return format.split(pattern).map(function(stub) {
                    return stub.replace(/'/g, "")
                })
            },
            _truncateToPrecision: function(value, maxPrecision) {
                if (typeUtils.isDefined(value)) {
                    var strValue = value.toString();
                    var decimalSeparatorIndex = strValue.indexOf(".");
                    if (strValue && decimalSeparatorIndex > -1) {
                        var parsedValue = parseFloat(strValue.substr(0, decimalSeparatorIndex + maxPrecision + 1));
                        return isNaN(parsedValue) ? value : parsedValue
                    }
                }
                return value
            },
            _tryParse: function(text, selection, char) {
                var editedText = this._replaceSelectedText(text, selection, char);
                var format = this._getFormatPattern();
                var isTextSelected = selection.start !== selection.end;
                var parsedValue = this._getParsedValue(editedText, format);
                var maxPrecision = this._getPrecisionLimits(format, editedText).max;
                var isValueChanged = parsedValue !== this._parsedValue;
                var decimalSeparator = number.getDecimalSeparator();
                var isDecimalPointRestricted = char === decimalSeparator && 0 === maxPrecision;
                var isUselessCharRestricted = !isTextSelected && !isValueChanged && char !== MINUS && !this._isValueIncomplete(editedText) && this._isStub(char);
                if (isDecimalPointRestricted || isUselessCharRestricted) {
                    return
                }
                if ("" === this._removeStubs(editedText)) {
                    parsedValue = Math.abs(0 * this._parsedValue)
                }
                if (isNaN(parsedValue)) {
                    return
                }
                var value = null === parsedValue ? this._parsedValue : parsedValue;
                parsedValue = this._truncateToPrecision(value, maxPrecision);
                return this._isPercentFormat() ? parsedValue && parsedValue / 100 : parsedValue
            },
            _getParsedValue: function(text, format) {
                var sign = number.getSign(text, format);
                var textWithoutStubs = this._removeStubs(text, true);
                var parsedValue = this._parse(textWithoutStubs, format);
                var parsedValueWithSign = parsedValue ? sign * parsedValue : parsedValue;
                return parsedValueWithSign
            },
            _isValueIncomplete: function(text) {
                if (!this._useMaskBehavior()) {
                    return this.callBase(text)
                }
                var caret = this._caret();
                var point = number.getDecimalSeparator();
                var pointIndex = text.indexOf(point);
                var isCaretOnFloat = pointIndex >= 0 && pointIndex < caret.start;
                var textParts = this._removeStubs(text, true).split(point);
                if (!isCaretOnFloat || 2 !== textParts.length) {
                    return false
                }
                var floatLength = textParts[1].length;
                var precision = this._getPrecisionLimits(this._getFormatPattern(), text);
                var isPrecisionInRange = inRange(floatLength, precision.min, precision.max);
                var endsWithZero = "0" === textParts[1].charAt(floatLength - 1);
                return isPrecisionInRange && (endsWithZero || !floatLength)
            },
            _isValueInRange: function(value) {
                var min = ensureDefined(this.option("min"), -(1 / 0));
                var max = ensureDefined(this.option("max"), 1 / 0);
                return inRange(value, min, max)
            },
            _setInputText: function(text) {
                var normalizedText = number.convertDigits(text, true);
                var newCaret = maskCaret.getCaretAfterFormat(this._getInputVal(), normalizedText, this._caret(), this._getFormatPattern());
                this._input().val(text);
                this._toggleEmptinessEventHandler();
                this._formattedValue = text;
                if (!this._focusOutOccurs) {
                    this._caret(newCaret)
                }
            },
            _useMaskBehavior: function() {
                return !!this.option("format") && this.option("useMaskBehavior")
            },
            _renderInputType: function() {
                var isNumberType = "number" === this.option("mode");
                var isDesktop = "desktop" === devices.real().deviceType;
                if (this._useMaskBehavior() && isNumberType) {
                    this._setInputType(isDesktop || this._isSupportInputMode() ? "text" : "tel")
                } else {
                    this.callBase()
                }
            },
            _isChar: function(str) {
                return "string" === typeof str && 1 === str.length
            },
            _moveCaret: function(offset) {
                if (!offset) {
                    return
                }
                var newCaret = maskCaret.getCaretWithOffset(this._caret(), offset);
                var adjustedCaret = maskCaret.getCaretInBoundaries(newCaret, this._getInputVal(), this._getFormatPattern());
                this._caret(adjustedCaret)
            },
            _shouldHandleKey: function(e) {
                var keyName = eventUtils.normalizeKeyName(e);
                var isSpecialChar = e.ctrlKey || e.shiftKey || e.altKey || !this._isChar(keyName);
                var isMinusKey = keyName === MINUS_KEY;
                var useMaskBehavior = this._useMaskBehavior();
                return useMaskBehavior && !isSpecialChar && !isMinusKey
            },
            _renderInput: function() {
                this.callBase();
                this._renderFormatter()
            },
            _renderFormatter: function() {
                this._clearCache();
                this._detachFormatterEvents();
                if (this._useMaskBehavior()) {
                    this._attachFormatterEvents()
                }
            },
            _detachFormatterEvents: function() {
                eventsEngine.off(this._input(), "." + NUMBER_FORMATTER_NAMESPACE)
            },
            _isInputFromPaste: function(e) {
                var inputType = e.originalEvent && e.originalEvent.inputType;
                if (typeUtils.isDefined(inputType)) {
                    return "insertFromPaste" === inputType
                } else {
                    return this._isValuePasted
                }
            },
            _attachFormatterEvents: function() {
                var $input = this._input();
                eventsEngine.on($input, eventUtils.addNamespace(INPUT_EVENT, NUMBER_FORMATTER_NAMESPACE), function(e) {
                    this._formatValue(e);
                    this._isValuePasted = false
                }.bind(this));
                if (browser.msie && browser.version < 12) {
                    eventsEngine.on($input, eventUtils.addNamespace("paste", NUMBER_FORMATTER_NAMESPACE), function() {
                        this._isValuePasted = true
                    }.bind(this))
                }
                eventsEngine.on($input, eventUtils.addNamespace("dxclick", NUMBER_FORMATTER_NAMESPACE), function() {
                    if (!this._caretTimeout) {
                        this._caretTimeout = setTimeout(function() {
                            this._caret(maskCaret.getCaretInBoundaries(this._caret(), this._getInputVal(), this._getFormatPattern()))
                        }.bind(this), CARET_TIMEOUT_DURATION)
                    }
                }.bind(this));
                eventsEngine.on($input, "dxdblclick", function() {
                    this.clearCaretTimeout()
                }.bind(this))
            },
            clearCaretTimeout: function() {
                clearTimeout(this._caretTimeout);
                this._caretTimeout = null
            },
            _forceRefreshInputValue: function() {
                if (!this._useMaskBehavior()) {
                    return this.callBase()
                }
            },
            _isNonStubAfter: function(index, text) {
                text = (text || this._getInputVal()).slice(index);
                return text && !this._isStub(text, true)
            },
            _isStub: function(str, isString) {
                var escapedDecimalSeparator = escapeRegExp(number.getDecimalSeparator());
                var regExpString = "^[^0-9" + escapedDecimalSeparator + "]+$";
                var stubRegExp = new RegExp(regExpString, "g");
                return stubRegExp.test(str) && (isString || this._isChar(str))
            },
            _parseValue: function(text) {
                if (!this._useMaskBehavior()) {
                    return this.callBase(text)
                }
                return this._parsedValue
            },
            _getPrecisionLimits: function(text) {
                var currentFormat = this._getFormatForSign(text);
                var floatPart = (currentFormat.split(".")[1] || "").replace(/[^#0]/g, "");
                var minPrecision = floatPart.replace(/^(0*)#*/, "$1").length;
                var maxPrecision = floatPart.length;
                return {
                    min: minPrecision,
                    max: maxPrecision
                }
            },
            _revertSign: function(e) {
                if (!this._useMaskBehavior()) {
                    return
                }
                var caret = this._caret();
                if (caret.start !== caret.end) {
                    if (eventUtils.normalizeKeyName(e) === MINUS_KEY) {
                        this._applyRevertedSign(e, caret, true);
                        return
                    } else {
                        this._caret(maskCaret.getCaretInBoundaries(0, this._getInputVal(), this._getFormatPattern()))
                    }
                }
                this._applyRevertedSign(e, caret)
            },
            _applyRevertedSign: function(e, caret, preserveSelectedText) {
                var newValue = -1 * ensureDefined(this._parsedValue, null);
                if (this._isValueInRange(newValue)) {
                    this._parsedValue = newValue;
                    if (preserveSelectedText) {
                        var format = this._getFormatPattern();
                        var previousText = this._getInputVal();
                        this._setTextByParsedValue();
                        e.preventDefault();
                        var currentText = this._getInputVal();
                        var offset = maskCaret.getCaretOffset(previousText, currentText, format);
                        caret = maskCaret.getCaretWithOffset(caret, offset);
                        var caretInBoundaries = maskCaret.getCaretInBoundaries(caret, currentText, format);
                        if (browser.msie) {
                            clearTimeout(this._caretTimeout);
                            this._caretTimeout = setTimeout(this._caret.bind(this, caretInBoundaries))
                        } else {
                            this._caret(caretInBoundaries)
                        }
                    }
                    if (e.key === NUMPUD_MINUS_KEY_IE) {
                        eventsEngine.trigger(this._input(), INPUT_EVENT)
                    }
                }
            },
            _removeMinusFromText: function(text, caret) {
                var isMinusPressed = this._lastKeyName === MINUS_KEY && text.charAt(caret.start - 1) === MINUS;
                return isMinusPressed ? this._replaceSelectedText(text, {
                    start: caret.start - 1,
                    end: caret.start
                }, "") : text
            },
            _setTextByParsedValue: function() {
                var format = this._getFormatPattern();
                var parsed = this._parseValue();
                var formatted = this._format(parsed, format) || "";
                this._setInputText(formatted)
            },
            _formatValue: function(e) {
                var normalizedText = this._getInputVal();
                var caret = this._caret();
                var textWithoutMinus = this._removeMinusFromText(normalizedText, caret);
                var wasMinusRemoved = textWithoutMinus !== normalizedText;
                normalizedText = textWithoutMinus;
                if (!this._isInputFromPaste(e) && this._isValueIncomplete(textWithoutMinus)) {
                    this._formattedValue = normalizedText;
                    if (wasMinusRemoved) {
                        this._setTextByParsedValue()
                    }
                    return
                }
                var textWasChanged = number.convertDigits(this._formattedValue, true) !== normalizedText;
                if (textWasChanged) {
                    var value = this._tryParse(normalizedText, caret, "");
                    if (typeUtils.isDefined(value)) {
                        this._parsedValue = value
                    }
                }
                this._setTextByParsedValue()
            },
            _renderDisplayText: function() {
                if (this._useMaskBehavior()) {
                    this._toggleEmptinessEventHandler()
                } else {
                    this.callBase.apply(this, arguments)
                }
            },
            _renderValue: function() {
                if (this._useMaskBehavior()) {
                    this._parsedValue = this.option("value");
                    this._setTextByParsedValue()
                }
                return this.callBase()
            },
            _adjustParsedValue: function() {
                if (!this._useMaskBehavior()) {
                    return
                }
                var clearedText = this._removeStubs(this._getInputVal());
                var parsedValue = clearedText ? this._parseValue() : null;
                if (!isNumeric(parsedValue)) {
                    this._parsedValue = parsedValue;
                    return
                }
                this._parsedValue = fitIntoRange(parsedValue, this.option("min"), this.option("max"))
            },
            _valueChangeEventHandler: function(e) {
                if (!this._useMaskBehavior()) {
                    return this.callBase(e)
                }
                var caret = this._caret();
                this._saveValueChangeEvent(e);
                this._lastKey = null;
                this._lastKeyName = null;
                this._adjustParsedValue();
                this.option("value", this._parsedValue);
                if (caret) {
                    this._caret(caret)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "format":
                    case "useMaskBehavior":
                        this._renderFormatter();
                        this._renderValue();
                        break;
                    case "min":
                    case "max":
                        this._adjustParsedValue();
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clearCache: function() {
                delete this._formattedValue;
                delete this._lastKey;
                delete this._lastKeyName;
                delete this._parsedValue;
                delete this._focusOutOccurs;
                clearTimeout(this._caretTimeout);
                delete this._caretTimeout
            },
            _clean: function() {
                this._clearCache();
                this.callBase()
            }
        });
        module.exports = NumberBoxMask
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.caret.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 31).fitIntoRange;
        var escapeRegExp = __webpack_require__( /*! ../../core/utils/common */ 3).escapeRegExp;
        var number = __webpack_require__( /*! ../../localization/number */ 49);
        var getCaretBoundaries = function(text, format) {
            var signParts = format.split(";");
            var sign = number.getSign(text, format);
            signParts[1] = signParts[1] || "-" + signParts[0];
            format = signParts[sign < 0 ? 1 : 0];
            var mockEscapedStubs = function(str) {
                return str.replace(/'([^']*)'/g, function(str) {
                    return str.split("").map(function() {
                        return " "
                    }).join("").substr(2)
                })
            };
            format = mockEscapedStubs(format);
            var prefixStubLength = /^[^#0.,]*/.exec(format)[0].length;
            var postfixStubLength = /[^#0.,]*$/.exec(format)[0].length;
            return {
                start: prefixStubLength,
                end: text.length - postfixStubLength
            }
        };
        var _getDigitCountBeforeIndex = function(index, text) {
            var decimalSeparator = number.getDecimalSeparator();
            var regExp = new RegExp("[^0-9" + escapeRegExp(decimalSeparator) + "]", "g");
            var textBeforePosition = text.slice(0, index);
            return textBeforePosition.replace(regExp, "").length
        };
        var _reverseText = function(text) {
            return text.split("").reverse().join("")
        };
        var _getDigitPositionByIndex = function(digitIndex, text) {
            if (!digitIndex) {
                return -1
            }
            var regExp = /[0-9]/g;
            var counter = 1;
            var index = null;
            var result = regExp.exec(text);
            while (result) {
                index = result.index;
                if (!digitIndex || counter >= digitIndex) {
                    return index
                }
                counter++;
                result = regExp.exec(text)
            }
            return null === index ? text.length : index
        };
        var getCaretWithOffset = function(caret, offset) {
            if (void 0 === caret.start) {
                caret = {
                    start: caret,
                    end: caret
                }
            }
            return {
                start: caret.start + offset,
                end: caret.end + offset
            }
        };
        var getCaretAfterFormat = function(text, formatted, caret, format) {
            caret = getCaretWithOffset(caret, 0);
            var point = number.getDecimalSeparator();
            var isSeparatorBasedText = isSeparatorBasedString(text);
            var pointPosition = isSeparatorBasedText ? 0 : text.indexOf(point);
            var newPointPosition = formatted.indexOf(point);
            var textParts = isSeparatorBasedText ? text.split(text[pointPosition]) : text.split(point);
            var formattedParts = formatted.split(point);
            var isCaretOnFloat = pointPosition !== -1 && caret.start > pointPosition;
            if (isCaretOnFloat) {
                var relativeIndex = caret.start - pointPosition - 1;
                var digitsBefore = _getDigitCountBeforeIndex(relativeIndex, textParts[1]);
                var newPosition = formattedParts[1] ? newPointPosition + 1 + _getDigitPositionByIndex(digitsBefore, formattedParts[1]) + 1 : formatted.length;
                return getCaretInBoundaries(newPosition, formatted, format)
            } else {
                var positionFromEnd = textParts[0].length - caret.start;
                var digitsFromEnd = _getDigitCountBeforeIndex(positionFromEnd, _reverseText(textParts[0]));
                var newPositionFromEnd = _getDigitPositionByIndex(digitsFromEnd, _reverseText(formattedParts[0]));
                var newPositionFromBegin = formattedParts[0].length - (newPositionFromEnd + 1);
                return getCaretInBoundaries(newPositionFromBegin, formatted, format)
            }
        };

        function isSeparatorBasedString(text) {
            return 1 === text.length && !!text.match(/^[,.][0-9]*$/g)
        }
        var isCaretInBoundaries = function(caret, text, format) {
            caret = getCaretWithOffset(caret, 0);
            var boundaries = getCaretInBoundaries(caret, text, format);
            return caret.start >= boundaries.start && caret.end <= boundaries.end
        };

        function getCaretInBoundaries(caret, text, format) {
            caret = getCaretWithOffset(caret, 0);
            var boundaries = getCaretBoundaries(text, format);
            var adjustedCaret = {
                start: fitIntoRange(caret.start, boundaries.start, boundaries.end),
                end: fitIntoRange(caret.end, boundaries.start, boundaries.end)
            };
            return adjustedCaret
        }
        var getCaretOffset = function(previousText, newText, format) {
            var previousBoundaries = getCaretBoundaries(previousText, format);
            var newBoundaries = getCaretBoundaries(newText, format);
            return newBoundaries.start - previousBoundaries.start
        };
        exports.getCaretBoundaries = getCaretBoundaries;
        exports.isCaretInBoundaries = isCaretInBoundaries;
        exports.getCaretWithOffset = getCaretWithOffset;
        exports.getCaretInBoundaries = getCaretInBoundaries;
        exports.getCaretAfterFormat = getCaretAfterFormat;
        exports.getCaretOffset = getCaretOffset
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.base.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var mathUtils = __webpack_require__( /*! ../../core/utils/math */ 31);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var TextEditor = __webpack_require__( /*! ../text_box/ui.text_editor */ 310);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var SpinButtons = __webpack_require__( /*! ./number_box.spins */ 560).default;
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var math = Math;
        var WIDGET_CLASS = "dx-numberbox";
        var FIREFOX_CONTROL_KEYS = ["tab", "del", "backspace", "leftArrow", "rightArrow", "home", "end", "enter"];
        var FORCE_VALUECHANGE_EVENT_NAMESPACE = "NumberBoxForceValueChange";
        var NumberBoxBase = TextEditor.inherit({
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    upArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        this._spinUpChangeHandler(e)
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        this._spinDownChangeHandler(e)
                    },
                    enter: function() {}
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: 0,
                    min: void 0,
                    max: void 0,
                    step: 1,
                    showSpinButtons: false,
                    useLargeSpinButtons: true,
                    mode: "text",
                    invalidValueMessage: messageLocalization.format("dxNumberBox-invalidValueMessage"),
                    buttons: void 0
                })
            },
            _getDefaultButtons: function() {
                return this.callBase().concat([{
                    name: "spins",
                    Ctor: SpinButtons
                }])
            },
            _isSupportInputMode: function() {
                var version = parseFloat(browser.version);
                return browser.chrome && version >= 66 || browser.safari && version >= 12 || browser.msie && version >= 75
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return devices.real().generic && !devices.isSimulator()
                    },
                    options: {
                        useLargeSpinButtons: false
                    }
                }, {
                    device: function() {
                        return "desktop" !== devices.real().deviceType && !this._isSupportInputMode()
                    }.bind(this),
                    options: {
                        mode: "number"
                    }
                }])
            },
            _initMarkup: function() {
                this._renderSubmitElement();
                this.$element().addClass(WIDGET_CLASS);
                this.callBase()
            },
            _applyInputAttributes: function($input, customAttributes) {
                $input.attr("inputmode", "decimal");
                this.callBase($input, customAttributes)
            },
            _renderContentImpl: function() {
                this.option("isValid") && this._validateValue(this.option("value"));
                this.setAria("role", "spinbutton")
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element());
                this._setSubmitValue(this.option("value"))
            },
            _setSubmitValue: function(value) {
                this._getSubmitElement().val(commonUtils.applyServerDecimalSeparator(value))
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _keyPressHandler: function(e) {
                this.callBase(e);
                var char = eventUtils.getChar(e);
                var validCharRegExp = /[\d.,eE\-+]|Subtract/;
                var isInputCharValid = validCharRegExp.test(char);
                if (!isInputCharValid) {
                    var keyName = eventUtils.normalizeKeyName(e);
                    if (e.metaKey || e.ctrlKey || keyName && inArray(keyName, FIREFOX_CONTROL_KEYS) >= 0) {
                        return
                    }
                    e.preventDefault();
                    return false
                }
                this._keyPressed = true
            },
            _onMouseWheel: function(dxEvent) {
                dxEvent.delta > 0 ? this._spinValueChange(1, dxEvent) : this._spinValueChange(-1, dxEvent)
            },
            _renderValue: function() {
                var inputValue = this._input().val();
                var value = this.option("value");
                if (!inputValue.length || Number(inputValue) !== value) {
                    this._forceValueRender();
                    this._toggleEmptinessEventHandler()
                }
                var valueText = typeUtils.isDefined(value) ? null : messageLocalization.format("dxNumberBox-noDataText");
                this.setAria({
                    valuenow: commonUtils.ensureDefined(value, ""),
                    valuetext: valueText
                });
                this.option("text", this._input().val());
                this._updateButtons();
                return (new Deferred).resolve()
            },
            _forceValueRender: function() {
                var value = this.option("value");
                var number = Number(value);
                var formattedValue = isNaN(number) ? "" : this._applyDisplayValueFormatter(value);
                this._renderDisplayText(formattedValue)
            },
            _applyDisplayValueFormatter: function(value) {
                return this.option("displayValueFormatter")(value)
            },
            _renderProps: function() {
                this.callBase();
                this._input().prop({
                    min: this.option("min"),
                    max: this.option("max"),
                    step: this.option("step")
                });
                this.setAria({
                    valuemin: commonUtils.ensureDefined(this.option("min"), ""),
                    valuemax: commonUtils.ensureDefined(this.option("max"), "")
                })
            },
            _spinButtonsPointerDownHandler: function() {
                var $input = this._input();
                if (!this.option("useLargeSpinButtons") && domAdapter.getActiveElement() !== $input[0]) {
                    eventsEngine.trigger($input, "focus")
                }
            },
            _spinUpChangeHandler: function(e) {
                if (!this.option("readOnly")) {
                    this._spinValueChange(1, e.event || e)
                }
            },
            _spinDownChangeHandler: function(e) {
                if (!this.option("readOnly")) {
                    this._spinValueChange(-1, e.event || e)
                }
            },
            _spinValueChange: function(sign, dxEvent) {
                var step = parseFloat(this.option("step"));
                if (0 === step) {
                    return
                }
                var value = parseFloat(this._normalizeInputValue()) || 0;
                value = this._correctRounding(value, step * sign);
                var min = this.option("min");
                var max = this.option("max");
                if (typeUtils.isDefined(min)) {
                    value = Math.max(min, value)
                }
                if (typeUtils.isDefined(max)) {
                    value = Math.min(max, value)
                }
                this._saveValueChangeEvent(dxEvent);
                this.option("value", value)
            },
            _correctRounding: function(value, step) {
                var regex = /[,.](.*)/;
                var isFloatValue = regex.test(value);
                var isFloatStep = regex.test(step);
                if (isFloatValue || isFloatStep) {
                    var valueAccuracy = isFloatValue ? regex.exec(value)[0].length : 0;
                    var stepAccuracy = isFloatStep ? regex.exec(step)[0].length : 0;
                    var accuracy = math.max(valueAccuracy, stepAccuracy);
                    value = this._round(value + step, accuracy);
                    return value
                }
                return value + step
            },
            _round: function(value, precision) {
                precision = precision || 0;
                var multiplier = Math.pow(10, precision);
                value *= multiplier;
                value = Math.round(value) / multiplier;
                return value
            },
            _renderValueChangeEvent: function() {
                this.callBase();
                var forceValueChangeEvent = eventUtils.addNamespace("focusout", FORCE_VALUECHANGE_EVENT_NAMESPACE);
                eventsEngine.off(this.element(), forceValueChangeEvent);
                eventsEngine.on(this.element(), forceValueChangeEvent, this._forceRefreshInputValue.bind(this))
            },
            _forceRefreshInputValue: function() {
                if ("number" === this.option("mode")) {
                    return
                }
                var $input = this._input();
                var formattedValue = this._applyDisplayValueFormatter(this.option("value"));
                $input.val(null);
                $input.val(formattedValue)
            },
            _valueChangeEventHandler: function(e) {
                var $input = this._input();
                var inputValue = this._normalizeText();
                var value = this._parseValue(inputValue);
                var valueHasDigits = "." !== inputValue && "-" !== inputValue;
                if (this._isValueValid() && !this._validateValue(value)) {
                    $input.val(this._applyDisplayValueFormatter(value));
                    return
                }
                if (valueHasDigits) {
                    this.callBase(e, isNaN(value) ? null : value)
                }
                this._applyValueBoundaries(inputValue, value);
                this.validationRequest.fire({
                    value: value,
                    editor: this
                })
            },
            _applyValueBoundaries: function(inputValue, parsedValue) {
                var isValueIncomplete = this._isValueIncomplete(inputValue);
                var isValueCorrect = this._isValueInRange(inputValue);
                if (!isValueIncomplete && !isValueCorrect && null !== parsedValue) {
                    if (Number(inputValue) !== parsedValue) {
                        this._input().val(this._applyDisplayValueFormatter(parsedValue))
                    }
                }
            },
            _replaceCommaWithPoint: function(value) {
                return value.replace(",", ".")
            },
            _inputIsInvalid: function() {
                var isNumberMode = "number" === this.option("mode");
                var validityState = this._input().get(0).validity;
                return isNumberMode && validityState && validityState.badInput
            },
            _renderDisplayText: function(text) {
                if (this._inputIsInvalid()) {
                    return
                }
                this.callBase(text)
            },
            _isValueIncomplete: function(value) {
                var incompleteRegex = /(^-$)|(^-?\d*\.$)|(\d+e-?$)/i;
                return incompleteRegex.test(value)
            },
            _isValueInRange: function(value) {
                return mathUtils.inRange(value, this.option("min"), this.option("max"))
            },
            _isNumber: function(value) {
                return null !== this._parseValue(value)
            },
            _validateValue: function(value) {
                var inputValue = this._normalizeText();
                var isValueValid = this._isValueValid();
                var isValid = true;
                var isNumber = this._isNumber(inputValue);
                if (isNaN(Number(value))) {
                    isValid = false
                }
                if (!value && isValueValid) {
                    isValid = true
                } else {
                    if (!isNumber && !isValueValid) {
                        isValid = false
                    }
                }
                this.option({
                    isValid: isValid,
                    validationError: isValid ? null : {
                        editorSpecific: true,
                        message: this.option("invalidValueMessage")
                    }
                });
                return isValid
            },
            _normalizeInputValue: function() {
                return this._parseValue(this._normalizeText())
            },
            _normalizeText: function() {
                var value = this._input().val().trim();
                return this._replaceCommaWithPoint(value)
            },
            _parseValue: function(value) {
                var number = parseFloat(value);
                if (isNaN(number)) {
                    return null
                }
                return mathUtils.fitIntoRange(number, this.option("min"), this.option("max"))
            },
            _clearValue: function() {
                if (this._inputIsInvalid()) {
                    this._input().val("");
                    this._validateValue()
                }
                this.callBase()
            },
            reset: function() {
                if (null === this.option("value")) {
                    this.option("text", "");
                    this._renderValue()
                } else {
                    this.option("value", null)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        this._validateValue(args.value);
                        this._setSubmitValue(args.value);
                        this.callBase(args);
                        this._resumeValueChangeAction();
                        break;
                    case "step":
                        this._renderProps();
                        break;
                    case "min":
                    case "max":
                        this._renderProps();
                        this.option("value", this._parseValue(this.option("value")));
                        break;
                    case "showSpinButtons":
                    case "useLargeSpinButtons":
                        this._updateButtons(["spins"]);
                        break;
                    case "invalidValueMessage":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = NumberBoxBase
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.spins.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _button = __webpack_require__( /*! ../text_box/texteditor_button_collection/button */ 194);
        var _button2 = _interopRequireDefault(_button);
        var _number_box = __webpack_require__( /*! ./number_box.spin */ 561);
        var _number_box2 = _interopRequireDefault(_number_box);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var SPIN_CLASS = "dx-numberbox-spin";
        var SPIN_CONTAINER_CLASS = "dx-numberbox-spin-container";
        var SPIN_TOUCH_FRIENDLY_CLASS = "dx-numberbox-spin-touch-friendly";
        var SpinButtons = function(_TextEditorButton) {
            _inherits(SpinButtons, _TextEditorButton);
            var _super = _createSuper(SpinButtons);

            function SpinButtons() {
                _classCallCheck(this, SpinButtons);
                return _super.apply(this, arguments)
            }
            _createClass(SpinButtons, [{
                key: "_attachEvents",
                value: function(instance, $spinContainer) {
                    var editor = this.editor;
                    var eventName = (0, _utils.addNamespace)(_pointer.down, editor.NAME);
                    var $spinContainerChildren = $spinContainer.children();
                    var pointerDownAction = editor._createAction(function(e) {
                        return editor._spinButtonsPointerDownHandler(e)
                    });
                    _events_engine2.default.off($spinContainer, eventName);
                    _events_engine2.default.on($spinContainer, eventName, function(e) {
                        return pointerDownAction({
                            event: e
                        })
                    });
                    _number_box2.default.getInstance($spinContainerChildren.eq(0)).option("onChange", function(e) {
                        return editor._spinUpChangeHandler(e)
                    });
                    _number_box2.default.getInstance($spinContainerChildren.eq(1)).option("onChange", function(e) {
                        return editor._spinDownChangeHandler(e)
                    })
                }
            }, {
                key: "_create",
                value: function() {
                    var editor = this.editor;
                    var $spinContainer = (0, _renderer2.default)("<div>").addClass(SPIN_CONTAINER_CLASS);
                    var $spinUp = (0, _renderer2.default)("<div>").appendTo($spinContainer);
                    var $spinDown = (0, _renderer2.default)("<div>").appendTo($spinContainer);
                    var options = this._getOptions();
                    this._addToContainer($spinContainer);
                    editor._createComponent($spinUp, _number_box2.default, (0, _extend.extend)({
                        direction: "up"
                    }, options));
                    editor._createComponent($spinDown, _number_box2.default, (0, _extend.extend)({
                        direction: "down"
                    }, options));
                    this._legacyRender(editor.$element(), this._isTouchFriendly(), options.visible);
                    return {
                        instance: $spinContainer,
                        $element: $spinContainer
                    }
                }
            }, {
                key: "_getOptions",
                value: function() {
                    var editor = this.editor;
                    var visible = this._isVisible();
                    var disabled = editor.option("disabled");
                    return {
                        visible: visible,
                        disabled: disabled
                    }
                }
            }, {
                key: "_isVisible",
                value: function() {
                    var editor = this.editor;
                    return _get(_getPrototypeOf(SpinButtons.prototype), "_isVisible", this).call(this) && editor.option("showSpinButtons")
                }
            }, {
                key: "_isTouchFriendly",
                value: function() {
                    var editor = this.editor;
                    return editor.option("showSpinButtons") && editor.option("useLargeSpinButtons")
                }
            }, {
                key: "_legacyRender",
                value: function($editor, isTouchFriendly, isVisible) {
                    $editor.toggleClass(SPIN_TOUCH_FRIENDLY_CLASS, isTouchFriendly);
                    $editor.toggleClass(SPIN_CLASS, isVisible)
                }
            }, {
                key: "update",
                value: function() {
                    var shouldUpdate = _get(_getPrototypeOf(SpinButtons.prototype), "update", this).call(this);
                    if (shouldUpdate) {
                        var editor = this.editor,
                            instance = this.instance;
                        var $editor = editor.$element();
                        var isVisible = this._isVisible();
                        var isTouchFriendly = this._isTouchFriendly();
                        var $spinButtons = instance.children();
                        var spinUp = _number_box2.default.getInstance($spinButtons.eq(0));
                        var spinDown = _number_box2.default.getInstance($spinButtons.eq(1));
                        var options = this._getOptions();
                        spinUp.option(options);
                        spinDown.option(options);
                        this._legacyRender($editor, isTouchFriendly, isVisible)
                    }
                }
            }]);
            return SpinButtons
        }(_button2.default);
        exports.default = SpinButtons
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/number_box/number_box.spin.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var Widget = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../../events/pointer */ 23);
        var feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 134);
        var holdEvent = __webpack_require__( /*! ../../events/hold */ 95);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var SPIN_CLASS = "dx-numberbox-spin";
        var SPIN_BUTTON_CLASS = "dx-numberbox-spin-button";
        var SPIN_HOLD_DELAY = 100;
        var NUMBER_BOX = "dxNumberBox";
        var POINTERUP_EVENT_NAME = eventUtils.addNamespace(pointerEvents.up, NUMBER_BOX);
        var POINTERCANCEL_EVENT_NAME = eventUtils.addNamespace(pointerEvents.cancel, NUMBER_BOX);
        var SpinButton = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    direction: "up",
                    onChange: null,
                    activeStateEnabled: true,
                    hoverStateEnabled: true
                })
            },
            _initMarkup: function() {
                this.callBase();
                var direction = SPIN_CLASS + "-" + this.option("direction");
                this.$element().addClass(SPIN_BUTTON_CLASS).addClass(direction);
                this._spinIcon = $("<div>").addClass(direction + "-icon").appendTo(this.$element())
            },
            _render: function() {
                this.callBase();
                var eventName = eventUtils.addNamespace(pointerEvents.down, this.NAME);
                var $element = this.$element();
                eventsEngine.off($element, eventName);
                eventsEngine.on($element, eventName, this._spinDownHandler.bind(this));
                this._spinChangeHandler = this._createActionByOption("onChange")
            },
            _spinDownHandler: function(e) {
                e.preventDefault();
                this._clearTimer();
                eventsEngine.on(this.$element(), holdEvent.name, function() {
                    this._feedBackDeferred = new Deferred;
                    feedbackEvents.lock(this._feedBackDeferred);
                    this._spinChangeHandler({
                        event: e
                    });
                    this._holdTimer = setInterval(this._spinChangeHandler, SPIN_HOLD_DELAY, {
                        event: e
                    })
                }.bind(this));
                var document = domAdapter.getDocument();
                eventsEngine.on(document, POINTERUP_EVENT_NAME, this._clearTimer.bind(this));
                eventsEngine.on(document, POINTERCANCEL_EVENT_NAME, this._clearTimer.bind(this));
                this._spinChangeHandler({
                    event: e
                })
            },
            _dispose: function() {
                this._clearTimer();
                this.callBase()
            },
            _clearTimer: function() {
                eventsEngine.off(this.$element(), holdEvent.name);
                var document = domAdapter.getDocument();
                eventsEngine.off(document, POINTERUP_EVENT_NAME);
                eventsEngine.off(document, POINTERCANCEL_EVENT_NAME);
                if (this._feedBackDeferred) {
                    this._feedBackDeferred.resolve()
                }
                if (this._holdTimer) {
                    clearInterval(this._holdTimer)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onChange":
                    case "direction":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = SpinButton
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var DateBoxMask = __webpack_require__( /*! ./ui.date_box.mask */ 563);
        registerComponent("dxDateBox", DateBoxMask);
        module.exports = DateBoxMask
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.mask.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _math = __webpack_require__( /*! ../../core/utils/math */ 31);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _uiDate_boxMask = __webpack_require__( /*! ./ui.date_box.mask.parts */ 564);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _date3 = __webpack_require__( /*! ../../localization/ldml/date.parser */ 217);
        var _date4 = __webpack_require__( /*! ../../localization/ldml/date.format */ 215);
        var _uiDate_box = __webpack_require__( /*! ./ui.date_box.base */ 565);
        var _uiDate_box2 = _interopRequireDefault(_uiDate_box);
        var _number = __webpack_require__( /*! ../../localization/number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MASK_EVENT_NAMESPACE = "dateBoxMask";
        var FORWARD = 1;
        var BACKWARD = -1;
        var DateBoxMask = _uiDate_box2.default.inherit({
            _supportedKeys: function(e) {
                var _this = this;
                var originalHandlers = this.callBase(e);
                var callOriginalHandler = function(e) {
                    var originalHandler = originalHandlers[(0, _utils.normalizeKeyName)(e)];
                    return originalHandler && originalHandler.apply(_this, [e])
                };
                var applyHandler = function(e, maskHandler) {
                    if (_this._shouldUseOriginalHandler(e)) {
                        return callOriginalHandler.apply(_this, [e])
                    } else {
                        return maskHandler.apply(_this, [e])
                    }
                };
                return (0, _extend.extend)({}, originalHandlers, {
                    del: function(e) {
                        return applyHandler(e, function(event) {
                            _this._revertPart(FORWARD);
                            _this._isAllSelected() || event.preventDefault()
                        })
                    },
                    backspace: function(e) {
                        return applyHandler(e, function(event) {
                            _this._revertPart(BACKWARD);
                            _this._isAllSelected() || event.preventDefault()
                        })
                    },
                    home: function(e) {
                        return applyHandler(e, function(event) {
                            _this._selectFirstPart();
                            event.preventDefault()
                        })
                    },
                    end: function(e) {
                        return applyHandler(e, function(event) {
                            _this._selectLastPart();
                            event.preventDefault()
                        })
                    },
                    escape: function(e) {
                        return applyHandler(e, function(event) {
                            _this._revertChanges(event)
                        })
                    },
                    enter: function(e) {
                        return applyHandler(e, function(event) {
                            _this._enterHandler(event)
                        })
                    },
                    leftArrow: function(e) {
                        return applyHandler(e, function(event) {
                            _this._selectNextPart(BACKWARD);
                            event.preventDefault()
                        })
                    },
                    rightArrow: function(e) {
                        return applyHandler(e, function(event) {
                            _this._selectNextPart(FORWARD);
                            event.preventDefault()
                        })
                    },
                    upArrow: function(e) {
                        return applyHandler(e, function(event) {
                            _this._upDownArrowHandler(FORWARD);
                            event.preventDefault()
                        })
                    },
                    downArrow: function(e) {
                        return applyHandler(e, function(event) {
                            _this._upDownArrowHandler(BACKWARD);
                            event.preventDefault()
                        })
                    }
                })
            },
            _shouldUseOriginalHandler: function(e) {
                var keysToHandleByMask = ["backspace", "del"];
                var isNotDeletingInCalendar = this.option("opened") && e && keysToHandleByMask.indexOf((0, _utils.normalizeKeyName)(e)) === -1;
                return !this._useMaskBehavior() || isNotDeletingInCalendar || e && e.altKey
            },
            _upDownArrowHandler: function(step) {
                this._setNewDateIfEmpty();
                var originalValue = this._getActivePartValue(this._initialMaskValue);
                var currentValue = this._getActivePartValue();
                var delta = currentValue - originalValue;
                this._loadMaskValue(this._initialMaskValue);
                this._partIncrease(delta + step, true)
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    useMaskBehavior: false,
                    emptyDateValue: new Date(2e3, 0, 1, 0, 0, 0)
                })
            },
            _isSingleCharKey: function(e) {
                var key = e.originalEvent.data || e.originalEvent.key;
                return "string" === typeof key && 1 === key.length && !e.ctrl && !e.alt
            },
            _useBeforeInputEvent: function() {
                var device = _devices2.default.real();
                return device.android && device.version[0] > 4
            },
            _keyboardHandler: function(e) {
                var key = e.originalEvent.key;
                var result = this.callBase(e);
                if (!this._useMaskBehavior() || this._useBeforeInputEvent() || !this._isSingleCharKey(e)) {
                    return result
                }
                this._processInputKey(key);
                e.originalEvent.preventDefault();
                return result
            },
            _maskBeforeInputHandler: function(e) {
                var _this2 = this;
                this._maskInputHandler = null;
                var inputType = e.originalEvent.inputType;
                if ("insertCompositionText" === inputType) {
                    this._maskInputHandler = function() {
                        _this2._renderDisplayText(_this2._getDisplayedText(_this2._maskValue));
                        _this2._selectNextPart()
                    }
                }
                var isBackwardDeletion = "deleteContentBackward" === inputType;
                var isForwardDeletion = "deleteContentForward" === inputType;
                if (isBackwardDeletion || isForwardDeletion) {
                    var direction = isBackwardDeletion ? BACKWARD : FORWARD;
                    this._maskInputHandler = function() {
                        _this2._revertPart();
                        _this2._selectNextPart(direction)
                    }
                }
                if (!this._useMaskBehavior() || !this._isSingleCharKey(e)) {
                    return
                }
                var key = e.originalEvent.data;
                this._processInputKey(key);
                e.preventDefault();
                return true
            },
            _keyPressHandler: function(e) {
                this.callBase(e);
                if (this._maskInputHandler) {
                    this._maskInputHandler();
                    this._maskInputHandler = null
                }
            },
            _processInputKey: function(key) {
                if (this._isAllSelected()) {
                    this._activePartIndex = 0
                }
                this._setNewDateIfEmpty();
                if (isNaN(parseInt(key))) {
                    this._searchString(key)
                } else {
                    this._searchNumber(key)
                }
            },
            _isAllSelected: function() {
                var caret = this._caret();
                return caret.end - caret.start === this.option("text").length
            },
            _getFormatPattern: function() {
                if (this._formatPattern) {
                    return this._formatPattern
                }
                var format = this._strategy.getDisplayFormat(this.option("displayFormat"));
                var isLDMLPattern = (0, _type.isString)(format) && !_date2.default._getPatternByFormat(format);
                if (isLDMLPattern) {
                    this._formatPattern = format
                } else {
                    this._formatPattern = (0, _date4.getFormat)(function(value) {
                        return _date2.default.format(value, format)
                    })
                }
                return this._formatPattern
            },
            _setNewDateIfEmpty: function() {
                if (!this._maskValue) {
                    var value = "time" === this.option("type") ? new Date(null) : new Date;
                    this._maskValue = value;
                    this._initialMaskValue = value;
                    this._renderDateParts()
                }
            },
            _partLimitsReached: function(max) {
                var maxLimitLength = String(max).length;
                var formatLength = this._getActivePartProp("pattern").length;
                var isShortFormat = 1 === formatLength;
                var maxSearchLength = isShortFormat ? maxLimitLength : Math.min(formatLength, maxLimitLength);
                var isLengthExceeded = this._searchValue.length === maxSearchLength;
                var isValueOverflowed = parseInt(this._searchValue + "0") > max;
                return isLengthExceeded || isValueOverflowed
            },
            _searchNumber: function(char) {
                var _this$_getActivePartL = this._getActivePartLimits(),
                    max = _this$_getActivePartL.max;
                var maxLimitLength = String(max).length;
                this._searchValue = (this._searchValue + char).substr(-maxLimitLength);
                if (isNaN(this._searchValue)) {
                    this._searchValue = char
                }
                this._setActivePartValue(this._searchValue);
                if (this._partLimitsReached(max)) {
                    this._selectNextPart(FORWARD)
                }
            },
            _searchString: function(char) {
                if (!isNaN(parseInt(this._getActivePartProp("text")))) {
                    return
                }
                var limits = this._getActivePartProp("limits")(this._maskValue);
                var startString = this._searchValue + char.toLowerCase();
                var endLimit = limits.max - limits.min;
                for (var i = 0; i <= endLimit; i++) {
                    this._loadMaskValue(this._initialMaskValue);
                    this._partIncrease(i + 1);
                    if (0 === this._getActivePartProp("text").toLowerCase().indexOf(startString)) {
                        this._searchValue = startString;
                        return
                    }
                }
                this._setNewDateIfEmpty();
                if (this._searchValue) {
                    this._clearSearchValue();
                    this._searchString(char)
                }
            },
            _clearSearchValue: function() {
                this._searchValue = ""
            },
            _revertPart: function(direction) {
                if (!this._isAllSelected()) {
                    var actual = this._getActivePartValue(this.option("emptyDateValue"));
                    this._setActivePartValue(actual);
                    this._selectNextPart(direction)
                }
                this._clearSearchValue()
            },
            _useMaskBehavior: function() {
                return this.option("useMaskBehavior") && "text" === this.option("mode")
            },
            _prepareRegExpInfo: function() {
                this._regExpInfo = (0, _date3.getRegExpInfo)(this._getFormatPattern(), _date2.default);
                var regExp = this._regExpInfo.regexp;
                var flags = regExp.flags;
                var convertedRegExp = _number2.default.convertDigits(this._regExpInfo.regexp.source, false);
                this._regExpInfo.regexp = RegExp(convertedRegExp, flags)
            },
            _initMaskState: function() {
                this._activePartIndex = 0;
                this._formatPattern = null;
                this._prepareRegExpInfo();
                this._loadMaskValue()
            },
            _renderMask: function() {
                this.callBase();
                this._detachMaskEvents();
                this._clearMaskState();
                if (this._useMaskBehavior()) {
                    this._attachMaskEvents();
                    this._initMaskState();
                    this._renderDateParts()
                }
            },
            _renderDateParts: function() {
                if (!this._useMaskBehavior()) {
                    return
                }
                var text = this.option("text") || this._getDisplayedText(this._maskValue);
                if (text) {
                    this._dateParts = (0, _uiDate_boxMask.renderDateParts)(text, this._regExpInfo);
                    this._isFocused() && this._selectNextPart()
                }
            },
            _detachMaskEvents: function() {
                _events_engine2.default.off(this._input(), "." + MASK_EVENT_NAMESPACE)
            },
            _attachMaskEvents: function() {
                var _this3 = this;
                _events_engine2.default.on(this._input(), (0, _utils.addNamespace)("dxclick", MASK_EVENT_NAMESPACE), this._maskClickHandler.bind(this));
                _events_engine2.default.on(this._input(), (0, _utils.addNamespace)("paste", MASK_EVENT_NAMESPACE), this._maskPasteHandler.bind(this));
                _events_engine2.default.on(this._input(), (0, _utils.addNamespace)("drop", MASK_EVENT_NAMESPACE), function() {
                    _this3._renderDisplayText(_this3._getDisplayedText(_this3._maskValue));
                    _this3._selectNextPart()
                });
                if (this._useBeforeInputEvent()) {
                    _events_engine2.default.on(this._input(), (0, _utils.addNamespace)("beforeinput", MASK_EVENT_NAMESPACE), this._maskBeforeInputHandler.bind(this))
                }
            },
            _selectLastPart: function() {
                if (this.option("text")) {
                    this._activePartIndex = this._dateParts.length;
                    this._selectNextPart(BACKWARD)
                }
            },
            _selectFirstPart: function() {
                if (this.option("text")) {
                    this._activePartIndex = -1;
                    this._selectNextPart(FORWARD)
                }
            },
            _onMouseWheel: function(e) {
                if (this._useMaskBehavior()) {
                    this._partIncrease(e.delta > 0 ? FORWARD : BACKWARD, e)
                }
            },
            _selectNextPart: function() {
                var step = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0;
                if (!this.option("text") || this._disposed) {
                    return
                }
                if (step) {
                    this._initialMaskValue = new Date(this._maskValue)
                }
                var index = (0, _math.fitIntoRange)(this._activePartIndex + step, 0, this._dateParts.length - 1);
                if (this._dateParts[index].isStub) {
                    var isBoundaryIndex = 0 === index && step < 0 || index === this._dateParts.length - 1 && step > 0;
                    if (!isBoundaryIndex) {
                        this._selectNextPart(step >= 0 ? step + 1 : step - 1);
                        return
                    } else {
                        index = this._activePartIndex
                    }
                }
                if (this._activePartIndex !== index) {
                    this._clearSearchValue()
                }
                this._activePartIndex = index;
                this._caret(this._getActivePartProp("caret"))
            },
            _getRealLimitsPattern: function() {
                if ("d" === this._getActivePartProp("pattern")[0]) {
                    return "dM"
                }
            },
            _getActivePartLimits: function(lockOtherParts) {
                var limitFunction = this._getActivePartProp("limits");
                return limitFunction(this._maskValue, lockOtherParts && this._getRealLimitsPattern())
            },
            _getActivePartValue: function(dateValue) {
                dateValue = dateValue || this._maskValue;
                var getter = this._getActivePartProp("getter");
                return (0, _type.isFunction)(getter) ? getter(dateValue) : dateValue[getter]()
            },
            _addLeadingZeroes: function(value) {
                var zeroes = this._searchValue.match(/^0+/);
                var limits = this._getActivePartLimits();
                var maxLimitLength = String(limits.max).length;
                return ((zeroes && zeroes[0] || "") + String(value)).substr(-maxLimitLength)
            },
            _setActivePartValue: function(value, dateValue) {
                dateValue = dateValue || this._maskValue;
                var setter = this._getActivePartProp("setter");
                var limits = this._getActivePartLimits();
                value = (0, _math.inRange)(value, limits.min, limits.max) ? value : value % 10;
                value = this._addLeadingZeroes((0, _math.fitIntoRange)(value, limits.min, limits.max));
                (0, _type.isFunction)(setter) ? setter(dateValue, value): dateValue[setter](value);
                this._renderDisplayText(this._getDisplayedText(dateValue));
                this._renderDateParts()
            },
            _getActivePartProp: function(property) {
                if (!this._dateParts || !this._dateParts[this._activePartIndex]) {
                    return
                }
                return this._dateParts[this._activePartIndex][property]
            },
            _loadMaskValue: function() {
                var value = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.dateOption("value");
                this._maskValue = value && new Date(value);
                this._initialMaskValue = value && new Date(value)
            },
            _saveMaskValue: function() {
                var value = this._maskValue && new Date(this._maskValue);
                this._initialMaskValue = new Date(value);
                this.dateOption("value", value)
            },
            _revertChanges: function() {
                this._loadMaskValue();
                this._renderDisplayText(this._getDisplayedText(this._maskValue));
                this._renderDateParts()
            },
            _renderDisplayText: function(text) {
                this.callBase(text);
                if (this._useMaskBehavior()) {
                    this.option("text", text)
                }
            },
            _partIncrease: function(step, lockOtherParts) {
                this._setNewDateIfEmpty();
                var _this$_getActivePartL2 = this._getActivePartLimits(lockOtherParts),
                    max = _this$_getActivePartL2.max,
                    min = _this$_getActivePartL2.min;
                var limitDelta = max - min;
                if (1 === limitDelta) {
                    limitDelta++
                }
                var newValue = step + this._getActivePartValue();
                if (newValue > max) {
                    newValue = this._applyLimits(newValue, {
                        limitBase: min,
                        limitClosest: max,
                        limitDelta: limitDelta
                    })
                } else {
                    if (newValue < min) {
                        newValue = this._applyLimits(newValue, {
                            limitBase: max,
                            limitClosest: min,
                            limitDelta: limitDelta
                        })
                    }
                }
                this._setActivePartValue(newValue)
            },
            _applyLimits: function(newValue, _ref) {
                var limitBase = _ref.limitBase,
                    limitClosest = _ref.limitClosest,
                    limitDelta = _ref.limitDelta;
                var delta = (newValue - limitClosest) % limitDelta;
                return delta ? limitBase + delta - 1 * (0, _math.sign)(delta) : limitClosest
            },
            _maskClickHandler: function() {
                if (this.option("text")) {
                    this._activePartIndex = (0, _uiDate_boxMask.getDatePartIndexByPosition)(this._dateParts, this._caret().start);
                    this._caret(this._getActivePartProp("caret"))
                }
            },
            _maskPasteHandler: function(e) {
                var newText = this._replaceSelectedText(this.option("text"), this._caret(), (0, _dom.clipboardText)(e));
                var date = _date2.default.parse(newText, this._getFormatPattern());
                if (date) {
                    this._maskValue = date;
                    this._renderDisplayText(this._getDisplayedText(this._maskValue));
                    this._renderDateParts();
                    this._selectNextPart()
                }
                e.preventDefault()
            },
            _isValueDirty: function() {
                var value = this.dateOption("value");
                return (this._maskValue && this._maskValue.getTime()) !== (value && value.getTime())
            },
            _fireChangeEvent: function() {
                this._clearSearchValue();
                if (this._isValueDirty()) {
                    _events_engine2.default.trigger(this._input(), "change")
                }
            },
            _enterHandler: function(e) {
                this._fireChangeEvent();
                this._selectNextPart(FORWARD);
                e.preventDefault()
            },
            _focusOutHandler: function(e) {
                this.callBase(e);
                if (this._useMaskBehavior() && !e.isDefaultPrevented()) {
                    this._fireChangeEvent();
                    this._selectFirstPart(e)
                }
            },
            _valueChangeEventHandler: function(e) {
                var text = this.option("text");
                if (this._useMaskBehavior()) {
                    this._saveValueChangeEvent(e);
                    if (!text) {
                        this._maskValue = null
                    } else {
                        if (null === this._maskValue) {
                            this._loadMaskValue(text)
                        }
                    }
                    this._saveMaskValue()
                } else {
                    this.callBase(e)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "useMaskBehavior":
                        this._renderMask();
                        break;
                    case "displayFormat":
                    case "mode":
                        this.callBase(args);
                        this._renderMask();
                        break;
                    case "value":
                        this._loadMaskValue();
                        this.callBase(args);
                        this._renderDateParts();
                        break;
                    case "emptyDateValue":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clearMaskState: function() {
                this._clearSearchValue();
                delete this._dateParts;
                delete this._activePartIndex;
                delete this._maskValue
            },
            reset: function() {
                this.callBase();
                this._clearMaskState();
                this._activePartIndex = 0
            },
            _clean: function() {
                this.callBase();
                this._detachMaskEvents();
                this._clearMaskState()
            }
        });
        module.exports = DateBoxMask
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.mask.parts.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.renderDateParts = exports.getDatePartIndexByPosition = void 0;
        var _this = void 0;
        var _date = __webpack_require__( /*! ../../localization/ldml/date.parser */ 217);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _math = __webpack_require__( /*! ../../core/utils/math */ 31);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var monthGetter = function(date) {
            return date.getMonth() + 1
        };
        var monthSetter = function(date, value) {
            var day = date.getDate();
            var monthLimits = getLimits("M", date);
            var newValue = (0, _math.fitIntoRange)(parseInt(value), monthLimits.min, monthLimits.max);
            date.setMonth(newValue - 1, 1);
            var _getLimits = getLimits("dM", date),
                min = _getLimits.min,
                max = _getLimits.max;
            var newDay = (0, _math.fitIntoRange)(day, min, max);
            date.setDate(newDay)
        };
        var PATTERN_GETTERS = {
            a: function(date) {
                return date.getHours() < 12 ? 0 : 1
            },
            E: "getDay",
            y: "getFullYear",
            M: monthGetter,
            L: monthGetter,
            d: "getDate",
            H: "getHours",
            h: "getHours",
            m: "getMinutes",
            s: "getSeconds",
            S: "getMilliseconds"
        };
        var PATTERN_SETTERS = (0, _extend.extend)({}, (0, _date.getPatternSetters)(), {
            a: function(date, value) {
                var hours = date.getHours();
                var current = hours >= 12;
                if (current === !!parseInt(value)) {
                    return
                }
                date.setHours((hours + 12) % 24)
            },
            d: function(date, value) {
                var lastDayInMonth = getLimits("dM", date).max;
                if (value > lastDayInMonth) {
                    date.setMonth(date.getMonth() + 1)
                }
                date.setDate(value)
            },
            h: function(date, value) {
                var isPM = date.getHours() >= 12;
                date.setHours(+value % 12 + (isPM ? 12 : 0))
            },
            M: monthSetter,
            L: monthSetter,
            E: function(date, value) {
                if (value < 0) {
                    return
                }
                date.setDate(date.getDate() - date.getDay() + parseInt(value))
            },
            y: function(date, value) {
                var currentYear = date.getFullYear();
                var valueLength = String(value).length;
                var maxLimitLength = String(getLimits("y", date).max).length;
                var newValue = parseInt(String(currentYear).substr(0, maxLimitLength - valueLength) + value);
                date.setFullYear(newValue)
            }
        });
        var getPatternGetter = function(patternChar) {
            var unsupportedCharGetter = function() {
                return patternChar
            };
            return PATTERN_GETTERS[patternChar] || unsupportedCharGetter
        };
        var renderDateParts = function(text, regExpInfo) {
            var result = regExpInfo.regexp.exec(text);
            var start = 0;
            var end = 0;
            var sections = [];
            for (var i = 1; i < result.length; i++) {
                start = end;
                end = start + result[i].length;
                var pattern = regExpInfo.patterns[i - 1].replace(/^'|'$/g, "");
                var getter = getPatternGetter(pattern[0]);
                sections.push({
                    index: i - 1,
                    isStub: pattern === result[i],
                    caret: {
                        start: start,
                        end: end
                    },
                    pattern: pattern,
                    text: result[i],
                    limits: getLimits.bind(_this, pattern[0]),
                    setter: PATTERN_SETTERS[pattern[0]] || _common.noop,
                    getter: getter
                })
            }
            return sections
        };
        var getLimits = function(pattern, date, forcedPattern) {
            var limits = {
                y: {
                    min: 0,
                    max: 9999
                },
                M: {
                    min: 1,
                    max: 12
                },
                L: {
                    min: 1,
                    max: 12
                },
                d: {
                    min: 1,
                    max: 31
                },
                dM: {
                    min: 1,
                    max: new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate()
                },
                E: {
                    min: 0,
                    max: 6
                },
                H: {
                    min: 0,
                    max: 23
                },
                h: {
                    min: 0,
                    max: 23
                },
                m: {
                    min: 0,
                    max: 59
                },
                s: {
                    min: 0,
                    max: 59
                },
                S: {
                    min: 0,
                    max: 999
                },
                a: {
                    min: 0,
                    max: 1
                }
            };
            return limits[forcedPattern || pattern] || limits.getAmPm
        };
        var getDatePartIndexByPosition = function(dateParts, position) {
            for (var i = 0; i < dateParts.length; i++) {
                var caretInGroup = dateParts[i].caret.end >= position;
                if (!dateParts[i].isStub && caretInGroup) {
                    return i
                }
            }
            return null
        };
        exports.getDatePartIndexByPosition = getDatePartIndexByPosition;
        exports.renderDateParts = renderDateParts
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.base.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 7);
        var window = windowUtils.getWindow();
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var compareVersions = __webpack_require__( /*! ../../core/utils/version */ 60).compare;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var config = __webpack_require__( /*! ../../core/config */ 30);
        var dateUtils = __webpack_require__( /*! ../../core/utils/date */ 24);
        var uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var DropDownEditor = __webpack_require__( /*! ../drop_down_editor/ui.drop_down_editor */ 178);
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var DATEBOX_CLASS = "dx-datebox";
        var DX_AUTO_WIDTH_CLASS = "dx-auto-width";
        var DX_INVALID_BADGE_CLASS = "dx-show-invalid-badge";
        var DX_CLEAR_BUTTON_CLASS = "dx-clear-button-area";
        var DATEBOX_WRAPPER_CLASS = "dx-datebox-wrapper";
        var PICKER_TYPE = {
            calendar: "calendar",
            rollers: "rollers",
            list: "list",
            "native": "native"
        };
        var TYPE = {
            date: "date",
            datetime: "datetime",
            time: "time"
        };
        var STRATEGY_NAME = {
            calendar: "Calendar",
            dateView: "DateView",
            "native": "Native",
            calendarWithTime: "CalendarWithTime",
            list: "List"
        };
        var STRATEGY_CLASSES = {
            Calendar: __webpack_require__( /*! ./ui.date_box.strategy.calendar */ 323),
            DateView: __webpack_require__( /*! ./ui.date_box.strategy.date_view */ 566),
            Native: __webpack_require__( /*! ./ui.date_box.strategy.native */ 569),
            CalendarWithTime: __webpack_require__( /*! ./ui.date_box.strategy.calendar_with_time */ 570),
            List: __webpack_require__( /*! ./ui.date_box.strategy.list */ 572)
        };
        var DateBox = DropDownEditor.inherit({
            _supportedKeys: function() {
                return extend(this.callBase(), this._strategy.supportedKeys())
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                extend(this._deprecatedOptions, {
                    maxZoomLevel: {
                        since: "18.1",
                        alias: "calendarOptions.maxZoomLevel"
                    },
                    minZoomLevel: {
                        since: "18.1",
                        alias: "calendarOptions.minZoomLevel"
                    }
                })
            },
            _renderButtonContainers: function() {
                this.callBase.apply(this, arguments);
                this._strategy.customizeButtons()
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    type: "date",
                    showAnalogClock: true,
                    value: null,
                    dateSerializationFormat: void 0,
                    min: void 0,
                    max: void 0,
                    displayFormat: null,
                    interval: 30,
                    disabledDates: null,
                    maxZoomLevel: "month",
                    minZoomLevel: "century",
                    pickerType: PICKER_TYPE.calendar,
                    invalidDateMessage: messageLocalization.format("dxDateBox-validation-datetime"),
                    dateOutOfRangeMessage: messageLocalization.format("validation-range"),
                    applyButtonText: messageLocalization.format("OK"),
                    adaptivityEnabled: false,
                    calendarOptions: {},
                    useHiddenSubmitElement: true
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        "dropDownOptions.showTitle": true
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        buttonsLocation: "bottom after"
                    }
                }, {
                    device: function() {
                        var realDevice = devices.real();
                        var platform = realDevice.platform;
                        return "ios" === platform || "android" === platform
                    },
                    options: {
                        pickerType: PICKER_TYPE.native
                    }
                }, {
                    device: function(currentDevice) {
                        var realDevice = devices.real();
                        var platform = realDevice.platform;
                        var version = realDevice.version;
                        return "generic" === platform && "desktop" !== currentDevice.deviceType || "android" === platform && compareVersions(version, [4, 4]) < 0
                    },
                    options: {
                        pickerType: PICKER_TYPE.rollers
                    }
                }, {
                    device: {
                        platform: "generic",
                        deviceType: "desktop"
                    },
                    options: {
                        buttonsLocation: "bottom after"
                    }
                }])
            },
            _initOptions: function(options) {
                this._userOptions = extend({}, options);
                this.callBase(options);
                this._updatePickerOptions()
            },
            _updatePickerOptions: function() {
                var pickerType = this.option("pickerType");
                var type = this.option("type");
                if (pickerType === PICKER_TYPE.list && (type === TYPE.datetime || type === TYPE.date)) {
                    pickerType = PICKER_TYPE.calendar
                }
                if (type === TYPE.time && pickerType === PICKER_TYPE.calendar) {
                    pickerType = PICKER_TYPE.list
                }
                this.option("showDropDownButton", "generic" !== devices.real().platform || pickerType !== PICKER_TYPE.native);
                this._pickerType = pickerType
            },
            _init: function() {
                this._initStrategy();
                this.option(extend({}, this._strategy.getDefaultOptions(), this._userOptions));
                delete this._userOptions;
                this.callBase()
            },
            _toLowerCaseFirstLetter: function(string) {
                return string.charAt(0).toLowerCase() + string.substr(1)
            },
            _initStrategy: function() {
                var strategyName = this._getStrategyName(this._getFormatType());
                var strategy = STRATEGY_CLASSES[strategyName];
                if (!(this._strategy && this._strategy.NAME === strategyName)) {
                    this._strategy = new strategy(this)
                }
            },
            _getFormatType: function() {
                var currentType = this.option("type");
                var isTime = /h|m|s/g.test(currentType);
                var isDate = /d|M|Y/g.test(currentType);
                var type = "";
                if (isDate) {
                    type += TYPE.date
                }
                if (isTime) {
                    type += TYPE.time
                }
                return type
            },
            _getStrategyName: function(type) {
                var pickerType = this._pickerType;
                if (pickerType === PICKER_TYPE.rollers) {
                    return STRATEGY_NAME.dateView
                } else {
                    if (pickerType === PICKER_TYPE.native) {
                        return STRATEGY_NAME.native
                    }
                }
                if (type === TYPE.date) {
                    return STRATEGY_NAME.calendar
                }
                if (type === TYPE.datetime) {
                    return STRATEGY_NAME.calendarWithTime
                }
                return STRATEGY_NAME.list
            },
            _initMarkup: function() {
                this.$element().addClass(DATEBOX_CLASS);
                this.callBase();
                this._refreshFormatClass();
                this._refreshPickerTypeClass();
                this._strategy.renderInputMinMax(this._input())
            },
            _render: function() {
                this.callBase();
                this._formatValidationIcon()
            },
            _renderDimensions: function() {
                this.callBase();
                this.$element().toggleClass(DX_AUTO_WIDTH_CLASS, !this.option("width"))
            },
            _refreshFormatClass: function() {
                var $element = this.$element();
                each(TYPE, function(_, item) {
                    $element.removeClass(DATEBOX_CLASS + "-" + item)
                });
                $element.addClass(DATEBOX_CLASS + "-" + this.option("type"))
            },
            _refreshPickerTypeClass: function() {
                var $element = this.$element();
                each(PICKER_TYPE, function(_, item) {
                    $element.removeClass(DATEBOX_CLASS + "-" + item)
                });
                $element.addClass(DATEBOX_CLASS + "-" + this._pickerType)
            },
            _formatValidationIcon: function() {
                if (!windowUtils.hasWindow()) {
                    return
                }
                var inputElement = this._input().get(0);
                var isRtlEnabled = this.option("rtlEnabled");
                var clearButtonWidth = this._getClearButtonWidth();
                var longestElementDimensions = this._getLongestElementDimensions();
                var curWidth = parseFloat(window.getComputedStyle(inputElement).width) - clearButtonWidth;
                var shouldHideValidationIcon = longestElementDimensions.width > curWidth;
                var style = inputElement.style;
                this.$element().toggleClass(DX_INVALID_BADGE_CLASS, !shouldHideValidationIcon);
                if (shouldHideValidationIcon) {
                    if (void 0 === this._storedPadding) {
                        this._storedPadding = isRtlEnabled ? longestElementDimensions.leftPadding : longestElementDimensions.rightPadding
                    }
                    isRtlEnabled ? style.paddingLeft = 0 : style.paddingRight = 0
                } else {
                    isRtlEnabled ? style.paddingLeft = this._storedPadding + "px" : style.paddingRight = this._storedPadding + "px"
                }
            },
            _getClearButtonWidth: function() {
                var clearButtonWidth = 0;
                if (this._isClearButtonVisible() && "" === this._input().val()) {
                    var clearButtonElement = this.$element().find("." + DX_CLEAR_BUTTON_CLASS).get(0);
                    clearButtonWidth = parseFloat(window.getComputedStyle(clearButtonElement).width)
                }
                return clearButtonWidth
            },
            _getLongestElementDimensions: function() {
                var format = this._strategy.getDisplayFormat(this.option("displayFormat"));
                var longestValue = dateLocalization.format(uiDateUtils.getLongestDate(format, dateLocalization.getMonthNames(), dateLocalization.getDayNames()), format);
                var $input = this._input();
                var inputElement = $input.get(0);
                var $longestValueElement = dom.createTextElementHiddenCopy($input, longestValue);
                var isPaddingStored = void 0 !== this._storedPadding;
                var storedPadding = !isPaddingStored ? 0 : this._storedPadding;
                $longestValueElement.appendTo(this.$element());
                var elementWidth = parseFloat(window.getComputedStyle($longestValueElement.get(0)).width);
                var rightPadding = parseFloat(window.getComputedStyle(inputElement).paddingRight);
                var leftPadding = parseFloat(window.getComputedStyle(inputElement).paddingLeft);
                var necessaryWidth = elementWidth + leftPadding + rightPadding + storedPadding;
                $longestValueElement.remove();
                return {
                    width: necessaryWidth,
                    leftPadding: leftPadding,
                    rightPadding: rightPadding
                }
            },
            _getKeyboardListeners: function() {
                return this.callBase().concat([this._strategy && this._strategy.getKeyboardListener()])
            },
            _renderPopup: function() {
                this.callBase();
                this._popup._wrapper().addClass(DATEBOX_WRAPPER_CLASS);
                this._renderPopupWrapper()
            },
            _popupConfig: function() {
                var popupConfig = this.callBase();
                return extend(this._strategy.popupConfig(popupConfig), {
                    title: this._getPopupTitle(),
                    dragEnabled: false
                })
            },
            _renderPopupWrapper: function() {
                if (!this._popup) {
                    return
                }
                var $element = this.$element();
                var classPostfixes = extend({}, TYPE, PICKER_TYPE);
                each(classPostfixes, function(_, item) {
                    $element.removeClass(DATEBOX_WRAPPER_CLASS + "-" + item)
                }.bind(this));
                this._popup._wrapper().addClass(DATEBOX_WRAPPER_CLASS + "-" + this.option("type")).addClass(DATEBOX_WRAPPER_CLASS + "-" + this._pickerType)
            },
            _renderPopupContent: function() {
                this.callBase();
                this._strategy.renderPopupContent()
            },
            _getFirstPopupElement: function() {
                return this._strategy.getFirstPopupElement() || this.callBase()
            },
            _getLastPopupElement: function() {
                return this._strategy.getLastPopupElement() || this.callBase()
            },
            _popupShowingHandler: function() {
                this.callBase();
                this._strategy.popupShowingHandler()
            },
            _popupHiddenHandler: function() {
                this.callBase();
                this._strategy.popupHiddenHandler()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._formatValidationIcon()
                }
            },
            _clearValueHandler: function(e) {
                this.option("text", "");
                this.callBase(e)
            },
            _readOnlyPropValue: function() {
                if (this._pickerType === PICKER_TYPE.rollers) {
                    return true
                }
                var platform = devices.real().platform;
                var isCustomValueDisabled = this._isNativeType() && ("ios" === platform || "android" === platform);
                if (isCustomValueDisabled) {
                    return this.option("readOnly")
                }
                return this.callBase()
            },
            _isClearButtonVisible: function() {
                return this.callBase() && !this._isNativeType()
            },
            _renderValue: function() {
                var value = this.dateOption("value");
                this.option("text", this._getDisplayedText(value));
                this._strategy.renderValue();
                return this.callBase()
            },
            _setSubmitValue: function() {
                var value = this.dateOption("value");
                var dateSerializationFormat = this.option("dateSerializationFormat");
                var submitFormat = uiDateUtils.SUBMIT_FORMATS_MAP[this.option("type")];
                var submitValue = dateSerializationFormat ? dateSerialization.serializeDate(value, dateSerializationFormat) : uiDateUtils.toStandardDateFormat(value, submitFormat);
                this._getSubmitElement().val(submitValue)
            },
            _getDisplayedText: function(value) {
                var mode = this.option("mode");
                var displayedText;
                if ("text" === mode) {
                    var displayFormat = this._strategy.getDisplayFormat(this.option("displayFormat"));
                    displayedText = dateLocalization.format(value, displayFormat)
                } else {
                    var format = this._getFormatByMode(mode);
                    if (format) {
                        displayedText = dateLocalization.format(value, format)
                    } else {
                        displayedText = uiDateUtils.toStandardDateFormat(value, mode)
                    }
                }
                return displayedText
            },
            _getFormatByMode: function(mode) {
                return support.inputType(mode) ? null : uiDateUtils.FORMATS_MAP[mode]
            },
            _valueChangeEventHandler: function(e) {
                var text = this.option("text");
                var currentValue = this.dateOption("value");
                if (text === this._getDisplayedText(currentValue)) {
                    this._applyInternalValidation(currentValue);
                    return
                }
                var parsedDate = this._getParsedDate(text);
                var value = currentValue || this._getDateByDefault();
                var type = this.option("type");
                var newValue = uiDateUtils.mergeDates(value, parsedDate, type);
                var date = parsedDate && "time" === type ? newValue : parsedDate;
                if (this._applyInternalValidation(date)) {
                    var displayedText = this._getDisplayedText(newValue);
                    if (value && newValue && value.getTime() === newValue.getTime() && displayedText !== text) {
                        this._renderValue()
                    } else {
                        this.dateValue(newValue, e)
                    }
                }
            },
            _getDateByDefault: function() {
                return this._strategy.useCurrentDateByDefault() && this._strategy.getDefaultDate()
            },
            _getParsedDate: function(text) {
                var displayFormat = this._strategy.getDisplayFormat(this.option("displayFormat"));
                var parsedText = this._strategy.getParsedText(text, displayFormat);
                return typeUtils.isDefined(parsedText) ? parsedText : void 0
            },
            _applyInternalValidation: function(value) {
                var text = this.option("text");
                var hasText = !!text && null !== value;
                var isDate = !!value && typeUtils.isDate(value) && !isNaN(value.getTime());
                var isDateInRange = isDate && dateUtils.dateInRange(value, this.dateOption("min"), this.dateOption("max"), this.option("type"));
                var isValid = !hasText && !value || isDateInRange;
                var validationMessage = "";
                if (!isDate) {
                    validationMessage = this.option("invalidDateMessage")
                } else {
                    if (!isDateInRange) {
                        validationMessage = this.option("dateOutOfRangeMessage")
                    }
                }
                this.option({
                    isValid: isValid,
                    validationError: isValid ? null : {
                        editorSpecific: true,
                        message: validationMessage
                    }
                });
                return isValid
            },
            _applyCustomValidation: function(value) {
                this.validationRequest.fire({
                    editor: this,
                    value: this._serializeDate(value)
                })
            },
            _isValueChanged: function(newValue) {
                var oldValue = this.dateOption("value");
                var oldTime = oldValue && oldValue.getTime();
                var newTime = newValue && newValue.getTime();
                return oldTime !== newTime
            },
            _isTextChanged: function(newValue) {
                var oldText = this.option("text");
                var newText = newValue && this._getDisplayedText(newValue) || "";
                return oldText !== newText
            },
            _renderProps: function() {
                this.callBase();
                this._input().attr("autocomplete", "off")
            },
            _renderOpenedState: function() {
                if (!this._isNativeType()) {
                    this.callBase()
                }
                if (this._strategy.isAdaptivityChanged()) {
                    this._refreshStrategy()
                }
                this._strategy.renderOpenedState()
            },
            _getPopupTitle: function() {
                var placeholder = this.option("placeholder");
                if (placeholder) {
                    return placeholder
                }
                var type = this.option("type");
                if (type === TYPE.time) {
                    return messageLocalization.format("dxDateBox-simulatedDataPickerTitleTime")
                }
                if (type === TYPE.date || type === TYPE.datetime) {
                    return messageLocalization.format("dxDateBox-simulatedDataPickerTitleDate")
                }
                return ""
            },
            _renderPlaceholder: function() {
                this._popup && this._popup.option("title", this._getPopupTitle());
                this.callBase()
            },
            _refreshStrategy: function() {
                this._strategy.dispose();
                this._initStrategy();
                this.option(this._strategy.getDefaultOptions());
                this._refresh()
            },
            _applyButtonHandler: function(e) {
                var value = this._strategy.getValue();
                if (this._applyInternalValidation(value)) {
                    this.dateValue(value, e.event)
                }
                this.callBase()
            },
            _dispose: function() {
                this._strategy && this._strategy.dispose();
                this.callBase()
            },
            _isNativeType: function() {
                return this._pickerType === PICKER_TYPE.native
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "showClearButton":
                    case "buttons":
                        this.callBase.apply(this, arguments);
                        this._formatValidationIcon();
                        break;
                    case "pickerType":
                        this._updatePickerOptions({
                            pickerType: args.value
                        });
                        this._refreshStrategy();
                        this._refreshPickerTypeClass();
                        this._invalidate();
                        break;
                    case "type":
                        this._updatePickerOptions({
                            format: args.value
                        });
                        this._refreshStrategy();
                        this._refreshFormatClass();
                        this._renderPopupWrapper();
                        this._formatValidationIcon();
                        this._updateValue();
                        break;
                    case "placeholder":
                        this._renderPlaceholder();
                        break;
                    case "min":
                    case "max":
                        var isValid = this.option("isValid");
                        this._applyInternalValidation(this.dateOption("value"));
                        if (!isValid) {
                            this._applyCustomValidation(this.dateOption("value"))
                        }
                        this._invalidate();
                        break;
                    case "dateSerializationFormat":
                    case "interval":
                    case "disabledDates":
                    case "calendarOptions":
                    case "minZoomLevel":
                    case "maxZoomLevel":
                        this._invalidate();
                        break;
                    case "displayFormat":
                        this.option("text", this._getDisplayedText(this.dateOption("value")));
                        this._renderInputValue();
                        break;
                    case "text":
                        this._strategy.textChangedHandler(args.value);
                        this.callBase.apply(this, arguments);
                        break;
                    case "isValid":
                        this.callBase.apply(this, arguments);
                        this._formatValidationIcon();
                        break;
                    case "showDropDownButton":
                        this._formatValidationIcon();
                        this.callBase.apply(this, arguments);
                        break;
                    case "readOnly":
                        this.callBase.apply(this, arguments);
                        this._formatValidationIcon();
                        break;
                    case "invalidDateMessage":
                    case "dateOutOfRangeMessage":
                    case "adaptivityEnabled":
                    case "showAnalogClock":
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            _getSerializationFormat: function() {
                var value = this.option("value");
                if (this.option("dateSerializationFormat") && config().forceIsoDateParsing) {
                    return this.option("dateSerializationFormat")
                }
                if (typeUtils.isNumeric(value)) {
                    return "number"
                }
                if (!typeUtils.isString(value)) {
                    return
                }
                return dateSerialization.getDateSerializationFormat(value)
            },
            _updateValue: function(value) {
                this.callBase();
                this._applyInternalValidation(value || this.dateOption("value"))
            },
            dateValue: function(value, dxEvent) {
                var isValueChanged = this._isValueChanged(value);
                if (isValueChanged && dxEvent) {
                    this._saveValueChangeEvent(dxEvent)
                }
                if (!isValueChanged) {
                    if (this._isTextChanged(value)) {
                        this._updateValue(value)
                    } else {
                        if ("" === this.option("text")) {
                            this._applyCustomValidation(value)
                        }
                    }
                }
                return this.dateOption("value", value)
            },
            dateOption: function(optionName, value) {
                if (1 === arguments.length) {
                    return dateSerialization.deserializeDate(this.option(optionName))
                }
                this.option(optionName, this._serializeDate(value))
            },
            _serializeDate: function(date) {
                var serializationFormat = this._getSerializationFormat();
                return dateSerialization.serializeDate(date, serializationFormat)
            },
            reset: function() {
                this.callBase();
                this._updateValue(this.dateOption("value"))
            }
        });
        registerComponent("dxDateBox", DateBox);
        module.exports = DateBox
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.date_view.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var DateView = __webpack_require__( /*! ./ui.date_view */ 567);
        var DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 199);
        var support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var dateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var DateViewStrategy = DateBoxStrategy.inherit({
            NAME: "DateView",
            getDefaultOptions: function() {
                return extend(this.callBase(), {
                    openOnFieldClick: true,
                    applyButtonText: messageLocalization.format("OK"),
                    "dropDownOptions.showTitle": true
                })
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || dateUtils.FORMATS_MAP[this.dateBox.option("type")]
            },
            popupConfig: function(config) {
                return {
                    toolbarItems: this.dateBox._popupToolbarItemsConfig(),
                    onInitialized: config.onInitialized,
                    defaultOptionsRules: [{
                        device: {
                            platform: "android"
                        },
                        options: {
                            width: 333,
                            height: 331
                        }
                    }, {
                        device: function(_device) {
                            var platform = _device.platform;
                            return "generic" === platform || "ios" === platform
                        },
                        options: {
                            width: "auto",
                            height: "auto"
                        }
                    }, {
                        device: function(_device2) {
                            var platform = _device2.platform;
                            var phone = _device2.phone;
                            return "generic" === platform && phone
                        },
                        options: {
                            width: 333,
                            maxWidth: "100%",
                            maxHeight: "100%",
                            height: "auto",
                            position: {
                                collision: "flipfit flip"
                            }
                        }
                    }, {
                        device: {
                            platform: "ios",
                            phone: true
                        },
                        options: {
                            width: "100%",
                            position: {
                                my: "bottom",
                                at: "bottom",
                                of: window
                            }
                        }
                    }]
                }
            },
            _renderWidget: function() {
                if (support.inputType(this.dateBox.option("mode")) && this.dateBox._isNativeType() || this.dateBox.option("readOnly")) {
                    if (this._widget) {
                        this._widget.$element().remove();
                        this._widget = null
                    }
                    return
                }
                var popup = this._getPopup();
                if (this._widget) {
                    this._widget.option(this._getWidgetOptions())
                } else {
                    var element = $("<div>").appendTo(popup.$content());
                    this._widget = this._createWidget(element)
                }
                this._widget.$element().appendTo(this._getWidgetContainer())
            },
            _getWidgetName: function() {
                return DateView
            },
            renderOpenedState: function() {
                this.callBase();
                if (this._widget) {
                    this._widget.option("value", this._widget._getCurrentDate())
                }
            },
            _getWidgetOptions: function() {
                return {
                    value: this.dateBoxValue() || new Date,
                    type: this.dateBox.option("type"),
                    minDate: this.dateBox.dateOption("min") || new Date(1900, 0, 1),
                    maxDate: this.dateBox.dateOption("max") || new Date(Date.now() + 50 * dateUtils.ONE_YEAR),
                    onDisposing: function() {
                        this._widget = null
                    }.bind(this)
                }
            }
        });
        module.exports = DateViewStrategy
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_view.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var Editor = __webpack_require__( /*! ../editor/editor */ 48);
        var DateViewRoller = __webpack_require__( /*! ./ui.date_view_roller */ 568);
        var dateUtils = __webpack_require__( /*! ../../core/utils/date */ 24);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var DATEVIEW_CLASS = "dx-dateview";
        var DATEVIEW_COMPACT_CLASS = "dx-dateview-compact";
        var DATEVIEW_WRAPPER_CLASS = "dx-dateview-wrapper";
        var DATEVIEW_ROLLER_CONTAINER_CLASS = "dx-dateview-rollers";
        var DATEVIEW_ROLLER_CLASS = "dx-dateviewroller";
        var TYPE = {
            date: "date",
            datetime: "datetime",
            time: "time"
        };
        var ROLLER_TYPE = {
            year: "year",
            month: "month",
            day: "day",
            hours: "hours"
        };
        var DateView = Editor.inherit({
            _valueOption: function() {
                var value = this.option("value");
                var date = new Date(value);
                return !value || isNaN(date) ? this._getDefaultDate() : date
            },
            _getDefaultDate: function() {
                var date = new Date;
                if (this.option("type") === TYPE.date) {
                    return new Date(date.getFullYear(), date.getMonth(), date.getDate())
                }
                return date
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    minDate: uiDateUtils.MIN_DATEVIEW_DEFAULT_DATE,
                    maxDate: uiDateUtils.MAX_DATEVIEW_DEFAULT_DATE,
                    type: TYPE.date,
                    value: new Date,
                    applyCompactClass: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "desktop" !== _device.deviceType
                    },
                    options: {
                        applyCompactClass: true
                    }
                }])
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(DATEVIEW_CLASS);
                this._toggleFormatClasses(this.option("type"));
                this._toggleCompactClass()
            },
            _toggleFormatClasses: function(currentFormat, previousFormat) {
                this.$element().addClass(DATEVIEW_CLASS + "-" + currentFormat);
                previousFormat && this.$element().removeClass(DATEVIEW_CLASS + "-" + previousFormat)
            },
            _toggleCompactClass: function() {
                this.$element().toggleClass(DATEVIEW_COMPACT_CLASS, this.option("applyCompactClass"))
            },
            _wrapper: function() {
                return this._$wrapper
            },
            _renderContentImpl: function() {
                this._$wrapper = $("<div>").addClass(DATEVIEW_WRAPPER_CLASS);
                this._renderRollers();
                this._$wrapper.appendTo(this.$element())
            },
            _renderRollers: function() {
                if (!this._$rollersContainer) {
                    this._$rollersContainer = $("<div>").addClass(DATEVIEW_ROLLER_CONTAINER_CLASS)
                }
                this._$rollersContainer.empty();
                this._createRollerConfigs();
                this._rollers = {};
                var that = this;
                each(that._rollerConfigs, function(name) {
                    var $roller = $("<div>").appendTo(that._$rollersContainer).addClass(DATEVIEW_ROLLER_CLASS + "-" + that._rollerConfigs[name].type);
                    that._rollers[that._rollerConfigs[name].type] = that._createComponent($roller, DateViewRoller, {
                        items: that._rollerConfigs[name].displayItems,
                        selectedIndex: that._rollerConfigs[name].selectedIndex,
                        showScrollbar: false,
                        onStart: function(e) {
                            var roller = e.component;
                            roller._toggleActive(true);
                            that._setActiveRoller(that._rollerConfigs[name], roller.option("selectedIndex"))
                        },
                        onEnd: function(e) {
                            var roller = e.component;
                            roller._toggleActive(false)
                        },
                        onClick: function(e) {
                            var roller = e.component;
                            roller._toggleActive(true);
                            that._setActiveRoller(that._rollerConfigs[name], roller.option("selectedIndex"));
                            that._setRollerState(that._rollerConfigs[name], roller.option("selectedIndex"));
                            roller._toggleActive(false)
                        },
                        onSelectedIndexChanged: function(e) {
                            var roller = e.component;
                            that._setRollerState(that._rollerConfigs[name], roller.option("selectedIndex"))
                        }
                    })
                });
                that._$rollersContainer.appendTo(that._wrapper())
            },
            _createRollerConfigs: function(type) {
                var that = this;
                type = type || that.option("type");
                that._rollerConfigs = {};
                dateLocalization.getFormatParts(uiDateUtils.FORMATS_MAP[type]).forEach(function(partName) {
                    that._createRollerConfig(partName)
                })
            },
            _createRollerConfig: function(componentName) {
                var componentInfo = uiDateUtils.DATE_COMPONENTS_INFO[componentName];
                var valueRange = this._calculateRollerConfigValueRange(componentName);
                var startValue = valueRange.startValue;
                var endValue = valueRange.endValue;
                var formatter = componentInfo.formatter;
                var curDate = this._getCurrentDate();
                var config = {
                    type: componentName,
                    setValue: componentInfo.setter,
                    valueItems: [],
                    displayItems: [],
                    getIndex: function(value) {
                        return value[componentInfo.getter]() - startValue
                    }
                };
                for (var i = startValue; i <= endValue; i++) {
                    config.valueItems.push(i);
                    config.displayItems.push(formatter(i, curDate))
                }
                config.selectedIndex = config.getIndex(curDate);
                this._rollerConfigs[componentName] = config
            },
            _setActiveRoller: function(currentRoller) {
                var activeRoller = currentRoller && this._rollers[currentRoller.type];
                each(this._rollers, function() {
                    this.toggleActiveState(this === activeRoller)
                })
            },
            _updateRollersPosition: function() {
                var that = this;
                each(this._rollers, function(type) {
                    var correctIndex = that._rollerConfigs[type].getIndex(that._getCurrentDate());
                    this.option("selectedIndex", correctIndex)
                })
            },
            _setRollerState: function(roller, selectedIndex) {
                if (selectedIndex !== roller.selectedIndex) {
                    var rollerValue = roller.valueItems[selectedIndex];
                    var setValue = roller.setValue;
                    var currentValue = new Date(this._getCurrentDate());
                    var currentDate = currentValue.getDate();
                    var minDate = this.option("minDate");
                    var maxDate = this.option("maxDate");
                    if (roller.type === ROLLER_TYPE.month) {
                        currentDate = Math.min(currentDate, uiDateUtils.getMaxMonthDay(currentValue.getFullYear(), rollerValue))
                    } else {
                        if (roller.type === ROLLER_TYPE.year) {
                            currentDate = Math.min(currentDate, uiDateUtils.getMaxMonthDay(rollerValue, currentValue.getMonth()))
                        }
                    }
                    currentValue.setDate(currentDate);
                    currentValue[setValue](rollerValue);
                    var normalizedDate = dateUtils.normalizeDate(currentValue, minDate, maxDate);
                    currentValue = uiDateUtils.mergeDates(normalizedDate, currentValue, "time");
                    currentValue = dateUtils.normalizeDate(currentValue, minDate, maxDate);
                    this.option("value", currentValue);
                    roller.selectedIndex = selectedIndex
                }
                if (roller.type === ROLLER_TYPE.year) {
                    this._refreshRollers()
                }
                if (roller.type === ROLLER_TYPE.month) {
                    this._refreshRoller(ROLLER_TYPE.day);
                    this._refreshRoller(ROLLER_TYPE.hours)
                }
            },
            _refreshRoller: function(rollerType) {
                var roller = this._rollers[rollerType];
                if (roller) {
                    this._createRollerConfig(rollerType);
                    var rollerConfig = this._rollerConfigs[rollerType];
                    if (rollerType === ROLLER_TYPE.day || rollerConfig.displayItems.toString() !== roller.option("items").toString()) {
                        roller.option({
                            items: rollerConfig.displayItems,
                            selectedIndex: rollerConfig.selectedIndex
                        })
                    }
                }
            },
            _getCurrentDate: function() {
                var curDate = this._valueOption();
                var minDate = this.option("minDate");
                var maxDate = this.option("maxDate");
                return dateUtils.normalizeDate(curDate, minDate, maxDate)
            },
            _calculateRollerConfigValueRange: function(componentName) {
                var curDate = this._getCurrentDate();
                var minDate = this.option("minDate");
                var maxDate = this.option("maxDate");
                var minYear = dateUtils.sameYear(curDate, minDate);
                var minMonth = minYear && curDate.getMonth() === minDate.getMonth();
                var maxYear = dateUtils.sameYear(curDate, maxDate);
                var maxMonth = maxYear && curDate.getMonth() === maxDate.getMonth();
                var minHour = minMonth && curDate.getDate() === minDate.getDate();
                var maxHour = maxMonth && curDate.getDate() === maxDate.getDate();
                var componentInfo = uiDateUtils.DATE_COMPONENTS_INFO[componentName];
                var startValue = componentInfo.startValue;
                var endValue = componentInfo.endValue;
                if (componentName === ROLLER_TYPE.year) {
                    startValue = minDate.getFullYear();
                    endValue = maxDate.getFullYear()
                }
                if (componentName === ROLLER_TYPE.month) {
                    if (minYear) {
                        startValue = minDate.getMonth()
                    }
                    if (maxYear) {
                        endValue = maxDate.getMonth()
                    }
                }
                if (componentName === ROLLER_TYPE.day) {
                    endValue = uiDateUtils.getMaxMonthDay(curDate.getFullYear(), curDate.getMonth());
                    if (minYear && minMonth) {
                        startValue = minDate.getDate()
                    }
                    if (maxYear && maxMonth) {
                        endValue = maxDate.getDate()
                    }
                }
                if (componentName === ROLLER_TYPE.hours) {
                    startValue = minHour ? minDate.getHours() : startValue;
                    endValue = maxHour ? maxDate.getHours() : endValue
                }
                return {
                    startValue: startValue,
                    endValue: endValue
                }
            },
            _refreshRollers: function() {
                this._refreshRoller(ROLLER_TYPE.month);
                this._refreshRoller(ROLLER_TYPE.day);
                this._refreshRoller(ROLLER_TYPE.hours)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "minDate":
                    case "maxDate":
                    case "type":
                        this._renderRollers();
                        this._toggleFormatClasses(args.value, args.previousValue);
                        break;
                    case "visible":
                        this.callBase(args);
                        if (args.value) {
                            this._renderRollers()
                        }
                        break;
                    case "value":
                        this.option("value", this._valueOption());
                        this._refreshRollers();
                        this._updateRollersPosition();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                this.callBase();
                delete this._$rollersContainer
            },
            _dispose: function() {
                clearTimeout(this._deferredRenderDayTimeout);
                clearTimeout(this._deferredRenderMonthTimeout);
                this.callBase()
            }
        });
        registerComponent("dxDateView", DateView);
        module.exports = DateView
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_view_roller.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var getBoundingRect = __webpack_require__( /*! ../../core/utils/position */ 21).getBoundingRect;
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var Scrollable = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var DATEVIEW_ROLLER_CLASS = "dx-dateviewroller";
        var DATEVIEW_ROLLER_ACTIVE_CLASS = "dx-state-active";
        var DATEVIEW_ROLLER_CURRENT_CLASS = "dx-dateviewroller-current";
        var DATEVIEW_ROLLER_ITEM_CLASS = "dx-dateview-item";
        var DATEVIEW_ROLLER_ITEM_SELECTED_CLASS = "dx-dateview-item-selected";
        var DATEVIEW_ROLLER_ITEM_SELECTED_FRAME_CLASS = "dx-dateview-item-selected-frame";
        var DATEVIEW_ROLLER_ITEM_SELECTED_BORDER_CLASS = "dx-dateview-item-selected-border";
        var DateViewRoller = Scrollable.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    showScrollbar: false,
                    useNative: false,
                    selectedIndex: 0,
                    bounceEnabled: false,
                    items: [],
                    showOnClick: false,
                    onClick: null,
                    onSelectedIndexChanged: null
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "generic"
                    },
                    options: {
                        scrollByContent: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._renderSelectedItemFrame()
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(DATEVIEW_ROLLER_CLASS);
                this._renderContainerClick();
                this._renderItems();
                this._renderSelectedValue();
                this._renderItemsClick();
                this._wrapAction("_endAction", this._endActionHandler.bind(this));
                this._renderSelectedIndexChanged()
            },
            _renderSelectedIndexChanged: function() {
                this._selectedIndexChanged = this._createActionByOption("onSelectedIndexChanged")
            },
            _renderContainerClick: function() {
                if (!this.option("showOnClick")) {
                    return
                }
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                var clickAction = this._createActionByOption("onClick");
                eventsEngine.off(this._$container, eventName);
                eventsEngine.on(this._$container, eventName, function(e) {
                    clickAction({
                        event: e
                    })
                })
            },
            _wrapAction: function(actionName, callback) {
                var strategy = this._strategy;
                var originalAction = strategy[actionName];
                strategy[actionName] = function() {
                    callback.apply(this, arguments);
                    return originalAction.apply(this, arguments)
                }
            },
            _renderItems: function() {
                var items = this.option("items") || [];
                var $items = $();
                this._$content.empty();
                items.forEach(function(item) {
                    $items = $items.add($("<div>").addClass(DATEVIEW_ROLLER_ITEM_CLASS).append(item))
                });
                this._$content.append($items);
                this._$items = $items;
                this.update()
            },
            _renderSelectedItemFrame: function() {
                $("<div>").addClass(DATEVIEW_ROLLER_ITEM_SELECTED_FRAME_CLASS).append($("<div>").addClass(DATEVIEW_ROLLER_ITEM_SELECTED_BORDER_CLASS)).appendTo(this._$container)
            },
            _renderSelectedValue: function(selectedIndex) {
                var index = this._fitIndex(selectedIndex || this.option("selectedIndex"));
                this._moveTo({
                    top: this._getItemPosition(index)
                });
                this._renderActiveStateItem()
            },
            _fitIndex: function(index) {
                var items = this.option("items") || [];
                var itemCount = items.length;
                if (index >= itemCount) {
                    return itemCount - 1
                }
                if (index < 0) {
                    return 0
                }
                return index
            },
            _getItemPosition: function(index) {
                return Math.round(this._itemHeight() * index)
            },
            _renderItemsClick: function() {
                var itemSelector = this._getItemSelector();
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                eventsEngine.off(this.$element(), eventName, itemSelector);
                eventsEngine.on(this.$element(), eventName, itemSelector, this._itemClickHandler.bind(this))
            },
            _getItemSelector: function() {
                return "." + DATEVIEW_ROLLER_ITEM_CLASS
            },
            _itemClickHandler: function(e) {
                this.option("selectedIndex", this._itemElementIndex(e.currentTarget))
            },
            _itemElementIndex: function(itemElement) {
                return this._itemElements().index(itemElement)
            },
            _itemElements: function() {
                return this.$element().find(this._getItemSelector())
            },
            _renderActiveStateItem: function() {
                var selectedIndex = this.option("selectedIndex");
                each(this._$items, function(index) {
                    $(this).toggleClass(DATEVIEW_ROLLER_ITEM_SELECTED_CLASS, selectedIndex === index)
                })
            },
            _moveTo: function(targetLocation) {
                targetLocation = this._normalizeLocation(targetLocation);
                var location = this._location();
                var delta = {
                    x: -(location.left - targetLocation.left),
                    y: -(location.top - targetLocation.top)
                };
                if (this._isVisible() && (delta.x || delta.y)) {
                    this._strategy._prepareDirections(true);
                    if (this._animation) {
                        var that = this;
                        fx.stop(this._$content);
                        fx.animate(this._$content, {
                            duration: 200,
                            type: "slide",
                            to: {
                                top: Math.floor(delta.y)
                            },
                            complete: function() {
                                translator.resetPosition(that._$content);
                                that._strategy.handleMove({
                                    delta: delta
                                })
                            }
                        });
                        delete this._animation
                    } else {
                        this._strategy.handleMove({
                            delta: delta
                        })
                    }
                }
            },
            _validate: function(e) {
                return this._strategy.validate(e)
            },
            _endActionHandler: function() {
                var currentSelectedIndex = this.option("selectedIndex");
                var ratio = -this._location().top / this._itemHeight();
                var newSelectedIndex = Math.round(ratio);
                this._animation = true;
                if (newSelectedIndex === currentSelectedIndex) {
                    this._renderSelectedValue(newSelectedIndex)
                } else {
                    this.option("selectedIndex", newSelectedIndex)
                }
            },
            _itemHeight: function() {
                var $item = this._$items.first();
                return $item.get(0) && getBoundingRect($item.get(0)).height || 0
            },
            _toggleActive: function(state) {
                this.$element().toggleClass(DATEVIEW_ROLLER_ACTIVE_CLASS, state)
            },
            _isVisible: function() {
                return this._$container.is(":visible")
            },
            _fireSelectedIndexChanged: function(value, previousValue) {
                this._selectedIndexChanged({
                    value: value,
                    previousValue: previousValue,
                    event: void 0
                })
            },
            _visibilityChanged: function(visible) {
                this.callBase(visible);
                if (visible) {
                    this._renderSelectedValue(this.option("selectedIndex"))
                }
                this.toggleActiveState(false)
            },
            toggleActiveState: function(state) {
                this.$element().toggleClass(DATEVIEW_ROLLER_CURRENT_CLASS, state)
            },
            _refreshSelectedIndex: function() {
                var selectedIndex = this.option("selectedIndex");
                var fitIndex = this._fitIndex(selectedIndex);
                fitIndex === selectedIndex ? this._renderActiveStateItem() : this.option("selectedIndex", fitIndex)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "selectedIndex":
                        this._fireSelectedIndexChanged(args.value, args.previousValue);
                        this._renderSelectedValue(args.value);
                        break;
                    case "items":
                        this._renderItems();
                        this._refreshSelectedIndex();
                        break;
                    case "onClick":
                    case "showOnClick":
                        this._renderContainerClick();
                        break;
                    case "onSelectedIndexChanged":
                        this._renderSelectedIndexChanged();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxDateViewRoller", DateViewRoller);
        module.exports = DateViewRoller
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.native.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 199);
        var support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var dateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var NativeStrategy = DateBoxStrategy.inherit({
            NAME: "Native",
            popupConfig: noop,
            getParsedText: function(text) {
                if (!text) {
                    return null
                }
                if ("datetime" === this.dateBox.option("type")) {
                    return new Date(text.replace(/-/g, "/").replace("T", " ").split(".")[0])
                }
                return dateUtils.fromStandardDateFormat(text)
            },
            renderPopupContent: noop,
            _getWidgetName: noop,
            _getWidgetOptions: noop,
            _getDateBoxType: function() {
                var type = this.dateBox.option("type");
                if (inArray(type, dateUtils.SUPPORTED_FORMATS) === -1) {
                    type = "date"
                } else {
                    if ("datetime" === type && !support.inputType(type)) {
                        type = "datetime-local"
                    }
                }
                return type
            },
            customizeButtons: function() {
                var dropDownButton = this.dateBox.getButton("dropDown");
                if (dropDownButton) {
                    dropDownButton.on("click", function() {
                        this.dateBox._input().get(0).click()
                    }.bind(this))
                }
            },
            getDefaultOptions: function() {
                return {
                    mode: this._getDateBoxType()
                }
            },
            getDisplayFormat: function(displayFormat) {
                var type = this._getDateBoxType();
                return displayFormat || dateUtils.FORMATS_MAP[type]
            },
            renderInputMinMax: function($input) {
                $input.attr({
                    min: dateSerialization.serializeDate(this.dateBox.dateOption("min"), "yyyy-MM-dd"),
                    max: dateSerialization.serializeDate(this.dateBox.dateOption("max"), "yyyy-MM-dd")
                })
            }
        });
        module.exports = NativeStrategy
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.calendar_with_time.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var CalendarStrategy = __webpack_require__( /*! ./ui.date_box.strategy.calendar */ 323);
        var TimeView = __webpack_require__( /*! ./ui.time_view */ 571);
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var Box = __webpack_require__( /*! ../box */ 197);
        var uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var SHRINK_VIEW_SCREEN_WIDTH = 573;
        var DATEBOX_ADAPTIVITY_MODE_CLASS = "dx-datebox-adaptivity-mode";
        var CalendarWithTimeStrategy = CalendarStrategy.inherit({
            NAME: "CalendarWithTime",
            getDefaultOptions: function() {
                return extend(this.callBase(), {
                    applyValueMode: "useButtons",
                    buttonsLocation: "bottom after",
                    "dropDownOptions.showTitle": false
                })
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || "shortdateshorttime"
            },
            _is24HourFormat: function() {
                return dateLocalization.is24HourFormat(this.getDisplayFormat(this.dateBox.option("displayFormat")))
            },
            _renderWidget: function() {
                this.callBase();
                this._timeView = this.dateBox._createComponent($("<div>"), TimeView, {
                    value: this.dateBoxValue(),
                    _showClock: !this._isShrinkView(),
                    use24HourFormat: this._is24HourFormat(),
                    onValueChanged: this._valueChangedHandler.bind(this),
                    stylingMode: this.dateBox.option("stylingMode")
                });
                this._timeView.registerKeyHandler("escape", this._escapeHandler.bind(this))
            },
            renderOpenedState: function() {
                this.callBase();
                var popup = this._getPopup();
                if (popup) {
                    popup._wrapper().toggleClass(DATEBOX_ADAPTIVITY_MODE_CLASS, this._isSmallScreen())
                }
                clearTimeout(this._repaintTimer);
                this._repaintTimer = setTimeout(function() {
                    this._getPopup() && this._getPopup().repaint()
                }.bind(this), 0)
            },
            isAdaptivityChanged: function() {
                var isAdaptiveMode = this._isShrinkView();
                var currentAdaptiveMode = this._currentAdaptiveMode;
                if (isAdaptiveMode !== currentAdaptiveMode) {
                    this._currentAdaptiveMode = isAdaptiveMode;
                    return void 0 !== currentAdaptiveMode
                }
                return this.callBase()
            },
            _updateValue: function(preventDefaultValue) {
                var date = this.dateBoxValue();
                if (!date && !preventDefaultValue) {
                    date = new Date;
                    uiDateUtils.normalizeTime(date)
                }
                this.callBase();
                if (this._timeView) {
                    date && this._timeView.option("value", date);
                    this._timeView.option("use24HourFormat", this._is24HourFormat())
                }
            },
            _isSmallScreen: function() {
                return $(window).width() <= SHRINK_VIEW_SCREEN_WIDTH
            },
            _isShrinkView: function() {
                return !this.dateBox.option("showAnalogClock") || this.dateBox.option("adaptivityEnabled") && this._isSmallScreen()
            },
            _getBoxItems: function() {
                var items = [{
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    name: "calendar"
                }];
                if (!this._isShrinkView()) {
                    items.push({
                        ratio: 0,
                        shrink: 0,
                        baseSize: "auto",
                        name: "time"
                    })
                }
                return items
            },
            renderPopupContent: function() {
                this.callBase();
                this._currentAdaptiveMode = this._isShrinkView();
                var $popupContent = this._getPopup().$content();
                this._box = this.dateBox._createComponent($("<div>").appendTo($popupContent), Box, {
                    direction: "row",
                    crossAlign: "start",
                    items: this._getBoxItems(),
                    itemTemplate: function(data) {
                        var $container = $("<div>");
                        switch (data.name) {
                            case "calendar":
                                $container.append(this._widget.$element());
                                if (this._isShrinkView()) {
                                    $container.append(this._timeView.$element())
                                }
                                break;
                            case "time":
                                $container.append(this._timeView.$element())
                        }
                        return $container
                    }.bind(this)
                });
                this._attachTabHandler()
            },
            popupConfig: function(_popupConfig) {
                var calendarPopupConfig = this.callBase(_popupConfig);
                var result = extend(calendarPopupConfig, {
                    onShowing: function() {
                        if ("fallback" === this._box.option("_layoutStrategy")) {
                            var clockMinWidth = this._getPopup().$content().find(".dx-timeview-clock").css("minWidth");
                            this._timeView.$element().css("maxWidth", clockMinWidth)
                        }
                    }.bind(this)
                });
                return result
            },
            getFirstPopupElement: function() {
                return this._timeView._hourBox.$element().find("input")
            },
            _attachTabHandler: function() {
                var dateBox = this.dateBox;
                var handler = function(e) {
                    if (e.shiftKey) {
                        e.preventDefault();
                        dateBox.focus()
                    }
                };
                this._timeView._hourBox.registerKeyHandler("tab", handler)
            },
            _preventFocusOnPopup: function(e) {
                if (!$(e.target).hasClass("dx-texteditor-input")) {
                    this.callBase.apply(this, arguments);
                    if (!this.dateBox._hasFocusClass()) {
                        this.dateBox.focus()
                    }
                }
            },
            getValue: function() {
                var date = this._widget.option("value");
                var time = this._timeView.option("value");
                date = date ? new Date(date) : new Date;
                date.setHours(time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
                return date
            },
            dispose: function() {
                clearTimeout(this._removeMinWidthTimer);
                clearTimeout(this._repaintTimer);
                this.callBase()
            }
        });
        module.exports = CalendarWithTimeStrategy
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.time_view.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _number_box = __webpack_require__( /*! ../number_box */ 121);
        var _number_box2 = _interopRequireDefault(_number_box);
        var _select_box = __webpack_require__( /*! ../select_box */ 97);
        var _select_box2 = _interopRequireDefault(_select_box);
        var _box = __webpack_require__( /*! ../box */ 197);
        var _box2 = _interopRequireDefault(_box);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _ui = __webpack_require__( /*! ./ui.date_utils */ 122);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TIMEVIEW_CLASS = "dx-timeview";
        var TIMEVIEW_CLOCK_CLASS = "dx-timeview-clock";
        var TIMEVIEW_FIELD_CLASS = "dx-timeview-field";
        var TIMEVIEW_HOURARROW_CLASS = "dx-timeview-hourarrow";
        var TIMEVIEW_TIME_SEPARATOR_CLASS = "dx-timeview-time-separator";
        var TIMEVIEW_FORMAT12_CLASS = "dx-timeview-format12";
        var TIMEVIEW_FORMAT12_AM = -1;
        var TIMEVIEW_FORMAT12_PM = 1;
        var TIMEVIEW_MINUTEARROW_CLASS = "dx-timeview-minutearrow";
        var rotateArrow = function($arrow, angle, offset) {
            cssRotate($arrow, angle, offset)
        };
        var cssRotate = function($arrow, angle, offset) {
            $arrow.css("transform", "rotate(" + angle + "deg) translate(0," + offset + "px)")
        };
        var TimeView = _editor2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    value: new Date(Date.now()),
                    use24HourFormat: true,
                    _showClock: true,
                    _arrowOffset: 0,
                    stylingMode: void 0
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "android"
                    },
                    options: {
                        _arrowOffset: 15
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        _arrowOffset: 5
                    }
                }])
            },
            _getValue: function() {
                return this.option("value") || new Date
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(TIMEVIEW_CLASS)
            },
            _render: function() {
                this.callBase();
                this._renderBox();
                this._updateTime()
            },
            _renderBox: function() {
                var $box = (0, _renderer2.default)("<div>").appendTo(this.$element());
                var items = [];
                if (this.option("_showClock")) {
                    items.push({
                        ratio: 1,
                        shrink: 0,
                        baseSize: "auto",
                        template: this._renderClock.bind(this)
                    })
                }
                items.push({
                    ratio: 0,
                    shrink: 0,
                    baseSize: 50,
                    template: this._renderField.bind(this)
                });
                this._createComponent($box, _box2.default, {
                    height: "100%",
                    width: "100%",
                    direction: "col",
                    items: items
                })
            },
            _renderClock: function(_, __, container) {
                this._$hourArrow = (0, _renderer2.default)("<div>").addClass(TIMEVIEW_HOURARROW_CLASS);
                this._$minuteArrow = (0, _renderer2.default)("<div>").addClass(TIMEVIEW_MINUTEARROW_CLASS);
                var $container = (0, _renderer2.default)(container);
                $container.addClass(TIMEVIEW_CLOCK_CLASS).append(this._$hourArrow).append(this._$minuteArrow);
                this.setAria("role", "presentation", $container)
            },
            _updateClock: function() {
                var time = this._getValue();
                var hourArrowAngle = time.getHours() / 12 * 360 + time.getMinutes() / 60 * 30;
                var minuteArrowAngle = time.getMinutes() / 60 * 360;
                rotateArrow(this._$hourArrow, hourArrowAngle, this.option("_arrowOffset"));
                rotateArrow(this._$minuteArrow, minuteArrowAngle, this.option("_arrowOffset"))
            },
            _getBoxItems: function(is12HourFormat) {
                var _this = this;
                var items = [{
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: function() {
                        return _this._hourBox.$element()
                    }
                }, {
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: (0, _renderer2.default)("<div>").addClass(TIMEVIEW_TIME_SEPARATOR_CLASS).text((0, _date.getTimeSeparator)())
                }, {
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: function() {
                        return _this._minuteBox.$element()
                    }
                }];
                if (is12HourFormat) {
                    items.push({
                        ratio: 0,
                        shrink: 0,
                        baseSize: "auto",
                        template: function() {
                            return _this._format12.$element()
                        }
                    })
                }
                return items
            },
            _renderField: function() {
                var is12HourFormat = !this.option("use24HourFormat");
                this._createHourBox();
                this._createMinuteBox();
                if (is12HourFormat) {
                    this._createFormat12Box()
                }
                return this._createComponent((0, _renderer2.default)("<div>").addClass(TIMEVIEW_FIELD_CLASS), _box2.default, {
                    direction: "row",
                    align: "center",
                    crossAlign: "center",
                    items: this._getBoxItems(is12HourFormat)
                }).$element()
            },
            _createHourBox: function() {
                var _this2 = this;
                var editor = this._hourBox = this._createComponent((0, _renderer2.default)("<div>"), _number_box2.default, (0, _extend.extend)({
                    min: -1,
                    max: 24,
                    value: this._getValue().getHours(),
                    onValueChanged: this._onHourBoxValueChanged.bind(this),
                    onKeyboardHandled: function(opts) {
                        return _this2._keyboardHandler(opts)
                    }
                }, this._getNumberBoxConfig()));
                editor.setAria("label", "hours")
            },
            _isPM: function() {
                return !this.option("use24HourFormat") && 1 === this._format12.option("value")
            },
            _onHourBoxValueChanged: function(args) {
                var currentValue = this._getValue();
                var newValue = new Date(currentValue);
                var newHours = this._convertMaxHourToMin(args.value);
                if (this._isPM()) {
                    newHours += 12
                }
                newValue.setHours(newHours);
                (0, _ui.normalizeTime)(newValue);
                this.option("value", newValue)
            },
            _convertMaxHourToMin: function(hours) {
                var maxHoursValue = this.option("use24HourFormat") ? 24 : 12;
                return (maxHoursValue + hours) % maxHoursValue
            },
            _createMinuteBox: function() {
                var _this3 = this;
                var editor = this._minuteBox = this._createComponent((0, _renderer2.default)("<div>"), _number_box2.default, (0, _extend.extend)({
                    min: -1,
                    max: 60,
                    value: this._getValue().getMinutes(),
                    onKeyboardHandled: function(opts) {
                        return _this3._keyboardHandler(opts)
                    },
                    onValueChanged: function(_ref) {
                        var value = _ref.value,
                            component = _ref.component;
                        var newMinutes = (60 + value) % 60;
                        component.option("value", newMinutes);
                        var time = new Date(_this3._getValue());
                        time.setMinutes(newMinutes);
                        (0, _ui.normalizeTime)(time);
                        _this3.option("value", time)
                    }
                }, this._getNumberBoxConfig()));
                editor.setAria("label", "minutes")
            },
            _createFormat12Box: function() {
                var _this4 = this;
                var periodNames = (0, _date.getPeriodNames)();
                var editor = this._format12 = this._createComponent((0, _renderer2.default)("<div>").addClass(TIMEVIEW_FORMAT12_CLASS), _select_box2.default, {
                    items: [{
                        value: TIMEVIEW_FORMAT12_AM,
                        text: periodNames[0]
                    }, {
                        value: TIMEVIEW_FORMAT12_PM,
                        text: periodNames[1]
                    }],
                    valueExpr: "value",
                    displayExpr: "text",
                    onKeyboardHandled: function(opts) {
                        return _this4._keyboardHandler(opts)
                    },
                    onValueChanged: function(_ref2) {
                        var value = _ref2.value;
                        var hours = _this4._getValue().getHours();
                        var time = new Date(_this4._getValue());
                        var newHours = (hours + 12 * value) % 24;
                        time.setHours(newHours);
                        _this4.option("value", time)
                    },
                    value: this._getValue().getHours() >= 12 ? TIMEVIEW_FORMAT12_PM : TIMEVIEW_FORMAT12_AM,
                    stylingMode: this.option("stylingMode")
                });
                editor.setAria("label", "type")
            },
            _refreshFormat12: function() {
                if (this.option("use24HourFormat")) {
                    return
                }
                var value = this._getValue();
                var hours = value.getHours();
                var isPM = hours >= 12;
                var newValue = isPM ? TIMEVIEW_FORMAT12_PM : TIMEVIEW_FORMAT12_AM;
                this._silentEditorValueUpdate(this._format12, newValue)
            },
            _silentEditorValueUpdate: function(editor, value) {
                if (editor) {
                    editor._suppressValueChangeAction();
                    editor.option("value", value);
                    editor._resumeValueChangeAction()
                }
            },
            _getNumberBoxConfig: function() {
                return {
                    showSpinButtons: true,
                    displayValueFormatter: function(value) {
                        return (value < 10 ? "0" : "") + value
                    },
                    stylingMode: this.option("stylingMode")
                }
            },
            _normalizeHours: function(hours) {
                return this.option("use24HourFormat") ? hours : hours % 12 || 12
            },
            _updateField: function() {
                var hours = this._normalizeHours(this._getValue().getHours());
                this._silentEditorValueUpdate(this._hourBox, hours);
                this._silentEditorValueUpdate(this._minuteBox, this._getValue().getMinutes());
                this._refreshFormat12()
            },
            _updateTime: function() {
                if (this.option("_showClock")) {
                    this._updateClock()
                }
                this._updateField()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._updateTime()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        this._updateTime();
                        this.callBase(args);
                        break;
                    case "_arrowOffset":
                        break;
                    case "use24HourFormat":
                    case "_showClock":
                    case "stylingMode":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        (0, _component_registrator2.default)("dxTimeView", TimeView);
        module.exports = TimeView
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/date_box/ui.date_box.strategy.list.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var List = __webpack_require__( /*! ../list */ 104);
        var DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 199);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var ensureDefined = __webpack_require__( /*! ../../core/utils/common */ 3).ensureDefined;
        var isDate = __webpack_require__( /*! ../../core/utils/type */ 1).isDate;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var dateUtils = __webpack_require__( /*! ./ui.date_utils */ 122);
        var dateLocalization = __webpack_require__( /*! ../../localization/date */ 35);
        var dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var DATE_FORMAT = "date";
        var BOUNDARY_VALUES = {
            min: new Date(0, 0, 0, 0, 0),
            max: new Date(0, 0, 0, 23, 59)
        };
        var ListStrategy = DateBoxStrategy.inherit({
            NAME: "List",
            supportedKeys: function() {
                return {
                    tab: function() {
                        if (this.option("opened")) {
                            this.close()
                        }
                    },
                    space: noop,
                    home: noop,
                    end: noop
                }
            },
            getDefaultOptions: function() {
                return extend(this.callBase(), {
                    applyValueMode: "instantly"
                })
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || "shorttime"
            },
            popupConfig: function(_popupConfig) {
                return extend(_popupConfig, {
                    width: this._getPopupWidth()
                })
            },
            useCurrentDateByDefault: function() {
                return true
            },
            getDefaultDate: function() {
                return new Date(null)
            },
            _getPopupWidth: function() {
                return this.dateBox.$element().outerWidth()
            },
            popupShowingHandler: function() {
                this._dimensionChanged()
            },
            _renderWidget: function() {
                this.callBase();
                this._refreshItems()
            },
            _getWidgetName: function() {
                return List
            },
            _getWidgetOptions: function() {
                return {
                    itemTemplate: this._timeListItemTemplate.bind(this),
                    onItemClick: this._listItemClickHandler.bind(this),
                    tabIndex: -1,
                    onFocusedItemChanged: this._refreshActiveDescendant.bind(this),
                    selectionMode: "single"
                }
            },
            _refreshActiveDescendant: function(e) {
                this.dateBox.setAria("activedescendant", "");
                this.dateBox.setAria("activedescendant", e.actionValue)
            },
            _refreshItems: function() {
                this._widgetItems = this._getTimeListItems();
                this._widget.option("items", this._widgetItems)
            },
            renderOpenedState: function() {
                if (!this._widget) {
                    return
                }
                this._widget.option("focusedElement", null);
                this._setSelectedItemsByValue();
                if (this._widget.option("templatesRenderAsynchronously")) {
                    this._asyncScrollTimeout = setTimeout(this._scrollToSelectedItem.bind(this))
                } else {
                    this._scrollToSelectedItem()
                }
            },
            dispose: function() {
                this.callBase();
                clearTimeout(this._asyncScrollTimeout)
            },
            _updateValue: function() {
                if (!this._widget) {
                    return
                }
                this._refreshItems();
                this._setSelectedItemsByValue();
                this._scrollToSelectedItem()
            },
            _setSelectedItemsByValue: function() {
                var value = this.dateBoxValue();
                var dateIndex = this._getDateIndex(value);
                if (dateIndex === -1) {
                    this._widget.option("selectedItems", [])
                } else {
                    this._widget.option("selectedIndex", dateIndex)
                }
            },
            _scrollToSelectedItem: function() {
                this._widget.scrollToItem(this._widget.option("selectedIndex"))
            },
            _getDateIndex: function(date) {
                var result = -1;
                for (var i = 0, n = this._widgetItems.length; i < n; i++) {
                    if (this._areDatesEqual(date, this._widgetItems[i])) {
                        result = i;
                        break
                    }
                }
                return result
            },
            _areDatesEqual: function(first, second) {
                return isDate(first) && isDate(second) && first.getHours() === second.getHours() && first.getMinutes() === second.getMinutes()
            },
            _getTimeListItems: function() {
                var min = this.dateBox.dateOption("min") || this._getBoundaryDate("min");
                var max = this.dateBox.dateOption("max") || this._getBoundaryDate("max");
                var value = this.dateBox.dateOption("value") || null;
                var delta = max - min;
                var minutes = min.getMinutes() % this.dateBox.option("interval");
                if (delta < 0) {
                    return []
                }
                if (delta > dateUtils.ONE_DAY) {
                    delta = dateUtils.ONE_DAY
                }
                if (value - min < dateUtils.ONE_DAY) {
                    return this._getRangeItems(min, new Date(min), delta)
                }
                min = this._getBoundaryDate("min");
                min.setMinutes(minutes);
                if (value && Math.abs(value - max) < dateUtils.ONE_DAY) {
                    delta = (60 * max.getHours() + Math.abs(max.getMinutes() - minutes)) * dateUtils.ONE_MINUTE
                }
                return this._getRangeItems(min, new Date(min), delta)
            },
            _getRangeItems: function(startValue, currentValue, rangeDuration) {
                var rangeItems = [];
                var interval = this.dateBox.option("interval");
                while (currentValue - startValue <= rangeDuration) {
                    rangeItems.push(new Date(currentValue));
                    currentValue.setMinutes(currentValue.getMinutes() + interval)
                }
                return rangeItems
            },
            _getBoundaryDate: function(boundary) {
                var boundaryValue = BOUNDARY_VALUES[boundary];
                var currentValue = new Date(ensureDefined(this.dateBox.dateOption("value"), 0));
                return new Date(currentValue.getFullYear(), currentValue.getMonth(), currentValue.getDate(), boundaryValue.getHours(), boundaryValue.getMinutes())
            },
            _timeListItemTemplate: function(itemData) {
                var displayFormat = this.dateBox.option("displayFormat");
                return dateLocalization.format(itemData, this.getDisplayFormat(displayFormat))
            },
            _listItemClickHandler: function(e) {
                this.dateBox.option("opened", false);
                var date = this.dateBox.option("value");
                var itemData = e.itemData;
                var hours = itemData.getHours();
                var minutes = itemData.getMinutes();
                var seconds = itemData.getSeconds();
                var year = itemData.getFullYear();
                var month = itemData.getMonth();
                var day = itemData.getDate();
                if (date) {
                    if (this.dateBox.option("dateSerializationFormat")) {
                        date = dateSerialization.deserializeDate(date)
                    } else {
                        date = new Date(date)
                    }
                    date.setHours(hours);
                    date.setMinutes(minutes);
                    date.setSeconds(seconds);
                    date.setFullYear(year);
                    date.setMonth(month);
                    date.setDate(day)
                } else {
                    date = new Date(year, month, day, hours, minutes, 0, 0)
                }
                this.dateBoxValue(date, e.event)
            },
            getKeyboardListener: function() {
                return this._widget
            },
            _dimensionChanged: function() {
                this._getPopup() && this._updatePopupDimensions()
            },
            _updatePopupDimensions: function() {
                this._updatePopupWidth();
                this._updatePopupHeight()
            },
            _updatePopupWidth: function() {
                this.dateBox._setPopupOption("width", this._getPopupWidth())
            },
            _updatePopupHeight: function() {
                this.dateBox._setPopupOption("height", "auto");
                var popupHeight = this._widget.$element().outerHeight();
                var maxHeight = .45 * $(window).height();
                this.dateBox._setPopupOption("height", Math.min(popupHeight, maxHeight));
                this.dateBox._timeList && this.dateBox._timeList.updateDimensions()
            },
            getParsedText: function(text, format) {
                var value = this.callBase(text, format);
                if (value) {
                    value = dateUtils.mergeDates(value, new Date(null), DATE_FORMAT)
                }
                return value
            }
        });
        module.exports = ListStrategy
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/drawer.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./drawer/ui.drawer */ 235)
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.rendering.strategy.push.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 200);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var PushStrategy = function(_DrawerStrategy) {
            _inherits(PushStrategy, _DrawerStrategy);
            var _super = _createSuper(PushStrategy);

            function PushStrategy() {
                _classCallCheck(this, PushStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(PushStrategy, [{
                key: "_useDefaultAnimation",
                value: function() {
                    return true
                }
            }, {
                key: "_defaultPositionRendering",
                value: function(config, _, animate) {
                    var _this = this;
                    var drawer = this.getDrawerInstance();
                    (0, _renderer2.default)(drawer.content()).css(drawer.isHorizontalDirection() ? "width" : "height", config.maxSize);
                    if (animate) {
                        var animationConfig = {
                            $element: config.$content,
                            position: config.contentPosition,
                            direction: drawer.calcTargetPosition(),
                            duration: drawer.option("animationDuration"),
                            complete: function() {
                                _this._elementsAnimationCompleteHandler()
                            }
                        };
                        _uiDrawerRendering.animation.moveTo(animationConfig)
                    } else {
                        if (drawer.isHorizontalDirection()) {
                            _translator2.default.move(config.$content, {
                                left: config.contentPosition
                            })
                        } else {
                            _translator2.default.move(config.$content, {
                                top: config.contentPosition
                            })
                        }
                    }
                }
            }, {
                key: "_getPositionRenderingConfig",
                value: function(isDrawerOpened) {
                    return (0, _extend.extend)(_get(_getPrototypeOf(PushStrategy.prototype), "_getPositionRenderingConfig", this).call(this, isDrawerOpened), {
                        contentPosition: this._getPanelSize(isDrawerOpened) * this.getDrawerInstance()._getPositionCorrection(),
                        maxSize: this._getPanelSize(true)
                    })
                }
            }]);
            return PushStrategy
        }(_uiDrawerRendering2.default);
        module.exports = PushStrategy
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.rendering.strategy.shrink.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 200);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ShrinkStrategy = function(_DrawerStrategy) {
            _inherits(ShrinkStrategy, _DrawerStrategy);
            var _super = _createSuper(ShrinkStrategy);

            function ShrinkStrategy() {
                _classCallCheck(this, ShrinkStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(ShrinkStrategy, [{
                key: "_slidePositionRendering",
                value: function(config, _, animate) {
                    if (animate) {
                        var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
                            $element: config.$panel,
                            margin: config.panelOffset,
                            duration: this.getDrawerInstance().option("animationDuration"),
                            direction: config.direction
                        });
                        _uiDrawerRendering.animation.margin(animationConfig)
                    } else {
                        config.$panel.css("margin" + (0, _inflector.camelize)(config.direction, true), config.panelOffset)
                    }
                }
            }, {
                key: "_expandPositionRendering",
                value: function(config, _, animate) {
                    var drawer = this.getDrawerInstance();
                    if (animate) {
                        var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
                            $element: config.$panel,
                            size: config.size,
                            duration: drawer.option("animationDuration"),
                            direction: config.direction
                        });
                        _uiDrawerRendering.animation.size(animationConfig)
                    } else {
                        if (drawer.isHorizontalDirection()) {
                            (0, _renderer2.default)(config.$panel).css("width", config.size)
                        } else {
                            (0, _renderer2.default)(config.$panel).css("height", config.size)
                        }
                    }
                }
            }, {
                key: "_getPositionRenderingConfig",
                value: function(isDrawerOpened) {
                    return (0, _extend.extend)(_get(_getPrototypeOf(ShrinkStrategy.prototype), "_getPositionRenderingConfig", this).call(this, isDrawerOpened), {
                        panelOffset: this._getPanelOffset(isDrawerOpened)
                    })
                }
            }, {
                key: "isViewContentFirst",
                value: function(position, isRtl) {
                    return (isRtl ? "left" === position : "right" === position) || "bottom" === position
                }
            }]);
            return ShrinkStrategy
        }(_uiDrawerRendering2.default);
        module.exports = ShrinkStrategy
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.rendering.strategy.overlap.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 200);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _overlay = __webpack_require__( /*! ../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _z_index = __webpack_require__( /*! ../overlay/z_index */ 182);
        var zIndexPool = _interopRequireWildcard(_z_index);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var OverlapStrategy = function(_DrawerStrategy) {
            _inherits(OverlapStrategy, _DrawerStrategy);
            var _super = _createSuper(OverlapStrategy);

            function OverlapStrategy() {
                _classCallCheck(this, OverlapStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(OverlapStrategy, [{
                key: "renderPanelContent",
                value: function(whenPanelContentRendered) {
                    delete this._initialPosition;
                    var drawer = this.getDrawerInstance();
                    var _drawer$option = drawer.option(),
                        opened = _drawer$option.opened,
                        minSize = _drawer$option.minSize;
                    drawer._overlay = drawer._createComponent(drawer.content(), _overlay2.default, {
                        shading: false,
                        container: drawer.getOverlayTarget(),
                        position: this._getOverlayPosition(),
                        width: opened ? "auto" : minSize || 0,
                        height: "100%",
                        templatesRenderAsynchronously: drawer.option("templatesRenderAsynchronously"),
                        animation: {
                            show: {
                                duration: 0
                            }
                        },
                        onPositioned: function(e) {
                            this._fixOverlayPosition(e.component.$content())
                        }.bind(this),
                        contentTemplate: drawer.option("template"),
                        onContentReady: function() {
                            whenPanelContentRendered.resolve();
                            drawer.updateZIndex(opened)
                        },
                        visible: true,
                        propagateOutsideClick: true
                    })
                }
            }, {
                key: "_fixOverlayPosition",
                value: function($overlayContent) {
                    var position = (0, _common.ensureDefined)(this._initialPosition, {
                        left: 0,
                        top: 0
                    });
                    _translator2.default.move($overlayContent, position);
                    if ("right" === this.getDrawerInstance().calcTargetPosition()) {
                        $overlayContent.css("left", "auto")
                    }
                }
            }, {
                key: "_getOverlayPosition",
                value: function() {
                    var drawer = this.getDrawerInstance();
                    var panelPosition = drawer.calcTargetPosition();
                    var result = {};
                    switch (panelPosition) {
                        case "left":
                            result = {
                                my: "top left",
                                at: "top left"
                            };
                            break;
                        case "right":
                            result = {
                                my: drawer.option("rtlEnabled") ? "top left" : "top right",
                                at: "top right"
                            };
                            break;
                        case "top":
                        case "bottom":
                            result = {
                                my: panelPosition,
                                at: panelPosition
                            }
                    }
                    result.of = drawer.getOverlayTarget();
                    return result
                }
            }, {
                key: "refreshPanelElementSize",
                value: function(calcFromRealPanelSize) {
                    var drawer = this.getDrawerInstance();
                    var overlay = drawer.getOverlay();
                    if (drawer.isHorizontalDirection()) {
                        overlay.option("height", "100%");
                        overlay.option("width", calcFromRealPanelSize ? drawer.getRealPanelWidth() : this._getPanelSize(drawer.option("opened")))
                    } else {
                        overlay.option("width", overlay.option("container").width());
                        overlay.option("height", calcFromRealPanelSize ? drawer.getRealPanelHeight() : this._getPanelSize(drawer.option("opened")))
                    }
                }
            }, {
                key: "_setupContent",
                value: function($content, position) {
                    $content.css("padding" + (0, _inflector.camelize)(position, true), this.getDrawerInstance().option("minSize"));
                    $content.css("transform", "inherit")
                }
            }, {
                key: "_slidePositionRendering",
                value: function(config, _, animate) {
                    var drawer = this.getDrawerInstance();
                    this._initialPosition = drawer.isHorizontalDirection() ? {
                        left: config.panelOffset
                    } : {
                        top: config.panelOffset
                    };
                    var position = drawer.calcTargetPosition();
                    this._setupContent(config.$content, position, config.drawer);
                    if (animate) {
                        var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
                            $element: config.$panel,
                            position: config.panelOffset,
                            duration: drawer.option("animationDuration"),
                            direction: position
                        });
                        _uiDrawerRendering.animation.moveTo(animationConfig)
                    } else {
                        if (drawer.isHorizontalDirection()) {
                            _translator2.default.move(config.$panel, {
                                left: config.panelOffset
                            })
                        } else {
                            _translator2.default.move(config.$panel, {
                                top: config.panelOffset
                            })
                        }
                    }
                }
            }, {
                key: "_expandPositionRendering",
                value: function(config, _, animate) {
                    var drawer = this.getDrawerInstance();
                    this._initialPosition = {
                        left: 0
                    };
                    var position = drawer.calcTargetPosition();
                    this._setupContent(config.$content, position);
                    _translator2.default.move(config.$panelOverlayContent, {
                        left: 0
                    });
                    if (animate) {
                        var animationConfig = (0, _extend.extend)(config.defaultAnimationConfig, {
                            $element: config.$panelOverlayContent,
                            size: config.size,
                            duration: drawer.option("animationDuration"),
                            direction: position,
                            marginTop: config.marginTop
                        });
                        _uiDrawerRendering.animation.size(animationConfig)
                    } else {
                        if (drawer.isHorizontalDirection()) {
                            (0, _renderer2.default)(config.$panelOverlayContent).css("width", config.size)
                        } else {
                            (0, _renderer2.default)(config.$panelOverlayContent).css("height", config.size);
                            if ("bottom" === position) {
                                (0, _renderer2.default)(config.$panelOverlayContent).css("marginTop", config.marginTop)
                            }
                        }
                    }
                }
            }, {
                key: "_getPositionRenderingConfig",
                value: function(isDrawerOpened) {
                    var drawer = this.getDrawerInstance();
                    var config = _get(_getPrototypeOf(OverlapStrategy.prototype), "_getPositionRenderingConfig", this).call(this, isDrawerOpened);
                    return (0, _extend.extend)(config, {
                        panelOffset: this._getPanelOffset(isDrawerOpened) * this.getDrawerInstance()._getPositionCorrection(),
                        $panelOverlayContent: drawer.getOverlay().$content(),
                        marginTop: drawer.getRealPanelHeight() - config.size
                    })
                }
            }, {
                key: "getPanelContent",
                value: function() {
                    return (0, _renderer2.default)(this.getDrawerInstance().getOverlay().content())
                }
            }, {
                key: "isViewContentFirst",
                value: function(position) {
                    return "right" === position || "bottom" === position
                }
            }, {
                key: "updateZIndex",
                value: function() {
                    _get(_getPrototypeOf(OverlapStrategy.prototype), "updateZIndex", this).call(this);
                    if (!(0, _type.isDefined)(this._panelZIndex)) {
                        this._panelZIndex = zIndexPool.base() + 501;
                        this._drawer._$panelContentWrapper.css("zIndex", this._panelZIndex)
                    }
                }
            }, {
                key: "clearZIndex",
                value: function() {
                    if ((0, _type.isDefined)(this._panelZIndex)) {
                        this._drawer._$panelContentWrapper.css("zIndex", "");
                        delete this._panelZIndex
                    }
                    _get(_getPrototypeOf(OverlapStrategy.prototype), "clearZIndex", this).call(this)
                }
            }]);
            return OverlapStrategy
        }(_uiDrawerRendering2.default);
        module.exports = OverlapStrategy
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/defer_rendering.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _transition_executor = __webpack_require__( /*! ../animation/transition_executor/transition_executor */ 300);
        var _transition_executor2 = _interopRequireDefault(_transition_executor);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _deferred2 = _interopRequireDefault(_deferred);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _window = __webpack_require__( /*! ../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _load_indicator = __webpack_require__( /*! ./load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);
        var _ui = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _position = __webpack_require__( /*! ../core/utils/position */ 21);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var Deferred = _deferred2.default.Deferred;
        var window = _window2.default.getWindow();
        var WIDGET_CLASS = "dx-widget";
        var DEFER_RENDERING_CLASS = "dx-deferrendering";
        var PENDING_RENDERING_CLASS = "dx-pending-rendering";
        var PENDING_RENDERING_MANUAL_CLASS = "dx-pending-rendering-manual";
        var PENDING_RENDERING_ACTIVE_CLASS = "dx-pending-rendering-active";
        var VISIBLE_WHILE_PENDING_RENDERING_CLASS = "dx-visible-while-pending-rendering";
        var INVISIBLE_WHILE_PENDING_RENDERING_CLASS = "dx-invisible-while-pending-rendering";
        var LOADINDICATOR_CONTAINER_CLASS = "dx-loadindicator-container";
        var DEFER_RENDERING_LOADINDICATOR_CONTAINER_CLASS = "dx-deferrendering-loadindicator-container";
        var DEFER_DEFER_RENDERING_LOAD_INDICATOR = "dx-deferrendering-load-indicator";
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var ACTIONS = ["onRendered", "onShown"];
        var DeferRendering = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    showLoadIndicator: false,
                    renderWhen: void 0,
                    animation: void 0,
                    staggerItemSelector: void 0,
                    onRendered: null,
                    onShown: null
                })
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _init: function() {
                this.transitionExecutor = new _transition_executor2.default.TransitionExecutor;
                this._initElement();
                this._initRender();
                this._$initialContent = this.$element().clone().contents();
                this._initActions();
                this.callBase()
            },
            _initElement: function() {
                this.$element().addClass(DEFER_RENDERING_CLASS)
            },
            _initRender: function() {
                var that = this;
                var $element = this.$element();
                var renderWhen = this.option("renderWhen");
                var doRender = function() {
                    return that._renderDeferredContent()
                };
                if ((0, _type.isPromise)(renderWhen)) {
                    _deferred2.default.fromPromise(renderWhen).done(doRender)
                } else {
                    $element.data("dx-render-delegate", doRender);
                    if (void 0 === renderWhen) {
                        $element.addClass(PENDING_RENDERING_MANUAL_CLASS)
                    }
                }
            },
            _initActions: function() {
                this._actions = {};
                (0, _iterator.each)(ACTIONS, function(_, action) {
                    this._actions[action] = this._createActionByOption(action) || _common2.default.noop
                }.bind(this))
            },
            _initMarkup: function() {
                this.callBase();
                if (!this._initContent) {
                    this._initContent = this._renderContent;
                    this._renderContent = function() {}
                }
                this._initContent()
            },
            _renderContentImpl: function() {
                this.$element().removeClass(WIDGET_CLASS);
                this.$element().append(this._$initialContent);
                this._setLoadingState()
            },
            _renderDeferredContent: function() {
                var that = this;
                var $element = this.$element();
                var result = new Deferred;
                $element.removeClass(PENDING_RENDERING_MANUAL_CLASS);
                $element.addClass(PENDING_RENDERING_ACTIVE_CLASS);
                this._abortRenderTask();
                this._renderTask = _common2.default.executeAsync(function() {
                    that._renderImpl().done(function() {
                        var shownArgs = {
                            element: $element
                        };
                        that._actions.onShown([shownArgs]);
                        result.resolve(shownArgs)
                    }).fail(function() {
                        result.rejectWith(result, arguments)
                    })
                });
                return result.promise()
            },
            _isElementInViewport: function(element) {
                var rect = (0, _position.getBoundingRect)(element);
                return rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || _dom_adapter2.default.getDocumentElement().clientHeight) && rect.left <= (window.innerWidth || _dom_adapter2.default.getDocumentElement().clientWidth)
            },
            _animate: function() {
                var that = this;
                var $element = this.$element();
                var animation = _window2.default.hasWindow() && this.option("animation");
                var staggerItemSelector = this.option("staggerItemSelector");
                var animatePromise;
                that.transitionExecutor.stop();
                if (animation) {
                    if (staggerItemSelector) {
                        $element.find(staggerItemSelector).each(function() {
                            if (that._isElementInViewport(this)) {
                                that.transitionExecutor.enter((0, _renderer2.default)(this), animation)
                            }
                        })
                    } else {
                        that.transitionExecutor.enter($element, animation)
                    }
                    animatePromise = that.transitionExecutor.start()
                } else {
                    animatePromise = (new Deferred).resolve().promise()
                }
                return animatePromise
            },
            _renderImpl: function() {
                var $element = this.$element();
                var renderedArgs = {
                    element: $element
                };
                var contentTemplate = this._getTemplate(this._templateManager.anonymousTemplateName);
                if (contentTemplate) {
                    contentTemplate.render({
                        container: $element.empty(),
                        noModel: true
                    })
                }
                this._setRenderedState($element);
                _events_engine2.default.trigger($element, "dxcontentrendered");
                this._actions.onRendered([renderedArgs]);
                this._isRendered = true;
                return this._animate()
            },
            _setLoadingState: function() {
                var $element = this.$element();
                var hasCustomLoadIndicator = !!$element.find("." + VISIBLE_WHILE_PENDING_RENDERING_CLASS).length;
                $element.addClass(PENDING_RENDERING_CLASS);
                if (!hasCustomLoadIndicator) {
                    $element.children().addClass(INVISIBLE_WHILE_PENDING_RENDERING_CLASS)
                }
                if (this.option("showLoadIndicator")) {
                    this._showLoadIndicator($element)
                }
            },
            _showLoadIndicator: function($container) {
                this._$loadIndicator = new _load_indicator2.default((0, _renderer2.default)("<div>"), {
                    visible: true
                }).$element().addClass(DEFER_DEFER_RENDERING_LOAD_INDICATOR);
                (0, _renderer2.default)("<div>").addClass(LOADINDICATOR_CONTAINER_CLASS).addClass(DEFER_RENDERING_LOADINDICATOR_CONTAINER_CLASS).append(this._$loadIndicator).appendTo($container)
            },
            _setRenderedState: function() {
                var $element = this.$element();
                if (this._$loadIndicator) {
                    this._$loadIndicator.remove()
                }
                $element.removeClass(PENDING_RENDERING_CLASS);
                $element.removeClass(PENDING_RENDERING_ACTIVE_CLASS);
                _dom2.default.triggerShownEvent($element.children())
            },
            _optionChanged: function(args) {
                var value = args.value;
                var previousValue = args.previousValue;
                switch (args.name) {
                    case "renderWhen":
                        if (false === previousValue && true === value) {
                            this._renderOrAnimate()
                        } else {
                            if (true === previousValue && false === value) {
                                this.transitionExecutor.stop();
                                this._setLoadingState()
                            }
                        }
                        break;
                    case "showLoadIndicator":
                    case "onRendered":
                    case "onShown":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _renderOrAnimate: function() {
                var result;
                if (this._isRendered) {
                    this._setRenderedState();
                    result = this._animate()
                } else {
                    result = this._renderDeferredContent()
                }
                return result
            },
            renderContent: function() {
                return this._renderOrAnimate()
            },
            _abortRenderTask: function() {
                if (this._renderTask) {
                    this._renderTask.abort();
                    this._renderTask = void 0
                }
            },
            _dispose: function() {
                this.transitionExecutor.stop(true);
                this._abortRenderTask();
                this._actions = void 0;
                this._$initialContent = void 0;
                this.callBase()
            }
        });
        (0, _component_registrator2.default)("dxDeferRendering", DeferRendering);
        module.exports = DeferRendering
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_box.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _ui = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_editor */ 178);
        var _ui2 = _interopRequireDefault(_ui);
        var _ui3 = __webpack_require__( /*! ./editor/ui.data_expression */ 232);
        var _ui4 = _interopRequireDefault(_ui3);
        var _common = __webpack_require__( /*! ../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var _selectors = __webpack_require__( /*! ./widget/selectors */ 66);
        var _selectors2 = _interopRequireDefault(_selectors);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 6);
        var _renderer = __webpack_require__( /*! ../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _utils = __webpack_require__( /*! ../ui/overlay/utils */ 236);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _utils2 = __webpack_require__( /*! ../events/utils */ 8);
        var _short = __webpack_require__( /*! ../events/short */ 116);
        var _devices = __webpack_require__( /*! ../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 12);
        var _dom = __webpack_require__( /*! ../core/utils/dom */ 11);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DROP_DOWN_BOX_CLASS = "dx-dropdownbox";
        var ANONYMOUS_TEMPLATE_NAME = "content";
        var realDevice = _devices2.default.real();
        var DropDownBox = _ui2.default.inherit({
            _supportedKeys: function() {
                return (0, _extend.extend)({}, this.callBase(), {
                    tab: function(e) {
                        if (!this.option("opened")) {
                            return
                        }
                        var $tabbableElements = this._getTabbableElements();
                        var $focusableElement = e.shiftKey ? $tabbableElements.last() : $tabbableElements.first();
                        $focusableElement && _events_engine2.default.trigger($focusableElement, "focus");
                        e.preventDefault()
                    }
                })
            },
            _getTabbableElements: function() {
                return this._getElements().filter(_selectors2.default.tabbable)
            },
            _getElements: function() {
                return (0, _renderer2.default)(this.content()).find("*")
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    acceptCustomValue: false,
                    contentTemplate: ANONYMOUS_TEMPLATE_NAME,
                    openOnFieldClick: true,
                    displayValueFormatter: function(value) {
                        return Array.isArray(value) ? value.join(", ") : value
                    },
                    useHiddenSubmitElement: true
                })
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                this.callBase()
            },
            _initMarkup: function() {
                this._initDataExpressions();
                this.$element().addClass(DROP_DOWN_BOX_CLASS);
                this.callBase()
            },
            _setSubmitValue: function() {
                var value = this.option("value");
                var submitValue = this._shouldUseDisplayValue(value) ? this._displayGetter(value) : value;
                this._getSubmitElement().val(submitValue)
            },
            _shouldUseDisplayValue: function(value) {
                return "this" === this.option("valueExpr") && (0, _type.isObject)(value)
            },
            _renderInputValue: function() {
                var callBase = this.callBase.bind(this);
                var values = [];
                if (!this._dataSource) {
                    callBase(values);
                    return (new _deferred.Deferred).resolve()
                }
                var currentValue = this._getCurrentValue();
                var keys = (0, _common.ensureDefined)(currentValue, []);
                keys = Array.isArray(keys) ? keys : [keys];
                var itemLoadDeferreds = (0, _iterator.map)(keys, function(key) {
                    return this._loadItem(key).always(function(item) {
                        var displayValue = this._displayGetter(item);
                        values.push((0, _common.ensureDefined)(displayValue, key))
                    }.bind(this))
                }.bind(this));
                return _deferred.when.apply(this, itemLoadDeferreds).always(function() {
                    this.option("displayValue", values);
                    callBase(values.length && values)
                }.bind(this))
            },
            _loadItem: function(value) {
                var deferred = new _deferred.Deferred;
                var that = this;
                var selectedItem = (0, _common.grep)(this.option("items") || [], function(item) {
                    return this._isValueEquals(this._valueGetter(item), value)
                }.bind(this))[0];
                if (void 0 !== selectedItem) {
                    deferred.resolve(selectedItem)
                } else {
                    this._loadValue(value).done(function(item) {
                        deferred.resolve(item)
                    }).fail(function(args) {
                        if (that.option("acceptCustomValue")) {
                            deferred.resolve(value)
                        } else {
                            deferred.reject()
                        }
                    })
                }
                return deferred.promise()
            },
            _updatePopupWidth: function() {
                this._setPopupOption("width", this.$element().outerWidth())
            },
            _popupElementTabHandler: function(e) {
                if ("tab" !== (0, _utils2.normalizeKeyName)(e)) {
                    return
                }
                var $firstTabbable = this._getTabbableElements().first().get(0);
                var $lastTabbable = this._getTabbableElements().last().get(0);
                var $target = e.originalEvent.target;
                var moveBackward = !!($target === $firstTabbable && e.shift);
                var moveForward = !!($target === $lastTabbable && !e.shift);
                if (moveBackward || moveForward) {
                    this.close();
                    _events_engine2.default.trigger(this._input(), "focus");
                    if (moveBackward) {
                        e.originalEvent.preventDefault()
                    }
                }
            },
            _renderPopup: function(e) {
                var _this = this;
                this.callBase();
                if (this.option("focusStateEnabled")) {
                    _short.keyboard.on(this.content(), null, function(e) {
                        return _this._popupElementTabHandler(e)
                    })
                }
            },
            _renderPopupContent: function() {
                if (this.option("contentTemplate") === ANONYMOUS_TEMPLATE_NAME) {
                    return
                }
                var contentTemplate = this._getTemplateByOption("contentTemplate");
                if (!(contentTemplate && this.option("contentTemplate"))) {
                    return
                }
                var $popupContent = this._popup.$content();
                var templateData = {
                    value: this._fieldRenderData(),
                    component: this
                };
                $popupContent.empty();
                contentTemplate.render({
                    container: (0, _dom.getPublicElement)($popupContent),
                    model: templateData
                })
            },
            _canShowVirtualKeyboard: function() {
                return realDevice.mac
            },
            _isNestedElementActive: function() {
                var activeElement = (0, _dom_adapter.getActiveElement)();
                return activeElement && this._popup.$content().get(0).contains(activeElement)
            },
            _shouldCloseOnTargetScroll: function() {
                return "desktop" === realDevice.deviceType && this._canShowVirtualKeyboard() && this._isNestedElementActive()
            },
            _popupHiddenHandler: function() {
                this.callBase();
                this._popupPosition = void 0
            },
            _popupPositionedHandler: function(e) {
                this.callBase(e);
                this._popupPosition = e.position
            },
            _getDefaultPopupPosition: function(isRtlEnabled) {
                var _this$callBase = this.callBase(isRtlEnabled),
                    my = _this$callBase.my,
                    at = _this$callBase.at;
                return {
                    my: my,
                    at: at,
                    offset: {
                        v: -1
                    },
                    collision: "flipfit"
                }
            },
            _popupConfig: function() {
                var _this2 = this;
                var _this$option = this.option(),
                    focusStateEnabled = _this$option.focusStateEnabled;
                return (0, _extend.extend)(this.callBase(), {
                    width: function() {
                        return this.$element().outerWidth()
                    }.bind(this),
                    height: "auto",
                    tabIndex: -1,
                    dragEnabled: false,
                    focusStateEnabled: focusStateEnabled,
                    contentTemplate: ANONYMOUS_TEMPLATE_NAME,
                    closeOnTargetScroll: this._shouldCloseOnTargetScroll.bind(this),
                    position: (0, _extend.extend)(this.option("popupPosition"), {
                        of: this.$element()
                    }),
                    onKeyboardHandled: function(opts) {
                        return _this2.option("focusStateEnabled") && _this2._popupElementTabHandler(opts)
                    },
                    maxHeight: function() {
                        var _this$_popupPosition;
                        var popupLocation = null === (_this$_popupPosition = this._popupPosition) || void 0 === _this$_popupPosition ? void 0 : _this$_popupPosition.v.location;
                        return (0, _utils.getElementMaxHeightByWindow)(this.$element(), popupLocation)
                    }.bind(this)
                })
            },
            _popupShownHandler: function() {
                this.callBase();
                var $firstElement = this._getTabbableElements().first();
                _events_engine2.default.trigger($firstElement, "focus")
            },
            _setCollectionWidgetOption: _common.noop,
            _optionChanged: function(args) {
                this._dataExpressionOptionChanged(args);
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._popup && this._popup.repaint();
                        break;
                    case "dataSource":
                        this._renderInputValue();
                        break;
                    case "displayValue":
                        this.option("text", args.value);
                        break;
                    case "displayExpr":
                        this._renderValue();
                        break;
                    case "contentTemplate":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(_ui4.default);
        (0, _component_registrator2.default)("dxDropDownBox", DropDownBox);
        module.exports = DropDownBox;
        module.exports.realDevice = realDevice
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _validation_engine = __webpack_require__( /*! ../validation_engine */ 92);
        var _validation_engine2 = _interopRequireDefault(_validation_engine);
        var _uiForm = __webpack_require__( /*! ./ui.form.layout_manager */ 580);
        var _uiForm2 = _interopRequireDefault(_uiForm);
        var _uiForm3 = __webpack_require__( /*! ./ui.form.items_runtime_info */ 324);
        var _uiForm4 = _interopRequireDefault(_uiForm3);
        var _tab_panel = __webpack_require__( /*! ../tab_panel */ 240);
        var _tab_panel2 = _interopRequireDefault(_tab_panel);
        var _ui3 = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var _ui4 = _interopRequireDefault(_ui3);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _uiForm5 = __webpack_require__( /*! ./ui.form.item_options_actions */ 583);
        var _uiForm6 = _interopRequireDefault(_uiForm5);
        var _uiForm7 = __webpack_require__( /*! ./ui.form.utils */ 328);
        __webpack_require__( /*! ../validation_summary */ 241);
        __webpack_require__( /*! ../validation_group */ 329);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }
        var FORM_CLASS = "dx-form";
        var FIELD_ITEM_CLASS = "dx-field-item";
        var FIELD_ITEM_LABEL_TEXT_CLASS = "dx-field-item-label-text";
        var FORM_GROUP_CLASS = "dx-form-group";
        var FORM_GROUP_CONTENT_CLASS = "dx-form-group-content";
        var FORM_GROUP_WITH_CAPTION_CLASS = "dx-form-group-with-caption";
        var FORM_GROUP_CAPTION_CLASS = "dx-form-group-caption";
        var HIDDEN_LABEL_CLASS = "dx-layout-manager-hidden-label";
        var FIELD_ITEM_LABEL_CLASS = "dx-field-item-label";
        var FIELD_ITEM_LABEL_CONTENT_CLASS = "dx-field-item-label-content";
        var FIELD_ITEM_TAB_CLASS = "dx-field-item-tab";
        var FORM_FIELD_ITEM_COL_CLASS = "dx-col-";
        var GROUP_COL_COUNT_CLASS = "dx-group-colcount-";
        var GROUP_COL_COUNT_ATTR = "group-col-count";
        var FIELD_ITEM_CONTENT_CLASS = "dx-field-item-content";
        var FORM_VALIDATION_SUMMARY = "dx-form-validation-summary";
        var WIDGET_CLASS = "dx-widget";
        var FOCUSED_STATE_CLASS = "dx-state-focused";
        var ITEM_OPTIONS_FOR_VALIDATION_UPDATING = ["items", "isRequired", "validationRules", "visible"];
        var Form = _ui2.default.inherit({
            _init: function() {
                this.callBase();
                this._cachedColCountOptions = [];
                this._itemsRunTimeInfo = new _uiForm4.default;
                this._groupsColCount = [];
                this._attachSyncSubscriptions()
            },
            _initOptions: function(options) {
                if (!("screenByWidth" in options)) {
                    options.screenByWidth = _window.defaultScreenFactorFunc
                }
                this.callBase(options)
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    formID: "dx-" + new _guid2.default,
                    formData: {},
                    colCount: 1,
                    screenByWidth: null,
                    colCountByScreen: void 0,
                    labelLocation: "left",
                    readOnly: false,
                    onFieldDataChanged: null,
                    customizeItem: null,
                    onEditorEnterKey: null,
                    minColWidth: 200,
                    alignItemLabels: true,
                    alignItemLabelsInAllGroups: true,
                    showColonAfterLabel: true,
                    showRequiredMark: true,
                    showOptionalMark: false,
                    requiredMark: "*",
                    optionalMark: _message2.default.format("dxForm-optionalMark"),
                    requiredMessage: _message2.default.getFormatter("dxForm-requiredMessage"),
                    showValidationSummary: false,
                    items: void 0,
                    scrollingEnabled: false,
                    validationGroup: void 0,
                    stylingMode: void 0
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        showColonAfterLabel: false,
                        labelLocation: "top"
                    }
                }])
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    formData: true,
                    validationGroup: true
                })
            },
            _getGroupColCount: function($element) {
                return parseInt($element.attr(GROUP_COL_COUNT_ATTR))
            },
            _createHiddenElement: function(rootLayoutManager) {
                this._$hiddenElement = (0, _renderer2.default)("<div>").addClass(WIDGET_CLASS).addClass(HIDDEN_LABEL_CLASS).appendTo("body");
                var $hiddenLabel = rootLayoutManager._renderLabel({
                    text: " ",
                    location: this._labelLocation()
                }).appendTo(this._$hiddenElement);
                this._hiddenLabelText = $hiddenLabel.find("." + FIELD_ITEM_LABEL_TEXT_CLASS)[0]
            },
            _removeHiddenElement: function() {
                this._$hiddenElement.remove();
                this._hiddenLabelText = null
            },
            _getLabelWidthByText: function(text) {
                this._hiddenLabelText.innerHTML = text;
                return this._hiddenLabelText.offsetWidth
            },
            _getLabelsSelectorByCol: function(index, options) {
                options = options || {};
                var fieldItemClass = options.inOneColumn ? FIELD_ITEM_CLASS : FORM_FIELD_ITEM_COL_CLASS + index;
                var cssExcludeTabbedSelector = options.excludeTabbed ? ":not(." + FIELD_ITEM_TAB_CLASS + ")" : "";
                var childLabelContentSelector = "> ." + FIELD_ITEM_LABEL_CLASS + " > ." + FIELD_ITEM_LABEL_CONTENT_CLASS;
                return "." + fieldItemClass + cssExcludeTabbedSelector + childLabelContentSelector
            },
            _getLabelText: function(labelText) {
                var length = labelText.children.length;
                var child;
                var result = "";
                var i;
                for (i = 0; i < length; i++) {
                    child = labelText.children[i];
                    result += !(0, _string.isEmpty)(child.innerText) ? child.innerText : child.innerHTML
                }
                return result
            },
            _applyLabelsWidthByCol: function($container, index, options) {
                var $labelTexts = $container.find(this._getLabelsSelectorByCol(index, options));
                var $labelTextsLength = $labelTexts.length;
                var labelWidth;
                var i;
                var maxWidth = 0;
                for (i = 0; i < $labelTextsLength; i++) {
                    labelWidth = this._getLabelWidthByText(this._getLabelText($labelTexts[i]));
                    if (labelWidth > maxWidth) {
                        maxWidth = labelWidth
                    }
                }
                for (i = 0; i < $labelTextsLength; i++) {
                    $labelTexts[i].style.width = maxWidth + "px"
                }
            },
            _applyLabelsWidth: function($container, excludeTabbed, inOneColumn, colCount) {
                colCount = inOneColumn ? 1 : colCount || this._getGroupColCount($container);
                var applyLabelsOptions = {
                    excludeTabbed: excludeTabbed,
                    inOneColumn: inOneColumn
                };
                var i;
                for (i = 0; i < colCount; i++) {
                    this._applyLabelsWidthByCol($container, i, applyLabelsOptions)
                }
            },
            _getGroupElementsInColumn: function($container, columnIndex, colCount) {
                var cssColCountSelector = (0, _type.isDefined)(colCount) ? "." + GROUP_COL_COUNT_CLASS + colCount : "";
                var groupSelector = "." + FORM_FIELD_ITEM_COL_CLASS + columnIndex + " > ." + FIELD_ITEM_CONTENT_CLASS + " > ." + FORM_GROUP_CLASS + cssColCountSelector;
                return $container.find(groupSelector)
            },
            _applyLabelsWidthWithGroups: function($container, colCount, excludeTabbed) {
                var alignItemLabelsInAllGroups = this.option("alignItemLabelsInAllGroups");
                if (alignItemLabelsInAllGroups) {
                    this._applyLabelsWidthWithNestedGroups($container, colCount, excludeTabbed)
                } else {
                    var $groups = this.$element().find("." + FORM_GROUP_CLASS);
                    var i;
                    for (i = 0; i < $groups.length; i++) {
                        this._applyLabelsWidth($groups.eq(i), excludeTabbed)
                    }
                }
            },
            _applyLabelsWidthWithNestedGroups: function($container, colCount, excludeTabbed) {
                var applyLabelsOptions = {
                    excludeTabbed: excludeTabbed
                };
                var colIndex;
                var groupsColIndex;
                var groupColIndex;
                var $groupsByCol;
                for (colIndex = 0; colIndex < colCount; colIndex++) {
                    $groupsByCol = this._getGroupElementsInColumn($container, colIndex);
                    this._applyLabelsWidthByCol($groupsByCol, 0, applyLabelsOptions);
                    for (groupsColIndex = 0; groupsColIndex < this._groupsColCount.length; groupsColIndex++) {
                        $groupsByCol = this._getGroupElementsInColumn($container, colIndex, this._groupsColCount[groupsColIndex]);
                        var groupColCount = this._getGroupColCount($groupsByCol);
                        for (groupColIndex = 1; groupColIndex < groupColCount; groupColIndex++) {
                            this._applyLabelsWidthByCol($groupsByCol, groupColIndex, applyLabelsOptions)
                        }
                    }
                }
            },
            _labelLocation: function() {
                return this.option("labelLocation")
            },
            _alignLabelsInColumn: function(_ref) {
                var layoutManager = _ref.layoutManager,
                    inOneColumn = _ref.inOneColumn,
                    $container = _ref.$container,
                    excludeTabbed = _ref.excludeTabbed,
                    items = _ref.items;
                if (!(0, _window.hasWindow)() || "top" === this._labelLocation()) {
                    return
                }
                this._createHiddenElement(layoutManager);
                if (inOneColumn) {
                    this._applyLabelsWidth($container, excludeTabbed, true)
                } else {
                    if (this._checkGrouping(items)) {
                        this._applyLabelsWidthWithGroups($container, layoutManager._getColCount(), excludeTabbed)
                    } else {
                        this._applyLabelsWidth($container, excludeTabbed, false, layoutManager._getColCount())
                    }
                }
                this._removeHiddenElement()
            },
            _prepareFormData: function() {
                if (!(0, _type.isDefined)(this.option("formData"))) {
                    this.option("formData", {})
                }
            },
            _initMarkup: function() {
                _validation_engine2.default.addGroup(this._getValidationGroup());
                this._clearCachedInstances();
                this._prepareFormData();
                this.$element().addClass(FORM_CLASS);
                this.callBase();
                this.setAria("role", "form", this.$element());
                if (this.option("scrollingEnabled")) {
                    this._renderScrollable()
                }
                this._renderLayout();
                this._renderValidationSummary();
                this._lastMarkupScreenFactor = this._targetScreenFactor || this._getCurrentScreenFactor()
            },
            _getCurrentScreenFactor: function() {
                return (0, _window.hasWindow)() ? (0, _window.getCurrentScreenFactor)(this.option("screenByWidth")) : "lg"
            },
            _clearCachedInstances: function() {
                this._itemsRunTimeInfo.clear();
                this._cachedLayoutManagers = []
            },
            _alignLabels: function(layoutManager, inOneColumn) {
                this._alignLabelsInColumn({
                    $container: this.$element(),
                    layoutManager: layoutManager,
                    excludeTabbed: true,
                    items: this.option("items"),
                    inOneColumn: inOneColumn
                })
            },
            _clean: function() {
                this.callBase();
                this._groupsColCount = [];
                this._cachedColCountOptions = [];
                this._lastMarkupScreenFactor = void 0
            },
            _renderScrollable: function() {
                var useNativeScrolling = this.option("useNativeScrolling");
                this._scrollable = new _ui4.default(this.$element(), {
                    useNative: !!useNativeScrolling,
                    useSimulatedScrollbar: !useNativeScrolling,
                    useKeyboard: false,
                    direction: "both",
                    bounceEnabled: false
                })
            },
            _getContent: function() {
                return this.option("scrollingEnabled") ? this._scrollable.$content() : this.$element()
            },
            _renderValidationSummary: function() {
                var $validationSummary = this.$element().find("." + FORM_VALIDATION_SUMMARY);
                if ($validationSummary.length > 0) {
                    $validationSummary.remove()
                }
                if (this.option("showValidationSummary")) {
                    var _$validationSummary = (0, _renderer2.default)("<div>").addClass(FORM_VALIDATION_SUMMARY).appendTo(this._getContent());
                    this._validationSummary = _$validationSummary.dxValidationSummary({
                        validationGroup: this._getValidationGroup()
                    }).dxValidationSummary("instance")
                }
            },
            _prepareItems: function(items, parentIsTabbedItem, currentPath, isTabs) {
                if (items) {
                    var result = [];
                    for (var i = 0; i < items.length; i++) {
                        var item = items[i];
                        var path = (0, _uiForm7.concatPaths)(currentPath, (0, _uiForm7.createItemPathByIndex)(i, isTabs));
                        var guid = this._itemsRunTimeInfo.add({
                            item: item,
                            itemIndex: i,
                            path: path
                        });
                        if ((0, _type.isString)(item)) {
                            item = {
                                dataField: item
                            }
                        }
                        if ((0, _type.isObject)(item)) {
                            var itemCopy = (0, _extend.extend)({}, item);
                            itemCopy.guid = guid;
                            this._tryPrepareGroupItem(itemCopy);
                            this._tryPrepareTabbedItem(itemCopy, path);
                            this._tryPrepareItemTemplate(itemCopy);
                            if (parentIsTabbedItem) {
                                itemCopy.cssItemClass = FIELD_ITEM_TAB_CLASS
                            }
                            if (itemCopy.items) {
                                itemCopy.items = this._prepareItems(itemCopy.items, parentIsTabbedItem, path)
                            }
                            result.push(itemCopy)
                        } else {
                            result.push(item)
                        }
                    }
                    return result
                }
            },
            _tryPrepareGroupItem: function(item) {
                if ("group" === item.itemType) {
                    item.alignItemLabels = (0, _common.ensureDefined)(item.alignItemLabels, true);
                    if (item.template) {
                        item.groupContentTemplate = this._getTemplate(item.template)
                    }
                    item.template = this._itemGroupTemplate.bind(this, item)
                }
            },
            _tryPrepareTabbedItem: function(item, path) {
                if ("tabbed" === item.itemType) {
                    item.template = this._itemTabbedTemplate.bind(this, item);
                    item.tabs = this._prepareItems(item.tabs, true, path, true)
                }
            },
            _tryPrepareItemTemplate: function(item) {
                if (item.template) {
                    item.template = this._getTemplate(item.template)
                }
            },
            _checkGrouping: function(items) {
                if (items) {
                    for (var i = 0; i < items.length; i++) {
                        var item = items[i];
                        if ("group" === item.itemType) {
                            return true
                        }
                    }
                }
            },
            _renderLayout: function() {
                var that = this;
                var items = that.option("items");
                var $content = that._getContent();
                items = that._prepareItems(items);
                that._testResultItems = items;
                that._rootLayoutManager = that._renderLayoutManager(items, $content, {
                    colCount: that.option("colCount"),
                    alignItemLabels: that.option("alignItemLabels"),
                    screenByWidth: this.option("screenByWidth"),
                    colCountByScreen: this.option("colCountByScreen"),
                    onLayoutChanged: function(inOneColumn) {
                        that._alignLabels.bind(that)(that._rootLayoutManager, inOneColumn)
                    },
                    onContentReady: function(e) {
                        that._alignLabels(e.component, e.component.isSingleColumnMode())
                    }
                })
            },
            _tryGetItemsForTemplate: function(item) {
                return item.items || []
            },
            _itemTabbedTemplate: function(item, e, $container) {
                var _this = this;
                var $tabPanel = (0, _renderer2.default)("<div>").appendTo($container);
                var tabPanelOptions = (0, _extend.extend)({}, item.tabPanelOptions, {
                    dataSource: item.tabs,
                    onItemRendered: function(args) {
                        return (0, _dom.triggerShownEvent)(args.itemElement)
                    },
                    itemTemplate: function(itemData, e, container) {
                        var $container = (0, _renderer2.default)(container);
                        var alignItemLabels = (0, _common.ensureDefined)(itemData.alignItemLabels, true);
                        var layoutManager = _this._renderLayoutManager(_this._tryGetItemsForTemplate(itemData), $container, {
                            colCount: itemData.colCount,
                            alignItemLabels: alignItemLabels,
                            screenByWidth: _this.option("screenByWidth"),
                            colCountByScreen: itemData.colCountByScreen,
                            cssItemClass: itemData.cssItemClass,
                            onLayoutChanged: function(inOneColumn) {
                                _this._alignLabelsInColumn({
                                    $container: $container,
                                    layoutManager: layoutManager,
                                    items: itemData.items,
                                    inOneColumn: inOneColumn
                                })
                            }
                        });
                        if (_this._itemsRunTimeInfo) {
                            _this._itemsRunTimeInfo.extendRunTimeItemInfoByKey(itemData.guid, {
                                layoutManager: layoutManager
                            })
                        }
                        if (alignItemLabels) {
                            _this._alignLabelsInColumn({
                                $container: $container,
                                layoutManager: layoutManager,
                                items: itemData.items,
                                inOneColumn: layoutManager.isSingleColumnMode()
                            })
                        }
                    }
                });
                var tryUpdateTabPanelInstance = function(items, instance) {
                    if (Array.isArray(items)) {
                        items.forEach(function(item) {
                            return _this._itemsRunTimeInfo.extendRunTimeItemInfoByKey(item.guid, {
                                widgetInstance: instance
                            })
                        })
                    }
                };
                var tabPanel = this._createComponent($tabPanel, _tab_panel2.default, tabPanelOptions);
                tabPanel.on("optionChanged", function(e) {
                    if ("dataSource" === e.fullName) {
                        tryUpdateTabPanelInstance(e.value, e.component)
                    }
                });
                tryUpdateTabPanelInstance([{
                    guid: item.guid
                }].concat(_toConsumableArray(item.tabs)), tabPanel)
            },
            _itemGroupTemplate: function(item, e, $container) {
                var $group = (0, _renderer2.default)("<div>").toggleClass(FORM_GROUP_WITH_CAPTION_CLASS, (0, _type.isDefined)(item.caption) && item.caption.length).addClass(FORM_GROUP_CLASS).appendTo($container);
                var colCount;
                var layoutManager;
                if (item.caption) {
                    (0, _renderer2.default)("<span>").addClass(FORM_GROUP_CAPTION_CLASS).text(item.caption).appendTo($group)
                }
                var $groupContent = (0, _renderer2.default)("<div>").addClass(FORM_GROUP_CONTENT_CLASS).appendTo($group);
                if (item.groupContentTemplate) {
                    var data = {
                        formData: this.option("formData"),
                        component: this
                    };
                    item.groupContentTemplate.render({
                        model: data,
                        container: (0, _dom.getPublicElement)($groupContent)
                    })
                } else {
                    layoutManager = this._renderLayoutManager(this._tryGetItemsForTemplate(item), $groupContent, {
                        colCount: item.colCount,
                        colCountByScreen: item.colCountByScreen,
                        alignItemLabels: item.alignItemLabels,
                        cssItemClass: item.cssItemClass
                    });
                    this._itemsRunTimeInfo && this._itemsRunTimeInfo.extendRunTimeItemInfoByKey(item.guid, {
                        layoutManager: layoutManager
                    });
                    colCount = layoutManager._getColCount();
                    if ((0, _array.inArray)(colCount, this._groupsColCount) === -1) {
                        this._groupsColCount.push(colCount)
                    }
                    $group.addClass(GROUP_COL_COUNT_CLASS + colCount);
                    $group.attr(GROUP_COL_COUNT_ATTR, colCount)
                }
            },
            _renderLayoutManager: function(items, $rootElement, options) {
                var $element = (0, _renderer2.default)("<div>");
                var that = this;
                var config = that._getLayoutManagerConfig(items, options);
                var baseColCountByScreen = {
                    lg: options.colCount,
                    md: options.colCount,
                    sm: options.colCount,
                    xs: 1
                };
                that._cachedColCountOptions.push({
                    colCountByScreen: (0, _extend.extend)(baseColCountByScreen, options.colCountByScreen)
                });
                $element.appendTo($rootElement);
                var instance = that._createComponent($element, "dxLayoutManager", config);
                instance.on("autoColCountChanged", function() {
                    that._refresh()
                });
                that._cachedLayoutManagers.push(instance);
                return instance
            },
            _getValidationGroup: function() {
                return this.option("validationGroup") || this
            },
            _getLayoutManagerConfig: function(items, options) {
                var _this2 = this;
                var baseConfig = {
                    form: this,
                    validationGroup: this._getValidationGroup(),
                    showRequiredMark: this.option("showRequiredMark"),
                    showOptionalMark: this.option("showOptionalMark"),
                    requiredMark: this.option("requiredMark"),
                    optionalMark: this.option("optionalMark"),
                    requiredMessage: this.option("requiredMessage"),
                    screenByWidth: this.option("screenByWidth"),
                    layoutData: this.option("formData"),
                    labelLocation: this.option("labelLocation"),
                    customizeItem: this.option("customizeItem"),
                    minColWidth: this.option("minColWidth"),
                    showColonAfterLabel: this.option("showColonAfterLabel"),
                    onEditorEnterKey: this.option("onEditorEnterKey"),
                    onFieldDataChanged: function(args) {
                        if (!_this2._isDataUpdating) {
                            _this2._triggerOnFieldDataChanged(args)
                        }
                    },
                    validationBoundary: this.option("scrollingEnabled") ? this.$element() : void 0
                };
                return (0, _extend.extend)(baseConfig, {
                    items: items,
                    onContentReady: function(args) {
                        _this2._itemsRunTimeInfo.addItemsOrExtendFrom(args.component._itemsRunTimeInfo);
                        options.onContentReady && options.onContentReady(args)
                    },
                    onDisposing: function(_ref2) {
                        var component = _ref2.component;
                        var nestedItemsRunTimeInfo = component.getItemsRunTimeInfo();
                        _this2._itemsRunTimeInfo.removeItemsByItems(nestedItemsRunTimeInfo)
                    },
                    colCount: options.colCount,
                    alignItemLabels: options.alignItemLabels,
                    cssItemClass: options.cssItemClass,
                    colCountByScreen: options.colCountByScreen,
                    onLayoutChanged: options.onLayoutChanged,
                    width: options.width
                })
            },
            _createComponent: function($element, type, config) {
                var that = this;
                config = config || {};
                that._extendConfig(config, {
                    readOnly: that.option("readOnly")
                });
                return that.callBase($element, type, config)
            },
            _attachSyncSubscriptions: function() {
                var that = this;
                that.on("optionChanged", function(args) {
                    var optionFullName = args.fullName;
                    if ("formData" === optionFullName) {
                        if (!(0, _type.isDefined)(args.value)) {
                            that._options.silent("formData", args.value = {})
                        }
                        that._triggerOnFieldDataChangedByDataSet(args.value)
                    }
                    if (that._cachedLayoutManagers.length) {
                        (0, _iterator.each)(that._cachedLayoutManagers, function(index, layoutManager) {
                            if ("formData" === optionFullName) {
                                that._isDataUpdating = true;
                                layoutManager.option("layoutData", args.value);
                                that._isDataUpdating = false
                            }
                            if ("readOnly" === args.name || "disabled" === args.name) {
                                layoutManager.option(optionFullName, args.value)
                            }
                        })
                    }
                })
            },
            _optionChanged: function(args) {
                var rootNameOfComplexOption = this._getRootLevelOfExpectedComplexOption(args.fullName, ["formData", "items"]);
                if (rootNameOfComplexOption) {
                    this._customHandlerOfComplexOption(args, rootNameOfComplexOption);
                    return
                }
                switch (args.name) {
                    case "formData":
                        if (!this.option("items")) {
                            this._invalidate()
                        } else {
                            if ((0, _type.isEmptyObject)(args.value)) {
                                this._resetValues()
                            }
                        }
                        break;
                    case "items":
                    case "colCount":
                    case "onFieldDataChanged":
                    case "onEditorEnterKey":
                    case "labelLocation":
                    case "alignItemLabels":
                    case "showColonAfterLabel":
                    case "customizeItem":
                    case "alignItemLabelsInAllGroups":
                    case "showRequiredMark":
                    case "showOptionalMark":
                    case "requiredMark":
                    case "optionalMark":
                    case "requiredMessage":
                    case "scrollingEnabled":
                    case "formID":
                    case "colCountByScreen":
                    case "screenByWidth":
                    case "stylingMode":
                        this._invalidate();
                        break;
                    case "showValidationSummary":
                        this._renderValidationSummary();
                        break;
                    case "minColWidth":
                        if ("auto" === this.option("colCount")) {
                            this._invalidate()
                        }
                        break;
                    case "readOnly":
                        break;
                    case "width":
                        this.callBase(args);
                        this._rootLayoutManager.option(args.name, args.value);
                        this._alignLabels(this._rootLayoutManager, this._rootLayoutManager.isSingleColumnMode());
                        break;
                    case "visible":
                        this.callBase(args);
                        if (args.value) {
                            (0, _dom.triggerShownEvent)(this.$element())
                        }
                        break;
                    case "validationGroup":
                        _validation_engine2.default.removeGroup(args.previousValue || this);
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getRootLevelOfExpectedComplexOption: function(fullOptionName, expectedRootNames) {
                var splitFullName = fullOptionName.split(".");
                var result;
                if (splitFullName.length > 1) {
                    var i;
                    var rootOptionName = splitFullName[0];
                    for (i = 0; i < expectedRootNames.length; i++) {
                        if (rootOptionName.search(expectedRootNames[i]) !== -1) {
                            result = expectedRootNames[i]
                        }
                    }
                }
                return result
            },
            _tryCreateItemOptionAction: function(optionName, item, value, previousValue, itemPath) {
                if ("tabs" === optionName) {
                    this._itemsRunTimeInfo.removeItemsByPathStartWith("".concat(itemPath, ".tabs"));
                    value = this._prepareItems(value, true, itemPath, true)
                }
                return (0, _uiForm6.default)(optionName, {
                    item: item,
                    value: value,
                    previousValue: previousValue,
                    itemsRunTimeInfo: this._itemsRunTimeInfo
                })
            },
            _tryExecuteItemOptionAction: function(action) {
                return action && action.tryExecute()
            },
            _updateValidationGroupAndSummaryIfNeeded: function(fullName) {
                var optionName = (0, _uiForm7.getOptionNameFromFullName)(fullName);
                if (ITEM_OPTIONS_FOR_VALIDATION_UPDATING.indexOf(optionName) > -1) {
                    _validation_engine2.default.addGroup(this._getValidationGroup());
                    if (this.option("showValidationSummary")) {
                        this._validationSummary && this._validationSummary._initGroupRegistration()
                    }
                }
            },
            _setLayoutManagerItemOption: function(layoutManager, optionName, value, path) {
                var _this3 = this;
                if (this._updateLockCount > 0) {
                    !layoutManager._updateLockCount && layoutManager.beginUpdate();
                    var key = this._itemsRunTimeInfo.getKeyByPath(path);
                    this.postponedOperations.add(key, function() {
                        !layoutManager._disposed && layoutManager.endUpdate();
                        return (new _deferred.Deferred).resolve()
                    })
                }
                var contentReadyHandler = function contentReadyHandler(e) {
                    e.component.off("contentReady", contentReadyHandler);
                    if ((0, _uiForm7.isFullPathContainsTabs)(path)) {
                        var tabPath = (0, _uiForm7.tryGetTabPath)(path);
                        var tabLayoutManager = _this3._itemsRunTimeInfo.getGroupOrTabLayoutManagerByPath(tabPath);
                        _this3._alignLabelsInColumn({
                            items: tabLayoutManager.option("items"),
                            layoutManager: tabLayoutManager,
                            $container: tabLayoutManager.$element(),
                            inOneColumn: tabLayoutManager.isSingleColumnMode()
                        })
                    } else {
                        _this3._alignLabels(_this3._rootLayoutManager, _this3._rootLayoutManager.isSingleColumnMode())
                    }
                };
                layoutManager.on("contentReady", contentReadyHandler);
                layoutManager.option(optionName, value);
                this._updateValidationGroupAndSummaryIfNeeded(optionName)
            },
            _tryChangeLayoutManagerItemOption: function(fullName, value) {
                var nameParts = fullName.split(".");
                var optionName = (0, _uiForm7.getOptionNameFromFullName)(fullName);
                if ("items" === optionName && nameParts.length > 1) {
                    var itemPath = this._getItemPath(nameParts);
                    var layoutManager = this._itemsRunTimeInfo.getGroupOrTabLayoutManagerByPath(itemPath);
                    if (layoutManager) {
                        this._itemsRunTimeInfo.removeItemsByItems(layoutManager.getItemsRunTimeInfo());
                        var items = this._prepareItems(value, false, itemPath);
                        this._setLayoutManagerItemOption(layoutManager, optionName, items, itemPath);
                        return true
                    }
                } else {
                    if (nameParts.length > 2) {
                        var endPartIndex = nameParts.length - 2;
                        var _itemPath = this._getItemPath(nameParts.slice(0, endPartIndex));
                        var _layoutManager = this._itemsRunTimeInfo.getGroupOrTabLayoutManagerByPath(_itemPath);
                        if (_layoutManager) {
                            var fullOptionName = (0, _uiForm7.getFullOptionName)(nameParts[endPartIndex], optionName);
                            if ("visible" === optionName) {
                                var formItems = this.option((0, _uiForm7.getFullOptionName)(_itemPath, "items"));
                                if (formItems && formItems.length) {
                                    var layoutManagerItems = _layoutManager.option("items");
                                    formItems.forEach(function(item, index) {
                                        var layoutItem = layoutManagerItems[index];
                                        layoutItem.visibleIndex = item.visibleIndex
                                    })
                                }
                            }
                            this._setLayoutManagerItemOption(_layoutManager, fullOptionName, value, _itemPath);
                            return true
                        }
                    }
                }
                return false
            },
            _tryChangeLayoutManagerItemOptions: function(itemPath, options) {
                var _this4 = this;
                var result;
                this.beginUpdate();
                (0, _iterator.each)(options, function(optionName, optionValue) {
                    result = _this4._tryChangeLayoutManagerItemOption((0, _uiForm7.getFullOptionName)(itemPath, optionName), optionValue);
                    if (!result) {
                        return false
                    }
                });
                this.endUpdate();
                return result
            },
            _customHandlerOfComplexOption: function(args, rootOptionName) {
                var nameParts = args.fullName.split(".");
                var value = args.value;
                if ("items" === rootOptionName) {
                    var itemPath = this._getItemPath(nameParts);
                    var item = this.option(itemPath);
                    var optionNameWithoutPath = args.fullName.replace(itemPath + ".", "");
                    var simpleOptionName = optionNameWithoutPath.split(".")[0].replace(/\[\d+]/, "");
                    var itemAction = this._tryCreateItemOptionAction(simpleOptionName, item, item[simpleOptionName], args.previousValue, itemPath);
                    if (!this._tryExecuteItemOptionAction(itemAction) && !this._tryChangeLayoutManagerItemOption(args.fullName, value)) {
                        if (item) {
                            this._changeItemOption(item, optionNameWithoutPath, value);
                            var items = this._generateItemsFromData(this.option("items"));
                            this.option("items", items)
                        }
                    }
                }
                if ("formData" === rootOptionName) {
                    var dataField = nameParts.slice(1).join(".");
                    var editor = this.getEditor(dataField);
                    if (editor) {
                        editor.option("value", value)
                    } else {
                        this._triggerOnFieldDataChanged({
                            dataField: dataField,
                            value: value
                        })
                    }
                }
            },
            _getItemPath: function(nameParts) {
                var itemPath = nameParts[0];
                var i;
                for (i = 1; i < nameParts.length; i++) {
                    if (nameParts[i].search(/items\[\d+]|tabs\[\d+]/) !== -1) {
                        itemPath += "." + nameParts[i]
                    } else {
                        break
                    }
                }
                return itemPath
            },
            _triggerOnFieldDataChanged: function(args) {
                this._createActionByOption("onFieldDataChanged")(args)
            },
            _triggerOnFieldDataChangedByDataSet: function(data) {
                var that = this;
                if (data && (0, _type.isObject)(data)) {
                    (0, _iterator.each)(data, function(dataField, value) {
                        that._triggerOnFieldDataChanged({
                            dataField: dataField,
                            value: value
                        })
                    })
                }
            },
            _updateFieldValue: function(dataField, value) {
                if ((0, _type.isDefined)(this.option("formData"))) {
                    var editor = this.getEditor(dataField);
                    this.option("formData." + dataField, value);
                    if (editor) {
                        var editorValue = editor.option("value");
                        if (editorValue !== value) {
                            editor.option("value", value)
                        }
                    }
                }
            },
            _generateItemsFromData: function(items) {
                var formData = this.option("formData");
                var result = [];
                if (!items && (0, _type.isDefined)(formData)) {
                    (0, _iterator.each)(formData, function(dataField) {
                        result.push({
                            dataField: dataField
                        })
                    })
                }
                if (items) {
                    (0, _iterator.each)(items, function(index, item) {
                        if ((0, _type.isObject)(item)) {
                            result.push(item)
                        } else {
                            result.push({
                                dataField: item
                            })
                        }
                    })
                }
                return result
            },
            _getItemByField: function(field, items) {
                var that = this;
                var fieldParts = (0, _type.isObject)(field) ? field : that._getFieldParts(field);
                var fieldName = fieldParts.fieldName;
                var fieldPath = fieldParts.fieldPath;
                var resultItem;
                if (items.length) {
                    (0, _iterator.each)(items, function(index, item) {
                        var itemType = item.itemType;
                        if (fieldPath.length) {
                            var path = fieldPath.slice();
                            item = that._getItemByFieldPath(path, fieldName, item)
                        } else {
                            if ("group" === itemType && !(item.caption || item.name) || "tabbed" === itemType && !item.name) {
                                var subItemsField = that._getSubItemField(itemType);
                                item.items = that._generateItemsFromData(item.items);
                                item = that._getItemByField({
                                    fieldName: fieldName,
                                    fieldPath: fieldPath
                                }, item[subItemsField])
                            }
                        }
                        if ((0, _uiForm7.isExpectedItem)(item, fieldName)) {
                            resultItem = item;
                            return false
                        }
                    })
                }
                return resultItem
            },
            _getFieldParts: function(field) {
                var fieldSeparator = ".";
                var fieldName = field;
                var separatorIndex = fieldName.indexOf(fieldSeparator);
                var resultPath = [];
                while (separatorIndex !== -1) {
                    resultPath.push(fieldName.substr(0, separatorIndex));
                    fieldName = fieldName.substr(separatorIndex + 1);
                    separatorIndex = fieldName.indexOf(fieldSeparator)
                }
                return {
                    fieldName: fieldName,
                    fieldPath: resultPath.reverse()
                }
            },
            _getItemByFieldPath: function(path, fieldName, item) {
                var that = this;
                var itemType = item.itemType;
                var subItemsField = that._getSubItemField(itemType);
                var isItemWithSubItems = "group" === itemType || "tabbed" === itemType || item.title;
                var result;
                do {
                    if (isItemWithSubItems) {
                        var name = item.name || item.caption || item.title;
                        var isGroupWithName = (0, _type.isDefined)(name);
                        var nameWithoutSpaces = (0, _uiForm7.getTextWithoutSpaces)(name);
                        var pathNode = void 0;
                        item[subItemsField] = that._generateItemsFromData(item[subItemsField]);
                        if (isGroupWithName) {
                            pathNode = path.pop()
                        }
                        if (!path.length) {
                            result = that._getItemByField(fieldName, item[subItemsField]);
                            if (result) {
                                break
                            }
                        }
                        if (!isGroupWithName || isGroupWithName && nameWithoutSpaces === pathNode) {
                            if (path.length) {
                                result = that._searchItemInEverySubItem(path, fieldName, item[subItemsField])
                            }
                        }
                    } else {
                        break
                    }
                } while (path.length && !(0, _type.isDefined)(result));
                return result
            },
            _getSubItemField: function(itemType) {
                return "tabbed" === itemType ? "tabs" : "items"
            },
            _searchItemInEverySubItem: function(path, fieldName, items) {
                var that = this;
                var result;
                (0, _iterator.each)(items, function(index, groupItem) {
                    result = that._getItemByFieldPath(path.slice(), fieldName, groupItem);
                    if (result) {
                        return false
                    }
                });
                if (!result) {
                    result = false
                }
                return result
            },
            _changeItemOption: function(item, option, value) {
                if ((0, _type.isObject)(item)) {
                    item[option] = value
                }
            },
            _dimensionChanged: function() {
                var currentScreenFactor = this._getCurrentScreenFactor();
                if (this._lastMarkupScreenFactor !== currentScreenFactor) {
                    if (this._isColCountChanged(this._lastMarkupScreenFactor, currentScreenFactor)) {
                        this._targetScreenFactor = currentScreenFactor;
                        this._refresh();
                        this._targetScreenFactor = void 0
                    }
                    this._lastMarkupScreenFactor = currentScreenFactor
                }
            },
            _isColCountChanged: function(oldScreenSize, newScreenSize) {
                var isChanged = false;
                (0, _iterator.each)(this._cachedColCountOptions, function(index, item) {
                    if (item.colCountByScreen[oldScreenSize] !== item.colCountByScreen[newScreenSize]) {
                        isChanged = true;
                        return false
                    }
                });
                return isChanged
            },
            _refresh: function() {
                var editorSelector = "." + FOCUSED_STATE_CLASS + " input, ." + FOCUSED_STATE_CLASS + " textarea";
                _events_engine2.default.trigger(this.$element().find(editorSelector), "change");
                this.callBase()
            },
            _resetValues: function() {
                this._itemsRunTimeInfo.each(function(_, itemRunTimeInfo) {
                    if ((0, _type.isDefined)(itemRunTimeInfo.widgetInstance) && itemRunTimeInfo.widgetInstance instanceof _editor2.default) {
                        itemRunTimeInfo.widgetInstance.reset();
                        itemRunTimeInfo.widgetInstance.option("isValid", true)
                    }
                });
                _validation_engine2.default.resetGroup(this._getValidationGroup())
            },
            _updateData: function(data, value, isComplexData) {
                var that = this;
                var _data = isComplexData ? value : data;
                if ((0, _type.isObject)(_data)) {
                    (0, _iterator.each)(_data, function(dataField, fieldValue) {
                        that._updateData(isComplexData ? data + "." + dataField : dataField, fieldValue, (0, _type.isObject)(fieldValue))
                    })
                } else {
                    if ((0, _type.isString)(data)) {
                        that._updateFieldValue(data, value)
                    }
                }
            },
            registerKeyHandler: function(key, handler) {
                this.callBase(key, handler);
                this._itemsRunTimeInfo.each(function(_, itemRunTimeInfo) {
                    if ((0, _type.isDefined)(itemRunTimeInfo.widgetInstance)) {
                        itemRunTimeInfo.widgetInstance.registerKeyHandler(key, handler)
                    }
                })
            },
            _focusTarget: function() {
                return this.$element().find("." + FIELD_ITEM_CONTENT_CLASS + " [tabindex]").first();
            },
            _visibilityChanged: function(visible) {
                if (visible && _browser2.default.msie) {
                    this._refresh()
                }
            },
            _dispose: function() {
                _validation_engine2.default.removeGroup(this._getValidationGroup());
                this.callBase()
            },
            resetValues: function() {
                this._resetValues()
            },
            updateData: function(data, value) {
                this._updateData(data, value)
            },
            getEditor: function(dataField) {
                return this._itemsRunTimeInfo.findWidgetInstanceByDataField(dataField) || this._itemsRunTimeInfo.findWidgetInstanceByName(dataField)
            },
            getButton: function(name) {
                return this._itemsRunTimeInfo.findWidgetInstanceByName(name)
            },
            updateDimensions: function() {
                var that = this;
                var deferred = new _deferred.Deferred;
                if (that._scrollable) {
                    that._scrollable.update().done(function() {
                        deferred.resolveWith(that)
                    })
                } else {
                    deferred.resolveWith(that)
                }
                return deferred.promise()
            },
            itemOption: function(id, option, value) {
                var _this5 = this;
                var items = this._generateItemsFromData(this.option("items"));
                var item = this._getItemByField(id, items);
                var path = this._itemsRunTimeInfo.getPathFromItem(item);
                if (!item) {
                    return
                }
                switch (arguments.length) {
                    case 1:
                        return item;
                    case 3:
                        var itemAction = this._tryCreateItemOptionAction(option, item, value, item[option], path);
                        this._changeItemOption(item, option, value);
                        var fullName = (0, _uiForm7.getFullOptionName)(path, option);
                        if (!this._tryExecuteItemOptionAction(itemAction) && !this._tryChangeLayoutManagerItemOption(fullName, value)) {
                            this.option("items", items)
                        }
                        break;
                    default:
                        if ((0, _type.isObject)(option)) {
                            if (!this._tryChangeLayoutManagerItemOptions(path, option)) {
                                var allowUpdateItems;
                                (0, _iterator.each)(option, function(optionName, optionValue) {
                                    var itemAction = _this5._tryCreateItemOptionAction(optionName, item, optionValue, item[optionName], path);
                                    _this5._changeItemOption(item, optionName, optionValue);
                                    if (!allowUpdateItems && !_this5._tryExecuteItemOptionAction(itemAction)) {
                                        allowUpdateItems = true
                                    }
                                });
                                allowUpdateItems && this.option("items", items)
                            }
                        }
                }
            },
            validate: function() {
                return _validation_engine2.default.validateGroup(this._getValidationGroup())
            },
            getItemID: function(name) {
                return "dx_" + this.option("formID") + "_" + (name || new _guid2.default)
            },
            getTargetScreenFactor: function() {
                return this._targetScreenFactor
            }
        });
        (0, _component_registrator2.default)("dxForm", Form);
        module.exports = Form;
        module.exports.__internals = (0, _extend.extend)({
            FORM_CLASS: FORM_CLASS,
            FORM_GROUP_CLASS: FORM_GROUP_CLASS,
            FORM_GROUP_CAPTION_CLASS: FORM_GROUP_CAPTION_CLASS,
            FORM_FIELD_ITEM_COL_CLASS: FORM_FIELD_ITEM_COL_CLASS
        }, _uiForm2.default.__internals)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.layout_manager.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _uiForm = __webpack_require__( /*! ./ui.form.items_runtime_info */ 324);
        var _uiForm2 = _interopRequireDefault(_uiForm);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _variable_wrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 94);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _string2 = _interopRequireDefault(_string);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _remove_event = __webpack_require__( /*! ../../core/remove_event */ 140);
        var _remove_event2 = _interopRequireDefault(_remove_event);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _style = __webpack_require__( /*! ../../core/utils/style */ 93);
        var _style2 = _interopRequireDefault(_style);
        var _inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var _inflector2 = _interopRequireDefault(_inflector);
        var _ui3 = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui4 = _interopRequireDefault(_ui3);
        var _validator = __webpack_require__( /*! ../validator */ 202);
        var _validator2 = _interopRequireDefault(_validator);
        var _responsive_box = __webpack_require__( /*! ../responsive_box */ 325);
        var _responsive_box2 = _interopRequireDefault(_responsive_box);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        __webpack_require__( /*! ../text_box */ 88);
        __webpack_require__( /*! ../number_box */ 121);
        __webpack_require__( /*! ../check_box */ 120);
        __webpack_require__( /*! ../date_box */ 198);
        __webpack_require__( /*! ../button */ 37);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var FORM_EDITOR_BY_DEFAULT = "dxTextBox";
        var FIELD_ITEM_CLASS = "dx-field-item";
        var FIELD_EMPTY_ITEM_CLASS = "dx-field-empty-item";
        var FIELD_BUTTON_ITEM_CLASS = "dx-field-button-item";
        var FIELD_ITEM_REQUIRED_CLASS = "dx-field-item-required";
        var FIELD_ITEM_OPTIONAL_CLASS = "dx-field-item-optional";
        var FIELD_ITEM_REQUIRED_MARK_CLASS = "dx-field-item-required-mark";
        var FIELD_ITEM_OPTIONAL_MARK_CLASS = "dx-field-item-optional-mark";
        var FIELD_ITEM_LABEL_CLASS = "dx-field-item-label";
        var FIELD_ITEM_LABEL_ALIGN_CLASS = "dx-field-item-label-align";
        var FIELD_ITEM_LABEL_CONTENT_CLASS = "dx-field-item-label-content";
        var FIELD_ITEM_LABEL_TEXT_CLASS = "dx-field-item-label-text";
        var FIELD_ITEM_LABEL_LOCATION_CLASS = "dx-field-item-label-location-";
        var FIELD_ITEM_CONTENT_CLASS = "dx-field-item-content";
        var FIELD_ITEM_CONTENT_LOCATION_CLASS = "dx-field-item-content-location-";
        var FIELD_ITEM_CONTENT_WRAPPER_CLASS = "dx-field-item-content-wrapper";
        var FIELD_ITEM_HELP_TEXT_CLASS = "dx-field-item-help-text";
        var SINGLE_COLUMN_ITEM_CONTENT = "dx-single-column-item-content";
        var LABEL_HORIZONTAL_ALIGNMENT_CLASS = "dx-label-h-align";
        var LABEL_VERTICAL_ALIGNMENT_CLASS = "dx-label-v-align";
        var FORM_LAYOUT_MANAGER_CLASS = "dx-layout-manager";
        var LAYOUT_MANAGER_FIRST_ROW_CLASS = "dx-first-row";
        var LAYOUT_MANAGER_LAST_ROW_CLASS = "dx-last-row";
        var LAYOUT_MANAGER_FIRST_COL_CLASS = "dx-first-col";
        var LAYOUT_MANAGER_LAST_COL_CLASS = "dx-last-col";
        var LAYOUT_MANAGER_ONE_COLUMN = "dx-layout-manager-one-col";
        var FLEX_LAYOUT_CLASS = "dx-flex-layout";
        var INVALID_CLASS = "dx-invalid";
        var LAYOUT_STRATEGY_FLEX = "flex";
        var LAYOUT_STRATEGY_FALLBACK = "fallback";
        var SIMPLE_ITEM_TYPE = "simple";
        var TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper";
        var DATA_OPTIONS = ["dataSource", "items"];
        var EDITORS_WITH_ARRAY_VALUE = ["dxTagBox", "dxRangeSlider"];
        var LayoutManager = _ui4.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    layoutData: {},
                    readOnly: false,
                    colCount: 1,
                    colCountByScreen: void 0,
                    labelLocation: "left",
                    onFieldDataChanged: null,
                    onEditorEnterKey: null,
                    customizeItem: null,
                    alignItemLabels: true,
                    minColWidth: 200,
                    showRequiredMark: true,
                    screenByWidth: null,
                    showOptionalMark: false,
                    requiredMark: "*",
                    optionalMark: _message2.default.format("dxForm-optionalMark"),
                    requiredMessage: _message2.default.getFormatter("dxForm-requiredMessage")
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                (0, _extend.extend)(this._optionsByReference, {
                    layoutData: true,
                    validationGroup: true
                })
            },
            _init: function() {
                var layoutData = this.option("layoutData");
                this.callBase();
                this._itemWatchers = [];
                this._itemsRunTimeInfo = new _uiForm2.default;
                this._updateReferencedOptions(layoutData);
                this._initDataAndItems(layoutData)
            },
            _dispose: function() {
                this.callBase();
                this._cleanItemWatchers()
            },
            _initDataAndItems: function(initialData) {
                this._syncDataWithItems();
                this._updateItems(initialData)
            },
            _syncDataWithItems: function() {
                var _this = this;
                var layoutData = this.option("layoutData");
                var userItems = this.option("items");
                if ((0, _type.isDefined)(userItems)) {
                    userItems.forEach(function(item) {
                        if (item.dataField && void 0 === _this._getDataByField(item.dataField)) {
                            var value;
                            if (item.editorOptions) {
                                value = item.editorOptions.value
                            }
                            if ((0, _type.isDefined)(value) || item.dataField in layoutData) {
                                _this._updateFieldValue(item.dataField, value)
                            }
                        }
                    })
                }
            },
            _getDataByField: function(dataField) {
                return dataField ? this.option("layoutData." + dataField) : null
            },
            _updateFieldValue: function(dataField, value) {
                var layoutData = this.option("layoutData");
                var newValue = value;
                if (!(0, _variable_wrapper.isWrapped)(layoutData[dataField]) && (0, _type.isDefined)(dataField)) {
                    this.option("layoutData." + dataField, newValue)
                } else {
                    if ((0, _variable_wrapper.isWritableWrapped)(layoutData[dataField])) {
                        newValue = (0, _type.isFunction)(newValue) ? newValue() : newValue;
                        layoutData[dataField](newValue)
                    }
                }
                this._triggerOnFieldDataChanged({
                    dataField: dataField,
                    value: newValue
                })
            },
            _triggerOnFieldDataChanged: function(args) {
                this._createActionByOption("onFieldDataChanged")(args)
            },
            _updateItems: function(layoutData) {
                var that = this;
                var userItems = this.option("items");
                var isUserItemsExist = (0, _type.isDefined)(userItems);
                var customizeItem = that.option("customizeItem");
                var items = isUserItemsExist ? userItems : this._generateItemsByData(layoutData);
                if ((0, _type.isDefined)(items)) {
                    var processedItems = [];
                    (0, _iterator.each)(items, function(index, item) {
                        if (that._isAcceptableItem(item)) {
                            item = that._processItem(item);
                            customizeItem && customizeItem(item);
                            if ((0, _type.isObject)(item) && false !== (0, _variable_wrapper.unwrap)(item.visible)) {
                                processedItems.push(item)
                            }
                        }
                    });
                    if (!that._itemWatchers.length || !isUserItemsExist) {
                        that._updateItemWatchers(items)
                    }
                    this._items = processedItems;
                    this._sortItems()
                }
            },
            _cleanItemWatchers: function() {
                this._itemWatchers.forEach(function(dispose) {
                    dispose()
                });
                this._itemWatchers = []
            },
            _updateItemWatchers: function(items) {
                var that = this;
                var watch = that._getWatch();
                items.forEach(function(item) {
                    if ((0, _type.isObject)(item) && (0, _type.isDefined)(item.visible) && (0, _type.isFunction)(watch)) {
                        that._itemWatchers.push(watch(function() {
                            return (0, _variable_wrapper.unwrap)(item.visible)
                        }, function() {
                            that._updateItems(that.option("layoutData"));
                            that.repaint()
                        }, {
                            skipImmediate: true
                        }))
                    }
                })
            },
            _generateItemsByData: function(layoutData) {
                var result = [];
                if ((0, _type.isDefined)(layoutData)) {
                    (0, _iterator.each)(layoutData, function(dataField) {
                        result.push({
                            dataField: dataField
                        })
                    })
                }
                return result
            },
            _isAcceptableItem: function(item) {
                var itemField = item.dataField || item;
                var itemData = this._getDataByField(itemField);
                return !((0, _type.isFunction)(itemData) && !(0, _variable_wrapper.isWrapped)(itemData))
            },
            _processItem: function(item) {
                if ("string" === typeof item) {
                    item = {
                        dataField: item
                    }
                }
                if ("object" === _typeof(item) && !item.itemType) {
                    item.itemType = SIMPLE_ITEM_TYPE
                }
                if (!(0, _type.isDefined)(item.editorType) && (0, _type.isDefined)(item.dataField)) {
                    var value = this._getDataByField(item.dataField);
                    item.editorType = (0, _type.isDefined)(value) ? this._getEditorTypeByDataType((0, _type.type)(value)) : FORM_EDITOR_BY_DEFAULT
                }
                return item
            },
            _getEditorTypeByDataType: function(dataType) {
                switch (dataType) {
                    case "number":
                        return "dxNumberBox";
                    case "date":
                        return "dxDateBox";
                    case "boolean":
                        return "dxCheckBox";
                    default:
                        return "dxTextBox"
                }
            },
            _sortItems: function() {
                (0, _array.normalizeIndexes)(this._items, "visibleIndex");
                this._sortIndexes()
            },
            _sortIndexes: function() {
                this._items.sort(function(itemA, itemB) {
                    var indexA = itemA.visibleIndex;
                    var indexB = itemB.visibleIndex;
                    var result;
                    if (indexA > indexB) {
                        result = 1
                    } else {
                        if (indexA < indexB) {
                            result = -1
                        } else {
                            result = 0
                        }
                    }
                    return result
                })
            },
            _initMarkup: function() {
                this._itemsRunTimeInfo.clear();
                this.$element().addClass(FORM_LAYOUT_MANAGER_CLASS);
                this.callBase();
                this._renderResponsiveBox()
            },
            _hasBrowserFlex: function() {
                return _style2.default.styleProp(LAYOUT_STRATEGY_FLEX) === LAYOUT_STRATEGY_FLEX
            },
            _renderResponsiveBox: function() {
                var that = this;
                var templatesInfo = [];
                if (that._items && that._items.length) {
                    var colCount = that._getColCount();
                    var $container = (0, _renderer2.default)("<div>").appendTo(that.$element());
                    that._prepareItemsWithMerging(colCount);
                    var layoutItems = that._generateLayoutItems();
                    that._extendItemsWithDefaultTemplateOptions(layoutItems, that._items);
                    that._responsiveBox = that._createComponent($container, _responsive_box2.default, that._getResponsiveBoxConfig(layoutItems, colCount, templatesInfo));
                    if (!_window2.default.hasWindow()) {
                        that._renderTemplates(templatesInfo)
                    }
                }
            },
            _extendItemsWithDefaultTemplateOptions: function(targetItems, sourceItems) {
                sourceItems.forEach(function(item) {
                    if (!item.merged) {
                        if ((0, _type.isDefined)(item.disabled)) {
                            targetItems[item.visibleIndex].disabled = item.disabled
                        }
                        if ((0, _type.isDefined)(item.visible)) {
                            targetItems[item.visibleIndex].visible = item.visible
                        }
                    }
                })
            },
            _itemStateChangedHandler: function(e) {
                this._refresh()
            },
            _renderTemplate: function($container, item) {
                switch (item.itemType) {
                    case "empty":
                        this._renderEmptyItem($container);
                        break;
                    case "button":
                        this._renderButtonItem(item, $container);
                        break;
                    default:
                        this._renderFieldItem(item, $container)
                }
            },
            _renderTemplates: function(templatesInfo) {
                var that = this;
                (0, _iterator.each)(templatesInfo, function(index, info) {
                    that._renderTemplate(info.container, info.formItem)
                })
            },
            _getResponsiveBoxConfig: function(layoutItems, colCount, templatesInfo) {
                var that = this;
                var colCountByScreen = that.option("colCountByScreen");
                var xsColCount = colCountByScreen && colCountByScreen.xs;
                return {
                    onItemStateChanged: this._itemStateChangedHandler.bind(this),
                    _layoutStrategy: that._hasBrowserFlex() ? LAYOUT_STRATEGY_FLEX : LAYOUT_STRATEGY_FALLBACK,
                    onLayoutChanged: function onLayoutChanged() {
                        var onLayoutChanged = that.option("onLayoutChanged");
                        var isSingleColumnMode = that.isSingleColumnMode();
                        if (onLayoutChanged) {
                            that.$element().toggleClass(LAYOUT_MANAGER_ONE_COLUMN, isSingleColumnMode);
                            onLayoutChanged(isSingleColumnMode)
                        }
                    },
                    onContentReady: function(e) {
                        if (_window2.default.hasWindow()) {
                            that._renderTemplates(templatesInfo)
                        }
                        if (that.option("onLayoutChanged")) {
                            that.$element().toggleClass(LAYOUT_MANAGER_ONE_COLUMN, that.isSingleColumnMode(e.component))
                        }
                    },
                    itemTemplate: function(e, itemData, itemElement) {
                        if (!e.location) {
                            return
                        }
                        var $itemElement = (0, _renderer2.default)(itemElement);
                        var itemRenderedCountInPreviousRows = e.location.row * colCount;
                        var item = that._items[e.location.col + itemRenderedCountInPreviousRows];
                        var $fieldItem = (0, _renderer2.default)("<div>").addClass(item.cssClass).appendTo($itemElement);
                        templatesInfo.push({
                            container: $fieldItem,
                            formItem: item
                        });
                        $itemElement.toggleClass(SINGLE_COLUMN_ITEM_CONTENT, that.isSingleColumnMode(this));
                        if (0 === e.location.row) {
                            $fieldItem.addClass(LAYOUT_MANAGER_FIRST_ROW_CLASS)
                        }
                        if (0 === e.location.col) {
                            $fieldItem.addClass(LAYOUT_MANAGER_FIRST_COL_CLASS)
                        }
                        var isLastColumn = e.location.col === colCount - 1 || e.location.col + e.location.colspan === colCount;
                        var rowsCount = that._getRowsCount();
                        var isLastRow = e.location.row === rowsCount - 1;
                        if (isLastColumn) {
                            $fieldItem.addClass(LAYOUT_MANAGER_LAST_COL_CLASS)
                        }
                        if (isLastRow) {
                            $fieldItem.addClass(LAYOUT_MANAGER_LAST_ROW_CLASS)
                        }
                    },
                    cols: that._generateRatio(colCount),
                    rows: that._generateRatio(that._getRowsCount(), true),
                    dataSource: layoutItems,
                    screenByWidth: that.option("screenByWidth"),
                    singleColumnScreen: xsColCount ? false : "xs"
                }
            },
            _getColCount: function() {
                var colCount = this.option("colCount");
                var colCountByScreen = this.option("colCountByScreen");
                if (colCountByScreen) {
                    var screenFactor = this.option("form").getTargetScreenFactor();
                    if (!screenFactor) {
                        screenFactor = _window2.default.hasWindow() ? _window2.default.getCurrentScreenFactor(this.option("screenByWidth")) : "lg"
                    }
                    colCount = colCountByScreen[screenFactor] || colCount
                }
                if ("auto" === colCount) {
                    if (this._cashedColCount) {
                        return this._cashedColCount
                    }
                    this._cashedColCount = colCount = this._getMaxColCount()
                }
                return colCount < 1 ? 1 : colCount
            },
            _getMaxColCount: function() {
                if (!_window2.default.hasWindow()) {
                    return 1
                }
                var minColWidth = this.option("minColWidth");
                var width = this.$element().width();
                var itemsCount = this._items.length;
                var maxColCount = Math.floor(width / minColWidth) || 1;
                return itemsCount < maxColCount ? itemsCount : maxColCount
            },
            isCachedColCountObsolete: function() {
                return this._cashedColCount && this._getMaxColCount() !== this._cashedColCount
            },
            _prepareItemsWithMerging: function(colCount) {
                var items = this._items.slice(0);
                var item;
                var itemsMergedByCol;
                var result = [];
                var j;
                var i;
                for (i = 0; i < items.length; i++) {
                    item = items[i];
                    result.push(item);
                    if (this.option("alignItemLabels") || item.alignItemLabels || item.colSpan) {
                        item.col = this._getColByIndex(result.length - 1, colCount)
                    }
                    if (item.colSpan > 1 && item.col + item.colSpan <= colCount) {
                        itemsMergedByCol = [];
                        for (j = 0; j < item.colSpan - 1; j++) {
                            itemsMergedByCol.push({
                                merged: true
                            })
                        }
                        result = result.concat(itemsMergedByCol)
                    } else {
                        delete item.colSpan
                    }
                }
                this._items = result
            },
            _getColByIndex: function(index, colCount) {
                return index % colCount
            },
            _generateLayoutItems: function() {
                var items = this._items;
                var colCount = this._getColCount();
                var result = [];
                var item;
                var i;
                for (i = 0; i < items.length; i++) {
                    item = items[i];
                    if (!item.merged) {
                        var generatedItem = {
                            location: {
                                row: parseInt(i / colCount),
                                col: this._getColByIndex(i, colCount)
                            }
                        };
                        if ((0, _type.isDefined)(item.colSpan)) {
                            generatedItem.location.colspan = item.colSpan
                        }
                        if ((0, _type.isDefined)(item.rowSpan)) {
                            generatedItem.location.rowspan = item.rowSpan
                        }
                        result.push(generatedItem)
                    }
                }
                return result
            },
            _renderEmptyItem: function($container) {
                return $container.addClass(FIELD_EMPTY_ITEM_CLASS).html("&nbsp;")
            },
            _getButtonHorizontalAlignment: function(item) {
                if ((0, _type.isDefined)(item.horizontalAlignment)) {
                    return item.horizontalAlignment
                }
                if ((0, _type.isDefined)(item.alignment)) {
                    _ui2.default.log("W0001", "dxForm", "alignment", "18.1", "Use the 'horizontalAlignment' option in button items instead.");
                    return item.alignment
                }
                return "right"
            },
            _getButtonVerticalAlignment: function(item) {
                switch (item.verticalAlignment) {
                    case "center":
                        return "center";
                    case "bottom":
                        return "flex-end";
                    default:
                        return "flex-start"
                }
            },
            _renderButtonItem: function(item, $container) {
                var $button = (0, _renderer2.default)("<div>").appendTo($container);
                var defaultOptions = {
                    validationGroup: this.option("validationGroup")
                };
                $container.addClass(FIELD_BUTTON_ITEM_CLASS).css("textAlign", this._getButtonHorizontalAlignment(item));
                $container.parent().css("justifyContent", this._getButtonVerticalAlignment(item));
                var instance = this._createComponent($button, "dxButton", (0, _extend.extend)(defaultOptions, item.buttonOptions));
                this._itemsRunTimeInfo.add({
                    item: item,
                    widgetInstance: instance,
                    guid: item.guid,
                    $itemContainer: $container
                });
                this._addItemClasses($container, item.col);
                return $button
            },
            _addItemClasses: function($item, column) {
                $item.addClass(FIELD_ITEM_CLASS).addClass(this.option("cssItemClass")).addClass((0, _type.isDefined)(column) ? "dx-col-" + column : "")
            },
            _renderFieldItem: function(item, $container) {
                var that = this;
                var name = that._getName(item);
                var id = that.getItemID(name);
                var isRequired = (0, _type.isDefined)(item.isRequired) ? item.isRequired : !!that._hasRequiredRuleInSet(item.validationRules);
                var labelOptions = that._getLabelOptions(item, id, isRequired);
                var $editor = (0, _renderer2.default)("<div>");
                var helpID = item.helpText ? "dx-" + new _guid2.default : null;
                var $label;
                this._addItemClasses($container, item.col);
                $container.addClass(isRequired ? FIELD_ITEM_REQUIRED_CLASS : FIELD_ITEM_OPTIONAL_CLASS);
                if (labelOptions.visible && labelOptions.text) {
                    $label = that._renderLabel(labelOptions).appendTo($container)
                }
                if (item.itemType === SIMPLE_ITEM_TYPE) {
                    if (that._isLabelNeedBaselineAlign(item) && "top" !== labelOptions.location) {
                        $container.addClass(FIELD_ITEM_LABEL_ALIGN_CLASS)
                    }
                    that._hasBrowserFlex() && $container.addClass(FLEX_LAYOUT_CLASS)
                }
                $editor.data("dx-form-item", item);
                that._appendEditorToField({
                    $fieldItem: $container,
                    $label: $label,
                    $editor: $editor,
                    labelOptions: labelOptions
                });
                var instance = that._renderEditor({
                    $container: $editor,
                    dataField: item.dataField,
                    name: item.name,
                    editorType: item.editorType,
                    editorOptions: item.editorOptions,
                    template: that._getTemplateByFieldItem(item),
                    isRequired: isRequired,
                    helpID: helpID,
                    labelID: labelOptions.labelID,
                    id: id,
                    validationBoundary: that.option("validationBoundary")
                });
                this._itemsRunTimeInfo.add({
                    item: item,
                    widgetInstance: instance,
                    guid: item.guid,
                    $itemContainer: $container
                });
                var editorElem = $editor.children().first();
                var $validationTarget = editorElem.hasClass(TEMPLATE_WRAPPER_CLASS) ? editorElem.children().first() : editorElem;
                if ($validationTarget && $validationTarget.data("dx-validation-target")) {
                    that._renderValidator($validationTarget, item)
                }
                that._renderHelpText(item, $editor, helpID);
                that._attachClickHandler($label, $editor, item.editorType)
            },
            _hasRequiredRuleInSet: function(rules) {
                var hasRequiredRule;
                if (rules && rules.length) {
                    (0, _iterator.each)(rules, function(index, rule) {
                        if ("required" === rule.type) {
                            hasRequiredRule = true;
                            return false
                        }
                    })
                }
                return hasRequiredRule
            },
            _getName: function(item) {
                return item.dataField || item.name
            },
            _isLabelNeedBaselineAlign: function(item) {
                var largeEditors = ["dxTextArea", "dxRadioGroup", "dxCalendar", "dxHtmlEditor"];
                return !!item.helpText && !this._hasBrowserFlex() || (0, _array.inArray)(item.editorType, largeEditors) !== -1
            },
            _isLabelNeedId: function(item) {
                var editorsRequiringIdForLabel = ["dxRadioGroup", "dxCheckBox", "dxLookup", "dxSlider", "dxRangeSlider", "dxSwitch", "dxHtmlEditor"];
                return (0, _array.inArray)(item.editorType, editorsRequiringIdForLabel) !== -1
            },
            _getLabelOptions: function(item, id, isRequired) {
                var labelOptions = (0, _extend.extend)({
                    showColon: this.option("showColonAfterLabel"),
                    location: this.option("labelLocation"),
                    id: id,
                    visible: true,
                    isRequired: isRequired
                }, item ? item.label : {});
                if (this._isLabelNeedId(item)) {
                    labelOptions.labelID = "dx-label-".concat(new _guid2.default)
                }
                if (!labelOptions.text && item.dataField) {
                    labelOptions.text = _inflector2.default.captionize(item.dataField)
                }
                if (labelOptions.text) {
                    labelOptions.text += labelOptions.showColon ? ":" : ""
                }
                return labelOptions
            },
            _renderLabel: function(options) {
                var text = options.text,
                    id = options.id,
                    location = options.location,
                    alignment = options.alignment,
                    isRequired = options.isRequired,
                    _options$labelID = options.labelID,
                    labelID = void 0 === _options$labelID ? null : _options$labelID;
                if ((0, _type.isDefined)(text) && text.length > 0) {
                    var labelClasses = FIELD_ITEM_LABEL_CLASS + " " + FIELD_ITEM_LABEL_LOCATION_CLASS + location;
                    var $label = (0, _renderer2.default)("<label>").addClass(labelClasses).attr("for", id).attr("id", labelID);
                    var $labelContent = (0, _renderer2.default)("<span>").addClass(FIELD_ITEM_LABEL_CONTENT_CLASS).appendTo($label);
                    (0, _renderer2.default)("<span>").addClass(FIELD_ITEM_LABEL_TEXT_CLASS).text(text).appendTo($labelContent);
                    if (alignment) {
                        $label.css("textAlign", alignment)
                    }
                    $labelContent.append(this._renderLabelMark(isRequired));
                    return $label
                }
            },
            _renderLabelMark: function(isRequired) {
                var $mark;
                var requiredMarksConfig = this._getRequiredMarksConfig();
                var isRequiredMark = requiredMarksConfig.showRequiredMark && isRequired;
                var isOptionalMark = requiredMarksConfig.showOptionalMark && !isRequired;
                if (isRequiredMark || isOptionalMark) {
                    var markClass = isRequiredMark ? FIELD_ITEM_REQUIRED_MARK_CLASS : FIELD_ITEM_OPTIONAL_MARK_CLASS;
                    var markText = isRequiredMark ? requiredMarksConfig.requiredMark : requiredMarksConfig.optionalMark;
                    $mark = (0, _renderer2.default)("<span>").addClass(markClass).html("&nbsp" + markText)
                }
                return $mark
            },
            _getRequiredMarksConfig: function() {
                if (!this._cashedRequiredConfig) {
                    this._cashedRequiredConfig = {
                        showRequiredMark: this.option("showRequiredMark"),
                        showOptionalMark: this.option("showOptionalMark"),
                        requiredMark: this.option("requiredMark"),
                        optionalMark: this.option("optionalMark")
                    }
                }
                return this._cashedRequiredConfig
            },
            _renderEditor: function(options) {
                var dataValue = this._getDataByField(options.dataField);
                var defaultEditorOptions = void 0 !== dataValue ? {
                    value: dataValue
                } : {};
                var isDeepExtend = true;
                if (EDITORS_WITH_ARRAY_VALUE.indexOf(options.editorType) !== -1) {
                    defaultEditorOptions.value = defaultEditorOptions.value || []
                }
                var formInstance = this.option("form");
                var editorOptions = (0, _extend.extend)(isDeepExtend, defaultEditorOptions, options.editorOptions, {
                    inputAttr: {
                        id: options.id
                    },
                    validationBoundary: options.validationBoundary,
                    stylingMode: formInstance && formInstance.option("stylingMode")
                });
                this._replaceDataOptions(options.editorOptions, editorOptions);
                var renderOptions = {
                    editorType: options.editorType,
                    dataField: options.dataField,
                    template: options.template,
                    name: options.name,
                    helpID: options.helpID,
                    labelID: options.labelID,
                    isRequired: options.isRequired
                };
                return this._createEditor(options.$container, renderOptions, editorOptions)
            },
            _replaceDataOptions: function(originalOptions, resultOptions) {
                if (originalOptions) {
                    DATA_OPTIONS.forEach(function(item) {
                        if (resultOptions[item]) {
                            resultOptions[item] = originalOptions[item]
                        }
                    })
                }
            },
            _renderValidator: function($editor, item) {
                var fieldName = this._getFieldLabelName(item);
                var validationRules = this._prepareValidationRules(item.validationRules, item.isRequired, item.itemType, fieldName);
                if (Array.isArray(validationRules) && validationRules.length) {
                    this._createComponent($editor, _validator2.default, {
                        validationRules: validationRules,
                        validationGroup: this.option("validationGroup"),
                        dataGetter: function() {
                            return {
                                formItem: item
                            }
                        }
                    })
                }
            },
            _getFieldLabelName: function(item) {
                var isItemHaveCustomLabel = item.label && item.label.text;
                var itemName = isItemHaveCustomLabel ? null : this._getName(item);
                return isItemHaveCustomLabel ? item.label.text : itemName && _inflector2.default.captionize(itemName)
            },
            _prepareValidationRules: function(userValidationRules, isItemRequired, itemType, itemName) {
                var isSimpleItem = itemType === SIMPLE_ITEM_TYPE;
                var validationRules;
                if (isSimpleItem) {
                    if (userValidationRules) {
                        validationRules = userValidationRules
                    } else {
                        var requiredMessage = _string2.default.format(this.option("requiredMessage"), itemName || "");
                        validationRules = isItemRequired ? [{
                            type: "required",
                            message: requiredMessage
                        }] : null
                    }
                }
                return validationRules
            },
            _addWrapperInvalidClass: function(editorInstance) {
                var wrapperClass = "." + FIELD_ITEM_CONTENT_WRAPPER_CLASS;
                var toggleInvalidClass = function(e) {
                    (0, _renderer2.default)(e.element).parents(wrapperClass).toggleClass(INVALID_CLASS, e.component._isFocused() && false === e.component.option("isValid"))
                };
                editorInstance.on("focusIn", toggleInvalidClass).on("focusOut", toggleInvalidClass).on("enterKey", toggleInvalidClass)
            },
            _createEditor: function($container, renderOptions, editorOptions) {
                var that = this;
                var template = renderOptions.template;
                var editorInstance;
                if (renderOptions.dataField && !editorOptions.name) {
                    editorOptions.name = renderOptions.dataField
                }
                that._addItemContentClasses($container);
                if (template) {
                    var data = {
                        dataField: renderOptions.dataField,
                        editorType: renderOptions.editorType,
                        editorOptions: editorOptions,
                        component: that._getComponentOwner(),
                        name: renderOptions.name
                    };
                    template.render({
                        model: data,
                        container: _dom2.default.getPublicElement($container)
                    })
                } else {
                    var $editor = (0, _renderer2.default)("<div>").appendTo($container);
                    try {
                        editorInstance = that._createComponent($editor, renderOptions.editorType, editorOptions);
                        editorInstance.setAria("describedby", renderOptions.helpID);
                        editorInstance.setAria("labelledby", renderOptions.labelID);
                        editorInstance.setAria("required", renderOptions.isRequired);
                        if (_themes2.default.isMaterial()) {
                            that._addWrapperInvalidClass(editorInstance)
                        }
                        if (renderOptions.dataField) {
                            that._bindDataField(editorInstance, renderOptions, $container)
                        }
                    } catch (e) {
                        _ui2.default.log("E1035", e.message)
                    }
                }
                return editorInstance
            },
            _getComponentOwner: function() {
                return this.option("form") || this
            },
            _bindDataField: function(editorInstance, renderOptions, $container) {
                var componentOwner = this._getComponentOwner();
                editorInstance.on("enterKey", function(args) {
                    componentOwner._createActionByOption("onEditorEnterKey")((0, _extend.extend)(args, {
                        dataField: renderOptions.dataField
                    }))
                });
                this._createWatcher(editorInstance, $container, renderOptions);
                this.linkEditorToDataField(editorInstance, renderOptions.dataField, renderOptions.editorType)
            },
            _createWatcher: function(editorInstance, $container, renderOptions) {
                var that = this;
                var watch = that._getWatch();
                if (!(0, _type.isFunction)(watch)) {
                    return
                }
                var dispose = watch(function() {
                    return that._getDataByField(renderOptions.dataField)
                }, function() {
                    editorInstance.option("value", that._getDataByField(renderOptions.dataField))
                }, {
                    deep: true,
                    skipImmediate: true
                });
                _events_engine2.default.on($container, _remove_event2.default, dispose)
            },
            _getWatch: function() {
                if (!(0, _type.isDefined)(this._watch)) {
                    var formInstance = this.option("form");
                    this._watch = formInstance && formInstance.option("integrationOptions.watchMethod")
                }
                return this._watch
            },
            _addItemContentClasses: function($itemContent) {
                var locationSpecificClass = this._getItemContentLocationSpecificClass();
                $itemContent.addClass([FIELD_ITEM_CONTENT_CLASS, locationSpecificClass].join(" "))
            },
            _getItemContentLocationSpecificClass: function() {
                var labelLocation = this.option("labelLocation");
                var oppositeClasses = {
                    right: "left",
                    left: "right",
                    top: "bottom"
                };
                return FIELD_ITEM_CONTENT_LOCATION_CLASS + oppositeClasses[labelLocation]
            },
            _createComponent: function($editor, type, editorOptions) {
                var that = this;
                var readOnlyState = this.option("readOnly");
                var instance = that.callBase($editor, type, editorOptions);
                readOnlyState && instance.option("readOnly", readOnlyState);
                that.on("optionChanged", function(args) {
                    if ("readOnly" === args.name && !(0, _type.isDefined)(editorOptions.readOnly)) {
                        instance.option(args.name, args.value)
                    }
                });
                return instance
            },
            _getTemplateByFieldItem: function(fieldItem) {
                return fieldItem.template ? this._getTemplate(fieldItem.template) : null
            },
            _appendEditorToField: function(params) {
                if (params.$label) {
                    var location = params.labelOptions.location;
                    if ("top" === location || "left" === location) {
                        params.$fieldItem.append(params.$editor)
                    }
                    if ("right" === location) {
                        params.$fieldItem.prepend(params.$editor)
                    }
                    this._addInnerItemAlignmentClass(params.$fieldItem, location)
                } else {
                    params.$fieldItem.append(params.$editor)
                }
            },
            _addInnerItemAlignmentClass: function($fieldItem, location) {
                if ("top" === location) {
                    $fieldItem.addClass(LABEL_VERTICAL_ALIGNMENT_CLASS)
                } else {
                    $fieldItem.addClass(LABEL_HORIZONTAL_ALIGNMENT_CLASS)
                }
            },
            _renderHelpText: function(fieldItem, $editor, helpID) {
                var helpText = fieldItem.helpText;
                var isSimpleItem = fieldItem.itemType === SIMPLE_ITEM_TYPE;
                if (helpText && isSimpleItem) {
                    var $editorWrapper = (0, _renderer2.default)("<div>").addClass(FIELD_ITEM_CONTENT_WRAPPER_CLASS);
                    $editor.wrap($editorWrapper);
                    (0, _renderer2.default)("<div>").addClass(FIELD_ITEM_HELP_TEXT_CLASS).attr("id", helpID).text(helpText).appendTo($editor.parent())
                }
            },
            _attachClickHandler: function($label, $editor, editorType) {
                var isBooleanEditors = "dxCheckBox" === editorType || "dxSwitch" === editorType;
                if ($label && isBooleanEditors) {
                    _events_engine2.default.on($label, _click2.default.name, function() {
                        _events_engine2.default.trigger($editor.children(), _click2.default.name)
                    })
                }
            },
            _generateRatio: function(count, isAutoSize) {
                var result = [];
                var ratio;
                var i;
                for (i = 0; i < count; i++) {
                    ratio = {
                        ratio: 1
                    };
                    if (isAutoSize) {
                        ratio.baseSize = "auto"
                    }
                    result.push(ratio)
                }
                return result
            },
            _getRowsCount: function() {
                return Math.ceil(this._items.length / this._getColCount())
            },
            _updateReferencedOptions: function(newLayoutData) {
                var _this2 = this;
                var layoutData = this.option("layoutData");
                if ((0, _type.isObject)(layoutData)) {
                    Object.getOwnPropertyNames(layoutData).forEach(function(property) {
                        return delete _this2._optionsByReference["layoutData." + property]
                    })
                }
                if ((0, _type.isObject)(newLayoutData)) {
                    Object.getOwnPropertyNames(newLayoutData).forEach(function(property) {
                        return _this2._optionsByReference["layoutData." + property] = true
                    })
                }
            },
            _resetWidget: function(instance) {
                this._disableEditorValueChangedHandler = true;
                instance.reset();
                this._disableEditorValueChangedHandler = false;
                instance.option("isValid", true)
            },
            _optionChanged: function(args) {
                var _this3 = this;
                if (0 === args.fullName.search("layoutData.")) {
                    return
                }
                switch (args.name) {
                    case "showRequiredMark":
                    case "showOptionalMark":
                    case "requiredMark":
                    case "optionalMark":
                        this._cashedRequiredConfig = null;
                        this._invalidate();
                        break;
                    case "layoutData":
                        this._updateReferencedOptions(args.value);
                        if (this.option("items")) {
                            if (!(0, _type.isEmptyObject)(args.value)) {
                                this._itemsRunTimeInfo.each(function(_, itemRunTimeInfo) {
                                    if ((0, _type.isDefined)(itemRunTimeInfo.item)) {
                                        var dataField = itemRunTimeInfo.item.dataField;
                                        if (dataField && (0, _type.isDefined)(itemRunTimeInfo.widgetInstance)) {
                                            var valueGetter = _data2.default.compileGetter(dataField);
                                            var dataValue = valueGetter(args.value);
                                            if (void 0 === dataValue) {
                                                _this3._resetWidget(itemRunTimeInfo.widgetInstance)
                                            } else {
                                                itemRunTimeInfo.widgetInstance.option("value", dataValue)
                                            }
                                        }
                                    }
                                })
                            }
                        } else {
                            this._initDataAndItems(args.value);
                            this._invalidate()
                        }
                        break;
                    case "items":
                        this._cleanItemWatchers();
                        this._initDataAndItems(args.value);
                        this._invalidate();
                        break;
                    case "alignItemLabels":
                    case "labelLocation":
                    case "requiredMessage":
                        this._invalidate();
                        break;
                    case "customizeItem":
                        this._updateItems(this.option("layoutData"));
                        this._invalidate();
                        break;
                    case "colCount":
                        this._resetColCount();
                        break;
                    case "minColWidth":
                        if ("auto" === this.option("colCount")) {
                            this._resetColCount()
                        }
                        break;
                    case "readOnly":
                        break;
                    case "width":
                        this.callBase(args);
                        if ("auto" === this.option("colCount")) {
                            this._resetColCount()
                        }
                        break;
                    case "onFieldDataChanged":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _resetColCount: function() {
                this._cashedColCount = null;
                this._invalidate()
            },
            linkEditorToDataField: function(editorInstance, dataField) {
                var _this4 = this;
                this.on("optionChanged", function(args) {
                    if (args.fullName === "layoutData.".concat(dataField)) {
                        editorInstance._setOptionWithoutOptionChange("value", args.value)
                    }
                });
                editorInstance.on("valueChanged", function(args) {
                    var isValueReferenceType = (0, _type.isObject)(args.value) || Array.isArray(args.value);
                    if (!_this4._disableEditorValueChangedHandler && !(isValueReferenceType && args.value === args.previousValue)) {
                        _this4._updateFieldValue(dataField, args.value)
                    }
                })
            },
            _dimensionChanged: function() {
                if ("auto" === this.option("colCount") && this.isCachedColCountObsolete()) {
                    this._eventsStrategy.fireEvent("autoColCountChanged")
                }
            },
            getItemID: function(name) {
                var formInstance = this.option("form");
                return formInstance && formInstance.getItemID(name)
            },
            updateData: function(data, value) {
                var that = this;
                if ((0, _type.isObject)(data)) {
                    (0, _iterator.each)(data, function(dataField, fieldValue) {
                        that._updateFieldValue(dataField, fieldValue)
                    })
                } else {
                    if ("string" === typeof data) {
                        that._updateFieldValue(data, value)
                    }
                }
            },
            getEditor: function(field) {
                return this._itemsRunTimeInfo.findWidgetInstanceByDataField(field) || this._itemsRunTimeInfo.findWidgetInstanceByName(field)
            },
            isSingleColumnMode: function(component) {
                var responsiveBox = this._responsiveBox || component;
                if (responsiveBox) {
                    return responsiveBox.option("currentScreenFactor") === responsiveBox.option("singleColumnScreen");
                }
            },
            getItemsRunTimeInfo: function() {
                return this._itemsRunTimeInfo
            }
        });
        (0, _component_registrator2.default)("dxLayoutManager", LayoutManager);
        module.exports = LayoutManager;
        module.exports.__internals = {
            FIELD_ITEM_CLASS: FIELD_ITEM_CLASS,
            FIELD_EMPTY_ITEM_CLASS: FIELD_EMPTY_ITEM_CLASS,
            FIELD_ITEM_CONTENT_CLASS: FIELD_ITEM_CONTENT_CLASS,
            FIELD_ITEM_CONTENT_LOCATION_CLASS: FIELD_ITEM_CONTENT_LOCATION_CLASS,
            FIELD_ITEM_LABEL_CLASS: FIELD_ITEM_LABEL_CLASS,
            FIELD_ITEM_LABEL_ALIGN_CLASS: FIELD_ITEM_LABEL_ALIGN_CLASS,
            FIELD_ITEM_LABEL_LOCATION_CLASS: FIELD_ITEM_LABEL_LOCATION_CLASS,
            LABEL_HORIZONTAL_ALIGNMENT_CLASS: LABEL_HORIZONTAL_ALIGNMENT_CLASS,
            LABEL_VERTICAL_ALIGNMENT_CLASS: LABEL_VERTICAL_ALIGNMENT_CLASS,
            FORM_LAYOUT_MANAGER_CLASS: FORM_LAYOUT_MANAGER_CLASS,
            FIELD_ITEM_CONTENT_WRAPPER_CLASS: FIELD_ITEM_CONTENT_WRAPPER_CLASS,
            FIELD_ITEM_HELP_TEXT_CLASS: FIELD_ITEM_HELP_TEXT_CLASS,
            FIELD_ITEM_LABEL_CONTENT_CLASS: FIELD_ITEM_LABEL_CONTENT_CLASS,
            FIELD_ITEM_LABEL_TEXT_CLASS: FIELD_ITEM_LABEL_TEXT_CLASS,
            FIELD_ITEM_REQUIRED_CLASS: FIELD_ITEM_REQUIRED_CLASS,
            FIELD_ITEM_OPTIONAL_CLASS: FIELD_ITEM_OPTIONAL_CLASS,
            FIELD_ITEM_REQUIRED_MARK_CLASS: FIELD_ITEM_REQUIRED_MARK_CLASS,
            FIELD_ITEM_OPTIONAL_MARK_CLASS: FIELD_ITEM_OPTIONAL_MARK_CLASS,
            LAYOUT_MANAGER_ONE_COLUMN: LAYOUT_MANAGER_ONE_COLUMN,
            FLEX_LAYOUT_CLASS: FLEX_LAYOUT_CLASS
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/validation/default_adapter.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DefaultAdapter = _class2.default.inherit({
            ctor: function(editor, validator) {
                var _this = this;
                this.editor = editor;
                this.validator = validator;
                this.validationRequestsCallbacks = (0, _callbacks2.default)();
                var handler = function(args) {
                    _this.validationRequestsCallbacks.fire(args)
                };
                editor.validationRequest.add(handler);
                editor.on("disposing", function() {
                    editor.validationRequest.remove(handler)
                })
            },
            getValue: function() {
                return this.editor.option("value")
            },
            getCurrentValidationError: function() {
                return this.editor.option("validationError")
            },
            bypass: function() {
                return this.editor.option("disabled")
            },
            applyValidationResults: function(params) {
                this.editor.option({
                    validationErrors: params.brokenRules,
                    validationStatus: params.status
                })
            },
            reset: function() {
                this.editor.reset()
            },
            focus: function() {
                this.editor.focus()
            }
        });
        module.exports = DefaultAdapter
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/tab_panel/item.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _item = __webpack_require__( /*! ../collection/item */ 135);
        var _item2 = _interopRequireDefault(_item);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var TabPanelItem = function(_CollectionWidgetItem) {
            _inherits(TabPanelItem, _CollectionWidgetItem);
            var _super = _createSuper(TabPanelItem);

            function TabPanelItem() {
                _classCallCheck(this, TabPanelItem);
                return _super.apply(this, arguments)
            }
            _createClass(TabPanelItem, [{
                key: "_renderWatchers",
                value: function() {
                    this._startWatcher("badge", _common.noop);
                    return _get(_getPrototypeOf(TabPanelItem.prototype), "_renderWatchers", this).call(this)
                }
            }]);
            return TabPanelItem
        }(_item2.default);
        exports.default = TabPanelItem
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.item_options_actions.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _uiForm = __webpack_require__( /*! ./ui.form.item_option_action */ 584);
        var _uiForm2 = _interopRequireDefault(_uiForm);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiForm3 = __webpack_require__( /*! ./ui.form.utils */ 328);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var WidgetOptionItemOptionAction = function(_ItemOptionAction) {
            _inherits(WidgetOptionItemOptionAction, _ItemOptionAction);
            var _super = _createSuper(WidgetOptionItemOptionAction);

            function WidgetOptionItemOptionAction() {
                _classCallCheck(this, WidgetOptionItemOptionAction);
                return _super.apply(this, arguments)
            }
            _createClass(WidgetOptionItemOptionAction, [{
                key: "tryExecute",
                value: function() {
                    var value = this._options.value;
                    var instance = this.findInstance();
                    if (instance) {
                        instance.option(value);
                        return true
                    }
                    return false
                }
            }]);
            return WidgetOptionItemOptionAction
        }(_uiForm2.default);
        var TabOptionItemOptionAction = function(_ItemOptionAction2) {
            _inherits(TabOptionItemOptionAction, _ItemOptionAction2);
            var _super2 = _createSuper(TabOptionItemOptionAction);

            function TabOptionItemOptionAction() {
                _classCallCheck(this, TabOptionItemOptionAction);
                return _super2.apply(this, arguments)
            }
            _createClass(TabOptionItemOptionAction, [{
                key: "tryExecute",
                value: function() {
                    var tabPanel = this.findInstance();
                    if (tabPanel) {
                        var _this$_options = this._options,
                            optionName = _this$_options.optionName,
                            item = _this$_options.item,
                            value = _this$_options.value;
                        var itemIndex = this._itemsRunTimeInfo.findItemIndexByItem(item);
                        if (itemIndex >= 0) {
                            tabPanel.option((0, _uiForm3.getFullOptionName)("items[".concat(itemIndex, "]"), optionName), value);
                            return true
                        }
                    }
                    return false
                }
            }]);
            return TabOptionItemOptionAction
        }(_uiForm2.default);
        var TabsOptionItemOptionAction = function(_ItemOptionAction3) {
            _inherits(TabsOptionItemOptionAction, _ItemOptionAction3);
            var _super3 = _createSuper(TabsOptionItemOptionAction);

            function TabsOptionItemOptionAction() {
                _classCallCheck(this, TabsOptionItemOptionAction);
                return _super3.apply(this, arguments)
            }
            _createClass(TabsOptionItemOptionAction, [{
                key: "tryExecute",
                value: function() {
                    var tabPanel = this.findInstance();
                    if (tabPanel) {
                        var value = this._options.value;
                        tabPanel.option("dataSource", value);
                        return true
                    }
                    return false
                }
            }]);
            return TabsOptionItemOptionAction
        }(_uiForm2.default);
        var ValidationRulesItemOptionAction = function(_ItemOptionAction4) {
            _inherits(ValidationRulesItemOptionAction, _ItemOptionAction4);
            var _super4 = _createSuper(ValidationRulesItemOptionAction);

            function ValidationRulesItemOptionAction() {
                _classCallCheck(this, ValidationRulesItemOptionAction);
                return _super4.apply(this, arguments)
            }
            _createClass(ValidationRulesItemOptionAction, [{
                key: "tryExecute",
                value: function() {
                    var item = this._options.item;
                    var instance = this.findInstance();
                    var validator = instance && (0, _element_data.data)(instance.$element()[0], "dxValidator");
                    if (validator && item) {
                        var filterRequired = function(item) {
                            return "required" === item.type
                        };
                        var oldContainsRequired = (validator.option("validationRules") || []).some(filterRequired);
                        var newContainsRequired = (item.validationRules || []).some(filterRequired);
                        if (!oldContainsRequired && !newContainsRequired || oldContainsRequired && newContainsRequired) {
                            validator.option("validationRules", item.validationRules);
                            return true
                        }
                    }
                    return false
                }
            }]);
            return ValidationRulesItemOptionAction
        }(_uiForm2.default);
        var CssClassItemOptionAction = function(_ItemOptionAction5) {
            _inherits(CssClassItemOptionAction, _ItemOptionAction5);
            var _super5 = _createSuper(CssClassItemOptionAction);

            function CssClassItemOptionAction() {
                _classCallCheck(this, CssClassItemOptionAction);
                return _super5.apply(this, arguments)
            }
            _createClass(CssClassItemOptionAction, [{
                key: "tryExecute",
                value: function() {
                    var $itemContainer = this.findItemContainer();
                    var _this$_options2 = this._options,
                        previousValue = _this$_options2.previousValue,
                        value = _this$_options2.value;
                    if ($itemContainer) {
                        $itemContainer.removeClass(previousValue).addClass(value);
                        return true
                    }
                    return false
                }
            }]);
            return CssClassItemOptionAction
        }(_uiForm2.default);
        var tryCreateItemOptionAction = function(optionName, itemActionOptions) {
            switch (optionName) {
                case "editorOptions":
                case "buttonOptions":
                    return new WidgetOptionItemOptionAction(itemActionOptions);
                case "validationRules":
                    return new ValidationRulesItemOptionAction(itemActionOptions);
                case "cssClass":
                    return new CssClassItemOptionAction(itemActionOptions);
                case "badge":
                case "disabled":
                case "icon":
                case "template":
                case "tabTemplate":
                case "title":
                    return new TabOptionItemOptionAction((0, _extend.extend)(itemActionOptions, {
                        optionName: optionName
                    }));
                case "tabs":
                    return new TabsOptionItemOptionAction(itemActionOptions);
                default:
                    return null
            }
        };
        exports.default = tryCreateItemOptionAction
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.item_option_action.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _class = __webpack_require__( /*! ../../core/class */ 16);

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var ItemOptionAction = function() {
            function ItemOptionAction(options) {
                _classCallCheck(this, ItemOptionAction);
                this._options = options;
                this._itemsRunTimeInfo = this._options.itemsRunTimeInfo
            }
            _createClass(ItemOptionAction, [{
                key: "findInstance",
                value: function() {
                    return this._itemsRunTimeInfo.findWidgetInstanceByItem(this._options.item)
                }
            }, {
                key: "findItemContainer",
                value: function() {
                    return this._itemsRunTimeInfo.findItemContainerByItem(this._options.item)
                }
            }, {
                key: "tryExecute",
                value: function() {
                    (0, _class.abstract)()
                }
            }]);
            return ItemOptionAction
        }();
        exports.default = ItemOptionAction
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/gallery.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var fx = __webpack_require__( /*! ../animation/fx */ 40);
        var clickEvent = __webpack_require__( /*! ../events/click */ 19);
        var translator = __webpack_require__( /*! ../animation/translator */ 28);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var Widget = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 158);
        var BindableTemplate = __webpack_require__( /*! ../core/templates/bindable_template */ 59).BindableTemplate;
        var Deferred = __webpack_require__( /*! ../core/utils/deferred */ 6).Deferred;
        var GALLERY_CLASS = "dx-gallery";
        var GALLERY_WRAPPER_CLASS = GALLERY_CLASS + "-wrapper";
        var GALLERY_LOOP_CLASS = "dx-gallery-loop";
        var GALLERY_ITEM_CONTAINER_CLASS = GALLERY_CLASS + "-container";
        var GALLERY_ACTIVE_CLASS = GALLERY_CLASS + "-active";
        var GALLERY_ITEM_CLASS = GALLERY_CLASS + "-item";
        var GALLERY_INVISIBLE_ITEM_CLASS = GALLERY_CLASS + "-item-invisible";
        var GALLERY_LOOP_ITEM_CLASS = GALLERY_ITEM_CLASS + "-loop";
        var GALLERY_ITEM_SELECTOR = "." + GALLERY_ITEM_CLASS;
        var GALLERY_ITEM_SELECTED_CLASS = GALLERY_ITEM_CLASS + "-selected";
        var GALLERY_INDICATOR_CLASS = GALLERY_CLASS + "-indicator";
        var GALLERY_INDICATOR_ITEM_CLASS = GALLERY_INDICATOR_CLASS + "-item";
        var GALLERY_INDICATOR_ITEM_SELECTOR = "." + GALLERY_INDICATOR_ITEM_CLASS;
        var GALLERY_INDICATOR_ITEM_SELECTED_CLASS = GALLERY_INDICATOR_ITEM_CLASS + "-selected";
        var GALLERY_IMAGE_CLASS = "dx-gallery-item-image";
        var GALLERY_ITEM_DATA_KEY = "dxGalleryItemData";
        var MAX_CALC_ERROR = 1;
        var GalleryNavButton = Widget.inherit({
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    pageUp: commonUtils.noop,
                    pageDown: commonUtils.noop
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    direction: "next",
                    onClick: null,
                    hoverStateEnabled: true,
                    activeStateEnabled: true
                })
            },
            _render: function() {
                this.callBase();
                var that = this;
                var $element = this.$element();
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                $element.addClass(GALLERY_CLASS + "-nav-button-" + this.option("direction"));
                eventsEngine.off($element, eventName);
                eventsEngine.on($element, eventName, function(e) {
                    that._createActionByOption("onClick")({
                        event: e
                    })
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onClick":
                    case "direction":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        var Gallery = CollectionWidget.inherit({
            _activeStateUnit: GALLERY_ITEM_SELECTOR,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    activeStateEnabled: false,
                    animationDuration: 400,
                    animationEnabled: true,
                    loop: false,
                    swipeEnabled: true,
                    indicatorEnabled: true,
                    showIndicator: true,
                    selectedIndex: 0,
                    slideshowDelay: 0,
                    showNavButtons: false,
                    wrapAround: false,
                    initialItemWidth: void 0,
                    stretchImages: false,
                    _itemAttributes: {
                        role: "option"
                    },
                    loopItemFocus: false,
                    selectOnFocus: true,
                    selectionMode: "single",
                    selectionRequired: true,
                    selectionByClick: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.option("loopItemFocus", this.option("loop"))
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    item: new BindableTemplate(function($container, data) {
                        var $img = $("<img>").addClass(GALLERY_IMAGE_CLASS);
                        if (typeUtils.isPlainObject(data)) {
                            this._prepareDefaultItemTemplate(data, $container);
                            $img.attr({
                                src: data.imageSrc,
                                alt: data.imageAlt
                            }).appendTo($container)
                        } else {
                            $img.attr("src", String(data)).appendTo($container)
                        }
                    }.bind(this), ["imageSrc", "imageAlt", "text", "html"], this.option("integrationOptions.watchMethod"))
                })
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _itemContainer: function() {
                return this._$container
            },
            _itemClass: function() {
                return GALLERY_ITEM_CLASS
            },
            _itemDataKey: function() {
                return GALLERY_ITEM_DATA_KEY
            },
            _actualItemWidth: function() {
                var isWrapAround = this.option("wrapAround");
                if (this.option("stretchImages")) {
                    var itemPerPage = isWrapAround ? this._itemsPerPage() + 1 : this._itemsPerPage();
                    return 1 / itemPerPage
                }
                if (isWrapAround) {
                    return this._itemPercentWidth() * this._itemsPerPage() / (this._itemsPerPage() + 1)
                }
                return this._itemPercentWidth()
            },
            _itemPercentWidth: function() {
                var percentWidth;
                var elementWidth = this.$element().outerWidth();
                var initialItemWidth = this.option("initialItemWidth");
                if (initialItemWidth && initialItemWidth <= elementWidth) {
                    percentWidth = initialItemWidth / elementWidth
                } else {
                    percentWidth = 1
                }
                return percentWidth
            },
            _itemsPerPage: function() {
                var itemsPerPage = windowUtils.hasWindow() ? Math.floor(1 / this._itemPercentWidth()) : 1;
                return Math.min(itemsPerPage, this._itemsCount())
            },
            _pagesCount: function() {
                return Math.ceil(this._itemsCount() / this._itemsPerPage())
            },
            _itemsCount: function() {
                return (this.option("items") || []).length
            },
            _offsetDirection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _initMarkup: function() {
                this._renderWrapper();
                this._renderItemsContainer();
                this.$element().addClass(GALLERY_CLASS);
                this.$element().toggleClass(GALLERY_LOOP_CLASS, this.option("loop"));
                this.callBase();
                this.setAria({
                    role: "listbox",
                    label: "gallery"
                })
            },
            _render: function() {
                this._renderDragHandler();
                this._renderContainerPosition();
                this._renderItemSizes();
                this._renderItemPositions();
                this._renderNavButtons();
                this._renderIndicator();
                this._renderSelectedItem();
                this._renderItemVisibility();
                this._renderUserInteraction();
                this._setupSlideShow();
                this._reviseDimensions();
                this.callBase()
            },
            _dimensionChanged: function() {
                var selectedIndex = this.option("selectedIndex") || 0;
                this._stopItemAnimations();
                this._clearCacheWidth();
                this._cloneDuplicateItems();
                this._renderItemSizes();
                this._renderItemPositions();
                this._renderIndicator();
                this._renderContainerPosition(this._calculateIndexOffset(selectedIndex), true);
                this._renderItemVisibility()
            },
            _renderDragHandler: function() {
                var eventName = eventUtils.addNamespace("dragstart", this.NAME);
                eventsEngine.off(this.$element(), eventName);
                eventsEngine.on(this.$element(), eventName, "img", function() {
                    return false
                })
            },
            _renderWrapper: function() {
                if (this._$wrapper) {
                    return
                }
                this._$wrapper = $("<div>").addClass(GALLERY_WRAPPER_CLASS).appendTo(this.$element())
            },
            _renderItems: function(items) {
                if (!windowUtils.hasWindow()) {
                    var selectedIndex = this.option("selectedIndex");
                    items = items.length > selectedIndex ? items.slice(selectedIndex, selectedIndex + 1) : items.slice(0, 1)
                }
                this.callBase(items);
                this._loadNextPageIfNeeded()
            },
            _renderItemsContainer: function() {
                if (this._$container) {
                    return
                }
                this._$container = $("<div>").addClass(GALLERY_ITEM_CONTAINER_CLASS).appendTo(this._$wrapper)
            },
            _cloneDuplicateItems: function() {
                if (!this.option("loop")) {
                    return
                }
                var items = this.option("items") || [];
                var itemsCount = items.length;
                var lastItemIndex = itemsCount - 1;
                var i;
                if (!itemsCount) {
                    return
                }
                this._getLoopedItems().remove();
                var duplicateCount = Math.min(this._itemsPerPage(), itemsCount);
                var $items = this._getRealItems();
                var $container = this._itemContainer();
                for (i = 0; i < duplicateCount; i++) {
                    this._cloneItemForDuplicate($items[i], $container)
                }
                for (i = 0; i < duplicateCount; i++) {
                    this._cloneItemForDuplicate($items[lastItemIndex - i], $container)
                }
            },
            _cloneItemForDuplicate: function(item, $container) {
                if (item) {
                    $(item).clone(true).addClass(GALLERY_LOOP_ITEM_CLASS).css("margin", 0).appendTo($container)
                }
            },
            _getRealItems: function() {
                var selector = "." + GALLERY_ITEM_CLASS + ":not(." + GALLERY_LOOP_ITEM_CLASS + ")";
                return this.$element().find(selector)
            },
            _getLoopedItems: function() {
                return this.$element().find("." + GALLERY_LOOP_ITEM_CLASS)
            },
            _emptyMessageContainer: function() {
                return this._$wrapper
            },
            _renderItemSizes: function(startIndex) {
                var $items = this._itemElements();
                var itemWidth = this._actualItemWidth();
                if (void 0 !== startIndex) {
                    $items = $items.slice(startIndex)
                }
                $items.each(function(index) {
                    $($items[index]).outerWidth(100 * itemWidth + "%")
                })
            },
            _renderItemPositions: function() {
                var itemWidth = this._actualItemWidth();
                var itemsCount = this._itemsCount();
                var itemsPerPage = this._itemsPerPage();
                var loopItemsCount = this.$element().find("." + GALLERY_LOOP_ITEM_CLASS).length;
                var lastItemDuplicateIndex = itemsCount + loopItemsCount - 1;
                var offsetRatio = this.option("wrapAround") ? .5 : 0;
                var freeSpace = this._itemFreeSpace();
                var isGapBetweenImages = !!freeSpace;
                var rtlEnabled = this.option("rtlEnabled");
                var selectedIndex = this.option("selectedIndex");
                var side = rtlEnabled ? "Right" : "Left";
                this._itemElements().each(function(index) {
                    var realIndex = index;
                    var isLoopItem = $(this).hasClass(GALLERY_LOOP_ITEM_CLASS);
                    if (index > itemsCount + itemsPerPage - 1) {
                        realIndex = lastItemDuplicateIndex - realIndex - itemsPerPage
                    }
                    if (!isLoopItem && 0 !== realIndex) {
                        if (isGapBetweenImages) {
                            $(this).css("margin" + side, 100 * freeSpace + "%")
                        }
                        return
                    }
                    var itemPosition = itemWidth * (realIndex + offsetRatio) + freeSpace * (realIndex + 1 - offsetRatio);
                    var property = isLoopItem ? side.toLowerCase() : "margin" + side;
                    $(this).css(property, 100 * itemPosition + "%")
                });
                this._relocateItems(selectedIndex, selectedIndex, true)
            },
            _itemFreeSpace: function() {
                var itemsPerPage = this._itemsPerPage();
                if (this.option("wrapAround")) {
                    itemsPerPage += 1
                }
                return (1 - this._actualItemWidth() * itemsPerPage) / (itemsPerPage + 1)
            },
            _renderContainerPosition: function(offset, hideItems, animate) {
                this._releaseInvisibleItems();
                offset = offset || 0;
                var that = this;
                var itemWidth = this._actualItemWidth();
                var targetIndex = offset;
                var targetPosition = this._offsetDirection() * targetIndex * (itemWidth + this._itemFreeSpace());
                var positionReady;
                if (typeUtils.isDefined(this._animationOverride)) {
                    animate = this._animationOverride;
                    delete this._animationOverride
                }
                if (animate) {
                    that._startSwipe();
                    positionReady = that._animate(targetPosition).done(that._endSwipe.bind(that))
                } else {
                    translator.move(this._$container, {
                        left: targetPosition * this._elementWidth(),
                        top: 0
                    });
                    positionReady = (new Deferred).resolveWith(that)
                }
                positionReady.done(function() {
                    this._deferredAnimate && that._deferredAnimate.resolveWith(that);
                    hideItems && this._renderItemVisibility()
                });
                return positionReady.promise()
            },
            _startSwipe: function() {
                this.$element().addClass(GALLERY_ACTIVE_CLASS)
            },
            _endSwipe: function() {
                this.$element().removeClass(GALLERY_ACTIVE_CLASS)
            },
            _animate: function(targetPosition, extraConfig) {
                var that = this;
                var $container = this._$container;
                var animationComplete = new Deferred;
                fx.animate(this._$container, extend({
                    type: "slide",
                    to: {
                        left: targetPosition * this._elementWidth()
                    },
                    duration: that.option("animationDuration"),
                    complete: function() {
                        if (that._needMoveContainerForward()) {
                            translator.move($container, {
                                left: 0,
                                top: 0
                            })
                        }
                        if (that._needMoveContainerBack()) {
                            translator.move($container, {
                                left: that._maxContainerOffset() * that._elementWidth(),
                                top: 0
                            })
                        }
                        animationComplete.resolveWith(that)
                    }
                }, extraConfig || {}));
                return animationComplete
            },
            _needMoveContainerForward: function() {
                var expectedPosition = this._$container.position().left * this._offsetDirection();
                var actualPosition = -this._maxItemWidth() * this._elementWidth() * this._itemsCount();
                return expectedPosition <= actualPosition + MAX_CALC_ERROR
            },
            _needMoveContainerBack: function() {
                var expectedPosition = this._$container.position().left * this._offsetDirection();
                var actualPosition = this._actualItemWidth() * this._elementWidth();
                return expectedPosition >= actualPosition - MAX_CALC_ERROR
            },
            _maxContainerOffset: function() {
                return -this._maxItemWidth() * (this._itemsCount() - this._itemsPerPage()) * this._offsetDirection()
            },
            _maxItemWidth: function() {
                return this._actualItemWidth() + this._itemFreeSpace()
            },
            _reviseDimensions: function() {
                var that = this;
                var $firstItem = that._itemElements().first().find(".dx-item-content");
                if (!$firstItem || $firstItem.is(":hidden")) {
                    return
                }
                if (!that.option("height")) {
                    that.option("height", $firstItem.outerHeight())
                }
                if (!that.option("width")) {
                    that.option("width", $firstItem.outerWidth())
                }
                this._dimensionChanged()
            },
            _renderIndicator: function() {
                this._cleanIndicators();
                if (!this.option("showIndicator")) {
                    return
                }
                var indicator = this._$indicator = $("<div>").addClass(GALLERY_INDICATOR_CLASS).appendTo(this._$wrapper);
                for (var i = 0; i < this._pagesCount(); i++) {
                    $("<div>").addClass(GALLERY_INDICATOR_ITEM_CLASS).appendTo(indicator)
                }
                this._renderSelectedPageIndicator()
            },
            _cleanIndicators: function() {
                if (this._$indicator) {
                    this._$indicator.remove()
                }
            },
            _renderSelectedItem: function() {
                var selectedIndex = this.option("selectedIndex");
                this._itemElements().removeClass(GALLERY_ITEM_SELECTED_CLASS).eq(selectedIndex).addClass(GALLERY_ITEM_SELECTED_CLASS)
            },
            _renderItemVisibility: function() {
                if (this.option("initialItemWidth") || this.option("wrapAround")) {
                    this._releaseInvisibleItems();
                    return
                }
                this._itemElements().each(function(index, item) {
                    if (this.option("selectedIndex") === index) {
                        $(item).removeClass(GALLERY_INVISIBLE_ITEM_CLASS)
                    } else {
                        $(item).addClass(GALLERY_INVISIBLE_ITEM_CLASS)
                    }
                }.bind(this));
                this._getLoopedItems().addClass(GALLERY_INVISIBLE_ITEM_CLASS)
            },
            _releaseInvisibleItems: function() {
                this._itemElements().removeClass(GALLERY_INVISIBLE_ITEM_CLASS);
                this._getLoopedItems().removeClass(GALLERY_INVISIBLE_ITEM_CLASS)
            },
            _renderSelectedPageIndicator: function() {
                if (!this._$indicator) {
                    return
                }
                var itemIndex = this.option("selectedIndex");
                var lastIndex = this._pagesCount() - 1;
                var pageIndex = Math.ceil(itemIndex / this._itemsPerPage());
                pageIndex = Math.min(lastIndex, pageIndex);
                this._$indicator.find(GALLERY_INDICATOR_ITEM_SELECTOR).removeClass(GALLERY_INDICATOR_ITEM_SELECTED_CLASS).eq(pageIndex).addClass(GALLERY_INDICATOR_ITEM_SELECTED_CLASS)
            },
            _renderUserInteraction: function() {
                var rootElement = this.$element();
                var swipeEnabled = this.option("swipeEnabled") && this._itemsCount() > 1;
                this._createComponent(rootElement, Swipeable, {
                    disabled: this.option("disabled") || !swipeEnabled,
                    onStart: this._swipeStartHandler.bind(this),
                    onUpdated: this._swipeUpdateHandler.bind(this),
                    onEnd: this._swipeEndHandler.bind(this),
                    itemSizeFunc: this._elementWidth.bind(this)
                });
                var indicatorSelectAction = this._createAction(this._indicatorSelectHandler);
                eventsEngine.off(rootElement, eventUtils.addNamespace(clickEvent.name, this.NAME), GALLERY_INDICATOR_ITEM_SELECTOR);
                eventsEngine.on(rootElement, eventUtils.addNamespace(clickEvent.name, this.NAME), GALLERY_INDICATOR_ITEM_SELECTOR, function(e) {
                    indicatorSelectAction({
                        event: e
                    })
                })
            },
            _indicatorSelectHandler: function(args) {
                var e = args.event;
                var instance = args.component;
                if (!instance.option("indicatorEnabled")) {
                    return
                }
                var indicatorIndex = $(e.target).index();
                var itemIndex = instance._fitPaginatedIndex(indicatorIndex * instance._itemsPerPage());
                instance._needLongMove = true;
                instance.option("selectedIndex", itemIndex);
                instance._loadNextPageIfNeeded(itemIndex)
            },
            _renderNavButtons: function() {
                var that = this;
                if (!that.option("showNavButtons")) {
                    that._cleanNavButtons();
                    return
                }
                that._prevNavButton = $("<div>").appendTo(this._$wrapper);
                that._createComponent(that._prevNavButton, GalleryNavButton, {
                    direction: "prev",
                    onClick: function() {
                        that._prevPage()
                    }
                });
                that._nextNavButton = $("<div>").appendTo(this._$wrapper);
                that._createComponent(that._nextNavButton, GalleryNavButton, {
                    direction: "next",
                    onClick: function() {
                        that._nextPage()
                    }
                });
                this._renderNavButtonsVisibility()
            },
            _prevPage: function() {
                var visiblePageSize = this._itemsPerPage();
                var newSelectedIndex = this.option("selectedIndex") - visiblePageSize;
                if (newSelectedIndex === -visiblePageSize && visiblePageSize === this._itemsCount()) {
                    return this._relocateItems(newSelectedIndex, 0)
                } else {
                    return this.goToItem(this._fitPaginatedIndex(newSelectedIndex))
                }
            },
            _nextPage: function() {
                var visiblePageSize = this._itemsPerPage();
                var newSelectedIndex = this.option("selectedIndex") + visiblePageSize;
                if (newSelectedIndex === visiblePageSize && visiblePageSize === this._itemsCount()) {
                    return this._relocateItems(newSelectedIndex, 0)
                } else {
                    return this.goToItem(this._fitPaginatedIndex(newSelectedIndex)).done(this._loadNextPageIfNeeded)
                }
            },
            _loadNextPageIfNeeded: function(selectedIndex) {
                selectedIndex = void 0 === selectedIndex ? this.option("selectedIndex") : selectedIndex;
                if (this._dataSource && this._dataSource.paginate() && this._shouldLoadNextPage(selectedIndex) && !this._isDataSourceLoading() && !this._isLastPage()) {
                    this._loadNextPage().done(function() {
                        this._renderIndicator();
                        this._renderItemPositions();
                        this._renderNavButtonsVisibility();
                        this._renderItemSizes(selectedIndex)
                    }.bind(this))
                }
            },
            _shouldLoadNextPage: function(selectedIndex) {
                var visiblePageSize = this._itemsPerPage();
                return selectedIndex + 2 * visiblePageSize > this.option("items").length
            },
            _allowDynamicItemsAppend: function() {
                return true
            },
            _fitPaginatedIndex: function(itemIndex) {
                var itemsPerPage = this._itemsPerPage();
                var restItemsCount = itemIndex < 0 ? itemsPerPage + itemIndex : this._itemsCount() - itemIndex;
                if (itemIndex > this._itemsCount() - 1) {
                    itemIndex = 0;
                    this._goToGhostItem = true
                } else {
                    if (restItemsCount < itemsPerPage && restItemsCount > 0) {
                        if (itemIndex > 0) {
                            itemIndex -= itemsPerPage - restItemsCount
                        } else {
                            itemIndex += itemsPerPage - restItemsCount
                        }
                    }
                }
                return itemIndex
            },
            _cleanNavButtons: function() {
                if (this._prevNavButton) {
                    this._prevNavButton.remove();
                    delete this._prevNavButton
                }
                if (this._nextNavButton) {
                    this._nextNavButton.remove();
                    delete this._nextNavButton
                }
            },
            _renderNavButtonsVisibility: function() {
                if (!this.option("showNavButtons") || !this._prevNavButton || !this._nextNavButton) {
                    return
                }
                var selectedIndex = this.option("selectedIndex");
                var loop = this.option("loop");
                var itemsCount = this._itemsCount();
                this._prevNavButton.show();
                this._nextNavButton.show();
                if (0 === itemsCount) {
                    this._prevNavButton.hide();
                    this._nextNavButton.hide()
                }
                if (loop) {
                    return
                }
                var nextHidden = selectedIndex === itemsCount - this._itemsPerPage();
                var prevHidden = itemsCount < 2 || 0 === selectedIndex;
                if (this._dataSource && this._dataSource.paginate()) {
                    nextHidden = nextHidden && this._isLastPage()
                } else {
                    nextHidden = nextHidden || itemsCount < 2
                }
                if (prevHidden) {
                    this._prevNavButton.hide()
                }
                if (nextHidden) {
                    this._nextNavButton.hide()
                }
            },
            _setupSlideShow: function() {
                var that = this;
                var slideshowDelay = that.option("slideshowDelay");
                clearTimeout(that._slideshowTimer);
                if (!slideshowDelay) {
                    return
                }
                that._slideshowTimer = setTimeout(function() {
                    if (that._userInteraction) {
                        that._setupSlideShow();
                        return
                    }
                    that.nextItem(true).done(that._setupSlideShow)
                }, slideshowDelay)
            },
            _elementWidth: function() {
                if (!this._cacheElementWidth) {
                    this._cacheElementWidth = this.$element().width()
                }
                return this._cacheElementWidth
            },
            _clearCacheWidth: function() {
                delete this._cacheElementWidth
            },
            _swipeStartHandler: function(e) {
                this._releaseInvisibleItems();
                this._clearCacheWidth();
                this._elementWidth();
                var itemsCount = this._itemsCount();
                if (!itemsCount) {
                    e.event.cancel = true;
                    return
                }
                this._stopItemAnimations();
                this._startSwipe();
                this._userInteraction = true;
                if (!this.option("loop")) {
                    var selectedIndex = this.option("selectedIndex");
                    var startOffset = itemsCount - selectedIndex - this._itemsPerPage();
                    var endOffset = selectedIndex;
                    var rtlEnabled = this.option("rtlEnabled");
                    e.event.maxLeftOffset = rtlEnabled ? endOffset : startOffset;
                    e.event.maxRightOffset = rtlEnabled ? startOffset : endOffset
                }
            },
            _stopItemAnimations: function() {
                fx.stop(this._$container, true)
            },
            _swipeUpdateHandler: function(e) {
                var wrapAroundRatio = this.option("wrapAround") ? 1 : 0;
                var offset = this._offsetDirection() * e.event.offset * (this._itemsPerPage() + wrapAroundRatio) - this.option("selectedIndex");
                if (offset < 0) {
                    this._loadNextPageIfNeeded(Math.ceil(Math.abs(offset)))
                }
                this._renderContainerPosition(offset)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.event.targetOffset * this._offsetDirection() * this._itemsPerPage();
                var selectedIndex = this.option("selectedIndex");
                var newIndex = this._fitIndex(selectedIndex - targetOffset);
                var paginatedIndex = this._fitPaginatedIndex(newIndex);
                if (Math.abs(targetOffset) < this._itemsPerPage()) {
                    this._relocateItems(selectedIndex);
                    return
                }
                if (this._itemsPerPage() === this._itemsCount()) {
                    if (targetOffset > 0) {
                        this._relocateItems(-targetOffset)
                    } else {
                        this._relocateItems(0)
                    }
                    return
                }
                this.option("selectedIndex", paginatedIndex)
            },
            _setFocusOnSelect: function() {
                this._userInteraction = true;
                var selectedItem = this.itemElements().filter("." + GALLERY_ITEM_SELECTED_CLASS);
                this.option("focusedElement", getPublicElement(selectedItem));
                this._userInteraction = false
            },
            _flipIndex: function(index) {
                var itemsCount = this._itemsCount();
                index %= itemsCount;
                if (index > (itemsCount + 1) / 2) {
                    index -= itemsCount
                }
                if (index < -(itemsCount - 1) / 2) {
                    index += itemsCount
                }
                return index
            },
            _fitIndex: function(index) {
                if (!this.option("loop")) {
                    return index
                }
                var itemsCount = this._itemsCount();
                if (index >= itemsCount || index < 0) {
                    this._goToGhostItem = true
                }
                if (index >= itemsCount) {
                    index = itemsCount - index
                }
                index %= itemsCount;
                if (index < 0) {
                    index += itemsCount
                }
                return index
            },
            _clean: function() {
                this.callBase();
                this._cleanIndicators();
                this._cleanNavButtons()
            },
            _dispose: function() {
                clearTimeout(this._slideshowTimer);
                this.callBase()
            },
            _updateSelection: function(addedSelection, removedSelection) {
                this._stopItemAnimations();
                this._renderNavButtonsVisibility();
                this._renderSelectedItem();
                this._relocateItems(addedSelection[0], removedSelection[0]);
                this._renderSelectedPageIndicator()
            },
            _relocateItems: function(newIndex, prevIndex, withoutAnimation) {
                if (void 0 === prevIndex) {
                    prevIndex = newIndex
                }
                var indexOffset = this._calculateIndexOffset(newIndex, prevIndex);
                this._renderContainerPosition(indexOffset, true, this.option("animationEnabled") && !withoutAnimation).done(function() {
                    this._setFocusOnSelect();
                    this._userInteraction = false;
                    this._setupSlideShow()
                })
            },
            _focusInHandler: function() {
                if (fx.isAnimating(this._$container) || this._userInteraction) {
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _focusOutHandler: function() {
                if (fx.isAnimating(this._$container) || this._userInteraction) {
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _selectFocusedItem: commonUtils.noop,
            _moveFocus: function() {
                this._stopItemAnimations();
                this.callBase.apply(this, arguments);
                var index = this.itemElements().index($(this.option("focusedElement")));
                this.goToItem(index, this.option("animationEnabled"))
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._reviseDimensions()
                }
            },
            _calculateIndexOffset: function(newIndex, lastIndex) {
                if (void 0 === lastIndex) {
                    lastIndex = newIndex
                }
                var indexOffset = lastIndex - newIndex;
                if (this.option("loop") && !this._needLongMove && this._goToGhostItem) {
                    if (this._isItemOnFirstPage(newIndex) && this._isItemOnLastPage(lastIndex)) {
                        indexOffset = -this._itemsPerPage()
                    } else {
                        if (this._isItemOnLastPage(newIndex) && this._isItemOnFirstPage(lastIndex)) {
                            indexOffset = this._itemsPerPage()
                        }
                    }
                    this._goToGhostItem = false
                }
                this._needLongMove = false;
                indexOffset -= lastIndex;
                return indexOffset
            },
            _isItemOnLastPage: function(itemIndex) {
                return itemIndex >= this._itemsCount() - this._itemsPerPage()
            },
            _isItemOnFirstPage: function(itemIndex) {
                return itemIndex <= this._itemsPerPage()
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                    case "initialItemWidth":
                        this.callBase.apply(this, arguments);
                        this._dimensionChanged();
                        break;
                    case "animationDuration":
                        this._renderNavButtonsVisibility();
                        break;
                    case "animationEnabled":
                        break;
                    case "loop":
                        this.$element().toggleClass(GALLERY_LOOP_CLASS, args.value);
                        this.option("loopItemFocus", args.value);
                        if (windowUtils.hasWindow()) {
                            this._cloneDuplicateItems();
                            this._renderItemPositions();
                            this._renderNavButtonsVisibility()
                        }
                        break;
                    case "showIndicator":
                        this._renderIndicator();
                        break;
                    case "showNavButtons":
                        this._renderNavButtons();
                        break;
                    case "slideshowDelay":
                        this._setupSlideShow();
                        break;
                    case "wrapAround":
                    case "stretchImages":
                        if (windowUtils.hasWindow()) {
                            this._renderItemSizes();
                            this._renderItemPositions();
                            this._renderItemVisibility()
                        }
                        break;
                    case "swipeEnabled":
                    case "indicatorEnabled":
                        this._renderUserInteraction();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            goToItem: function(itemIndex, animation) {
                var selectedIndex = this.option("selectedIndex");
                var itemsCount = this._itemsCount();
                if (void 0 !== animation) {
                    this._animationOverride = animation
                }
                itemIndex = this._fitIndex(itemIndex);
                this._deferredAnimate = new Deferred;
                if (itemIndex > itemsCount - 1 || itemIndex < 0 || selectedIndex === itemIndex) {
                    return this._deferredAnimate.resolveWith(this).promise()
                }
                this.option("selectedIndex", itemIndex);
                return this._deferredAnimate.promise()
            },
            prevItem: function(animation) {
                return this.goToItem(this.option("selectedIndex") - 1, animation)
            },
            nextItem: function(animation) {
                return this.goToItem(this.option("selectedIndex") + 1, animation)
            }
        });
        registerComponent("dxGallery", Gallery);
        module.exports = Gallery
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./html_editor/ui.html_editor */ 587)
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/ui.html_editor.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _empty_template = __webpack_require__( /*! ../../core/templates/empty_template */ 87);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _uiEventsEmitterGesture = __webpack_require__( /*! ../scroll_view/ui.events.emitter.gesture.scroll */ 229);
        var _uiEventsEmitterGesture2 = _interopRequireDefault(_uiEventsEmitterGesture);
        var _utils2 = __webpack_require__( /*! ../text_box/utils.scroll */ 330);
        var _quill_registrator = __webpack_require__( /*! ./quill_registrator */ 588);
        var _quill_registrator2 = _interopRequireDefault(_quill_registrator);
        __webpack_require__( /*! ./converters/delta */ 606);
        var _converterController = __webpack_require__( /*! ./converterController */ 242);
        var _converterController2 = _interopRequireDefault(_converterController);
        var _wordLists = __webpack_require__( /*! ./matchers/wordLists */ 607);
        var _wordLists2 = _interopRequireDefault(_wordLists);
        var _textDecoration = __webpack_require__( /*! ./matchers/textDecoration */ 608);
        var _textDecoration2 = _interopRequireDefault(_textDecoration);
        var _formDialog = __webpack_require__( /*! ./ui/formDialog */ 609);
        var _formDialog2 = _interopRequireDefault(_formDialog);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var HTML_EDITOR_CLASS = "dx-htmleditor";
        var QUILL_CONTAINER_CLASS = "dx-quill-container";
        var QUILL_CLIPBOARD_CLASS = "ql-clipboard";
        var HTML_EDITOR_SUBMIT_ELEMENT_CLASS = "dx-htmleditor-submit-element";
        var HTML_EDITOR_CONTENT_CLASS = "dx-htmleditor-content";
        var MARKDOWN_VALUE_TYPE = "markdown";
        var ANONYMOUS_TEMPLATE_NAME = "htmlContent";
        var ELEMENT_NODE = 1;
        var HtmlEditor = _editor2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    focusStateEnabled: true,
                    valueType: "html",
                    placeholder: "",
                    toolbar: null,
                    variables: null,
                    mediaResizing: null,
                    mentions: null,
                    customizeModules: null,
                    formDialogOptions: null
                })
            },
            _init: function() {
                this.callBase();
                this._cleanCallback = (0, _callbacks2.default)();
                this._contentInitializedCallback = (0, _callbacks2.default)()
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                this._templateManager.addDefaultTemplates(_defineProperty({}, ANONYMOUS_TEMPLATE_NAME, new _empty_template.EmptyTemplate));
                this.callBase()
            },
            _focusTarget: function() {
                return this._getContent()
            },
            _getContent: function() {
                return this.$element().find(".".concat(HTML_EDITOR_CONTENT_CLASS))
            },
            _focusInHandler: function(_ref) {
                var relatedTarget = _ref.relatedTarget;
                if (this._shouldSkipFocusEvent(relatedTarget)) {
                    return
                }
                this._toggleFocusClass(true, this.$element());
                this.callBase.apply(this, arguments)
            },
            _focusOutHandler: function(_ref2) {
                var relatedTarget = _ref2.relatedTarget;
                if (this._shouldSkipFocusEvent(relatedTarget)) {
                    return
                }
                this._toggleFocusClass(false, this.$element());
                this.callBase.apply(this, arguments)
            },
            _shouldSkipFocusEvent: function(relatedTarget) {
                return (0, _renderer2.default)(relatedTarget).hasClass(QUILL_CLIPBOARD_CLASS)
            },
            _initMarkup: function() {
                this._$htmlContainer = (0, _renderer2.default)("<div>").addClass(QUILL_CONTAINER_CLASS);
                this.$element().addClass(HTML_EDITOR_CLASS).wrapInner(this._$htmlContainer);
                var template = this._getTemplate(ANONYMOUS_TEMPLATE_NAME);
                var transclude = true;
                this._$templateResult = template && template.render({
                    container: (0, _dom.getPublicElement)(this._$htmlContainer),
                    noModel: true,
                    transclude: transclude
                });
                this._renderSubmitElement();
                this.callBase();
                this._updateContainerMarkup()
            },
            _renderSubmitElement: function() {
                this._$submitElement = (0, _renderer2.default)("<textarea>").addClass(HTML_EDITOR_SUBMIT_ELEMENT_CLASS).attr("hidden", true).appendTo(this.$element());
                this._setSubmitValue(this.option("value"))
            },
            _setSubmitValue: function(value) {
                this._getSubmitElement().val(value)
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _updateContainerMarkup: function() {
                var markup = this.option("value");
                if (this._isMarkdownValue()) {
                    this._prepareMarkdownConverter();
                    markup = this._markdownConverter.toHtml(markup)
                }
                if (markup) {
                    this._$htmlContainer.html(markup)
                }
            },
            _prepareMarkdownConverter: function() {
                var MarkdownConverter = _converterController2.default.getConverter("markdown");
                if (MarkdownConverter) {
                    this._markdownConverter = new MarkdownConverter
                } else {
                    throw _ui2.default.Error("E1051", "markdown")
                }
            },
            _render: function() {
                this._prepareConverters();
                this.callBase()
            },
            _prepareQuillRegistrator: function() {
                if (!this._quillRegistrator) {
                    this._quillRegistrator = new _quill_registrator2.default
                }
            },
            _getRegistrator: function() {
                this._prepareQuillRegistrator();
                return this._quillRegistrator
            },
            _prepareConverters: function() {
                if (!this._deltaConverter) {
                    var DeltaConverter = _converterController2.default.getConverter("delta");
                    if (DeltaConverter) {
                        this._deltaConverter = new DeltaConverter
                    }
                }
                if (this.option("valueType") === MARKDOWN_VALUE_TYPE && !this._markdownConverter) {
                    this._prepareMarkdownConverter()
                }
            },
            _renderContentImpl: function() {
                this._contentRenderedDeferred = new _deferred.Deferred;
                var renderContentPromise = this._contentRenderedDeferred.promise();
                this.callBase();
                this._renderHtmlEditor();
                this._renderFormDialog();
                return renderContentPromise
            },
            _renderHtmlEditor: function() {
                var _this = this;
                var customizeModules = this.option("customizeModules");
                var modulesConfig = this._getModulesConfig();
                if ((0, _type.isFunction)(customizeModules)) {
                    customizeModules(modulesConfig)
                }
                this._quillInstance = this._getRegistrator().createEditor(this._$htmlContainer[0], {
                    placeholder: this.option("placeholder"),
                    readOnly: this.option("readOnly") || this.option("disabled"),
                    modules: modulesConfig,
                    theme: "basic"
                });
                this._deltaConverter.setQuillInstance(this._quillInstance);
                this._textChangeHandlerWithContext = this._textChangeHandler.bind(this);
                this._quillInstance.on("text-change", this._textChangeHandlerWithContext);
                this._renderScrollHandler();
                if (this._hasTranscludedContent()) {
                    this._updateContentTask = (0, _common.executeAsync)(function() {
                        _this._applyTranscludedContent()
                    })
                } else {
                    this._finalizeContentRendering()
                }
            },
            _renderScrollHandler: function() {
                var $scrollContainer = this._getContent();
                var initScrollData = {
                    validate: function(e) {
                        if ((0, _utils.isDxMouseWheelEvent)(e)) {
                            if ((0, _utils2.allowScroll)($scrollContainer, -e.delta, e.shiftKey)) {
                                e._needSkipEvent = true;
                                return true
                            }
                            return false
                        }
                    }
                };
                _events_engine2.default.on($scrollContainer, (0, _utils.addNamespace)(_uiEventsEmitterGesture2.default.init, this.NAME), initScrollData, _common.noop)
            },
            _applyTranscludedContent: function() {
                var markup = this._deltaConverter.toHtml();
                var newDelta = this._quillInstance.clipboard.convert(markup);
                if (newDelta.ops.length) {
                    this._quillInstance.setContents(newDelta)
                } else {
                    this._finalizeContentRendering()
                }
            },
            _hasTranscludedContent: function() {
                return this._$templateResult && this._$templateResult.length
            },
            _getModulesConfig: function() {
                var quill = this._getRegistrator().getQuill();
                var wordListMatcher = (0, _wordLists2.default)(quill);
                var modulesConfig = (0, _extend.extend)({
                    toolbar: this._getModuleConfigByOption("toolbar"),
                    variables: this._getModuleConfigByOption("variables"),
                    dropImage: this._getBaseModuleConfig(),
                    resizing: this._getModuleConfigByOption("mediaResizing"),
                    mentions: this._getModuleConfigByOption("mentions"),
                    clipboard: {
                        matchVisual: false,
                        matchers: [
                            ["p.MsoListParagraphCxSpFirst", wordListMatcher],
                            ["p.MsoListParagraphCxSpMiddle", wordListMatcher],
                            ["p.MsoListParagraphCxSpLast", wordListMatcher],
                            [ELEMENT_NODE, (0, _textDecoration2.default)(quill)]
                        ]
                    }
                }, this._getCustomModules());
                return modulesConfig
            },
            _getModuleConfigByOption: function(userOptionName) {
                var optionValue = this.option(userOptionName);
                var config = {};
                if (!(0, _type.isDefined)(optionValue)) {
                    return
                }
                if (Array.isArray(optionValue)) {
                    config[userOptionName] = optionValue
                } else {
                    config = optionValue
                }
                return (0, _extend.extend)(this._getBaseModuleConfig(), config)
            },
            _getBaseModuleConfig: function() {
                return {
                    editorInstance: this
                }
            },
            _getCustomModules: function() {
                var _this2 = this;
                var modules = {};
                var moduleNames = this._getRegistrator().getRegisteredModuleNames();
                moduleNames.forEach(function(modulePath) {
                    modules[modulePath] = _this2._getBaseModuleConfig()
                });
                return modules
            },
            _textChangeHandler: function(newDelta, oldDelta, source) {
                var htmlMarkup = this._deltaConverter.toHtml();
                var value = this._isMarkdownValue() ? this._updateValueByType(MARKDOWN_VALUE_TYPE, htmlMarkup) : htmlMarkup;
                if (this.option("value") !== value) {
                    this._isEditorUpdating = true;
                    this.option("value", value)
                }
                this._finalizeContentRendering()
            },
            _finalizeContentRendering: function() {
                if (this._contentRenderedDeferred) {
                    this.clearHistory();
                    this._contentInitializedCallback.fire();
                    this._contentRenderedDeferred.resolve();
                    this._contentRenderedDeferred = void 0
                }
            },
            _updateValueByType: function(valueType, value) {
                var converter = this._markdownConverter;
                if (!(0, _type.isDefined)(converter)) {
                    return
                }
                var currentValue = value || this.option("value");
                return valueType === MARKDOWN_VALUE_TYPE ? converter.toMarkdown(currentValue) : converter.toHtml(currentValue)
            },
            _isMarkdownValue: function() {
                return this.option("valueType") === MARKDOWN_VALUE_TYPE
            },
            _resetEnabledState: function() {
                if (this._quillInstance) {
                    var isEnabled = !(this.option("readOnly") || this.option("disabled"));
                    this._quillInstance.enable(isEnabled)
                }
            },
            _renderFormDialog: function() {
                var userOptions = (0, _extend.extend)(true, {
                    width: "auto",
                    height: "auto",
                    closeOnOutsideClick: true
                }, this.option("formDialogOptions"));
                this._formDialog = new _formDialog2.default(this, userOptions)
            },
            _getQuillContainer: function() {
                return this._$htmlContainer
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        if (this._quillInstance) {
                            if (this._isEditorUpdating) {
                                this._isEditorUpdating = false
                            } else {
                                var updatedValue = this._isMarkdownValue() ? this._updateValueByType("HTML", args.value) : args.value;
                                this._updateHtmlContent(updatedValue)
                            }
                        } else {
                            this._$htmlContainer.html(args.value)
                        }
                        this._setSubmitValue(args.value);
                        this.callBase(args);
                        break;
                    case "placeholder":
                    case "variables":
                    case "toolbar":
                    case "mentions":
                    case "customizeModules":
                        this._invalidate();
                        break;
                    case "valueType":
                        this._prepareConverters();
                        var newValue = this._updateValueByType(args.value);
                        if ("html" === args.value && this._quillInstance) {
                            this._updateHtmlContent(newValue)
                        } else {
                            this.option("value", newValue)
                        }
                        break;
                    case "readOnly":
                    case "disabled":
                        this.callBase(args);
                        this._resetEnabledState();
                        break;
                    case "formDialogOptions":
                        this._renderFormDialog();
                        break;
                    case "mediaResizing":
                        if (!args.previousValue || !args.value) {
                            this._invalidate()
                        } else {
                            this._quillInstance.getModule("resizing").option(args.name, args.value)
                        }
                        break;
                    case "width":
                        this.callBase(args);
                        this._repaintToolbar();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _repaintToolbar: function() {
                var toolbar = this._quillInstance.getModule("toolbar");
                toolbar && toolbar.repaint()
            },
            _updateHtmlContent: function(newMarkup) {
                var newDelta = this._quillInstance.clipboard.convert(newMarkup);
                this._quillInstance.setContents(newDelta)
            },
            _clean: function() {
                if (this._quillInstance) {
                    _events_engine2.default.off(this._getContent(), ".".concat(this.NAME));
                    this._quillInstance.off("text-change", this._textChangeHandlerWithContext);
                    this._cleanCallback.fire()
                }
                this._abortUpdateContentTask();
                this._cleanCallback.empty();
                this._contentInitializedCallback.empty();
                this.callBase()
            },
            _abortUpdateContentTask: function() {
                if (this._updateContentTask) {
                    this._updateContentTask.abort();
                    this._updateContentTask = void 0
                }
            },
            _applyQuillMethod: function(methodName, args) {
                if (this._quillInstance) {
                    return this._quillInstance[methodName].apply(this._quillInstance, args)
                }
            },
            _applyQuillHistoryMethod: function(methodName) {
                if (this._quillInstance && this._quillInstance.history) {
                    this._quillInstance.history[methodName]()
                }
            },
            addCleanCallback: function(callback) {
                this._cleanCallback.add(callback)
            },
            addContentInitializedCallback: function(callback) {
                this._contentInitializedCallback.add(callback)
            },
            register: function(components) {
                this._getRegistrator().registerModules(components);
                if (this._quillInstance) {
                    this.repaint()
                }
            },
            get: function(modulePath) {
                return this._getRegistrator().getQuill().import(modulePath)
            },
            getQuillInstance: function() {
                return this._quillInstance
            },
            getSelection: function() {
                return this._applyQuillMethod("getSelection")
            },
            setSelection: function(index, length) {
                this._applyQuillMethod("setSelection", arguments)
            },
            format: function(formatName, formatValue) {
                this._applyQuillMethod("format", arguments)
            },
            formatText: function(index, length, formatName, formatValue) {
                this._applyQuillMethod("formatText", arguments)
            },
            formatLine: function(index, length, formatName, formatValue) {
                this._applyQuillMethod("formatLine", arguments)
            },
            getFormat: function(index, length) {
                return this._applyQuillMethod("getFormat", arguments)
            },
            removeFormat: function(index, length) {
                return this._applyQuillMethod("removeFormat", arguments)
            },
            clearHistory: function() {
                this._applyQuillHistoryMethod("clear")
            },
            undo: function() {
                this._applyQuillHistoryMethod("undo")
            },
            redo: function() {
                this._applyQuillHistoryMethod("redo")
            },
            getLength: function() {
                return this._applyQuillMethod("getLength")
            },
            "delete": function(index, length) {
                this._applyQuillMethod("deleteText", arguments)
            },
            insertText: function(index, text, formats) {
                this._applyQuillMethod("insertText", arguments)
            },
            insertEmbed: function(index, type, config) {
                this._applyQuillMethod("insertEmbed", arguments)
            },
            showFormDialog: function(formConfig) {
                return this._formDialog.show(formConfig)
            },
            formDialogOption: function(optionName, optionValue) {
                return this._formDialog.popupOption.apply(this._formDialog, arguments)
            },
            focus: function() {
                this.callBase();
                this._applyQuillMethod("focus")
            }
        });
        (0, _component_registrator2.default)("dxHtmlEditor", HtmlEditor);
        module.exports = HtmlEditor
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/quill_registrator.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill_importer = __webpack_require__( /*! ./quill_importer */ 331);
        var _base = __webpack_require__( /*! ./themes/base */ 589);
        var _base2 = _interopRequireDefault(_base);
        var _image = __webpack_require__( /*! ./formats/image */ 590);
        var _image2 = _interopRequireDefault(_image);
        var _link = __webpack_require__( /*! ./formats/link */ 591);
        var _link2 = _interopRequireDefault(_link);
        var _font = __webpack_require__( /*! ./formats/font */ 592);
        var _font2 = _interopRequireDefault(_font);
        var _size = __webpack_require__( /*! ./formats/size */ 593);
        var _size2 = _interopRequireDefault(_size);
        var _align = __webpack_require__( /*! ./formats/align */ 594);
        var _align2 = _interopRequireDefault(_align);
        var _toolbar = __webpack_require__( /*! ./modules/toolbar */ 595);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        var _dropImage = __webpack_require__( /*! ./modules/dropImage */ 600);
        var _dropImage2 = _interopRequireDefault(_dropImage);
        var _variables = __webpack_require__( /*! ./modules/variables */ 601);
        var _variables2 = _interopRequireDefault(_variables);
        var _resizing = __webpack_require__( /*! ./modules/resizing */ 603);
        var _resizing2 = _interopRequireDefault(_resizing);
        var _mentions = __webpack_require__( /*! ./modules/mentions */ 604);
        var _mentions2 = _interopRequireDefault(_mentions);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var QuillRegistrator = function() {
            function QuillRegistrator() {
                _classCallCheck(this, QuillRegistrator);
                if (QuillRegistrator.initialized) {
                    return
                }
                var quill = this.getQuill();
                var DirectionStyle = quill.import("attributors/style/direction");
                quill.register({
                    "formats/align": _align2.default,
                    "formats/direction": DirectionStyle,
                    "formats/font": _font2.default,
                    "formats/size": _size2.default,
                    "formats/extendedImage": _image2.default,
                    "formats/link": _link2.default,
                    "modules/toolbar": _toolbar2.default,
                    "modules/dropImage": _dropImage2.default,
                    "modules/variables": _variables2.default,
                    "modules/resizing": _resizing2.default,
                    "modules/mentions": _mentions2.default,
                    "themes/basic": _base2.default
                }, true);
                this._customModules = [];
                QuillRegistrator._initialized = true
            }
            _createClass(QuillRegistrator, [{
                key: "createEditor",
                value: function(container, config) {
                    var quill = this.getQuill();
                    return new quill(container, config)
                }
            }, {
                key: "registerModules",
                value: function(modulesConfig) {
                    var isModule = RegExp("modules/*");
                    var quill = this.getQuill();
                    var isRegisteredModule = function(modulePath) {
                        return !!quill.imports[modulePath]
                    };
                    for (var modulePath in modulesConfig) {
                        if (isModule.test(modulePath) && !isRegisteredModule(modulePath)) {
                            this._customModules.push(modulePath.slice(8))
                        }
                    }
                    quill.register(modulesConfig, true)
                }
            }, {
                key: "getRegisteredModuleNames",
                value: function() {
                    return this._customModules
                }
            }, {
                key: "getQuill",
                value: function() {
                    return (0, _quill_importer.getQuill)()
                }
            }]);
            return QuillRegistrator
        }();
        exports.default = QuillRegistrator
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/themes/base.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var BaseTheme;
        if (_quill2.default) {
            var Theme = _quill2.default.import("core/theme");
            BaseTheme = function(_Theme) {
                _inherits(BaseTheme, _Theme);
                var _super = _createSuper(BaseTheme);

                function BaseTheme(quill, options) {
                    var _this;
                    _classCallCheck(this, BaseTheme);
                    _this = _super.call(this, quill, options);
                    _this.quill.root.classList.add("dx-htmleditor-content");
                    return _this
                }
                return BaseTheme
            }(Theme)
        } else {
            BaseTheme = {}
        }
        exports.default = BaseTheme
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/image.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ExtImage = {};
        if (_quill2.default) {
            var Image = _quill2.default.import("formats/image");
            ExtImage = function(_Image) {
                _inherits(ExtImage, _Image);
                var _super = _createSuper(ExtImage);

                function ExtImage() {
                    _classCallCheck(this, ExtImage);
                    return _super.apply(this, arguments)
                }
                _createClass(ExtImage, [{
                    key: "formats",
                    value: function formats() {
                        var formats = _get(_getPrototypeOf(ExtImage.prototype), "formats", this).call(this);
                        var floatValue = this.domNode.style.float;
                        if (floatValue) {
                            formats.float = floatValue
                        }
                        return formats
                    }
                }, {
                    key: "format",
                    value: function(name, value) {
                        if ("float" === name) {
                            this.domNode.style[name] = value
                        } else {
                            _get(_getPrototypeOf(ExtImage.prototype), "format", this).call(this, name, value)
                        }
                    }
                }], [{
                    key: "create",
                    value: function(data) {
                        var SRC = data && data.src || data;
                        var node = _get(_getPrototypeOf(ExtImage), "create", this).call(this, SRC);
                        if ((0, _type.isObject)(data)) {
                            var setAttribute = function(attr, value) {
                                data[attr] && node.setAttribute(attr, value)
                            };
                            setAttribute("alt", data.alt);
                            setAttribute("width", data.width);
                            setAttribute("height", data.height)
                        }
                        return node
                    }
                }, {
                    key: "formats",
                    value: function formats(domNode) {
                        var formats = _get(_getPrototypeOf(ExtImage), "formats", this).call(this, domNode);
                        formats.imageSrc = domNode.getAttribute("src");
                        return formats
                    }
                }, {
                    key: "value",
                    value: function(domNode) {
                        return {
                            src: domNode.getAttribute("src"),
                            width: domNode.getAttribute("width"),
                            height: domNode.getAttribute("height"),
                            alt: domNode.getAttribute("alt")
                        }
                    }
                }]);
                return ExtImage
            }(Image);
            ExtImage.blotName = "extendedImage"
        }
        exports.default = ExtImage
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/link.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ExtLink = {};
        if (_quill2.default) {
            var Link = _quill2.default.import("formats/link");
            ExtLink = function(_Link) {
                _inherits(ExtLink, _Link);
                var _super = _createSuper(ExtLink);

                function ExtLink() {
                    _classCallCheck(this, ExtLink);
                    return _super.apply(this, arguments)
                }
                _createClass(ExtLink, [{
                    key: "formats",
                    value: function formats() {
                        var formats = _get(_getPrototypeOf(ExtLink.prototype), "formats", this).call(this);
                        var _ExtLink$formats = ExtLink.formats(this.domNode),
                            href = _ExtLink$formats.href,
                            target = _ExtLink$formats.target;
                        formats.link = href;
                        formats.target = target;
                        return formats
                    }
                }, {
                    key: "format",
                    value: function(name, value) {
                        if ("link" === name && (0, _type.isObject)(value)) {
                            if (value.text) {
                                this.domNode.innerText = value.text
                            }
                            if (value.target) {
                                this.domNode.setAttribute("target", "_blank")
                            } else {
                                this.domNode.removeAttribute("target")
                            }
                            this.domNode.setAttribute("href", value.href)
                        } else {
                            _get(_getPrototypeOf(ExtLink.prototype), "format", this).call(this, name, value)
                        }
                    }
                }], [{
                    key: "create",
                    value: function(data) {
                        var HREF = data && data.href || data;
                        var node = _get(_getPrototypeOf(ExtLink), "create", this).call(this, HREF);
                        if ((0, _type.isObject)(data)) {
                            if (data.text) {
                                node.innerText = data.text
                            }
                            if (!data.target) {
                                node.removeAttribute("target")
                            }
                        }
                        return node
                    }
                }, {
                    key: "formats",
                    value: function(domNode) {
                        return {
                            href: domNode.getAttribute("href"),
                            target: domNode.getAttribute("target")
                        }
                    }
                }, {
                    key: "value",
                    value: function(domNode) {
                        return {
                            href: domNode.getAttribute("href"),
                            text: domNode.innerText,
                            target: !!domNode.getAttribute("target")
                        }
                    }
                }]);
                return ExtLink
            }(Link)
        }
        exports.default = ExtLink
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/font.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FontStyle = {};
        if (_quill2.default) {
            FontStyle = _quill2.default.import("attributors/style/font");
            FontStyle.whitelist = null
        }
        exports.default = FontStyle
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/size.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SizeStyle = {};
        if (_quill2.default) {
            SizeStyle = _quill2.default.import("attributors/style/size");
            SizeStyle.whitelist = null
        }
        exports.default = SizeStyle
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/align.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var AlignStyle = {};
        if (_quill2.default) {
            AlignStyle = _quill2.default.import("attributors/style/align");
            AlignStyle.whitelist.push("left")
        }
        exports.default = AlignStyle
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/toolbar.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _toolbar = __webpack_require__( /*! ../../toolbar */ 145);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        __webpack_require__( /*! ../../select_box */ 97);
        __webpack_require__( /*! ../../color_box/color_view */ 322);
        var _widget_collector = __webpack_require__( /*! ./widget_collector */ 599);
        var _widget_collector2 = _interopRequireDefault(_widget_collector);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../../localization/message */ 10);
        var _inflector = __webpack_require__( /*! ../../../core/utils/inflector */ 34);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../../events/utils */ 8);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ToolbarModule = {};
        if (_quill2.default) {
            var BaseModule = _quill2.default.import("core/module");
            var TOOLBAR_WRAPPER_CLASS = "dx-htmleditor-toolbar-wrapper";
            var TOOLBAR_CLASS = "dx-htmleditor-toolbar";
            var TOOLBAR_FORMAT_WIDGET_CLASS = "dx-htmleditor-toolbar-format";
            var TOOLBAR_SEPARATOR_CLASS = "dx-htmleditor-toolbar-separator";
            var TOOLBAR_MENU_SEPARATOR_CLASS = "dx-htmleditor-toolbar-menu-separator";
            var ACTIVE_FORMAT_CLASS = "dx-format-active";
            var BOX_ITEM_CONTENT_CLASS = "dx-box-item-content";
            var ICON_CLASS = "dx-icon";
            var SELECTION_CHANGE_EVENT = "selection-change";
            var DIALOG_COLOR_CAPTION = "dxHtmlEditor-dialogColorCaption";
            var DIALOG_BACKGROUND_CAPTION = "dxHtmlEditor-dialogBackgroundCaption";
            var DIALOG_LINK_CAPTION = "dxHtmlEditor-dialogLinkCaption";
            var DIALOG_LINK_FIELD_URL = "dxHtmlEditor-dialogLinkUrlField";
            var DIALOG_LINK_FIELD_TEXT = "dxHtmlEditor-dialogLinkTextField";
            var DIALOG_LINK_FIELD_TARGET = "dxHtmlEditor-dialogLinkTargetField";
            var DIALOG_LINK_FIELD_TARGET_CLASS = "dx-formdialog-field-target";
            var DIALOG_IMAGE_CAPTION = "dxHtmlEditor-dialogImageCaption";
            var DIALOG_IMAGE_FIELD_URL = "dxHtmlEditor-dialogImageUrlField";
            var DIALOG_IMAGE_FIELD_ALT = "dxHtmlEditor-dialogImageAltField";
            var DIALOG_IMAGE_FIELD_WIDTH = "dxHtmlEditor-dialogImageWidthField";
            var DIALOG_IMAGE_FIELD_HEIGHT = "dxHtmlEditor-dialogImageHeightField";
            var USER_ACTION = "user";
            var SILENT_ACTION = "silent";
            var HEADING_TEXT = (0, _message.format)("dxHtmlEditor-heading");
            var NORMAL_TEXT = (0, _message.format)("dxHtmlEditor-normalText");
            ToolbarModule = function(_BaseModule) {
                _inherits(ToolbarModule, _BaseModule);
                var _super = _createSuper(ToolbarModule);

                function ToolbarModule(quill, options) {
                    var _this;
                    _classCallCheck(this, ToolbarModule);
                    _this = _super.call(this, quill, options);
                    _this._editorInstance = options.editorInstance;
                    _this._toolbarWidgets = new _widget_collector2.default;
                    _this._formatHandlers = _this._getFormatHandlers();
                    if ((0, _type.isDefined)(options.items)) {
                        _this._addCallbacks();
                        _this._renderToolbar();
                        _this.quill.on("editor-change", function(eventName) {
                            var isSelectionChanged = eventName === SELECTION_CHANGE_EVENT;
                            _this._updateToolbar(isSelectionChanged)
                        })
                    }
                    return _this
                }
                _createClass(ToolbarModule, [{
                    key: "_addCallbacks",
                    value: function() {
                        this._editorInstance.addCleanCallback(this.clean.bind(this));
                        this._editorInstance.addContentInitializedCallback(this.updateHistoryWidgets.bind(this))
                    }
                }, {
                    key: "_updateToolbar",
                    value: function(isSelectionChanged) {
                        this.updateFormatWidgets(isSelectionChanged);
                        this.updateHistoryWidgets()
                    }
                }, {
                    key: "_getDefaultClickHandler",
                    value: function(formatName) {
                        var _this2 = this;
                        return function(e) {
                            var formats = _this2.quill.getFormat();
                            var value = formats[formatName];
                            var newValue = !((0, _type.isBoolean)(value) ? value : (0, _type.isDefined)(value));
                            _this2.quill.format(formatName, newValue, USER_ACTION);
                            _this2._updateFormatWidget(formatName, newValue, formats)
                        }
                    }
                }, {
                    key: "_updateFormatWidget",
                    value: function(formatName, isApplied, formats) {
                        var widget = this._toolbarWidgets.getByName(formatName);
                        if (!widget) {
                            return
                        }
                        if (isApplied) {
                            this._markActiveFormatWidget(formatName, widget, formats)
                        } else {
                            this._resetFormatWidget(formatName, widget);
                            if (Object.prototype.hasOwnProperty.call(formatName)) {
                                delete formats[formatName]
                            }
                        }
                        this._toggleClearFormatting(isApplied || !(0, _type.isEmptyObject)(formats))
                    }
                }, {
                    key: "_getFormatHandlers",
                    value: function() {
                        var _this3 = this;
                        return {
                            clear: function(e) {
                                var range = _this3.quill.getSelection();
                                if (range) {
                                    _this3.quill.removeFormat(range);
                                    _this3.updateFormatWidgets()
                                }
                            },
                            link: this._prepareLinkHandler(),
                            image: this._prepareImageHandler(),
                            color: this._prepareColorClickHandler("color"),
                            background: this._prepareColorClickHandler("background"),
                            orderedList: this._prepareShortcutHandler("list", "ordered"),
                            bulletList: this._prepareShortcutHandler("list", "bullet"),
                            alignLeft: this._prepareShortcutHandler("align", "left"),
                            alignCenter: this._prepareShortcutHandler("align", "center"),
                            alignRight: this._prepareShortcutHandler("align", "right"),
                            alignJustify: this._prepareShortcutHandler("align", "justify"),
                            codeBlock: this._getDefaultClickHandler("code-block"),
                            undo: function() {
                                _this3.quill.history.undo()
                            },
                            redo: function() {
                                _this3.quill.history.redo()
                            },
                            increaseIndent: function() {
                                _this3.quill.format("indent", "+1", USER_ACTION)
                            },
                            decreaseIndent: function() {
                                _this3.quill.format("indent", "-1", USER_ACTION)
                            },
                            superscript: this._prepareShortcutHandler("script", "super"),
                            subscript: this._prepareShortcutHandler("script", "sub")
                        }
                    }
                }, {
                    key: "_prepareShortcutHandler",
                    value: function(formatName, shortcutValue) {
                        var _this4 = this;
                        return function() {
                            var formats = _this4.quill.getFormat();
                            var value = formats[formatName] === shortcutValue ? false : shortcutValue;
                            _this4.quill.format(formatName, value, USER_ACTION);
                            _this4.updateFormatWidgets(true)
                        }
                    }
                }, {
                    key: "_prepareLinkHandler",
                    value: function() {
                        var _this5 = this;
                        return function() {
                            _this5.quill.focus();
                            var selection = _this5.quill.getSelection();
                            var hasEmbedContent = _this5._hasEmbedContent(selection);
                            var formats = selection ? _this5.quill.getFormat() : {};
                            var formData = {
                                href: formats.link || "",
                                text: selection && !hasEmbedContent ? _this5.quill.getText(selection) : "",
                                target: Object.prototype.hasOwnProperty.call(formats, "target") ? !!formats.target : true
                            };
                            _this5._editorInstance.formDialogOption("title", (0, _message.format)(DIALOG_LINK_CAPTION));
                            var promise = _this5._editorInstance.showFormDialog({
                                formData: formData,
                                items: _this5._getLinkFormItems(selection)
                            });
                            promise.done(function(formData) {
                                if (selection && !hasEmbedContent) {
                                    var text = formData.text || formData.href;
                                    var index = selection.index,
                                        length = selection.length;
                                    formData.text = void 0;
                                    length && _this5.quill.deleteText(index, length, SILENT_ACTION);
                                    _this5.quill.insertText(index, text, "link", formData, USER_ACTION);
                                    _this5.quill.setSelection(index + text.length, 0, USER_ACTION)
                                } else {
                                    formData.text = !selection && !formData.text ? formData.href : formData.text;
                                    _this5.quill.format("link", formData, USER_ACTION)
                                }
                            });
                            promise.fail(function() {
                                _this5.quill.focus()
                            })
                        }
                    }
                }, {
                    key: "_hasEmbedContent",
                    value: function(selection) {
                        return !!selection && this.quill.getText(selection).trim().length < selection.length
                    }
                }, {
                    key: "_getLinkFormItems",
                    value: function(selection) {
                        return [{
                            dataField: "href",
                            label: {
                                text: (0, _message.format)(DIALOG_LINK_FIELD_URL)
                            }
                        }, {
                            dataField: "text",
                            label: {
                                text: (0, _message.format)(DIALOG_LINK_FIELD_TEXT)
                            },
                            visible: !this._hasEmbedContent(selection)
                        }, {
                            dataField: "target",
                            editorType: "dxCheckBox",
                            editorOptions: {
                                text: (0, _message.format)(DIALOG_LINK_FIELD_TARGET)
                            },
                            cssClass: DIALOG_LINK_FIELD_TARGET_CLASS,
                            label: {
                                visible: false
                            }
                        }]
                    }
                }, {
                    key: "_prepareImageHandler",
                    value: function() {
                        var _this6 = this;
                        return function() {
                            var formData = _this6.quill.getFormat();
                            var isUpdateDialog = Object.prototype.hasOwnProperty.call(formData, "imageSrc");
                            var defaultIndex = _this6._defaultPasteIndex;
                            if (isUpdateDialog) {
                                var _this6$quill$getForma = _this6.quill.getFormat(defaultIndex - 1, 1),
                                    imageSrc = _this6$quill$getForma.imageSrc;
                                formData.src = formData.imageSrc;
                                delete formData.imageSrc;
                                if (!imageSrc || 0 === defaultIndex) {
                                    _this6.quill.setSelection(defaultIndex + 1, 0, SILENT_ACTION)
                                }
                            }
                            var formatIndex = _this6._embedFormatIndex;
                            _this6._editorInstance.formDialogOption("title", (0, _message.format)(DIALOG_IMAGE_CAPTION));
                            var promise = _this6._editorInstance.showFormDialog({
                                formData: formData,
                                items: _this6._imageFormItems
                            });
                            promise.done(function(formData) {
                                var index = defaultIndex;
                                if (isUpdateDialog) {
                                    index = formatIndex;
                                    _this6.quill.deleteText(index, 1, SILENT_ACTION)
                                }
                                _this6.quill.insertEmbed(index, "extendedImage", formData, USER_ACTION);
                                _this6.quill.setSelection(index + 1, 0, USER_ACTION)
                            }).always(function() {
                                _this6.quill.focus()
                            })
                        }
                    }
                }, {
                    key: "_renderToolbar",
                    value: function() {
                        var _this7 = this;
                        var container = this.options.container || this._getContainer();
                        this._$toolbar = (0, _renderer2.default)("<div>").addClass(TOOLBAR_CLASS).appendTo(container);
                        this._$toolbarContainer = (0, _renderer2.default)(container).addClass(TOOLBAR_WRAPPER_CLASS);
                        _events_engine2.default.on(this._$toolbarContainer, (0, _utils.addNamespace)("mousedown", this._editorInstance.NAME), function(e) {
                            e.preventDefault()
                        });
                        this.toolbarInstance = this._editorInstance._createComponent(this._$toolbar, _toolbar2.default, this.toolbarConfig);
                        this._editorInstance.on("optionChanged", function(_ref) {
                            var name = _ref.name;
                            if ("readOnly" === name || "disabled" === name) {
                                _this7.toolbarInstance.option("disabled", _this7.isInteractionDisabled)
                            }
                        })
                    }
                }, {
                    key: "isMultilineMode",
                    value: function() {
                        var _this$options$multili;
                        return null !== (_this$options$multili = this.options.multiline) && void 0 !== _this$options$multili ? _this$options$multili : true
                    }
                }, {
                    key: "clean",
                    value: function() {
                        this._toolbarWidgets.clear();
                        if (this._$toolbarContainer) {
                            this._$toolbarContainer.empty().removeClass(TOOLBAR_WRAPPER_CLASS)
                        }
                    }
                }, {
                    key: "repaint",
                    value: function() {
                        this.toolbarInstance && this.toolbarInstance.repaint()
                    }
                }, {
                    key: "_getContainer",
                    value: function() {
                        var $container = (0, _renderer2.default)("<div>");
                        this._editorInstance.$element().prepend($container);
                        return $container
                    }
                }, {
                    key: "_prepareToolbarItems",
                    value: function() {
                        var _this8 = this;
                        var resultItems = [];
                        (0, _iterator.each)(this.options.items, function(index, item) {
                            var newItem;
                            if ((0, _type.isObject)(item)) {
                                newItem = _this8._handleObjectItem(item)
                            } else {
                                if ((0, _type.isString)(item)) {
                                    var buttonItemConfig = _this8._prepareButtonItemConfig(item);
                                    newItem = _this8._getToolbarItem(buttonItemConfig)
                                }
                            }
                            if (newItem) {
                                resultItems.push(newItem)
                            }
                        });
                        return resultItems
                    }
                }, {
                    key: "_handleObjectItem",
                    value: function(item) {
                        if (item.formatName && item.formatValues && this._isAcceptableItem(item.widget, "dxSelectBox")) {
                            var selectItemConfig = this._prepareSelectItemConfig(item);
                            return this._getToolbarItem(selectItemConfig)
                        } else {
                            if (item.formatName && this._isAcceptableItem(item.widget, "dxButton")) {
                                var defaultButtonItemConfig = this._prepareButtonItemConfig(item.formatName);
                                var buttonItemConfig = (0, _extend.extend)(true, defaultButtonItemConfig, item);
                                return this._getToolbarItem(buttonItemConfig)
                            } else {
                                return this._getToolbarItem(item)
                            }
                        }
                    }
                }, {
                    key: "_isAcceptableItem",
                    value: function(widget, acceptableWidgetName) {
                        return !widget || widget === acceptableWidgetName
                    }
                }, {
                    key: "_prepareButtonItemConfig",
                    value: function(formatName) {
                        var iconName = "clear" === formatName ? "clearformat" : formatName;
                        var buttonText = (0, _inflector.titleize)(formatName);
                        return {
                            widget: "dxButton",
                            formatName: formatName,
                            options: {
                                hint: buttonText,
                                text: buttonText,
                                icon: iconName.toLowerCase(),
                                onClick: this._formatHandlers[formatName] || this._getDefaultClickHandler(formatName),
                                stylingMode: "text"
                            },
                            showText: "inMenu"
                        }
                    }
                }, {
                    key: "_prepareSelectItemConfig",
                    value: function(item) {
                        var _this9 = this;
                        return (0, _extend.extend)(true, {
                            widget: "dxSelectBox",
                            formatName: item.formatName,
                            options: {
                                stylingMode: "filled",
                                dataSource: item.formatValues,
                                placeholder: (0, _inflector.titleize)(item.formatName),
                                onValueChanged: function(e) {
                                    if (!_this9._isReset) {
                                        _this9.quill.format(item.formatName, e.value, USER_ACTION);
                                        _this9._setValueSilent(e.component, e.value)
                                    }
                                }
                            }
                        }, item)
                    }
                }, {
                    key: "_prepareColorClickHandler",
                    value: function(formatName) {
                        var _this10 = this;
                        return function() {
                            var formData = _this10.quill.getFormat();
                            var caption = "color" === formatName ? DIALOG_COLOR_CAPTION : DIALOG_BACKGROUND_CAPTION;
                            _this10._editorInstance.formDialogOption("title", (0, _message.format)(caption));
                            var promise = _this10._editorInstance.showFormDialog({
                                formData: formData,
                                items: [{
                                    dataField: formatName,
                                    editorType: "dxColorView",
                                    editorOptions: {
                                        onContentReady: function(e) {
                                            (0, _renderer2.default)(e.element).closest(".".concat(BOX_ITEM_CONTENT_CLASS)).css("flexBasis", "auto")
                                        },
                                        focusStateEnabled: false
                                    },
                                    label: {
                                        visible: false
                                    }
                                }]
                            });
                            promise.done(function(formData) {
                                _this10.quill.format(formatName, formData[formatName], USER_ACTION)
                            });
                            promise.fail(function() {
                                _this10.quill.focus()
                            })
                        }
                    }
                }, {
                    key: "_getToolbarItem",
                    value: function(item) {
                        var _this11 = this;
                        var baseItem = {
                            options: {
                                onInitialized: function(e) {
                                    if (item.formatName) {
                                        e.component.$element().addClass(TOOLBAR_FORMAT_WIDGET_CLASS);
                                        e.component.$element().toggleClass("dx-".concat(item.formatName.toLowerCase(), "-format"), !!item.formatName);
                                        _this11._toolbarWidgets.add(item.formatName, e.component)
                                    }
                                }
                            }
                        };
                        var multilineItem = this.isMultilineMode() ? {
                            location: "before",
                            locateInMenu: "never"
                        } : {};
                        return (0, _extend.extend)(true, {
                            location: "before",
                            locateInMenu: "auto"
                        }, this._getDefaultConfig(item.formatName), item, baseItem, multilineItem)
                    }
                }, {
                    key: "_getDefaultItemsConfig",
                    value: function() {
                        return {
                            header: {
                                options: {
                                    displayExpr: function(item) {
                                        var isHeaderValue = (0, _type.isDefined)(item) && false !== item;
                                        return isHeaderValue ? "".concat(HEADING_TEXT, " ").concat(item) : NORMAL_TEXT
                                    }
                                }
                            },
                            clear: {
                                options: {
                                    disabled: true
                                }
                            },
                            undo: {
                                options: {
                                    disabled: true
                                }
                            },
                            redo: {
                                options: {
                                    disabled: true
                                }
                            },
                            separator: {
                                template: function(data, index, element) {
                                    (0, _renderer2.default)(element).addClass(TOOLBAR_SEPARATOR_CLASS)
                                },
                                menuItemTemplate: function(data, index, element) {
                                    (0, _renderer2.default)(element).addClass(TOOLBAR_MENU_SEPARATOR_CLASS)
                                }
                            }
                        }
                    }
                }, {
                    key: "_getDefaultConfig",
                    value: function(formatName) {
                        return this._getDefaultItemsConfig()[formatName]
                    }
                }, {
                    key: "updateHistoryWidgets",
                    value: function() {
                        var historyModule = this.quill.history;
                        if (!historyModule) {
                            return
                        }
                        var undoOps = historyModule.stack.undo;
                        var redoOps = historyModule.stack.redo;
                        this._updateHistoryWidget(this._toolbarWidgets.getByName("undo"), undoOps);
                        this._updateHistoryWidget(this._toolbarWidgets.getByName("redo"), redoOps)
                    }
                }, {
                    key: "_updateHistoryWidget",
                    value: function(widget, operations) {
                        if (!widget) {
                            return
                        }
                        widget.option("disabled", !operations.length)
                    }
                }, {
                    key: "updateFormatWidgets",
                    value: function(isResetRequired) {
                        var selection = this.quill.getSelection();
                        if (!selection) {
                            return
                        }
                        var formats = this.quill.getFormat(selection);
                        var hasFormats = !(0, _type.isEmptyObject)(formats);
                        if (!hasFormats || isResetRequired) {
                            this._resetFormatWidgets()
                        }
                        for (var formatName in formats) {
                            var widgetName = this._getFormatWidgetName(formatName, formats);
                            var formatWidget = this._toolbarWidgets.getByName(widgetName) || this._toolbarWidgets.getByName(formatName);
                            if (!formatWidget) {
                                continue
                            }
                            this._markActiveFormatWidget(formatName, formatWidget, formats)
                        }
                        this._toggleClearFormatting(hasFormats)
                    }
                }, {
                    key: "_markActiveFormatWidget",
                    value: function(name, widget, formats) {
                        if (this._isColorFormat(name)) {
                            this._updateColorWidget(name, formats[name])
                        }
                        if ("value" in widget.option()) {
                            this._setValueSilent(widget, formats[name])
                        } else {
                            widget.$element().addClass(ACTIVE_FORMAT_CLASS)
                        }
                    }
                }, {
                    key: "_toggleClearFormatting",
                    value: function(hasFormats) {
                        var clearWidget = this._toolbarWidgets.getByName("clear");
                        if (clearWidget) {
                            clearWidget.option("disabled", !hasFormats)
                        }
                    }
                }, {
                    key: "_isColorFormat",
                    value: function(formatName) {
                        return "color" === formatName || "background" === formatName
                    }
                }, {
                    key: "_updateColorWidget",
                    value: function(formatName, color) {
                        var formatWidget = this._toolbarWidgets.getByName(formatName);
                        if (!formatWidget) {
                            return
                        }
                        formatWidget.$element().find(".".concat(ICON_CLASS)).css("borderBottomColor", color || "transparent")
                    }
                }, {
                    key: "_getFormatWidgetName",
                    value: function(formatName, formats) {
                        var widgetName;
                        switch (formatName) {
                            case "align":
                                widgetName = formatName + (0, _inflector.titleize)(formats[formatName]);
                                break;
                            case "list":
                                widgetName = formats[formatName] + (0, _inflector.titleize)(formatName);
                                break;
                            case "code-block":
                                widgetName = "codeBlock";
                                break;
                            case "script":
                                widgetName = formats[formatName] + formatName;
                                break;
                            case "imageSrc":
                                widgetName = "image";
                                break;
                            default:
                                widgetName = formatName
                        }
                        return widgetName
                    }
                }, {
                    key: "_setValueSilent",
                    value: function(widget, value) {
                        this._isReset = true;
                        widget.option("value", value);
                        this._isReset = false
                    }
                }, {
                    key: "_resetFormatWidgets",
                    value: function() {
                        var _this12 = this;
                        this._toolbarWidgets.each(function(name, widget) {
                            _this12._resetFormatWidget(name, widget)
                        })
                    }
                }, {
                    key: "_resetFormatWidget",
                    value: function(name, widget) {
                        widget.$element().removeClass(ACTIVE_FORMAT_CLASS);
                        if (this._isColorFormat(name)) {
                            this._updateColorWidget(name)
                        }
                        if ("clear" === name) {
                            widget.option("disabled", true)
                        }
                        if ("dxSelectBox" === widget.NAME) {
                            this._setValueSilent(widget, null)
                        }
                    }
                }, {
                    key: "addClickHandler",
                    value: function(formatName, handler) {
                        this._formatHandlers[formatName] = handler;
                        var formatWidget = this._toolbarWidgets.getByName(formatName);
                        if (formatWidget && "dxButton" === formatWidget.NAME) {
                            formatWidget.option("onClick", handler)
                        }
                    }
                }, {
                    key: "_embedFormatIndex",
                    get: function() {
                        var selection = this.quill.getSelection();
                        if (selection) {
                            if (selection.length) {
                                return selection.index
                            } else {
                                return selection.index - 1
                            }
                        } else {
                            return this.quill.getLength()
                        }
                    }
                }, {
                    key: "_defaultPasteIndex",
                    get: function() {
                        var selection = this.quill.getSelection();
                        return selection && selection.index || this.quill.getLength()
                    }
                }, {
                    key: "_imageFormItems",
                    get: function() {
                        return [{
                            dataField: "src",
                            label: {
                                text: (0, _message.format)(DIALOG_IMAGE_FIELD_URL)
                            }
                        }, {
                            dataField: "width",
                            label: {
                                text: (0, _message.format)(DIALOG_IMAGE_FIELD_WIDTH)
                            }
                        }, {
                            dataField: "height",
                            label: {
                                text: (0, _message.format)(DIALOG_IMAGE_FIELD_HEIGHT)
                            }
                        }, {
                            dataField: "alt",
                            label: {
                                text: (0, _message.format)(DIALOG_IMAGE_FIELD_ALT)
                            }
                        }]
                    }
                }, {
                    key: "toolbarConfig",
                    get: function() {
                        return {
                            dataSource: this._prepareToolbarItems(),
                            disabled: this.isInteractionDisabled,
                            menuContainer: this._$toolbarContainer,
                            multiline: this.isMultilineMode()
                        }
                    }
                }, {
                    key: "isInteractionDisabled",
                    get: function() {
                        return this._editorInstance.option("readOnly") || this._editorInstance.option("disabled")
                    }
                }]);
                return ToolbarModule
            }(BaseModule)
        }
        exports.default = ToolbarModule
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.strategy.action_sheet.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ToolbarStrategy = __webpack_require__( /*! ./ui.toolbar.strategy */ 332);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var ActionSheet = __webpack_require__( /*! ../action_sheet */ 224);
        var ActionSheetStrategy = ToolbarStrategy.inherit({
            NAME: "actionSheet",
            _getMenuItemTemplate: function() {
                return this._toolbar._getTemplate("actionSheetItem")
            },
            render: function() {
                if (!this._hasVisibleMenuItems()) {
                    return
                }
                this.callBase()
            },
            _menuWidgetClass: function() {
                return ActionSheet
            },
            _menuContainer: function() {
                return this._toolbar.$element()
            },
            _widgetOptions: function() {
                return extend({}, this.callBase(), {
                    target: this._$button,
                    showTitle: false
                })
            },
            _menuButtonOptions: function() {
                return extend({}, this.callBase(), {
                    icon: "overflow"
                })
            },
            _toggleMenu: function() {
                this.callBase.apply(this, arguments);
                this._menu.toggle(this._menuShown);
                this._menuShown = false
            }
        });
        module.exports = ActionSheetStrategy
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.strategy.drop_down_menu.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var ToolbarStrategy = __webpack_require__( /*! ./ui.toolbar.strategy */ 332);
        var ToolbarMenu = __webpack_require__( /*! ./ui.toolbar.menu */ 598);
        var DropDownMenu = __webpack_require__( /*! ../drop_down_menu */ 201);
        var MENU_INVISIBLE_CLASS = "dx-state-invisible";
        var DropDownMenuStrategy = ToolbarStrategy.inherit({
            NAME: "dropDownMenu",
            render: function() {
                if (!this._hasVisibleMenuItems()) {
                    return
                }
                this._renderMenuButtonContainer();
                this._renderWidget()
            },
            renderMenuItems: function() {
                if (!this._menu) {
                    this.render()
                }
                this.callBase();
                if (this._menu && !this._menu.option("items").length) {
                    this._menu.close()
                }
            },
            _menuWidgetClass: function() {
                return DropDownMenu
            },
            _widgetOptions: function() {
                var that = this;
                return extend(this.callBase(), {
                    deferRendering: true,
                    container: that._toolbar.option("menuContainer"),
                    menuWidget: ToolbarMenu,
                    onOptionChanged: function(e) {
                        if ("items" === e.name) {
                            that._updateMenuVisibility(e.value)
                        }
                    },
                    popupPosition: {
                        at: "bottom right",
                        my: "top right"
                    }
                })
            },
            _updateMenuVisibility: function(menuItems) {
                var items = menuItems || this._getMenuItems();
                var isMenuVisible = items.length && this._hasVisibleMenuItems(items);
                this._toggleMenuVisibility(isMenuVisible)
            },
            _toggleMenuVisibility: function(value) {
                if (!this._menuContainer()) {
                    return
                }
                this._menuContainer().toggleClass(MENU_INVISIBLE_CLASS, !value)
            },
            _menuContainer: function() {
                return this._$menuButtonContainer
            }
        });
        module.exports = DropDownMenuStrategy
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.menu.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var List = __webpack_require__( /*! ../list/ui.list.base */ 226);
        var TOOLBAR_MENU_ACTION_CLASS = "dx-toolbar-menu-action";
        var TOOLBAR_HIDDEN_BUTTON_CLASS = "dx-toolbar-hidden-button";
        var TOOLBAR_HIDDEN_BUTTON_GROUP_CLASS = "dx-toolbar-hidden-button-group";
        var TOOLBAR_MENU_SECTION_CLASS = "dx-toolbar-menu-section";
        var TOOLBAR_MENU_LAST_SECTION_CLASS = "dx-toolbar-menu-last-section";
        var ToolbarMenu = List.inherit({
            _activeStateUnit: "." + TOOLBAR_MENU_ACTION_CLASS,
            _initMarkup: function() {
                this._renderSections();
                this.callBase()
            },
            _getSections: function() {
                return this._itemContainer().children()
            },
            _itemElements: function() {
                return this._getSections().children(this._itemSelector())
            },
            _renderSections: function() {
                var that = this;
                var $container = this._itemContainer();
                each(["before", "center", "after", "menu"], function() {
                    var sectionName = "_$" + this + "Section";
                    var $section = that[sectionName];
                    if (!$section) {
                        that[sectionName] = $section = $("<div>").addClass(TOOLBAR_MENU_SECTION_CLASS)
                    }
                    $section.appendTo($container)
                })
            },
            _renderItems: function() {
                this.callBase.apply(this, arguments);
                this._updateSections()
            },
            _updateSections: function() {
                var $sections = this.$element().find("." + TOOLBAR_MENU_SECTION_CLASS);
                $sections.removeClass(TOOLBAR_MENU_LAST_SECTION_CLASS);
                $sections.not(":empty").eq(-1).addClass(TOOLBAR_MENU_LAST_SECTION_CLASS)
            },
            _renderItem: function(index, item, itemContainer, $after) {
                var location = item.location || "menu";
                var $container = this["_$" + location + "Section"];
                var itemElement = this.callBase(index, item, $container, $after);
                if (this._getItemTemplateName({
                        itemData: item
                    })) {
                    itemElement.addClass("dx-toolbar-menu-custom")
                }
                if ("menu" === location || "dxButton" === item.widget || item.isAction) {
                    itemElement.addClass(TOOLBAR_MENU_ACTION_CLASS)
                }
                if ("dxButton" === item.widget) {
                    itemElement.addClass(TOOLBAR_HIDDEN_BUTTON_CLASS)
                }
                if ("dxButtonGroup" === item.widget) {
                    itemElement.addClass(TOOLBAR_HIDDEN_BUTTON_GROUP_CLASS)
                }
                itemElement.addClass(item.cssClass);
                return itemElement
            },
            _getItemTemplateName: function(args) {
                var template = this.callBase(args);
                var data = args.itemData;
                var menuTemplate = data && data.menuItemTemplate;
                return menuTemplate || template
            },
            _itemClickHandler: function(e, args, config) {
                if ($(e.target).closest("." + TOOLBAR_MENU_ACTION_CLASS).length) {
                    this.callBase(e, args, config)
                }
            },
            _clean: function() {
                this._getSections().empty();
                this.callBase()
            }
        });
        registerComponent("dxToolbarMenu", ToolbarMenu);
        module.exports = ToolbarMenu
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/widget_collector.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var WidgetCollector = function() {
            function WidgetCollector() {
                _classCallCheck(this, WidgetCollector);
                this._collection = []
            }
            _createClass(WidgetCollector, [{
                key: "clear",
                value: function() {
                    this._collection = []
                }
            }, {
                key: "add",
                value: function(name, instance) {
                    this._collection.push({
                        name: name,
                        instance: instance
                    })
                }
            }, {
                key: "getByName",
                value: function(widgetName) {
                    var _ref = this._collection.find(function(_ref2) {
                            var name = _ref2.name;
                            return widgetName === name
                        }) || {},
                        instance = _ref.instance;
                    return instance
                }
            }, {
                key: "each",
                value: function(handler) {
                    this._collection.forEach(function(_ref3) {
                        var name = _ref3.name,
                            instance = _ref3.instance;
                        return instance && handler(name, instance)
                    })
                }
            }]);
            return WidgetCollector
        }();
        exports.default = WidgetCollector
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/dropImage.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../../events/utils */ 8);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 4);
        var _browser = __webpack_require__( /*! ../../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DropImageModule = {};
        if (_quill2.default) {
            var BaseModule = _quill2.default.import("core/module");
            DropImageModule = function(_BaseModule) {
                _inherits(DropImageModule, _BaseModule);
                var _super = _createSuper(DropImageModule);

                function DropImageModule(quill, options) {
                    var _this;
                    _classCallCheck(this, DropImageModule);
                    _this = _super.call(this, quill, options);
                    _this.editorInstance = options.editorInstance;
                    var widgetName = _this.editorInstance.NAME;
                    _events_engine2.default.on(_this.quill.root, (0, _utils.addNamespace)("dragover", widgetName), _this._dragOverHandler.bind(_assertThisInitialized(_this)));
                    _events_engine2.default.on(_this.quill.root, (0, _utils.addNamespace)("drop", widgetName), _this._dropHandler.bind(_assertThisInitialized(_this)));
                    _events_engine2.default.on(_this.quill.root, (0, _utils.addNamespace)("paste", widgetName), _this._pasteHandler.bind(_assertThisInitialized(_this)));
                    return _this
                }
                _createClass(DropImageModule, [{
                    key: "_dragOverHandler",
                    value: function(e) {
                        if (_browser2.default.msie) {
                            e.preventDefault()
                        }
                    }
                }, {
                    key: "_dropHandler",
                    value: function(e) {
                        var dataTransfer = e.originalEvent.dataTransfer;
                        var hasFiles = dataTransfer && dataTransfer.files && dataTransfer.files.length;
                        e.preventDefault();
                        if (hasFiles) {
                            this._getImage(dataTransfer.files, this._addImage.bind(this))
                        }
                    }
                }, {
                    key: "_pasteHandler",
                    value: function(_ref) {
                        var _this2 = this;
                        var originalEvent = _ref.originalEvent;
                        var clipboardData = originalEvent.clipboardData;
                        if (!clipboardData) {
                            return
                        }
                        var hasDataItems = clipboardData.items && clipboardData.items.length;
                        var isHtmlData = clipboardData.getData("text/html");
                        if (!isHtmlData && hasDataItems) {
                            this._getImage(clipboardData.items, function(imageData) {
                                if (_browser2.default.mozilla) {
                                    return
                                }
                                if (_browser2.default.msie) {
                                    setTimeout(function() {
                                        _this2._addImage(imageData)
                                    })
                                } else {
                                    _this2._addImage(imageData)
                                }
                            })
                        }
                    }
                }, {
                    key: "_isImage",
                    value: function(file) {
                        return !!file.type.match(/^image\/(a?png|bmp|gif|p?jpe?g|svg|vnd\.microsoft\.icon|webp)/i)
                    }
                }, {
                    key: "_getImage",
                    value: function(files, callback) {
                        var _this3 = this;
                        var window = (0, _window.getWindow)();
                        (0, _iterator.each)(files, function(index, file) {
                            if (!_this3._isImage(file)) {
                                return
                            }
                            var reader = new window.FileReader;
                            reader.onload = function(_ref2) {
                                var target = _ref2.target;
                                callback(target.result)
                            };
                            var readableFile = file.getAsFile ? file.getAsFile() : file;
                            if (readableFile instanceof window.Blob) {
                                reader.readAsDataURL(readableFile)
                            }
                        })
                    }
                }, {
                    key: "_addImage",
                    value: function(data) {
                        var selection = this.quill.getSelection();
                        var pasteIndex = selection ? selection.index : this.quill.getLength();
                        this.quill.insertEmbed(pasteIndex, "extendedImage", data, "user")
                    }
                }]);
                return DropImageModule
            }(BaseModule)
        }
        exports.default = DropImageModule
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/variables.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _position = __webpack_require__( /*! ../../../core/utils/position */ 21);
        var _popup = __webpack_require__( /*! ./popup */ 333);
        var _popup2 = _interopRequireDefault(_popup);
        var _variable = __webpack_require__( /*! ../formats/variable */ 602);
        var _variable2 = _interopRequireDefault(_variable);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var VariableModule = {};
        if (_quill2.default) {
            var VARIABLE_FORMAT_CLASS = "dx-variable-format";
            var ACTIVE_FORMAT_CLASS = "dx-format-active";
            _quill2.default.register({
                "formats/variable": _variable2.default
            }, true);
            VariableModule = function(_PopupModule) {
                _inherits(VariableModule, _PopupModule);
                var _super = _createSuper(VariableModule);
                _createClass(VariableModule, [{
                    key: "_getDefaultOptions",
                    value: function() {
                        var baseConfig = _get(_getPrototypeOf(VariableModule.prototype), "_getDefaultOptions", this).call(this);
                        return (0, _extend.extend)(baseConfig, {
                            escapeChar: ""
                        })
                    }
                }]);

                function VariableModule(quill, options) {
                    var _this;
                    _classCallCheck(this, VariableModule);
                    _this = _super.call(this, quill, options);
                    var toolbar = quill.getModule("toolbar");
                    if (toolbar) {
                        toolbar.addClickHandler("variable", _this.showPopup.bind(_assertThisInitialized(_this)))
                    }
                    quill.keyboard.addBinding({
                        key: "P",
                        altKey: true
                    }, _this.showPopup.bind(_assertThisInitialized(_this)));
                    _this._popup.on("shown", function(e) {
                        var $ofElement = (0, _renderer2.default)(e.component.option("position").of);
                        if ($ofElement.hasClass(VARIABLE_FORMAT_CLASS)) {
                            $ofElement.addClass(ACTIVE_FORMAT_CLASS)
                        }
                    });
                    return _this
                }
                _createClass(VariableModule, [{
                    key: "showPopup",
                    value: function(event) {
                        var selection = this.quill.getSelection();
                        var position = selection ? selection.index : this.quill.getLength();
                        this.savePosition(position);
                        this._resetPopupPosition(event, position);
                        _get(_getPrototypeOf(VariableModule.prototype), "showPopup", this).call(this)
                    }
                }, {
                    key: "_resetPopupPosition",
                    value: function(event, position) {
                        if (event && event.element) {
                            this._popup.option("position", {
                                of: event.element,
                                offset: {
                                    h: 0,
                                    v: 0
                                },
                                my: "top center",
                                at: "bottom center",
                                collision: "fit"
                            })
                        } else {
                            var mentionBounds = this.quill.getBounds(position);
                            var rootRect = (0, _position.getBoundingRect)(this.quill.root);
                            this._popup.option("position", {
                                of: this.quill.root,
                                offset: {
                                    h: mentionBounds.left,
                                    v: mentionBounds.bottom - rootRect.height
                                },
                                my: "top center",
                                at: "bottom left",
                                collision: "fit flip"
                            })
                        }
                    }
                }, {
                    key: "insertEmbedContent",
                    value: function(selectionChangedEvent) {
                        var caretPosition = this.getPosition();
                        var selectedItem = selectionChangedEvent.component.option("selectedItem");
                        var variableData = (0, _extend.extend)({}, {
                            value: selectedItem,
                            escapeChar: this.options.escapeChar
                        });
                        setTimeout(function() {
                            this.quill.insertEmbed(caretPosition, "variable", variableData);
                            this.quill.setSelection(caretPosition + 1)
                        }.bind(this))
                    }
                }]);
                return VariableModule
            }(_popup2.default)
        }
        exports.default = VariableModule
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/variable.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _common = __webpack_require__( /*! ../../../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var Variable = {};
        if (_quill2.default) {
            var Embed = _quill2.default.import("blots/embed");
            var VARIABLE_CLASS = "dx-variable";
            Variable = function(_Embed) {
                _inherits(Variable, _Embed);
                var _super = _createSuper(Variable);

                function Variable() {
                    _classCallCheck(this, Variable);
                    return _super.apply(this, arguments)
                }
                _createClass(Variable, null, [{
                    key: "create",
                    value: function(data) {
                        var node = _get(_getPrototypeOf(Variable), "create", this).call(this);
                        var startEscapeChar;
                        var endEscapeChar;
                        var text = data.value;
                        if (Array.isArray(data.escapeChar)) {
                            startEscapeChar = (0, _common.ensureDefined)(data.escapeChar[0], "");
                            endEscapeChar = (0, _common.ensureDefined)(data.escapeChar[1], "")
                        } else {
                            startEscapeChar = endEscapeChar = data.escapeChar
                        }
                        node.innerText = startEscapeChar + text + endEscapeChar;
                        node.dataset.varStartEscChar = startEscapeChar;
                        node.dataset.varEndEscChar = endEscapeChar;
                        node.dataset.varValue = data.value;
                        return node
                    }
                }, {
                    key: "value",
                    value: function(node) {
                        return (0, _extend.extend)({}, {
                            value: node.dataset.varValue,
                            escapeChar: [node.dataset.varStartEscChar || "", node.dataset.varEndEscChar || ""]
                        })
                    }
                }]);
                return Variable
            }(Embed);
            Variable.blotName = "variable";
            Variable.tagName = "span";
            Variable.className = VARIABLE_CLASS
        }
        exports.default = Variable
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/resizing.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _click = __webpack_require__( /*! ../../../events/click */ 19);
        var _utils = __webpack_require__( /*! ../../../events/utils */ 8);
        var _translator = __webpack_require__( /*! ../../../animation/translator */ 28);
        var _devices = __webpack_require__( /*! ../../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _resizable = __webpack_require__( /*! ../../resizable */ 181);
        var _resizable2 = _interopRequireDefault(_resizable);
        var _position = __webpack_require__( /*! ../../../core/utils/position */ 21);
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DX_RESIZE_FRAME_CLASS = "dx-resize-frame";
        var DX_TOUCH_DEVICE_CLASS = "dx-touch-device";
        var MODULE_NAMESPACE = "dxHtmlResizingModule";
        var KEYDOWN_EVENT = (0, _utils.addNamespace)("keydown", MODULE_NAMESPACE);
        var SCROLL_EVENT = (0, _utils.addNamespace)("scroll", MODULE_NAMESPACE);
        var FRAME_PADDING = 1;
        var ResizingModule = function() {
            function ResizingModule(quill, options) {
                _classCallCheck(this, ResizingModule);
                this.quill = quill;
                this.editorInstance = options.editorInstance;
                this.allowedTargets = options.allowedTargets || ["image"];
                this.enabled = !!options.enabled;
                if (this.enabled) {
                    this._attachEvents();
                    this._createResizeFrame()
                }
            }
            _createClass(ResizingModule, [{
                key: "_attachEvents",
                value: function() {
                    _events_engine2.default.on(this.quill.root, (0, _utils.addNamespace)(_click.name, MODULE_NAMESPACE), this._clickHandler.bind(this));
                    _events_engine2.default.on(this.quill.root, SCROLL_EVENT, this._scrollHandler.bind(this))
                }
            }, {
                key: "_detachEvents",
                value: function() {
                    _events_engine2.default.off(this.quill.root, MODULE_NAMESPACE)
                }
            }, {
                key: "_clickHandler",
                value: function(e) {
                    if (this._isAllowedTarget(e.target)) {
                        if (this._$target === e.target) {
                            return
                        }
                        this._$target = e.target;
                        this.updateFramePosition();
                        this.showFrame()
                    } else {
                        if (this._$target) {
                            this.hideFrame()
                        }
                    }
                }
            }, {
                key: "_scrollHandler",
                value: function(e) {
                    if (this._$target) {
                        this.updateFramePosition()
                    }
                }
            }, {
                key: "_isAllowedTarget",
                value: function(targetElement) {
                    return this._isImage(targetElement)
                }
            }, {
                key: "_isImage",
                value: function(targetElement) {
                    return this.allowedTargets.indexOf("image") !== -1 && "IMG" === targetElement.tagName.toUpperCase()
                }
            }, {
                key: "showFrame",
                value: function() {
                    this._$resizeFrame.show();
                    _events_engine2.default.on(this.quill.root, KEYDOWN_EVENT, this._handleFrameKeyDown.bind(this))
                }
            }, {
                key: "_handleFrameKeyDown",
                value: function(e) {
                    var keyName = (0, _utils.normalizeKeyName)(e);
                    if ("del" === keyName || "backspace" === keyName) {
                        this._deleteImage()
                    }
                    this.hideFrame()
                }
            }, {
                key: "hideFrame",
                value: function() {
                    this._$target = null;
                    this._$resizeFrame.hide();
                    _events_engine2.default.off(this.quill.root, KEYDOWN_EVENT)
                }
            }, {
                key: "updateFramePosition",
                value: function() {
                    var _getBoundingRect = (0, _position.getBoundingRect)(this._$target),
                        height = _getBoundingRect.height,
                        width = _getBoundingRect.width,
                        targetTop = _getBoundingRect.top,
                        targetLeft = _getBoundingRect.left;
                    var _getBoundingRect2 = (0, _position.getBoundingRect)(this.quill.root),
                        containerTop = _getBoundingRect2.top,
                        containerLeft = _getBoundingRect2.left;
                    var borderWidth = this._getBorderWidth();
                    this._$resizeFrame.css({
                        height: height,
                        width: width,
                        padding: FRAME_PADDING,
                        top: targetTop - containerTop - borderWidth - FRAME_PADDING,
                        left: targetLeft - containerLeft - borderWidth - FRAME_PADDING
                    });
                    (0, _translator.move)(this._$resizeFrame, {
                        left: 0,
                        top: 0
                    })
                }
            }, {
                key: "_getBorderWidth",
                value: function() {
                    return parseInt(this._$resizeFrame.css("borderTopWidth"))
                }
            }, {
                key: "_createResizeFrame",
                value: function() {
                    var _this = this;
                    if (this._$resizeFrame) {
                        return
                    }
                    var _devices$current = _devices2.default.current(),
                        deviceType = _devices$current.deviceType;
                    this._$resizeFrame = (0, _renderer2.default)("<div>").addClass(DX_RESIZE_FRAME_CLASS).toggleClass(DX_TOUCH_DEVICE_CLASS, "desktop" !== deviceType).appendTo(this.editorInstance._getQuillContainer()).hide();
                    this.editorInstance._createComponent(this._$resizeFrame, _resizable2.default, {
                        onResize: function(e) {
                            if (!_this._$target) {
                                return
                            }
                            var correction = 2 * (FRAME_PADDING + _this._getBorderWidth());
                            (0, _renderer2.default)(_this._$target).attr({
                                height: e.height - correction,
                                width: e.width - correction
                            });
                            _this.updateFramePosition()
                        }
                    })
                }
            }, {
                key: "_deleteImage",
                value: function() {
                    if (this._isAllowedTarget(this._$target)) {
                        _quill2.default.find(this._$target).deleteAt(0)
                    }
                }
            }, {
                key: "option",
                value: function(_option, value) {
                    var _this2 = this;
                    if ("mediaResizing" === _option) {
                        Object.keys(value).forEach(function(optionName) {
                            return _this2.option(optionName, value[optionName])
                        });
                        return
                    }
                    if ("enabled" === _option) {
                        this.enabled = value;
                        value ? this._attachEvents() : this._detachEvents()
                    } else {
                        if ("allowedTargets" === _option && Array.isArray(value)) {
                            this.allowedTargets = value
                        }
                    }
                }
            }, {
                key: "clean",
                value: function() {
                    this._detachEvents();
                    this._$resizeFrame.remove();
                    this._$resizeFrame = void 0
                }
            }]);
            return ResizingModule
        }();
        exports.default = ResizingModule
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/modules/mentions.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _data = __webpack_require__( /*! ../../../core/utils/data */ 20);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _dom = __webpack_require__( /*! ../../../core/utils/dom */ 11);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _popup = __webpack_require__( /*! ./popup */ 333);
        var _popup2 = _interopRequireDefault(_popup);
        var _mention = __webpack_require__( /*! ../formats/mention */ 605);
        var _mention2 = _interopRequireDefault(_mention);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var MentionModule = {};
        if (_quill2.default) {
            var USER_ACTION = "user";
            var SILENT_ACTION = "silent";
            var DEFAULT_MARKER = "@";
            var KEY_CODES = {
                ARROW_UP: 38,
                ARROW_DOWN: 40,
                ARROW_LEFT: 37,
                ARROW_RIGHT: 39,
                ENTER: 13,
                ESCAPE: 27,
                SPACE: 32,
                PAGE_UP: 33,
                PAGE_DOWN: 34,
                END: 35,
                HOME: 36
            };
            var NAVIGATION_KEYS = [KEY_CODES.ARROW_LEFT, KEY_CODES.ARROW_RIGHT, KEY_CODES.PAGE_UP, KEY_CODES.PAGE_DOWN, KEY_CODES.END, KEY_CODES.HOME];
            var ALLOWED_PREFIX_CHARS = [" ", "\n"];
            var DISABLED_STATE_CLASS = "dx-state-disabled";
            _quill2.default.register({
                "formats/mention": _mention2.default
            }, true);
            MentionModule = function(_PopupModule) {
                _inherits(MentionModule, _PopupModule);
                var _super = _createSuper(MentionModule);
                _createClass(MentionModule, [{
                    key: "_getDefaultOptions",
                    value: function() {
                        var baseConfig = _get(_getPrototypeOf(MentionModule.prototype), "_getDefaultOptions", this).call(this);
                        return (0, _extend.extend)(baseConfig, {
                            itemTemplate: "item",
                            valueExpr: "this",
                            displayExpr: "this",
                            template: null,
                            searchExpr: null,
                            searchTimeout: 500,
                            minSearchLength: 0
                        })
                    }
                }]);

                function MentionModule(quill, options) {
                    var _this;
                    _classCallCheck(this, MentionModule);
                    _this = _super.call(this, quill, options);
                    _this._mentions = {};
                    _this.editorInstance = options.editorInstance;
                    options.mentions.forEach(function(item) {
                        var marker = item.marker;
                        if (!marker) {
                            item.marker = marker = DEFAULT_MARKER
                        }
                        var template = item.template;
                        if (template) {
                            var preparedTemplate = _this.editorInstance._getTemplate(template);
                            preparedTemplate && _mention2.default.addTemplate(marker, preparedTemplate)
                        }
                        _this._mentions[marker] = (0, _extend.extend)({}, _this._getDefaultOptions(), item)
                    });
                    _this._attachKeyboardHandlers();
                    _this.editorInstance.addCleanCallback(_this.clean.bind(_assertThisInitialized(_this)));
                    _this.quill.on("text-change", _this.onTextChange.bind(_assertThisInitialized(_this)));
                    return _this
                }
                _createClass(MentionModule, [{
                    key: "_attachKeyboardHandlers",
                    value: function() {
                        var _this2 = this;
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ARROW_UP
                        }, this._moveToItem.bind(this, "prev"));
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ARROW_DOWN
                        }, this._moveToItem.bind(this, "next"));
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ENTER
                        }, this._selectItemHandler.bind(this));
                        var enterBindings = this.quill.keyboard.bindings[KEY_CODES.ENTER];
                        enterBindings.unshift(enterBindings.pop());
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ESCAPE
                        }, this._escapeKeyHandler.bind(this));
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.SPACE
                        }, this._selectItemHandler.bind(this));
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ARROW_LEFT,
                            shiftKey: true
                        }, this._ignoreKeyHandler.bind(this));
                        this.quill.keyboard.addBinding({
                            key: KEY_CODES.ARROW_RIGHT,
                            shiftKey: true
                        }, this._ignoreKeyHandler.bind(this));
                        NAVIGATION_KEYS.forEach(function(key) {
                            _this2.quill.keyboard.addBinding({
                                key: key
                            }, _this2._ignoreKeyHandler.bind(_this2))
                        })
                    }
                }, {
                    key: "_moveToItem",
                    value: function(direction) {
                        var dataSource = this._list.getDataSource();
                        if (this._isMentionActive && !dataSource.isLoading()) {
                            var $focusedItem = (0, _renderer2.default)(this._list.option("focusedElement"));
                            var defaultItemPosition = "next" === direction ? "first" : "last";
                            var $nextItem = $focusedItem[direction]();
                            $nextItem = $nextItem.length ? $nextItem : this._activeListItems[defaultItemPosition]();
                            this._list.option("focusedElement", (0, _dom.getPublicElement)($nextItem));
                            this._list.scrollToItem($nextItem)
                        }
                        return !this._isMentionActive
                    }
                }, {
                    key: "_ignoreKeyHandler",
                    value: function() {
                        return !this._isMentionActive
                    }
                }, {
                    key: "_fitIntoRange",
                    value: function(value, start, end) {
                        if (value > end) {
                            return start
                        }
                        if (value < start) {
                            return end
                        }
                        return value
                    }
                }, {
                    key: "_selectItemHandler",
                    value: function() {
                        if (this._isMentionActive) {
                            this._list.selectItem(this._list.option("focusedElement"))
                        }
                        return !this._isMentionActive
                    }
                }, {
                    key: "_escapeKeyHandler",
                    value: function() {
                        if (this._isMentionActive) {
                            this._popup.hide()
                        }
                        return !this._isMentionActive
                    }
                }, {
                    key: "renderList",
                    value: function($container, options) {
                        this.compileGetters(this.options);
                        _get(_getPrototypeOf(MentionModule.prototype), "renderList", this).call(this, $container, options)
                    }
                }, {
                    key: "compileGetters",
                    value: function(_ref) {
                        var displayExpr = _ref.displayExpr,
                            valueExpr = _ref.valueExpr;
                        this._valueGetter = (0, _data.compileGetter)(displayExpr);
                        this._idGetter = (0, _data.compileGetter)(valueExpr)
                    }
                }, {
                    key: "_getListConfig",
                    value: function(options) {
                        var _this3 = this;
                        var baseConfig = _get(_getPrototypeOf(MentionModule.prototype), "_getListConfig", this).call(this, options);
                        return (0, _extend.extend)(baseConfig, {
                            itemTemplate: this.options.itemTemplate,
                            onContentReady: function() {
                                if (_this3._hasSearch) {
                                    _this3._popup.repaint();
                                    _this3._focusFirstElement();
                                    _this3._hasSearch = false
                                }
                            }
                        })
                    }
                }, {
                    key: "insertEmbedContent",
                    value: function() {
                        var markerLength = this._activeMentionConfig.marker.length;
                        var textLength = markerLength + this._searchValue.length;
                        var caretPosition = this.getPosition();
                        var startIndex = Math.max(0, caretPosition - markerLength);
                        var selectedItem = this._list.option("selectedItem");
                        var value = {
                            value: this._valueGetter(selectedItem),
                            id: this._idGetter(selectedItem),
                            marker: this._activeMentionConfig.marker
                        };
                        setTimeout(function() {
                            this.quill.insertText(startIndex, " ", SILENT_ACTION);
                            this.quill.deleteText(startIndex + 1, textLength, SILENT_ACTION);
                            this.quill.insertEmbed(startIndex, "mention", value);
                            this.quill.setSelection(startIndex + 2)
                        }.bind(this))
                    }
                }, {
                    key: "_getLastInsertOperation",
                    value: function(ops) {
                        var lastOperation = ops[ops.length - 1];
                        var isLastOperationInsert = "insert" in lastOperation;
                        if (isLastOperationInsert) {
                            return lastOperation
                        }
                        var isLastOperationDelete = "delete" in lastOperation;
                        if (isLastOperationDelete && ops.length >= 2) {
                            var penultOperation = ops[ops.length - 2];
                            var isPenultOperationInsert = "insert" in penultOperation;
                            var isSelectionReplacing = isLastOperationDelete && isPenultOperationInsert;
                            if (isSelectionReplacing) {
                                return penultOperation
                            }
                        }
                        return null
                    }
                }, {
                    key: "onTextChange",
                    value: function(newDelta, oldDelta, source) {
                        if (source === USER_ACTION) {
                            var lastOperation = newDelta.ops[newDelta.ops.length - 1];
                            if (this._isMentionActive) {
                                this._processSearchValue(lastOperation) && this._filterList(this._searchValue)
                            } else {
                                var ops = newDelta.ops;
                                var lastInsertOperation = this._getLastInsertOperation(ops);
                                if (lastInsertOperation) {
                                    this.checkMentionRequest(lastInsertOperation, ops)
                                }
                            }
                        }
                    }
                }, {
                    key: "_processSearchValue",
                    value: function(operation) {
                        var isInsertOperation = "insert" in operation;
                        if (isInsertOperation) {
                            this._searchValue += operation.insert
                        } else {
                            if (!this._searchValue.length) {
                                this._popup.hide();
                                return false
                            } else {
                                this._searchValue = this._searchValue.slice(0, -1)
                            }
                        }
                        return true
                    }
                }, {
                    key: "checkMentionRequest",
                    value: function(_ref2, ops) {
                        var insert = _ref2.insert;
                        var caret = this.quill.getSelection();
                        if (!insert || !(0, _type.isString)(insert) || !caret || this._isMarkerPartOfText(ops[0].retain)) {
                            return
                        }
                        this._activeMentionConfig = this._mentions[insert];
                        if (this._activeMentionConfig) {
                            this._updateList(this._activeMentionConfig);
                            this.savePosition(caret.index);
                            this._popup.option("position", this._popupPosition);
                            this._searchValue = "";
                            this._popup.show()
                        }
                    }
                }, {
                    key: "_isMarkerPartOfText",
                    value: function(retain) {
                        if (!retain || ALLOWED_PREFIX_CHARS.indexOf(this._getCharByIndex(retain - 1)) !== -1) {
                            return false
                        }
                        return true
                    }
                }, {
                    key: "_getCharByIndex",
                    value: function(index) {
                        return this.quill.getContents(index, 1).ops[0].insert
                    }
                }, {
                    key: "_updateList",
                    value: function(_ref3) {
                        var dataSource = _ref3.dataSource,
                            displayExpr = _ref3.displayExpr,
                            valueExpr = _ref3.valueExpr,
                            itemTemplate = _ref3.itemTemplate,
                            searchExpr = _ref3.searchExpr;
                        this.compileGetters({
                            displayExpr: displayExpr,
                            valueExpr: valueExpr
                        });
                        this._list.unselectAll();
                        this._list.option({
                            dataSource: dataSource,
                            displayExpr: displayExpr,
                            itemTemplate: itemTemplate,
                            searchExpr: searchExpr
                        })
                    }
                }, {
                    key: "_filterList",
                    value: function(searchValue) {
                        var _this4 = this;
                        if (!this._isMinSearchLengthExceeded(searchValue)) {
                            this._resetFilter();
                            return
                        }
                        var searchTimeout = this._activeMentionConfig.searchTimeout;
                        if (searchTimeout) {
                            clearTimeout(this._searchTimer);
                            this._searchTimer = setTimeout(function() {
                                _this4._search(searchValue)
                            }, searchTimeout)
                        } else {
                            this._search(searchValue)
                        }
                    }
                }, {
                    key: "_isMinSearchLengthExceeded",
                    value: function(searchValue) {
                        return searchValue.length >= this._activeMentionConfig.minSearchLength
                    }
                }, {
                    key: "_resetFilter",
                    value: function() {
                        clearTimeout(this._searchTimer);
                        this._search(null)
                    }
                }, {
                    key: "_search",
                    value: function(searchValue) {
                        this._hasSearch = true;
                        this._list.option("searchValue", searchValue)
                    }
                }, {
                    key: "_focusFirstElement",
                    value: function() {
                        if (!this._list) {
                            return
                        }
                        var $firstItem = this._activeListItems.first();
                        this._list.option("focusedElement", (0, _dom.getPublicElement)($firstItem));
                        this._list.scrollToItem($firstItem)
                    }
                }, {
                    key: "_getPopupConfig",
                    value: function() {
                        var _this5 = this;
                        return (0, _extend.extend)(_get(_getPrototypeOf(MentionModule.prototype), "_getPopupConfig", this).call(this), {
                            closeOnTargetScroll: false,
                            onShown: function() {
                                _this5._isMentionActive = true;
                                _this5._hasSearch = false;
                                _this5._focusFirstElement()
                            },
                            onHidden: function() {
                                _this5._list.unselectAll();
                                _this5._list.option("focusedElement", null);
                                _this5._isMentionActive = false;
                                _this5._search(null)
                            },
                            focusStateEnabled: false
                        })
                    }
                }, {
                    key: "clean",
                    value: function() {
                        var _this6 = this;
                        Object.keys(this._mentions).forEach(function(marker) {
                            if (_this6._mentions[marker].template) {
                                _mention2.default.removeTemplate(marker)
                            }
                        })
                    }
                }, {
                    key: "_popupPosition",
                    get: function() {
                        var position = this.getPosition();
                        var _this$quill$getBounds = this.quill.getBounds(position ? position - 1 : position),
                            mentionLeft = _this$quill$getBounds.left,
                            mentionTop = _this$quill$getBounds.top,
                            mentionHeight = _this$quill$getBounds.height;
                        var _$$offset = (0, _renderer2.default)(this.quill.root).offset(),
                            leftOffset = _$$offset.left,
                            topOffset = _$$offset.top;
                        var positionEvent = (0, _events_engine.Event)("positionEvent", {
                            pageX: leftOffset + mentionLeft,
                            pageY: topOffset + mentionTop
                        });
                        return {
                            of: positionEvent,
                            offset: {
                                v: mentionHeight
                            },
                            my: "top left",
                            at: "top left",
                            collision: {
                                y: "flip",
                                x: "flipfit"
                            }
                        }
                    }
                }, {
                    key: "_activeListItems",
                    get: function() {
                        return this._list.itemElements().filter(":not(.".concat(DISABLED_STATE_CLASS, ")"))
                    }
                }]);
                return MentionModule
            }(_popup2.default)
        }
        exports.default = MentionModule
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/formats/mention.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _quill = __webpack_require__( /*! quill */ 55);
        var _quill2 = _interopRequireDefault(_quill);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var Mention = {};
        if (_quill2.default) {
            var Embed = _quill2.default.import("blots/embed");
            var MENTION_CLASS = "dx-mention";
            Mention = function(_Embed) {
                _inherits(Mention, _Embed);
                var _super = _createSuper(Mention);

                function Mention() {
                    _classCallCheck(this, Mention);
                    return _super.apply(this, arguments)
                }
                _createClass(Mention, null, [{
                    key: "create",
                    value: function(data) {
                        var node = _get(_getPrototypeOf(Mention), "create", this).call(this);
                        node.setAttribute("spellcheck", false);
                        node.dataset.marker = data.marker;
                        node.dataset.mentionValue = data.value;
                        node.dataset.id = data.id;
                        this.renderContent(node, data);
                        return node
                    }
                }, {
                    key: "value",
                    value: function(node) {
                        return {
                            marker: node.dataset.marker,
                            id: node.dataset.id,
                            value: node.dataset.mentionValue
                        }
                    }
                }, {
                    key: "renderContent",
                    value: function(node, data) {
                        var template = this._templates.get(data.marker);
                        if (template) {
                            template.render({
                                model: data,
                                container: node
                            })
                        } else {
                            this.baseContentRender(node, data)
                        }
                    }
                }, {
                    key: "baseContentRender",
                    value: function(node, data) {
                        var $marker = (0, _renderer2.default)("<span>").text(data.marker);
                        (0, _renderer2.default)(node).append($marker).append(data.value)
                    }
                }, {
                    key: "addTemplate",
                    value: function(marker, template) {
                        this._templates.set(marker, template)
                    }
                }, {
                    key: "removeTemplate",
                    value: function(marker) {
                        this._templates.delete(marker)
                    }
                }]);
                return Mention
            }(Embed);
            Mention.blotName = "mention";
            Mention.tagName = "span";
            Mention.className = MENTION_CLASS;
            Mention._templates = new Map
        }
        exports.default = Mention
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/converters/delta.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _converterController = __webpack_require__( /*! ../converterController */ 242);
        var _converterController2 = _interopRequireDefault(_converterController);
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 331);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _toArray(arr) {
            return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest()
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _slicedToArray(arr, i) {
            return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest()
        }

        function _nonIterableRest() {
            throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

        function _iterableToArrayLimit(arr, i) {
            if ("undefined" === typeof Symbol || !(Symbol.iterator in Object(arr))) {
                return
            }
            var _arr = [];
            var _n = true;
            var _d = false;
            var _e = void 0;
            try {
                for (var _s, _i = arr[Symbol.iterator](); !(_n = (_s = _i.next()).done); _n = true) {
                    _arr.push(_s.value);
                    if (i && _arr.length === i) {
                        break
                    }
                }
            } catch (err) {
                _d = true;
                _e = err
            } finally {
                try {
                    if (!_n && null != _i.return) {
                        _i.return()
                    }
                } finally {
                    if (_d) {
                        throw _e
                    }
                }
            }
            return _arr
        }

        function _arrayWithHoles(arr) {
            if (Array.isArray(arr)) {
                return arr
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var ESCAPING_MAP = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;",
            "'": "&#39;"
        };
        var LIST_BLOT_NAME = "list";
        var LIST_ITEM_BLOT_NAME = "list-item";
        var DeltaConverter = function() {
            function DeltaConverter() {
                _classCallCheck(this, DeltaConverter);
                this.TextBlot = (0, _quill_importer.getQuill)().import("blots/text");
                this.BreakBlot = (0, _quill_importer.getQuill)().import("blots/break")
            }
            _createClass(DeltaConverter, [{
                key: "setQuillInstance",
                value: function(quillInstance) {
                    this.quillInstance = quillInstance
                }
            }, {
                key: "toHtml",
                value: function() {
                    if (!this.quillInstance) {
                        return
                    }
                    return this._isQuillEmpty() ? "" : this._convertHTML(this.quillInstance.scroll, 0, this.quillInstance.getLength(), true)
                }
            }, {
                key: "_isQuillEmpty",
                value: function() {
                    var delta = this.quillInstance.getContents();
                    return 1 === delta.length() && this._isDeltaEmpty(delta)
                }
            }, {
                key: "_isDeltaEmpty",
                value: function(delta) {
                    return delta.reduce(function(__, _ref) {
                        var insert = _ref.insert;
                        return insert.indexOf("\n") !== -1
                    })
                }
            }, {
                key: "_convertHTML",
                value: function(blot, index, length) {
                    var _this = this;
                    var isRoot = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : false;
                    if ((0, _type.isFunction)(blot.html)) {
                        return blot.html(index, length)
                    }
                    if (blot instanceof this.TextBlot) {
                        return this._escapeText(blot.value().slice(index, index + length))
                    }
                    if (blot.children) {
                        if (blot.statics.blotName === LIST_BLOT_NAME) {
                            return this._convertList(blot, index, length)
                        }
                        var parts = [];
                        blot.children.forEachAt(index, length, function(child, offset, childLength) {
                            parts.push(_this._convertHTML(child, offset, childLength))
                        });
                        this._handleBreakLine(blot.children, parts);
                        if (isRoot || blot.statics.blotName === LIST_ITEM_BLOT_NAME) {
                            return parts.join("")
                        }
                        var _blot$domNode = blot.domNode,
                            outerHTML = _blot$domNode.outerHTML,
                            innerHTML = _blot$domNode.innerHTML;
                        var _outerHTML$split = outerHTML.split(">".concat(innerHTML, "<")),
                            _outerHTML$split2 = _slicedToArray(_outerHTML$split, 2),
                            start = _outerHTML$split2[0],
                            end = _outerHTML$split2[1];
                        return "".concat(start, ">").concat(parts.join(""), "<").concat(end)
                    }
                    return blot.domNode.outerHTML
                }
            }, {
                key: "_handleBreakLine",
                value: function(linkedList, parts) {
                    if (1 === linkedList.length && linkedList.head instanceof this.BreakBlot) {
                        parts.push("<br>")
                    }
                }
            }, {
                key: "_convertList",
                value: function(blot, index, length) {
                    var items = [];
                    var parentFormats = blot.formats();
                    blot.children.forEachAt(index, length, function(child, offset, childLength) {
                        var childFormats = child.formats();
                        items.push({
                            child: child,
                            offset: offset,
                            length: childLength,
                            indent: childFormats.indent || 0,
                            type: parentFormats.list
                        })
                    });
                    return this._getListMarkup(items, -1, [], blot)
                }
            }, {
                key: "_getListMarkup",
                value: function(items, lastIndent, listTypes, listBlot) {
                    if (0 === items.length) {
                        var _endTag = this._getListType(listTypes.pop());
                        if (lastIndent <= 0) {
                            return "</li></".concat(_endTag, ">")
                        }
                        return this._processListMarkup([
                            [], lastIndent - 1, listTypes
                        ], _endTag)
                    }
                    var _items = _toArray(items),
                        _items$ = _items[0],
                        child = _items$.child,
                        offset = _items$.offset,
                        length = _items$.length,
                        indent = _items$.indent,
                        type = _items$.type,
                        rest = _items.slice(1);
                    var tag = this._getListType(type);
                    var childItemArgs = [child, offset, length];
                    var restItemsArgs = [rest, indent, listTypes];
                    if (indent > lastIndent) {
                        listTypes.push(type);
                        var multiLevelTags = this._correctListMultiIndent(listTypes, type, tag, indent - lastIndent - 1);
                        return multiLevelTags + this._processIndentListMarkup(childItemArgs, restItemsArgs, tag, listBlot)
                    }
                    if (indent === lastIndent) {
                        return this._processIndentListMarkup(childItemArgs, restItemsArgs)
                    }
                    var endTag = this._getListType(listTypes.pop());
                    return this._processListMarkup([items, lastIndent - 1, listTypes], endTag)
                }
            }, {
                key: "_correctListMultiIndent",
                value: function(listTypes, type, tag, indent) {
                    var markup = "";
                    while (indent) {
                        markup += "<".concat(tag, ">");
                        listTypes.push(type);
                        indent--
                    }
                    return markup
                }
            }, {
                key: "_processListMarkup",
                value: function(childItemArgs, tag) {
                    return "</li></".concat(tag, ">").concat(this._getListMarkup.apply(this, _toConsumableArray(childItemArgs)))
                }
            }, {
                key: "_processIndentListMarkup",
                value: function(childItemArgs, restItemsArgs) {
                    var tag = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "/li";
                    var listBlot = arguments.length > 3 ? arguments[3] : void 0;
                    var listAttrs = listBlot && this._getBlotNodeAttributes(listBlot) || "";
                    var itemAttrs = this._getBlotNodeAttributes(childItemArgs[0]);
                    return "<".concat(tag).concat(listAttrs, "><li").concat(itemAttrs, ">").concat(this._convertHTML.apply(this, _toConsumableArray(childItemArgs))).concat(this._getListMarkup.apply(this, _toConsumableArray(restItemsArgs).concat([listBlot])))
                }
            }, {
                key: "_getBlotNodeAttributes",
                value: function(_ref2) {
                    var domNode = _ref2.domNode;
                    if (!domNode.hasAttributes()) {
                        return ""
                    }
                    var attributes = domNode.attributes;
                    var attributesString = " ";
                    for (var i = 0; i < attributes.length; i++) {
                        var name = attributes[i].name;
                        var value = attributes[i].value;
                        if ("class" === name) {
                            value = this._removeIndentClass(value)
                        }
                        if (value.length) {
                            attributesString += "".concat(name, '="').concat(value, '"')
                        }
                    }
                    return attributesString.length > 1 ? attributesString : ""
                }
            }, {
                key: "_getListType",
                value: function(type) {
                    return "ordered" === type ? "ol" : "ul"
                }
            }, {
                key: "_removeIndentClass",
                value: function(classString) {
                    return classString.replace(/ql-indent-\d/g, "").trim()
                }
            }, {
                key: "_escapeText",
                value: function(text) {
                    return text.replace(/[&<>"']/g, function(char) {
                        return ESCAPING_MAP[char]
                    })
                }
            }]);
            return DeltaConverter
        }();
        _converterController2.default.addConverter("delta", DeltaConverter);
        exports.default = DeltaConverter
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/matchers/wordLists.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });

        function getListType(matches) {
            var prefix = matches[1];
            return prefix.match(/\S+\./) ? "ordered" : "bullet"
        }

        function getIndent(node) {
            var style = node.getAttribute("style");
            if (style) {
                var level = style.replace(/\n+/g, "").match(/level(\d+)/);
                return level ? level[1] - 1 : 0
            } else {
                return false
            }
        }

        function removeNewLineChar(operations) {
            var newLineOperation = operations[operations.length - 1];
            newLineOperation.insert = newLineOperation.insert.trim()
        }
        var getMatcher = function(quill) {
            var Delta = quill.import("delta");
            return function(node, delta) {
                var ops = delta.ops.slice();
                var insertOperation = ops[0];
                insertOperation.insert = insertOperation.insert.replace(/^\s+/, "");
                var listDecoratorMatches = insertOperation.insert.match(/^(\S+)\s+/);
                var indent = listDecoratorMatches && getIndent(node);
                if (!listDecoratorMatches || false === indent) {
                    return delta
                }
                insertOperation.insert = insertOperation.insert.substring(listDecoratorMatches[0].length, insertOperation.insert.length);
                removeNewLineChar(ops);
                ops.push({
                    insert: "\n",
                    attributes: {
                        list: getListType(listDecoratorMatches),
                        indent: indent
                    }
                });
                return new Delta(ops)
            }
        };
        exports.default = getMatcher
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/matchers/textDecoration.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _extend2 = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }

        function getMatcher(quill) {
            var Delta = quill.import("delta");
            var applyFormat = function applyFormat(delta, format, value) {
                if ((0, _type.isObject)(format)) {
                    return Object.keys(format).reduce(function(newDelta, key) {
                        return applyFormat(newDelta, key, format[key])
                    }, delta)
                }
                return delta.reduce(function(newDelta, op) {
                    var attributes = op.attributes,
                        insert = op.insert;
                    if (attributes && attributes[format]) {
                        return newDelta.push(op)
                    }
                    return newDelta.insert(insert, (0, _extend2.extend)({}, _defineProperty({}, format, value), attributes))
                }, new Delta)
            };
            return function(node, delta) {
                var formats = {};
                var _ref = node.style || {},
                    textDecoration = _ref.textDecoration;
                var isLineThrough = textDecoration && textDecoration.indexOf("line-through") !== -1;
                var isUnderline = textDecoration && textDecoration.indexOf("underline") !== -1;
                if (isLineThrough) {
                    formats.strike = true
                }
                if (isUnderline) {
                    formats.underline = true
                }
                if (isLineThrough || isUnderline) {
                    delta = applyFormat(delta, formats)
                }
                return delta
            }
        }
        exports.default = getMatcher
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/ui/formDialog.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _popup = __webpack_require__( /*! ../../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _form = __webpack_require__( /*! ../../form */ 144);
        var _form2 = _interopRequireDefault(_form);
        var _dom_adapter = __webpack_require__( /*! ../../../core/dom_adapter */ 12);
        var _dom = __webpack_require__( /*! ../../../core/utils/dom */ 11);
        var _deferred = __webpack_require__( /*! ../../../core/utils/deferred */ 6);
        var _message = __webpack_require__( /*! ../../../localization/message */ 10);
        var _browser = __webpack_require__( /*! ../../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DIALOG_CLASS = "dx-formdialog";
        var FORM_CLASS = "dx-formdialog-form";
        var FormDialog = function() {
            function FormDialog(editorInstance, popupConfig) {
                _classCallCheck(this, FormDialog);
                this._editorInstance = editorInstance;
                this._popupUserConfig = popupConfig;
                this._renderPopup()
            }
            _createClass(FormDialog, [{
                key: "_renderPopup",
                value: function() {
                    var editorInstance = this._editorInstance;
                    var $container = (0, _renderer2.default)("<div>").addClass(DIALOG_CLASS).appendTo(editorInstance.$element());
                    var popupConfig = this._getPopupConfig();
                    return editorInstance._createComponent($container, _popup2.default, popupConfig)
                }
            }, {
                key: "_escKeyHandler",
                value: function() {
                    this._popup.hide()
                }
            }, {
                key: "_addEscapeHandler",
                value: function(e) {
                    e.component.registerKeyHandler("escape", this._escKeyHandler.bind(this))
                }
            }, {
                key: "_getPopupConfig",
                value: function() {
                    var _this = this;
                    return (0, _extend.extend)({
                        onInitialized: function(e) {
                            _this._popup = e.component;
                            _this._popup.on("hiding", function() {
                                _this.deferred.reject()
                            });
                            _this._popup.on("shown", function() {
                                _this._form.focus()
                            })
                        },
                        deferRendering: false,
                        focusStateEnabled: false,
                        showCloseButton: false,
                        contentTemplate: function(contentElem) {
                            var $formContainer = (0, _renderer2.default)("<div>").appendTo(contentElem);
                            _this._renderForm($formContainer, {
                                onEditorEnterKey: function(_ref) {
                                    var component = _ref.component,
                                        dataField = _ref.dataField;
                                    _this._updateEditorValue(component, dataField);
                                    _this.hide(component.option("formData"))
                                },
                                customizeItem: function(item) {
                                    if ("simple" === item.itemType) {
                                        item.editorOptions = (0, _extend.extend)(true, {}, item.editorOptions, {
                                            onInitialized: _this._addEscapeHandler.bind(_this)
                                        })
                                    }
                                }
                            })
                        },
                        toolbarItems: [{
                            toolbar: "bottom",
                            location: "after",
                            widget: "dxButton",
                            options: {
                                onInitialized: this._addEscapeHandler.bind(this),
                                text: (0, _message.format)("OK"),
                                onClick: function() {
                                    _this.hide(_this._form.option("formData"))
                                }
                            }
                        }, {
                            toolbar: "bottom",
                            location: "after",
                            widget: "dxButton",
                            options: {
                                onInitialized: this._addEscapeHandler.bind(this),
                                text: (0, _message.format)("Cancel"),
                                onClick: function() {
                                    _this._popup.hide()
                                }
                            }
                        }]
                    }, this._popupUserConfig)
                }
            }, {
                key: "_updateEditorValue",
                value: function(component, dataField) {
                    if (_browser2.default.msie && parseInt(_browser2.default.version) <= 11) {
                        var editor = component.getEditor(dataField);
                        var activeElement = (0, _dom_adapter.getActiveElement)();
                        if (editor.$element().find(activeElement).length) {
                            (0, _dom.resetActiveElement)()
                        }
                    }
                }
            }, {
                key: "_renderForm",
                value: function($container, options) {
                    $container.addClass(FORM_CLASS);
                    this._form = this._editorInstance._createComponent($container, _form2.default, options)
                }
            }, {
                key: "show",
                value: function(formUserConfig) {
                    if (this._popup.option("visible")) {
                        return
                    }
                    this.deferred = new _deferred.Deferred;
                    var formConfig = (0, _extend.extend)({}, formUserConfig);
                    this._form.option(formConfig);
                    this._popup.show();
                    return this.deferred.promise()
                }
            }, {
                key: "hide",
                value: function(formData) {
                    this.deferred.resolve(formData);
                    this._popup.hide()
                }
            }, {
                key: "popupOption",
                value: function(optionName, optionValue) {
                    return this._popup.option.apply(this._popup, arguments)
                }
            }]);
            return FormDialog
        }();
        exports.default = FormDialog
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/lookup.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var window = __webpack_require__( /*! ../core/utils/window */ 7).getWindow();
        var support = __webpack_require__( /*! ../core/utils/support */ 46);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var domUtils = __webpack_require__( /*! ../core/utils/dom */ 11);
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 71);
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 225);
        var themes = __webpack_require__( /*! ./themes */ 32);
        var clickEvent = __webpack_require__( /*! ../events/click */ 19);
        var Popover = __webpack_require__( /*! ./popover */ 119);
        var TextBox = __webpack_require__( /*! ./text_box */ 88);
        var ChildDefaultTemplate = __webpack_require__( /*! ../core/templates/child_default_template */ 141).ChildDefaultTemplate;
        var translator = __webpack_require__( /*! ../animation/translator */ 28);
        var LOOKUP_CLASS = "dx-lookup";
        var LOOKUP_SEARCH_CLASS = "dx-lookup-search";
        var LOOKUP_SEARCH_WRAPPER_CLASS = "dx-lookup-search-wrapper";
        var LOOKUP_FIELD_CLASS = "dx-lookup-field";
        var LOOKUP_ARROW_CLASS = "dx-lookup-arrow";
        var LOOKUP_FIELD_WRAPPER_CLASS = "dx-lookup-field-wrapper";
        var LOOKUP_POPUP_CLASS = "dx-lookup-popup";
        var LOOKUP_POPUP_WRAPPER_CLASS = "dx-lookup-popup-wrapper";
        var LOOKUP_POPUP_SEARCH_CLASS = "dx-lookup-popup-search";
        var LOOKUP_POPOVER_MODE = "dx-lookup-popover-mode";
        var LOOKUP_EMPTY_CLASS = "dx-lookup-empty";
        var LOOKUP_POPOVER_FLIP_VERTICAL_CLASS = "dx-popover-flipped-vertical";
        var TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input";
        var LIST_ITEM_SELECTED_CLASS = "dx-list-item-selected";
        var MATERIAL_LOOKUP_LIST_ITEMS_COUNT = 4;
        var MATERIAL_LOOKUP_LIST_PADDING = 8;
        var Lookup = DropDownList.inherit({
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    space: function(e) {
                        e.preventDefault();
                        this._validatedOpening()
                    },
                    enter: function() {
                        this._validatedOpening()
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    placeholder: messageLocalization.format("Select"),
                    searchPlaceholder: messageLocalization.format("Search"),
                    searchEnabled: true,
                    cleanSearchOnOpening: true,
                    showCancelButton: true,
                    showClearButton: false,
                    clearButtonText: messageLocalization.format("Clear"),
                    applyButtonText: messageLocalization.format("OK"),
                    pullRefreshEnabled: false,
                    useNativeScrolling: true,
                    pullingDownText: messageLocalization.format("dxList-pullingDownText"),
                    pulledDownText: messageLocalization.format("dxList-pulledDownText"),
                    refreshingText: messageLocalization.format("dxList-refreshingText"),
                    pageLoadingText: messageLocalization.format("dxList-pageLoadingText"),
                    onScroll: null,
                    onPullRefresh: null,
                    onPageLoading: null,
                    pageLoadMode: "scrollBottom",
                    nextButtonText: messageLocalization.format("dxList-nextButtonText"),
                    grouped: false,
                    groupTemplate: "group",
                    usePopover: false,
                    showDropDownButton: false,
                    focusStateEnabled: false,
                    animation: {},
                    dropDownOptions: {
                        showTitle: true,
                        width: function() {
                            return .8 * $(window).width()
                        },
                        height: function() {
                            return .8 * $(window).height()
                        },
                        shading: true,
                        closeOnOutsideClick: false,
                        position: void 0,
                        animation: {},
                        title: "",
                        titleTemplate: "title",
                        onTitleRendered: null,
                        fullScreen: false
                    },
                    itemCenteringEnabled: false,
                    _scrollToSelectedItemEnabled: false,
                    useHiddenSubmitElement: true
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return !support.nativeScrolling
                    },
                    options: {
                        useNativeScrolling: false
                    }
                }, {
                    device: function(_device) {
                        return !devices.isSimulator() && "desktop" === devices.real().deviceType && "generic" === _device.platform
                    },
                    options: {
                        usePopover: true,
                        dropDownOptions: {
                            height: "auto"
                        }
                    }
                }, {
                    device: {
                        platform: "ios",
                        phone: true
                    },
                    options: {
                        dropDownOptions: {
                            fullScreen: true
                        }
                    }
                }, {
                    device: {
                        platform: "ios",
                        tablet: true
                    },
                    options: {
                        dropDownOptions: {
                            width: function() {
                                return .4 * Math.min($(window).width(), $(window).height())
                            },
                            height: "auto"
                        },
                        usePopover: true,
                        useInkRipple: false
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        usePopover: false,
                        searchEnabled: false,
                        showCancelButton: false,
                        itemCenteringEnabled: true,
                        _scrollToSelectedItemEnabled: true,
                        dropDownOptions: {
                            closeOnOutsideClick: true,
                            width: function() {
                                return this._getPopupWidth()
                            }.bind(this),
                            height: function() {
                                return this._getPopupHeight(MATERIAL_LOOKUP_LIST_ITEMS_COUNT)
                            }.bind(this),
                            showTitle: false,
                            shading: false
                        }
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._initActions()
            },
            _initActions: function() {
                this.callBase();
                this._initScrollAction();
                this._initPageLoadingAction();
                this._initPullRefreshAction()
            },
            _initPageLoadingAction: function() {
                this._pageLoadingAction = this._createActionByOption("onPageLoading")
            },
            _initPullRefreshAction: function() {
                this._pullRefreshAction = this._createActionByOption("onPullRefresh")
            },
            _initScrollAction: function() {
                this._scrollAction = this._createActionByOption("onScroll")
            },
            _scrollHandler: function(e) {
                this._scrollAction(e)
            },
            _pullRefreshHandler: function(e) {
                this._pullRefreshAction(e)
            },
            _pageLoadingHandler: function(e) {
                this._pageLoadingAction(e)
            },
            _initTemplates: function() {
                this.callBase();
                this._templateManager.addDefaultTemplates({
                    group: new ChildDefaultTemplate("group"),
                    title: new ChildDefaultTemplate("title")
                })
            },
            _initMarkup: function() {
                this.$element().addClass(LOOKUP_CLASS).toggleClass(LOOKUP_POPOVER_MODE, this.option("usePopover"));
                this.callBase()
            },
            _inputWrapper: function() {
                return this.$element().find("." + LOOKUP_FIELD_WRAPPER_CLASS)
            },
            _dataSourceOptions: function() {
                return extend(this.callBase(), {
                    paginate: true
                })
            },
            _fireContentReadyAction: commonUtils.noop,
            _popupWrapperClass: function() {
                return ""
            },
            _renderInput: function() {
                var fieldClickAction = this._createAction(function() {
                    this._toggleOpenState()
                }.bind(this));
                this._$field = $("<div>").addClass(LOOKUP_FIELD_CLASS);
                eventsEngine.on(this._$field, eventUtils.addNamespace(clickEvent.name, this.NAME), function(e) {
                    fieldClickAction({
                        event: e
                    })
                });
                var $arrow = $("<div>").addClass(LOOKUP_ARROW_CLASS);
                this._$fieldWrapper = $("<div>").addClass(LOOKUP_FIELD_WRAPPER_CLASS).append(this._$field).append($arrow).appendTo(this.$element());
                this.option("useInkRipple") && this._renderInkRipple()
            },
            _getInputContainer: function() {
                return this._$fieldWrapper
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render()
            },
            _toggleOpenState: function() {
                this.callBase();
                if (!this.option("dropDownOptions.fullScreen") && this.option("_scrollToSelectedItemEnabled")) {
                    this._setPopupPosition()
                }
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: this._inputWrapper(),
                    event: e
                };
                if (value) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _renderField: function() {
                var fieldTemplate = this._getTemplateByOption("fieldTemplate");
                if (fieldTemplate && this.option("fieldTemplate")) {
                    this._renderFieldTemplate(fieldTemplate);
                    return
                }
                this._updateField(this.option("displayValue") || this.option("placeholder"));
                this.$element().toggleClass(LOOKUP_EMPTY_CLASS, !this.option("selectedItem"))
            },
            _renderDisplayText: function(text) {
                if (this._input().length) {
                    this.callBase(text)
                } else {
                    this._updateField(text)
                }
            },
            _updateField: function(text) {
                this._$field.text(text)
            },
            _renderFieldTemplate: function(template) {
                this._$field.empty();
                var data = this._fieldRenderData();
                template.render({
                    model: data,
                    container: domUtils.getPublicElement(this._$field)
                })
            },
            _fieldRenderData: function() {
                return this.option("selectedItem")
            },
            _popupShowingHandler: function() {
                this.callBase.apply(this, arguments);
                if (this.option("cleanSearchOnOpening")) {
                    if (this.option("searchEnabled") && this._searchBox.option("value")) {
                        this._searchBox.option("value", "");
                        this._searchCanceled()
                    }
                    this._list && this._list.option("focusedElement", null)
                }
                if (this.option("dropDownOptions.fullScreen") && this.option("_scrollToSelectedItemEnabled")) {
                    this._popup.option("position").of = $(window)
                }
            },
            _scrollToSelectedItem: function() {
                var selectedIndex = this._list.option("selectedIndex");
                var listItems = this._list.option("items");
                var itemsCount = listItems.length;
                if (0 !== itemsCount) {
                    if (this._list.option("grouped")) {
                        this._list.scrollToItem({
                            group: itemsCount - 1,
                            item: listItems[itemsCount - 1].items.length - 1
                        })
                    } else {
                        this._list.scrollToItem(itemsCount - 1)
                    }
                    this._list.scrollToItem(selectedIndex)
                }
            },
            _setPopupPosition: function() {
                if (!this.option("itemCenteringEnabled")) {
                    return
                }
                var selectedIndex = this._list.option("selectedIndex");
                var flipped = this._popup._$wrapper.hasClass(LOOKUP_POPOVER_FLIP_VERTICAL_CLASS);
                if (selectedIndex === -1 || flipped) {
                    return
                }
                var selectedListItem = $(this._list.element()).find("." + LIST_ITEM_SELECTED_CLASS);
                if (selectedListItem.offset().top < 0 || this._list.scrollTop() !== selectedListItem.position().top) {
                    this._scrollToSelectedItem()
                }
                var differenceOfHeights = (selectedListItem.height() - $(this.element()).height()) / 2;
                var popupContentParent = $(this._popup.content()).parent();
                var differenceOfOffsets = selectedListItem.offset().top - popupContentParent.offset().top;
                var lookupTop = $(this.element()).offset().top;
                var popupOffsetY = differenceOfHeights;
                if (lookupTop > differenceOfOffsets) {
                    popupOffsetY += differenceOfOffsets
                } else {
                    this._scrollToSelectedItem()
                }
                var position = translator.locate(popupContentParent);
                translator.move(popupContentParent, {
                    top: position.top - popupOffsetY
                })
            },
            _getPopupHeight: function(listItemsCount) {
                return this._list && this._list.itemElements() && this.option("itemCenteringEnabled") ? this._list.itemElements().height() * listItemsCount + 2 * MATERIAL_LOOKUP_LIST_PADDING + (this._$searchWrapper ? this._$searchWrapper.outerHeight() : 0) + (this._popup._$bottom ? this._popup._$bottom.outerHeight() : 0) + (this._popup._$title ? this._popup._$title.outerHeight() : 0) : "auto"
            },
            _getPopupWidth: function() {
                return this.option("itemCenteringEnabled") ? $(this.element()).outerWidth() : .8 * $(window).width()
            },
            _renderPopup: function() {
                if (this.option("usePopover") && !this.option("dropDownOptions.fullScreen")) {
                    if (this.option("_scrollToSelectedItemEnabled") && this.option("itemCenteringEnabled")) {
                        this.callBase()
                    } else {
                        this._renderPopover()
                    }
                } else {
                    this.callBase()
                }
                this._$popup.addClass(LOOKUP_POPUP_CLASS);
                this._popup._wrapper().addClass(LOOKUP_POPUP_WRAPPER_CLASS)
            },
            _renderPopover: function() {
                this._popup = this._createComponent(this._$popup, Popover, extend(this._popupConfig(), {
                    showEvent: null,
                    hideEvent: null,
                    target: this.$element(),
                    fullScreen: false,
                    shading: false,
                    closeOnTargetScroll: true,
                    width: this._isInitialOptionValue("dropDownOptions.width") ? function() {
                        return this.$element().outerWidth()
                    }.bind(this) : this._popupConfig().width
                }));
                this._popup.on({
                    showing: this._popupShowingHandler.bind(this),
                    shown: this._popupShownHandler.bind(this),
                    hiding: this._popupHidingHandler.bind(this),
                    hidden: this._popupHiddenHandler.bind(this),
                    contentReady: this._contentReadyHandler.bind(this)
                });
                if (this.option("_scrollToSelectedItemEnabled")) {
                    this._popup._$arrow.remove()
                }
                this._setPopupContentId(this._popup.$content());
                this._contentReadyHandler()
            },
            _popupHidingHandler: function() {
                this.callBase();
                this.option("focusStateEnabled") && this.focus()
            },
            _popupHiddenHandler: function() {
                this.callBase();
                if (this.option("_scrollToSelectedItemEnabled")) {
                    translator.resetPosition($(this._popup.content()).parent())
                }
            },
            _preventFocusOnPopup: commonUtils.noop,
            _popupConfig: function() {
                var result = extend(this.callBase(), {
                    toolbarItems: this._getPopupToolbarItems(),
                    closeOnTargetScroll: false,
                    onPositioned: null,
                    maxHeight: function() {
                        return $(window).height()
                    },
                    showTitle: this.option("dropDownOptions.showTitle"),
                    title: this.option("dropDownOptions.title"),
                    titleTemplate: this._getTemplateByOption("dropDownOptions.titleTemplate"),
                    onTitleRendered: this.option("dropDownOptions.onTitleRendered"),
                    fullScreen: this.option("dropDownOptions.fullScreen"),
                    shading: this.option("dropDownOptions.shading"),
                    closeOnOutsideClick: this.option("dropDownOptions.closeOnOutsideClick")
                });
                delete result.animation;
                delete result.position;
                if (this.option("_scrollToSelectedItemEnabled") && this.option("itemCenteringEnabled")) {
                    result.position = {
                        my: "left top",
                        at: "left top",
                        of: this.element()
                    }
                }
                each(["position", "animation", "width", "height"], function(_, optionName) {
                    var popupOptionValue = this.option("dropDownOptions.".concat(optionName));
                    if (void 0 !== popupOptionValue) {
                        result[optionName] = popupOptionValue
                    }
                }.bind(this));
                return result
            },
            _getPopupToolbarItems: function() {
                var buttonsConfig = "useButtons" === this.option("applyValueMode") ? this._popupToolbarItemsConfig() : [];
                var cancelButton = this._getCancelButtonConfig();
                if (cancelButton) {
                    buttonsConfig.push(cancelButton)
                }
                var clearButton = this._getClearButtonConfig();
                if (clearButton) {
                    buttonsConfig.push(clearButton)
                }
                return this._applyButtonsLocation(buttonsConfig)
            },
            _popupToolbarItemsConfig: function() {
                return [{
                    shortcut: "done",
                    options: {
                        onClick: this._applyButtonHandler.bind(this),
                        text: this.option("applyButtonText")
                    }
                }]
            },
            _getCancelButtonConfig: function() {
                return this.option("showCancelButton") ? {
                    shortcut: "cancel",
                    onClick: this._cancelButtonHandler.bind(this),
                    options: {
                        onInitialized: function(e) {
                            e.component.registerKeyHandler("escape", this.close.bind(this))
                        }.bind(this),
                        text: this.option("cancelButtonText")
                    }
                } : null
            },
            _getClearButtonConfig: function() {
                return this.option("showClearButton") ? {
                    shortcut: "clear",
                    onClick: this._resetValue.bind(this),
                    options: {
                        text: this.option("clearButtonText")
                    }
                } : null
            },
            _applyButtonHandler: function() {
                this.option("value", this._valueGetter(this._currentSelectedItem()));
                this.callBase()
            },
            _cancelButtonHandler: function() {
                this._refreshSelected();
                this.callBase()
            },
            _refreshPopupVisibility: function() {
                if (this.option("opened")) {
                    this._updatePopupHeight()
                }
            },
            _dimensionChanged: function() {
                if (this.option("usePopover") && !this.option("dropDownOptions.width")) {
                    this.option("dropDownOptions.width", this.$element().width())
                }
                this.callBase()
            },
            _updatePopupDimensions: function() {
                this._updatePopupHeight()
            },
            _input: function() {
                return this._$searchBox || this.callBase()
            },
            _renderPopupContent: function() {
                this.callBase();
                this._renderSearch()
            },
            _renderSearch: function() {
                var _this = this;
                var isSearchEnabled = this.option("searchEnabled");
                this._toggleSearchClass(isSearchEnabled);
                if (isSearchEnabled) {
                    var $searchWrapper = this._$searchWrapper = $("<div>").addClass(LOOKUP_SEARCH_WRAPPER_CLASS);
                    var $searchBox = this._$searchBox = $("<div>").addClass(LOOKUP_SEARCH_CLASS).appendTo($searchWrapper);
                    var currentDevice = devices.current();
                    var searchMode = currentDevice.android && currentDevice.version[0] >= 5 ? "text" : "search";
                    var isKeyboardListeningEnabled = false;
                    this._searchBox = this._createComponent($searchBox, TextBox, {
                        onDisposing: function() {
                            return isKeyboardListeningEnabled = false
                        },
                        onFocusIn: function() {
                            return isKeyboardListeningEnabled = true
                        },
                        onFocusOut: function() {
                            return isKeyboardListeningEnabled = false
                        },
                        onKeyboardHandled: function(opts) {
                            return isKeyboardListeningEnabled && _this._list._keyboardHandler(opts)
                        },
                        mode: searchMode,
                        showClearButton: true,
                        valueChangeEvent: this.option("valueChangeEvent"),
                        onValueChanged: this._searchHandler.bind(this)
                    });
                    this._registerSearchKeyHandlers();
                    $searchWrapper.insertBefore(this._$list);
                    this._setSearchPlaceholder()
                }
            },
            _removeSearch: function() {
                this._$searchWrapper && this._$searchWrapper.remove();
                delete this._$searchWrapper;
                this._$searchBox && this._$searchBox.remove();
                delete this._$searchBox;
                delete this._searchBox
            },
            _selectListItemHandler: function(e) {
                var $itemElement = $(this._list.option("focusedElement"));
                if (!$itemElement.length) {
                    return
                }
                e.preventDefault();
                this._selectListItem(e.itemData, $itemElement)
            },
            _registerSearchKeyHandlers: function() {
                this._searchBox.registerKeyHandler("escape", this.close.bind(this));
                this._searchBox.registerKeyHandler("enter", this._selectListItemHandler.bind(this));
                this._searchBox.registerKeyHandler("space", this._selectListItemHandler.bind(this));
                this._searchBox.registerKeyHandler("end", commonUtils.noop);
                this._searchBox.registerKeyHandler("home", commonUtils.noop)
            },
            _toggleSearchClass: function(isSearchEnabled) {
                if (this._popup) {
                    this._popup._wrapper().toggleClass(LOOKUP_POPUP_SEARCH_CLASS, isSearchEnabled)
                }
            },
            _setSearchPlaceholder: function() {
                if (!this._$searchBox) {
                    return
                }
                var minSearchLength = this.option("minSearchLength");
                var placeholder = this.option("searchPlaceholder");
                if (minSearchLength && placeholder === messageLocalization.format("Search")) {
                    placeholder = messageLocalization.getFormatter("dxLookup-searchPlaceholder")(minSearchLength)
                }
                this._searchBox.option("placeholder", placeholder)
            },
            _setAriaTargetForList: commonUtils.noop,
            _renderList: function() {
                this.callBase();
                this._list.registerKeyHandler("escape", function() {
                    this.close()
                }.bind(this))
            },
            _listConfig: function() {
                return extend(this.callBase(), {
                    tabIndex: 0,
                    grouped: this.option("grouped"),
                    groupTemplate: this._getTemplateByOption("groupTemplate"),
                    pullRefreshEnabled: this.option("pullRefreshEnabled"),
                    useNativeScrolling: this.option("useNativeScrolling"),
                    pullingDownText: this.option("pullingDownText"),
                    pulledDownText: this.option("pulledDownText"),
                    refreshingText: this.option("refreshingText"),
                    pageLoadingText: this.option("pageLoadingText"),
                    onScroll: this._scrollHandler.bind(this),
                    onPullRefresh: this._pullRefreshHandler.bind(this),
                    onPageLoading: this._pageLoadingHandler.bind(this),
                    pageLoadMode: this.option("pageLoadMode"),
                    nextButtonText: this.option("nextButtonText"),
                    indicateLoading: this.option("searchEnabled"),
                    onSelectionChanged: this._getSelectionChangedHandler()
                })
            },
            _getSelectionChangedHandler: function() {
                return this.option("showSelectionControls") ? this._selectionChangeHandler.bind(this) : commonUtils.noop
            },
            _listContentReadyHandler: function() {
                this.callBase.apply(this, arguments);
                this._refreshSelected()
            },
            _setFocusPolicy: function() {
                if (!this.option("focusStateEnabled")) {
                    return
                }
                if (this.option("searchEnabled")) {
                    this._searchBox.focus()
                } else {
                    eventsEngine.trigger(this._$list, "focus")
                }
            },
            _focusTarget: function() {
                return this._$field
            },
            _keyboardEventBindingTarget: function() {
                return this._$field
            },
            _listItemClickHandler: function(e) {
                this._saveValueChangeEvent(e.event);
                this._selectListItem(e.itemData, e.event.currentTarget)
            },
            _selectListItem: function(itemData, target) {
                this._list.selectItem(target);
                if ("instantly" === this.option("applyValueMode")) {
                    this._applyButtonHandler()
                }
            },
            _currentSelectedItem: function() {
                return this.option("grouped") ? this._list.option("selectedItems[0]").items[0] : this._list.option("selectedItems[0]")
            },
            _resetValue: function(e) {
                this._saveValueChangeEvent(e.event);
                this.option("value", null);
                this.option("opened", false)
            },
            _searchValue: function() {
                return this.option("searchEnabled") && this._searchBox ? this._searchBox.option("value") : ""
            },
            _renderInputValue: function() {
                return this.callBase().always(function() {
                    this._refreshSelected()
                }.bind(this))
            },
            _renderPlaceholder: function() {
                if (0 === this.$element().find("." + TEXTEDITOR_INPUT_CLASS).length) {
                    return
                }
                this.callBase()
            },
            _clean: function() {
                this._$fieldWrapper.remove();
                this._$searchBox = null;
                delete this._inkRipple;
                this.callBase()
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                extend(this._deprecatedOptions, {
                    title: {
                        since: "20.1",
                        alias: "dropDownOptions.title"
                    },
                    titleTemplate: {
                        since: "20.1",
                        alias: "dropDownOptions.titleTemplate"
                    },
                    onTitleRendered: {
                        since: "20.1",
                        alias: "dropDownOptions.onTitleRendered"
                    },
                    fullScreen: {
                        since: "20.1",
                        alias: "dropDownOptions.fullScreen"
                    },
                    popupWidth: {
                        since: "20.1",
                        alias: "dropDownOptions.width"
                    },
                    popupHeight: {
                        since: "20.1",
                        alias: "dropDownOptions.height"
                    },
                    shading: {
                        since: "20.1",
                        alias: "dropDownOptions.shading"
                    },
                    closeOnOutsideClick: {
                        since: "20.1",
                        alias: "dropDownOptions.closeOnOutsideClick"
                    },
                    position: {
                        since: "20.1",
                        alias: "dropDownOptions.position"
                    },
                    animation: {
                        since: "20.1",
                        alias: "dropDownOptions.animation"
                    }
                })
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "dataSource":
                        this.callBase.apply(this, arguments);
                        this._renderField();
                        break;
                    case "searchEnabled":
                        if (this._popup) {
                            this._removeSearch();
                            this._renderSearch()
                        }
                        break;
                    case "searchPlaceholder":
                        this._setSearchPlaceholder();
                        break;
                    case "minSearchLength":
                        this._setSearchPlaceholder();
                        this.callBase.apply(this, arguments);
                        break;
                    case "title":
                    case "titleTemplate":
                    case "onTitleRendered":
                    case "shading":
                    case "animation":
                    case "position":
                    case "closeOnOutsideClick":
                    case "fullScreen":
                        this._setPopupOption(name, value);
                        break;
                    case "usePopover":
                    case "placeholder":
                        this._invalidate();
                        break;
                    case "clearButtonText":
                    case "showClearButton":
                    case "showCancelButton":
                        this._setPopupOption("toolbarItems", this._getPopupToolbarItems());
                        break;
                    case "applyValueMode":
                        this.callBase.apply(this, arguments);
                        break;
                    case "popupWidth":
                        this._setPopupOption("width", "auto" === value ? this.initialOption("dropDownOptions").width : value);
                        break;
                    case "popupHeight":
                        this._setPopupOption("height", "auto" === value ? this.initialOption("dropDownOptions").height : value);
                        break;
                    case "onPageLoading":
                        this._initPageLoadingAction();
                        break;
                    case "onPullRefresh":
                        this._initPullRefreshAction();
                        break;
                    case "pullRefreshEnabled":
                    case "useNativeScrolling":
                    case "pullingDownText":
                    case "pulledDownText":
                    case "refreshingText":
                    case "pageLoadingText":
                    case "nextButtonText":
                    case "grouped":
                    case "groupTemplate":
                        this._setListOption(name);
                        break;
                    case "onScroll":
                        this._initScrollAction();
                        break;
                    case "pageLoadMode":
                        this._setListOption("pageLoadMode", this.option("pageLoadMode"));
                        break;
                    case "cleanSearchOnOpening":
                    case "_scrollToSelectedItemEnabled":
                        break;
                    case "itemCenteringEnabled":
                        if (this.option("_scrollToSelectedItemEnabled") && value) {
                            this.option("usePopover", false)
                        }
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            focus: function() {
                this.option("opened") ? this._setFocusPolicy() : eventsEngine.trigger(this._focusTarget(), "focus")
            },
            field: function() {
                return this._$field
            }
        });
        registerComponent("dxLookup", Lookup);
        module.exports = Lookup
    },
    /*!****************************************!*\
      !*** ./artifacts/transpiled/ui/map.js ***!
      \****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var Promise = __webpack_require__( /*! ../core/polyfills/promise */ 67);
        var fromPromise = __webpack_require__( /*! ../core/utils/deferred */ 6).fromPromise;
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var errors = __webpack_require__( /*! ./widget/ui.errors */ 18);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var Widget = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var inArray = __webpack_require__( /*! ../core/utils/array */ 14).inArray;
        var isNumeric = __webpack_require__( /*! ../core/utils/type */ 1).isNumeric;
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../events/pointer */ 23);
        var wrapToArray = __webpack_require__( /*! ../core/utils/array */ 14).wrapToArray;
        var PROVIDERS = {
            googleStatic: __webpack_require__( /*! ./map/provider.google_static */ 612),
            google: __webpack_require__( /*! ./map/provider.dynamic.google */ 613),
            bing: __webpack_require__( /*! ./map/provider.dynamic.bing */ 614)
        };
        var MAP_CLASS = "dx-map";
        var MAP_CONTAINER_CLASS = "dx-map-container";
        var MAP_SHIELD_CLASS = "dx-map-shield";
        var NATIVE_CLICK_CLASS = "dx-native-click";
        var Map = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    bounds: {
                        northEast: null,
                        southWest: null
                    },
                    center: {
                        lat: 0,
                        lng: 0
                    },
                    zoom: 1,
                    width: 300,
                    height: 300,
                    type: "roadmap",
                    provider: "google",
                    autoAdjust: true,
                    markers: [],
                    markerIconSrc: null,
                    onMarkerAdded: null,
                    onMarkerRemoved: null,
                    routes: [],
                    onRouteAdded: null,
                    onRouteRemoved: null,
                    key: {
                        bing: "",
                        google: "",
                        googleStatic: ""
                    },
                    controls: false,
                    onReady: null,
                    onUpdated: null,
                    onClick: null
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(MAP_CLASS).addClass(NATIVE_CLICK_CLASS);
                this._lastAsyncAction = Promise.resolve();
                this._checkOption("provider");
                this._checkOption("markers");
                this._checkOption("routes");
                this._initContainer();
                this._grabEvents();
                this._rendered = {}
            },
            _checkOption: function(option) {
                var value = this.option(option);
                if ("markers" === option && !Array.isArray(value)) {
                    throw errors.Error("E1022")
                }
                if ("routes" === option && !Array.isArray(value)) {
                    throw errors.Error("E1023")
                }
            },
            _initContainer: function() {
                this._$container = $("<div>").addClass(MAP_CONTAINER_CLASS);
                this.$element().append(this._$container)
            },
            _grabEvents: function() {
                var eventName = eventUtils.addNamespace(pointerEvents.down, this.NAME);
                eventsEngine.on(this.$element(), eventName, this._cancelEvent.bind(this))
            },
            _cancelEvent: function(e) {
                var cancelByProvider = this._provider && this._provider.isEventsCanceled(e) && !this.option("disabled");
                if (cancelByProvider) {
                    e.stopPropagation()
                }
            },
            _saveRendered: function(option) {
                var value = this.option(option);
                this._rendered[option] = value.slice()
            },
            _render: function() {
                this.callBase();
                this._renderShield();
                this._saveRendered("markers");
                this._saveRendered("routes");
                this._provider = new(PROVIDERS[this.option("provider")])(this, this._$container);
                this._queueAsyncAction("render", this._rendered.markers, this._rendered.routes)
            },
            _renderShield: function() {
                var $shield;
                if (this.option("disabled")) {
                    $shield = $("<div>").addClass(MAP_SHIELD_CLASS);
                    this.$element().append($shield)
                } else {
                    $shield = this.$element().find("." + MAP_SHIELD_CLASS);
                    $shield.remove()
                }
            },
            _clean: function() {
                this._cleanFocusState();
                if (this._provider) {
                    this._provider.clean()
                }
                this._provider = null;
                this._lastAsyncAction = Promise.resolve();
                this.setOptionSilent("bounds", {
                    northEast: null,
                    southWest: null
                });
                delete this._suppressAsyncAction
            },
            _optionChanged: function(args) {
                var name = args.name;
                var changeBag = this._optionChangeBag;
                this._optionChangeBag = null;
                switch (name) {
                    case "disabled":
                        this._renderShield();
                        this.callBase(args);
                        break;
                    case "width":
                    case "height":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "provider":
                        this._suppressAsyncAction = true;
                        this._invalidate();
                        break;
                    case "key":
                        errors.log("W1001");
                        break;
                    case "bounds":
                        this._queueAsyncAction("updateBounds");
                        break;
                    case "center":
                        this._queueAsyncAction("updateCenter");
                        break;
                    case "zoom":
                        this._queueAsyncAction("updateZoom");
                        break;
                    case "type":
                        this._queueAsyncAction("updateMapType");
                        break;
                    case "controls":
                        this._queueAsyncAction("updateControls", this._rendered.markers, this._rendered.routes);
                        break;
                    case "autoAdjust":
                        this._queueAsyncAction("adjustViewport");
                        break;
                    case "markers":
                    case "routes":
                        this._checkOption(name);
                        var prevValue = this._rendered[name];
                        this._saveRendered(name);
                        this._queueAsyncAction("update" + inflector.titleize(name), changeBag ? changeBag.removed : prevValue, changeBag ? changeBag.added : this._rendered[name]).then(function(result) {
                            if (changeBag) {
                                changeBag.resolve(result)
                            }
                        });
                        break;
                    case "markerIconSrc":
                        this._queueAsyncAction("updateMarkers", this._rendered.markers, this._rendered.markers);
                        break;
                    case "onReady":
                    case "onUpdated":
                    case "onMarkerAdded":
                    case "onMarkerRemoved":
                    case "onRouteAdded":
                    case "onRouteRemoved":
                    case "onClick":
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                this._queueAsyncAction("updateDimensions")
            },
            _queueAsyncAction: function(name) {
                var options = [].slice.call(arguments).slice(1);
                var isActionSuppressed = this._suppressAsyncAction;
                this._lastAsyncAction = this._lastAsyncAction.then(function() {
                    if (!this._provider || isActionSuppressed) {
                        this._asyncActionSuppressed = true;
                        return Promise.resolve()
                    }
                    return this._provider[name].apply(this._provider, options).then(function(result) {
                        result = wrapToArray(result);
                        var mapRefreshed = result[0];
                        if (mapRefreshed) {
                            this._triggerReadyAction()
                        }
                        if (!mapRefreshed && "clean" !== name) {
                            this._triggerUpdateAction()
                        }
                        return result[1]
                    }.bind(this))
                }.bind(this));
                return this._lastAsyncAction
            },
            _triggerReadyAction: function() {
                this._createActionByOption("onReady")({
                    originalMap: this._provider.map()
                })
            },
            _triggerUpdateAction: function() {
                this._createActionByOption("onUpdated")()
            },
            setOptionSilent: function(name, value) {
                this._setOptionWithoutOptionChange(name, value)
            },
            addMarker: function(marker) {
                return this._addFunction("markers", marker)
            },
            removeMarker: function(marker) {
                return this._removeFunction("markers", marker)
            },
            addRoute: function(route) {
                return this._addFunction("routes", route)
            },
            removeRoute: function(route) {
                return this._removeFunction("routes", route)
            },
            _addFunction: function(optionName, addingValue) {
                var optionValue = this.option(optionName);
                var addingValues = wrapToArray(addingValue);
                optionValue.push.apply(optionValue, addingValues);
                return this._partialArrayOptionChange(optionName, optionValue, addingValues, [])
            },
            _removeFunction: function(optionName, removingValue) {
                var optionValue = this.option(optionName);
                var removingValues = wrapToArray(removingValue);
                each(removingValues, function(removingIndex, removingValue) {
                    var index = isNumeric(removingValue) ? removingValue : inArray(removingValue, optionValue);
                    if (index !== -1) {
                        var removing = optionValue.splice(index, 1)[0];
                        removingValues.splice(removingIndex, 1, removing)
                    } else {
                        throw errors.log("E1021", inflector.titleize(optionName.substring(0, optionName.length - 1)), removingValue)
                    }
                });
                return this._partialArrayOptionChange(optionName, optionValue, [], removingValues)
            },
            _partialArrayOptionChange: function(optionName, optionValue, addingValues, removingValues) {
                return fromPromise(new Promise(function(resolve) {
                    this._optionChangeBag = {
                        resolve: resolve,
                        added: addingValues,
                        removed: removingValues
                    };
                    this.option(optionName, optionValue)
                }.bind(this)).then(function(result) {
                    return result && 1 === result.length ? result[0] : result
                }), this)
            }
        });
        registerComponent("dxMap", Map);
        module.exports = Map
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.google_static.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var Provider = __webpack_require__( /*! ./provider */ 334);
        var Color = __webpack_require__( /*! ../../color */ 91);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var GOOGLE_STATIC_URL = "https://maps.google.com/maps/api/staticmap?";
        var GoogleStaticProvider = Provider.inherit({
            _locationToString: function(location) {
                var latLng = this._getLatLng(location);
                return latLng ? latLng.lat + "," + latLng.lng : location.toString().replace(/ /g, "+")
            },
            _renderImpl: function() {
                return this._updateMap()
            },
            updateDimensions: function() {
                return this._updateMap()
            },
            updateMapType: function() {
                return this._updateMap()
            },
            updateBounds: function() {
                return Promise.resolve()
            },
            updateCenter: function() {
                return this._updateMap()
            },
            updateZoom: function() {
                return this._updateMap()
            },
            updateControls: function() {
                return Promise.resolve()
            },
            addMarkers: function(options) {
                var that = this;
                return this._updateMap().then(function(result) {
                    each(options, function(_, options) {
                        that._fireMarkerAddedAction({
                            options: options
                        })
                    });
                    return result
                })
            },
            removeMarkers: function(options) {
                var that = this;
                return this._updateMap().then(function(result) {
                    each(options, function(_, options) {
                        that._fireMarkerRemovedAction({
                            options: options
                        })
                    });
                    return result
                })
            },
            adjustViewport: function() {
                return Promise.resolve()
            },
            addRoutes: function(options) {
                var that = this;
                return this._updateMap().then(function(result) {
                    each(options, function(_, options) {
                        that._fireRouteAddedAction({
                            options: options
                        })
                    });
                    return result
                })
            },
            removeRoutes: function(options) {
                var that = this;
                return this._updateMap().then(function(result) {
                    each(options, function(_, options) {
                        that._fireRouteRemovedAction({
                            options: options
                        })
                    });
                    return result
                })
            },
            clean: function() {
                this._$container.css("backgroundImage", "none");
                eventsEngine.off(this._$container, this._addEventNamespace(clickEvent.name));
                return Promise.resolve()
            },
            mapRendered: function() {
                return true
            },
            _updateMap: function() {
                var key = this._keyOption("googleStatic");
                var $container = this._$container;
                var requestOptions = ["sensor=false", "size=" + Math.round($container.width()) + "x" + Math.round($container.height()), "maptype=" + this._option("type"), "center=" + this._locationToString(this._option("center")), "zoom=" + this._option("zoom"), this._markersSubstring()];
                requestOptions.push.apply(requestOptions, this._routeSubstrings());
                if (key) {
                    requestOptions.push("key=" + key)
                }
                var request = GOOGLE_STATIC_URL + requestOptions.join("&");
                this._$container.css("background", 'url("' + request + '") no-repeat 0 0');
                this._attachClickEvent();
                return Promise.resolve(true)
            },
            _markersSubstring: function() {
                var that = this;
                var markers = [];
                var markerIcon = this._option("markerIconSrc");
                if (markerIcon) {
                    markers.push("icon:" + markerIcon)
                }
                each(this._option("markers"), function(_, marker) {
                    markers.push(that._locationToString(marker.location))
                });
                return "markers=" + markers.join("|")
            },
            _routeSubstrings: function() {
                var that = this;
                var routes = [];
                each(this._option("routes"), function(_, route) {
                    var color = new Color(route.color || that._defaultRouteColor()).toHex().replace("#", "0x");
                    var opacity = Math.round(255 * (route.opacity || that._defaultRouteOpacity())).toString(16);
                    var width = route.weight || that._defaultRouteWeight();
                    var locations = [];
                    each(route.locations, function(_, routePoint) {
                        locations.push(that._locationToString(routePoint))
                    });
                    routes.push("path=color:" + color + opacity + "|weight:" + width + "|" + locations.join("|"))
                });
                return routes
            },
            _attachClickEvent: function() {
                var that = this;
                var eventName = this._addEventNamespace(clickEvent.name);
                eventsEngine.off(this._$container, eventName);
                eventsEngine.on(this._$container, eventName, function(e) {
                    that._fireClickAction({
                        event: e
                    })
                })
            }
        });
        GoogleStaticProvider.remapConstant = function(newValue) {
            GOOGLE_STATIC_URL = newValue
        };
        module.exports = GoogleStaticProvider
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.dynamic.google.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var map = __webpack_require__( /*! ../../core/utils/iterator */ 4).map;
        var DynamicProvider = __webpack_require__( /*! ./provider.dynamic */ 335);
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var Color = __webpack_require__( /*! ../../color */ 91);
        var ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var GOOGLE_MAP_READY = "_googleScriptReady";
        var GOOGLE_URL = "https://maps.googleapis.com/maps/api/js?callback=" + GOOGLE_MAP_READY;
        var INFO_WINDOW_CLASS = "gm-style-iw";
        var CustomMarker;
        var initCustomMarkerClass = function() {
            CustomMarker = function(options) {
                this._position = options.position;
                this._offset = options.offset;
                this._$overlayContainer = $("<div>").css({
                    position: "absolute",
                    display: "none",
                    cursor: "pointer"
                }).append(options.html);
                this.setMap(options.map)
            };
            CustomMarker.prototype = new google.maps.OverlayView;
            CustomMarker.prototype.onAdd = function() {
                var $pane = $(this.getPanes().overlayMouseTarget);
                $pane.append(this._$overlayContainer);
                this._clickListener = google.maps.event.addDomListener(this._$overlayContainer.get(0), "click", function(e) {
                    google.maps.event.trigger(this, "click");
                    e.preventDefault()
                }.bind(this));
                this.draw()
            };
            CustomMarker.prototype.onRemove = function() {
                google.maps.event.removeListener(this._clickListener);
                this._$overlayContainer.remove()
            };
            CustomMarker.prototype.draw = function() {
                var position = this.getProjection().fromLatLngToDivPixel(this._position);
                this._$overlayContainer.css({
                    left: position.x + this._offset.left,
                    top: position.y + this._offset.top,
                    display: "block"
                })
            }
        };
        var googleMapsLoaded = function() {
            return window.google && window.google.maps
        };
        var googleMapsLoader;
        var GoogleProvider = DynamicProvider.inherit({
            _mapType: function(type) {
                var mapTypes = {
                    hybrid: google.maps.MapTypeId.HYBRID,
                    roadmap: google.maps.MapTypeId.ROADMAP,
                    satellite: google.maps.MapTypeId.SATELLITE
                };
                return mapTypes[type] || mapTypes.hybrid
            },
            _movementMode: function(type) {
                var movementTypes = {
                    driving: google.maps.TravelMode.DRIVING,
                    walking: google.maps.TravelMode.WALKING
                };
                return movementTypes[type] || movementTypes.driving
            },
            _resolveLocation: function(location) {
                return new Promise(function(resolve) {
                    var latLng = this._getLatLng(location);
                    if (latLng) {
                        resolve(new google.maps.LatLng(latLng.lat, latLng.lng))
                    } else {
                        this._geocodeLocation(location).then(function(geocodedLocation) {
                            resolve(geocodedLocation)
                        })
                    }
                }.bind(this))
            },
            _geocodedLocations: {},
            _geocodeLocationImpl: function(location) {
                return new Promise(function(resolve) {
                    if (!isDefined(location)) {
                        resolve(new google.maps.LatLng(0, 0));
                        return
                    }
                    var geocoder = new google.maps.Geocoder;
                    geocoder.geocode({
                        address: location
                    }, function(results, status) {
                        if (status === google.maps.GeocoderStatus.OK) {
                            resolve(results[0].geometry.location)
                        } else {
                            errors.log("W1006", status);
                            resolve(new google.maps.LatLng(0, 0))
                        }
                    })
                })
            },
            _normalizeLocation: function(location) {
                return {
                    lat: location.lat(),
                    lng: location.lng()
                }
            },
            _normalizeLocationRect: function(locationRect) {
                return {
                    northEast: this._normalizeLocation(locationRect.getNorthEast()),
                    southWest: this._normalizeLocation(locationRect.getSouthWest())
                }
            },
            _loadImpl: function() {
                return new Promise(function(resolve) {
                    if (googleMapsLoaded()) {
                        resolve()
                    } else {
                        if (!googleMapsLoader) {
                            googleMapsLoader = this._loadMapScript()
                        }
                        googleMapsLoader.then(function() {
                            if (googleMapsLoaded()) {
                                resolve();
                                return
                            }
                            this._loadMapScript().then(resolve)
                        }.bind(this))
                    }
                }.bind(this)).then(function() {
                    initCustomMarkerClass()
                })
            },
            _loadMapScript: function() {
                return new Promise(function(resolve) {
                    var key = this._keyOption("google");
                    window[GOOGLE_MAP_READY] = resolve;
                    ajax.sendRequest({
                        url: GOOGLE_URL + (key ? "&key=" + key : ""),
                        dataType: "script"
                    })
                }.bind(this)).then(function() {
                    try {
                        delete window[GOOGLE_MAP_READY]
                    } catch (e) {
                        window[GOOGLE_MAP_READY] = void 0
                    }
                })
            },
            _init: function() {
                return new Promise(function(resolve) {
                    this._resolveLocation(this._option("center")).then(function(center) {
                        var showDefaultUI = this._option("controls");
                        this._map = new google.maps.Map(this._$container[0], {
                            zoom: this._option("zoom"),
                            center: center,
                            disableDefaultUI: !showDefaultUI
                        });
                        var listener = google.maps.event.addListener(this._map, "idle", function() {
                            resolve(listener)
                        })
                    }.bind(this))
                }.bind(this)).then(function(listener) {
                    google.maps.event.removeListener(listener)
                })
            },
            _attachHandlers: function() {
                this._boundsChangeListener = google.maps.event.addListener(this._map, "bounds_changed", this._boundsChangeHandler.bind(this));
                this._clickListener = google.maps.event.addListener(this._map, "click", this._clickActionHandler.bind(this))
            },
            _boundsChangeHandler: function() {
                var bounds = this._map.getBounds();
                this._option("bounds", this._normalizeLocationRect(bounds));
                var center = this._map.getCenter();
                this._option("center", this._normalizeLocation(center));
                if (!this._preventZoomChangeEvent) {
                    this._option("zoom", this._map.getZoom())
                }
            },
            _clickActionHandler: function(e) {
                this._fireClickAction({
                    location: this._normalizeLocation(e.latLng)
                })
            },
            updateDimensions: function() {
                var center = this._option("center");
                google.maps.event.trigger(this._map, "resize");
                this._option("center", center);
                return this.updateCenter()
            },
            updateMapType: function() {
                this._map.setMapTypeId(this._mapType(this._option("type")));
                return Promise.resolve()
            },
            updateBounds: function() {
                return Promise.all([this._resolveLocation(this._option("bounds.northEast")), this._resolveLocation(this._option("bounds.southWest"))]).then(function(result) {
                    var bounds = new google.maps.LatLngBounds;
                    bounds.extend(result[0]);
                    bounds.extend(result[1]);
                    this._map.fitBounds(bounds)
                }.bind(this))
            },
            updateCenter: function() {
                return this._resolveLocation(this._option("center")).then(function(center) {
                    this._map.setCenter(center);
                    this._option("center", this._normalizeLocation(center))
                }.bind(this))
            },
            updateZoom: function() {
                this._map.setZoom(this._option("zoom"));
                return Promise.resolve()
            },
            updateControls: function() {
                var showDefaultUI = this._option("controls");
                this._map.setOptions({
                    disableDefaultUI: !showDefaultUI
                });
                return Promise.resolve()
            },
            isEventsCanceled: function(e) {
                var gestureHandling = this._map && this._map.get("gestureHandling");
                var isInfoWindowContent = $(e.target).closest(".".concat(INFO_WINDOW_CLASS)).length > 0;
                if (isInfoWindowContent || "desktop" !== devices.real().deviceType && "cooperative" === gestureHandling) {
                    return false
                }
                return this.callBase()
            },
            _renderMarker: function(options) {
                return this._resolveLocation(options.location).then(function(location) {
                    var marker;
                    if (options.html) {
                        marker = new CustomMarker({
                            map: this._map,
                            position: location,
                            html: options.html,
                            offset: extend({
                                top: 0,
                                left: 0
                            }, options.htmlOffset)
                        })
                    } else {
                        marker = new google.maps.Marker({
                            position: location,
                            map: this._map,
                            icon: options.iconSrc || this._option("markerIconSrc")
                        })
                    }
                    var infoWindow = this._renderTooltip(marker, options.tooltip);
                    var listener;
                    if (options.onClick || options.tooltip) {
                        var markerClickAction = this._mapWidget._createAction(options.onClick || noop);
                        var markerNormalizedLocation = this._normalizeLocation(location);
                        listener = google.maps.event.addListener(marker, "click", function() {
                            markerClickAction({
                                location: markerNormalizedLocation
                            });
                            if (infoWindow) {
                                infoWindow.open(this._map, marker)
                            }
                        }.bind(this))
                    }
                    return {
                        location: location,
                        marker: marker,
                        listener: listener
                    }
                }.bind(this))
            },
            _renderTooltip: function(marker, options) {
                if (!options) {
                    return
                }
                options = this._parseTooltipOptions(options);
                var infoWindow = new google.maps.InfoWindow({
                    content: options.text
                });
                if (options.visible) {
                    infoWindow.open(this._map, marker)
                }
                return infoWindow
            },
            _destroyMarker: function(marker) {
                marker.marker.setMap(null);
                if (marker.listener) {
                    google.maps.event.removeListener(marker.listener)
                }
            },
            _renderRoute: function(options) {
                return Promise.all(map(options.locations, function(point) {
                    return this._resolveLocation(point)
                }.bind(this))).then(function(locations) {
                    return new Promise(function(resolve) {
                        var origin = locations.shift();
                        var destination = locations.pop();
                        var waypoints = map(locations, function(location) {
                            return {
                                location: location,
                                stopover: true
                            }
                        });
                        var request = {
                            origin: origin,
                            destination: destination,
                            waypoints: waypoints,
                            optimizeWaypoints: true,
                            travelMode: this._movementMode(options.mode)
                        };
                        (new google.maps.DirectionsService).route(request, function(response, status) {
                            if (status === google.maps.DirectionsStatus.OK) {
                                var color = new Color(options.color || this._defaultRouteColor()).toHex();
                                var directionOptions = {
                                    directions: response,
                                    map: this._map,
                                    suppressMarkers: true,
                                    preserveViewport: true,
                                    polylineOptions: {
                                        strokeWeight: options.weight || this._defaultRouteWeight(),
                                        strokeOpacity: options.opacity || this._defaultRouteOpacity(),
                                        strokeColor: color
                                    }
                                };
                                var route = new google.maps.DirectionsRenderer(directionOptions);
                                var bounds = response.routes[0].bounds;
                                resolve({
                                    instance: route,
                                    northEast: bounds.getNorthEast(),
                                    southWest: bounds.getSouthWest()
                                })
                            } else {
                                errors.log("W1006", status);
                                resolve({
                                    instance: new google.maps.DirectionsRenderer({})
                                })
                            }
                        }.bind(this))
                    }.bind(this))
                }.bind(this))
            },
            _destroyRoute: function(routeObject) {
                routeObject.instance.setMap(null)
            },
            _fitBounds: function() {
                this._updateBounds();
                if (this._bounds && this._option("autoAdjust")) {
                    var zoomBeforeFitting = this._map.getZoom();
                    this._preventZoomChangeEvent = true;
                    this._map.fitBounds(this._bounds);
                    this._boundsChangeHandler();
                    var zoomAfterFitting = this._map.getZoom();
                    if (zoomBeforeFitting < zoomAfterFitting) {
                        this._map.setZoom(zoomBeforeFitting)
                    } else {
                        this._option("zoom", zoomAfterFitting)
                    }
                    delete this._preventZoomChangeEvent
                }
                return Promise.resolve()
            },
            _extendBounds: function(location) {
                if (this._bounds) {
                    this._bounds.extend(location)
                } else {
                    this._bounds = new google.maps.LatLngBounds;
                    this._bounds.extend(location)
                }
            },
            clean: function() {
                if (this._map) {
                    google.maps.event.removeListener(this._boundsChangeListener);
                    google.maps.event.removeListener(this._clickListener);
                    this._clearMarkers();
                    this._clearRoutes();
                    delete this._map;
                    this._$container.empty()
                }
                return Promise.resolve()
            }
        });
        GoogleProvider.remapConstant = function(newValue) {
            GOOGLE_URL = newValue
        };
        module.exports = GoogleProvider
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.dynamic.bing.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var window = __webpack_require__( /*! ../../core/utils/window */ 7).getWindow();
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 67);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var DynamicProvider = __webpack_require__( /*! ./provider.dynamic */ 335);
        var Color = __webpack_require__( /*! ../../color */ 91);
        var ajax = __webpack_require__( /*! ../../core/utils/ajax */ 75);
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var BING_MAP_READY = "_bingScriptReady";
        var BING_URL_V8 = "https://www.bing.com/api/maps/mapcontrol?callback=" + BING_MAP_READY;
        var INFOBOX_V_OFFSET_V8 = 13;
        var BING_CREDENTIALS = "AhuxC0dQ1DBTNo8L-H9ToVMQStmizZzBJdraTSgCzDSWPsA1Qd8uIvFSflzxdaLH";
        var MIN_LOCATION_RECT_LENGTH = 1e-16;
        var msMapsLoaded = function() {
            return window.Microsoft && window.Microsoft.Maps
        };
        var msMapsLoader;
        var BingProvider = DynamicProvider.inherit({
            _mapType: function(type) {
                var mapTypes = {
                    roadmap: Microsoft.Maps.MapTypeId.road,
                    hybrid: Microsoft.Maps.MapTypeId.aerial,
                    satellite: Microsoft.Maps.MapTypeId.aerial
                };
                return mapTypes[type] || mapTypes.road
            },
            _movementMode: function(type) {
                var movementTypes = {
                    driving: Microsoft.Maps.Directions.RouteMode.driving,
                    walking: Microsoft.Maps.Directions.RouteMode.walking
                };
                return movementTypes[type] || movementTypes.driving
            },
            _resolveLocation: function(location) {
                return new Promise(function(resolve) {
                    var latLng = this._getLatLng(location);
                    if (latLng) {
                        resolve(new Microsoft.Maps.Location(latLng.lat, latLng.lng))
                    } else {
                        this._geocodeLocation(location).then(function(geocodedLocation) {
                            resolve(geocodedLocation)
                        })
                    }
                }.bind(this))
            },
            _geocodedLocations: {},
            _geocodeLocationImpl: function(location) {
                return new Promise(function(resolve) {
                    if (!isDefined(location)) {
                        resolve(new Microsoft.Maps.Location(0, 0));
                        return
                    }
                    var searchManager = new Microsoft.Maps.Search.SearchManager(this._map);
                    var searchRequest = {
                        where: location,
                        count: 1,
                        callback: function(searchResponse) {
                            var result = searchResponse.results[0];
                            if (result) {
                                var boundsBox = searchResponse.results[0].location;
                                resolve(new Microsoft.Maps.Location(boundsBox.latitude, boundsBox.longitude))
                            } else {
                                resolve(new Microsoft.Maps.Location(0, 0))
                            }
                        }
                    };
                    searchManager.geocode(searchRequest)
                }.bind(this))
            },
            _normalizeLocation: function(location) {
                return {
                    lat: location.latitude,
                    lng: location.longitude
                }
            },
            _normalizeLocationRect: function(locationRect) {
                var northWest = this._normalizeLocation(locationRect.getNorthwest());
                var southEast = this._normalizeLocation(locationRect.getSoutheast());
                return {
                    northEast: {
                        lat: northWest.lat,
                        lng: southEast.lng
                    },
                    southWest: {
                        lat: southEast.lat,
                        lng: northWest.lng
                    }
                }
            },
            _loadImpl: function() {
                return new Promise(function(resolve) {
                    if (msMapsLoaded()) {
                        resolve()
                    } else {
                        if (!msMapsLoader) {
                            msMapsLoader = this._loadMapScript()
                        }
                        msMapsLoader.then(function() {
                            if (msMapsLoaded()) {
                                resolve();
                                return
                            }
                            this._loadMapScript().then(resolve)
                        }.bind(this))
                    }
                }.bind(this)).then(function() {
                    return Promise.all([new Promise(function(resolve) {
                        Microsoft.Maps.loadModule("Microsoft.Maps.Search", {
                            callback: resolve
                        })
                    }), new Promise(function(resolve) {
                        Microsoft.Maps.loadModule("Microsoft.Maps.Directions", {
                            callback: resolve
                        })
                    })])
                })
            },
            _loadMapScript: function() {
                return new Promise(function(resolve) {
                    window[BING_MAP_READY] = resolve;
                    ajax.sendRequest({
                        url: BING_URL_V8,
                        dataType: "script"
                    })
                }).then(function() {
                    try {
                        delete window[BING_MAP_READY]
                    } catch (e) {
                        window[BING_MAP_READY] = void 0
                    }
                })
            },
            _init: function() {
                this._createMap();
                return Promise.resolve()
            },
            _createMap: function() {
                var controls = this._option("controls");
                this._map = new Microsoft.Maps.Map(this._$container[0], {
                    credentials: this._keyOption("bing") || BING_CREDENTIALS,
                    zoom: this._option("zoom"),
                    showDashboard: controls,
                    showMapTypeSelector: controls,
                    showScalebar: controls
                })
            },
            _attachHandlers: function() {
                this._providerViewChangeHandler = Microsoft.Maps.Events.addHandler(this._map, "viewchange", this._viewChangeHandler.bind(this));
                this._providerClickHandler = Microsoft.Maps.Events.addHandler(this._map, "click", this._clickActionHandler.bind(this))
            },
            _viewChangeHandler: function() {
                var bounds = this._map.getBounds();
                this._option("bounds", this._normalizeLocationRect(bounds));
                var center = this._map.getCenter();
                this._option("center", this._normalizeLocation(center));
                if (!this._preventZoomChangeEvent) {
                    this._option("zoom", this._map.getZoom())
                }
            },
            _clickActionHandler: function(e) {
                if ("map" === e.targetType) {
                    this._fireClickAction({
                        location: this._normalizeLocation(e.location)
                    })
                }
            },
            updateDimensions: function() {
                var $container = this._$container;
                this._map.setOptions({
                    width: $container.width(),
                    height: $container.height()
                });
                return Promise.resolve()
            },
            updateMapType: function() {
                var type = this._option("type");
                var labelOverlay = Microsoft.Maps.LabelOverlay;
                this._map.setView({
                    animate: false,
                    mapTypeId: this._mapType(type),
                    labelOverlay: "satellite" === type ? labelOverlay.hidden : labelOverlay.visible
                });
                return Promise.resolve()
            },
            updateBounds: function() {
                return Promise.all([this._resolveLocation(this._option("bounds.northEast")), this._resolveLocation(this._option("bounds.southWest"))]).then(function(result) {
                    var bounds = new Microsoft.Maps.LocationRect.fromLocations(result[0], result[1]);
                    this._map.setView({
                        animate: false,
                        bounds: bounds
                    })
                }.bind(this))
            },
            updateCenter: function() {
                return this._resolveLocation(this._option("center")).then(function(center) {
                    this._map.setView({
                        animate: false,
                        center: center
                    })
                }.bind(this))
            },
            updateZoom: function() {
                this._map.setView({
                    animate: false,
                    zoom: this._option("zoom")
                });
                return Promise.resolve()
            },
            updateControls: function() {
                this.clean();
                return this.render.apply(this, arguments)
            },
            _renderMarker: function(options) {
                return this._resolveLocation(options.location).then(function(location) {
                    var pushpinOptions = {
                        icon: options.iconSrc || this._option("markerIconSrc")
                    };
                    if (options.html) {
                        extend(pushpinOptions, {
                            htmlContent: options.html,
                            width: null,
                            height: null
                        });
                        var htmlOffset = options.htmlOffset;
                        if (htmlOffset) {
                            pushpinOptions.anchor = new Microsoft.Maps.Point((-htmlOffset.left), (-htmlOffset.top))
                        }
                    }
                    var pushpin = new Microsoft.Maps.Pushpin(location, pushpinOptions);
                    this._map.entities.push(pushpin);
                    var infobox = this._renderTooltip(location, options.tooltip);
                    var handler;
                    if (options.onClick || options.tooltip) {
                        var markerClickAction = this._mapWidget._createAction(options.onClick || noop);
                        var markerNormalizedLocation = this._normalizeLocation(location);
                        handler = Microsoft.Maps.Events.addHandler(pushpin, "click", function() {
                            markerClickAction({
                                location: markerNormalizedLocation
                            });
                            if (infobox) {
                                infobox.setOptions({
                                    visible: true
                                })
                            }
                        })
                    }
                    return {
                        location: location,
                        marker: pushpin,
                        infobox: infobox,
                        handler: handler
                    }
                }.bind(this))
            },
            _renderTooltip: function(location, options) {
                if (!options) {
                    return
                }
                options = this._parseTooltipOptions(options);
                var infobox = new Microsoft.Maps.Infobox(location, {
                    description: options.text,
                    offset: new Microsoft.Maps.Point(0, INFOBOX_V_OFFSET_V8),
                    visible: options.visible
                });
                infobox.setMap(this._map);
                return infobox
            },
            _destroyMarker: function(marker) {
                this._map.entities.remove(marker.marker);
                if (marker.infobox) {
                    marker.infobox.setMap(null)
                }
                if (marker.handler) {
                    Microsoft.Maps.Events.removeHandler(marker.handler)
                }
            },
            _renderRoute: function(options) {
                return Promise.all(iteratorUtils.map(options.locations, function(point) {
                    return this._resolveLocation(point)
                }.bind(this))).then(function(locations) {
                    return new Promise(function(resolve) {
                        var direction = new Microsoft.Maps.Directions.DirectionsManager(this._map);
                        var color = new Color(options.color || this._defaultRouteColor()).toHex();
                        var routeColor = new Microsoft.Maps.Color.fromHex(color);
                        routeColor.a = 255 * (options.opacity || this._defaultRouteOpacity());
                        direction.setRenderOptions({
                            autoUpdateMapView: false,
                            displayRouteSelector: false,
                            waypointPushpinOptions: {
                                visible: false
                            },
                            drivingPolylineOptions: {
                                strokeColor: routeColor,
                                strokeThickness: options.weight || this._defaultRouteWeight()
                            },
                            walkingPolylineOptions: {
                                strokeColor: routeColor,
                                strokeThickness: options.weight || this._defaultRouteWeight()
                            }
                        });
                        direction.setRequestOptions({
                            routeMode: this._movementMode(options.mode),
                            routeDraggable: false
                        });
                        iteratorUtils.each(locations, function(_, location) {
                            var waypoint = new Microsoft.Maps.Directions.Waypoint({
                                location: location
                            });
                            direction.addWaypoint(waypoint)
                        });
                        var directionHandlers = [];
                        directionHandlers.push(Microsoft.Maps.Events.addHandler(direction, "directionsUpdated", function(args) {
                            while (directionHandlers.length) {
                                Microsoft.Maps.Events.removeHandler(directionHandlers.pop())
                            }
                            var routeSummary = args.routeSummary[0];
                            resolve({
                                instance: direction,
                                northEast: routeSummary.northEast,
                                southWest: routeSummary.southWest
                            })
                        }));
                        directionHandlers.push(Microsoft.Maps.Events.addHandler(direction, "directionsError", function(args) {
                            while (directionHandlers.length) {
                                Microsoft.Maps.Events.removeHandler(directionHandlers.pop())
                            }
                            var status = "RouteResponseCode: " + args.responseCode + " - " + args.message;
                            errors.log("W1006", status);
                            resolve({
                                instance: direction
                            })
                        }));
                        direction.calculateDirections()
                    }.bind(this))
                }.bind(this))
            },
            _destroyRoute: function(routeObject) {
                routeObject.instance.dispose()
            },
            _fitBounds: function() {
                this._updateBounds();
                if (this._bounds && this._option("autoAdjust")) {
                    var zoomBeforeFitting = this._map.getZoom();
                    this._preventZoomChangeEvent = true;
                    var bounds = this._bounds.clone();
                    bounds.height = 1.1 * bounds.height;
                    bounds.width = 1.1 * bounds.width;
                    this._map.setView({
                        animate: false,
                        bounds: bounds,
                        zoom: zoomBeforeFitting
                    });
                    var zoomAfterFitting = this._map.getZoom();
                    if (zoomBeforeFitting < zoomAfterFitting) {
                        this._map.setView({
                            animate: false,
                            zoom: zoomBeforeFitting
                        })
                    } else {
                        this._option("zoom", zoomAfterFitting)
                    }
                    delete this._preventZoomChangeEvent
                }
                return Promise.resolve()
            },
            _extendBounds: function(location) {
                if (this._bounds) {
                    this._bounds = new Microsoft.Maps.LocationRect.fromLocations(this._bounds.getNorthwest(), this._bounds.getSoutheast(), location)
                } else {
                    this._bounds = new Microsoft.Maps.LocationRect(location, MIN_LOCATION_RECT_LENGTH, MIN_LOCATION_RECT_LENGTH)
                }
            },
            clean: function() {
                if (this._map) {
                    Microsoft.Maps.Events.removeHandler(this._providerViewChangeHandler);
                    Microsoft.Maps.Events.removeHandler(this._providerClickHandler);
                    this._clearMarkers();
                    this._clearRoutes();
                    this._map.dispose()
                }
                return Promise.resolve()
            }
        });
        BingProvider.remapConstant = function(newValue) {
            BING_URL_V8 = newValue
        };
        module.exports = BingProvider
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/nav_bar.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var NavBarItem = __webpack_require__( /*! ./nav_bar/item */ 616);
        var Tabs = __webpack_require__( /*! ./tabs */ 203);
        var NAVBAR_CLASS = "dx-navbar";
        var ITEM_CLASS = "dx-item-content";
        var NAVBAR_ITEM_CLASS = "dx-nav-item";
        var NAVBAR_ITEM_CONTENT_CLASS = "dx-nav-item-content";
        var NavBar = Tabs.inherit({
            ctor: function(element, options) {
                this.callBase(element, options);
                this._logDeprecatedComponentWarning("20.1", "dxTabs")
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    scrollingEnabled: false
                })
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(NAVBAR_CLASS)
            },
            _postprocessRenderItem: function(args) {
                this.callBase(args);
                var $itemElement = args.itemElement;
                var itemData = args.itemData;
                $itemElement.addClass(NAVBAR_ITEM_CLASS);
                $itemElement.find("." + ITEM_CLASS).addClass(NAVBAR_ITEM_CONTENT_CLASS);
                if (!itemData.icon) {
                    $itemElement.addClass("dx-navbar-text-item")
                }
            }
        });
        NavBar.ItemClass = NavBarItem;
        registerComponent("dxNavBar", NavBar);
        module.exports = NavBar
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/nav_bar/item.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var TabsItem = __webpack_require__( /*! ../tabs/item */ 327);
        var TABS_ITEM_BADGE_CLASS = "dx-tabs-item-badge";
        var NAVBAR_ITEM_BADGE_CLASS = "dx-navbar-item-badge";
        var NavBarItem = TabsItem.inherit({
            _renderBadge: function(badge) {
                this.callBase(badge);
                this._$element.children("." + TABS_ITEM_BADGE_CLASS).removeClass(TABS_ITEM_BADGE_CLASS).addClass(NAVBAR_ITEM_BADGE_CLASS)
            }
        });
        module.exports = NavBarItem
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/radio_group/radio_group.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _utils = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var _utils2 = _interopRequireDefault(_utils);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _uiCollection_widget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _ui = __webpack_require__( /*! ../editor/ui.data_expression */ 232);
        var _ui2 = _interopRequireDefault(_ui);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked";
        var RADIO_BUTTON_CLASS = "dx-radiobutton";
        var RADIO_BUTTON_ICON_CHECKED_CLASS = "dx-radiobutton-icon-checked";
        var RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon";
        var RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot";
        var RADIO_GROUP_HORIZONTAL_CLASS = "dx-radiogroup-horizontal";
        var RADIO_GROUP_VERTICAL_CLASS = "dx-radiogroup-vertical";
        var RADIO_VALUE_CONTAINER_CLASS = "dx-radio-value-container";
        var RADIO_GROUP_CLASS = "dx-radiogroup";
        var RADIO_FEEDBACK_HIDE_TIMEOUT = 100;
        var RadioCollection = function(_CollectionWidget) {
            _inherits(RadioCollection, _CollectionWidget);
            var _super = _createSuper(RadioCollection);

            function RadioCollection() {
                _classCallCheck(this, RadioCollection);
                return _super.apply(this, arguments)
            }
            _createClass(RadioCollection, [{
                key: "_focusTarget",
                value: function() {
                    return this.$element().parent()
                }
            }, {
                key: "_nullValueSelectionSupported",
                value: function() {
                    return true
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    var defaultOptions = _get(_getPrototypeOf(RadioCollection.prototype), "_getDefaultOptions", this).call(this);
                    return (0, _extend.extend)(defaultOptions, _ui2.default._dataExpressionDefaultOptions(), {
                        _itemAttributes: {
                            role: "radio"
                        }
                    })
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(RadioCollection.prototype), "_initMarkup", this).call(this);
                    (0, _common.deferRender)(function() {
                        _this.itemElements().addClass(RADIO_BUTTON_CLASS)
                    })
                }
            }, {
                key: "_keyboardEventBindingTarget",
                value: function() {
                    return this._focusTarget()
                }
            }, {
                key: "_postprocessRenderItem",
                value: function(args) {
                    var html = args.itemData.html,
                        itemElement = args.itemElement;
                    if (!html) {
                        var $radio = (0, _renderer2.default)("<div>").addClass(RADIO_BUTTON_ICON_CLASS);
                        (0, _renderer2.default)("<div>").addClass(RADIO_BUTTON_ICON_DOT_CLASS).appendTo($radio);
                        var $radioContainer = (0, _renderer2.default)("<div>").append($radio).addClass(RADIO_VALUE_CONTAINER_CLASS);
                        (0, _renderer2.default)(itemElement).prepend($radioContainer)
                    }
                    _get(_getPrototypeOf(RadioCollection.prototype), "_postprocessRenderItem", this).call(this, args)
                }
            }, {
                key: "_processSelectableItem",
                value: function($itemElement, isSelected) {
                    _get(_getPrototypeOf(RadioCollection.prototype), "_processSelectableItem", this).call(this, $itemElement, isSelected);
                    $itemElement.toggleClass(RADIO_BUTTON_CHECKED_CLASS, isSelected).find(".".concat(RADIO_BUTTON_ICON_CLASS)).first().toggleClass(RADIO_BUTTON_ICON_CHECKED_CLASS, isSelected);
                    this.setAria("checked", isSelected, $itemElement)
                }
            }, {
                key: "_refreshContent",
                value: function() {
                    this._prepareContent();
                    this._renderContent()
                }
            }, {
                key: "_supportedKeys",
                value: function() {
                    var parent = _get(_getPrototypeOf(RadioCollection.prototype), "_supportedKeys", this).call(this);
                    return (0, _extend.extend)({}, parent, {
                        enter: function(e) {
                            e.preventDefault();
                            return parent.enter.apply(this, arguments)
                        },
                        space: function(e) {
                            e.preventDefault();
                            return parent.space.apply(this, arguments)
                        }
                    })
                }
            }, {
                key: "_itemElements",
                value: function() {
                    return this._itemContainer().children(this._itemSelector())
                }
            }]);
            return RadioCollection
        }(_uiCollection_widget2.default);
        var RadioGroup = function(_Editor) {
            _inherits(RadioGroup, _Editor);
            var _super2 = _createSuper(RadioGroup);

            function RadioGroup() {
                _classCallCheck(this, RadioGroup);
                return _super2.apply(this, arguments)
            }
            _createClass(RadioGroup, [{
                key: "_clean",
                value: function() {
                    delete this._inkRipple;
                    _get(_getPrototypeOf(RadioGroup.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_dataSourceOptions",
                value: function() {
                    return {
                        paginate: false
                    }
                }
            }, {
                key: "_defaultOptionsRules",
                value: function() {
                    var defaultOptionsRules = _get(_getPrototypeOf(RadioGroup.prototype), "_defaultOptionsRules", this).call(this);
                    return defaultOptionsRules.concat([{
                        device: {
                            tablet: true
                        },
                        options: {
                            layout: "horizontal"
                        }
                    }, {
                        device: function() {
                            return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                        },
                        options: {
                            focusStateEnabled: true
                        }
                    }])
                }
            }, {
                key: "_fireContentReadyAction",
                value: function(force) {
                    force && _get(_getPrototypeOf(RadioGroup.prototype), "_fireContentReadyAction", this).call(this)
                }
            }, {
                key: "_focusTarget",
                value: function() {
                    return this.$element()
                }
            }, {
                key: "_getAriaTarget",
                value: function() {
                    return this.$element()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    var defaultOptions = _get(_getPrototypeOf(RadioGroup.prototype), "_getDefaultOptions", this).call(this);
                    return (0, _extend.extend)(defaultOptions, (0, _extend.extend)(_ui2.default._dataExpressionDefaultOptions(), {
                        hoverStateEnabled: true,
                        activeStateEnabled: true,
                        layout: "vertical",
                        useInkRipple: false
                    }))
                }
            }, {
                key: "_getItemValue",
                value: function(item) {
                    return this._valueGetter ? this._valueGetter(item) : item.text
                }
            }, {
                key: "_getSubmitElement",
                value: function() {
                    return this._$submitElement
                }
            }, {
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(RadioGroup.prototype), "_init", this).call(this);
                    this._activeStateUnit = ".".concat(RADIO_BUTTON_CLASS);
                    this._feedbackHideTimeout = RADIO_FEEDBACK_HIDE_TIMEOUT;
                    this._initDataExpressions()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this.$element().addClass(RADIO_GROUP_CLASS);
                    this._renderSubmitElement();
                    this.setAria("role", "radiogroup");
                    this._renderRadios();
                    this.option("useInkRipple") && this._renderInkRipple();
                    this._renderLayout();
                    _get(_getPrototypeOf(RadioGroup.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_itemClickHandler",
                value: function(_ref) {
                    var itemElement = _ref.itemElement,
                        event = _ref.event,
                        itemData = _ref.itemData;
                    if (this.itemElements().is(itemElement)) {
                        var newValue = this._getItemValue(itemData);
                        if (newValue !== this.option("value")) {
                            this._saveValueChangeEvent(event);
                            this.option("value", newValue)
                        }
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name,
                        value = args.value;
                    this._dataExpressionOptionChanged(args);
                    switch (name) {
                        case "useInkRipple":
                            this._invalidate();
                            break;
                        case "focusStateEnabled":
                        case "accessKey":
                        case "tabIndex":
                            this._setCollectionWidgetOption(name, value);
                            break;
                        case "disabled":
                            _get(_getPrototypeOf(RadioGroup.prototype), "_optionChanged", this).call(this, args);
                            this._setCollectionWidgetOption(name, value);
                            break;
                        case "dataSource":
                            this._setCollectionWidgetOption("dataSource", this._dataSource);
                            break;
                        case "valueExpr":
                            this._setCollectionWidgetOption("keyExpr", this._getCollectionKeyExpr());
                            break;
                        case "value":
                            this._setCollectionWidgetOption("selectedItemKeys", [value]);
                            this._setSubmitValue(value);
                            _get(_getPrototypeOf(RadioGroup.prototype), "_optionChanged", this).call(this, args);
                            break;
                        case "items":
                        case "itemTemplate":
                        case "displayExpr":
                            break;
                        case "layout":
                            this._renderLayout();
                            this._updateItemsSize();
                            break;
                        default:
                            _get(_getPrototypeOf(RadioGroup.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(RadioGroup.prototype), "_render", this).call(this);
                    this._updateItemsSize()
                }
            }, {
                key: "_renderInkRipple",
                value: function() {
                    this._inkRipple = _utils2.default.render({
                        waveSizeCoefficient: 3.3,
                        useHoldAnimation: false,
                        isCentered: true
                    })
                }
            }, {
                key: "_renderLayout",
                value: function() {
                    var layout = this.option("layout");
                    var $element = this.$element();
                    $element.toggleClass(RADIO_GROUP_VERTICAL_CLASS, "vertical" === layout);
                    $element.toggleClass(RADIO_GROUP_HORIZONTAL_CLASS, "horizontal" === layout)
                }
            }, {
                key: "_renderRadios",
                value: function() {
                    var _this2 = this;
                    this._areRadiosCreated = new _deferred.Deferred;
                    var $radios = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var _this$option = this.option(),
                        value = _this$option.value,
                        displayExpr = _this$option.displayExpr,
                        accessKey = _this$option.accessKey,
                        focusStateEnabled = _this$option.focusStateEnabled,
                        itemTemplate = _this$option.itemTemplate,
                        tabIndex = _this$option.tabIndex,
                        valueExpr = _this$option.valueExpr;
                    var isNullSelectable = "this" !== valueExpr;
                    this._radios = this._createComponent($radios, RadioCollection, {
                        displayExpr: displayExpr,
                        accessKey: accessKey,
                        dataSource: this._dataSource,
                        focusStateEnabled: focusStateEnabled,
                        itemTemplate: itemTemplate,
                        keyExpr: this._getCollectionKeyExpr(),
                        noDataText: "",
                        onContentReady: function() {
                            return _this2._fireContentReadyAction(true)
                        },
                        onItemClick: this._itemClickHandler.bind(this),
                        scrollingEnabled: false,
                        selectionByClick: false,
                        selectionMode: "single",
                        selectedItemKeys: isNullSelectable || (0, _type.isDefined)(value) ? [value] : [],
                        tabIndex: tabIndex
                    });
                    this._areRadiosCreated.resolve()
                }
            }, {
                key: "_renderSubmitElement",
                value: function() {
                    this._$submitElement = (0, _renderer2.default)("<input>").attr("type", "hidden").appendTo(this.$element());
                    this._setSubmitValue()
                }
            }, {
                key: "_setOptionsByReference",
                value: function() {
                    _get(_getPrototypeOf(RadioGroup.prototype), "_setOptionsByReference", this).call(this);
                    (0, _extend.extend)(this._optionsByReference, {
                        value: true
                    })
                }
            }, {
                key: "_setSubmitValue",
                value: function(value) {
                    value = value || this.option("value");
                    var submitValue = "this" === this.option("valueExpr") ? this._displayGetter(value) : value;
                    this._$submitElement.val(submitValue)
                }
            }, {
                key: "_setCollectionWidgetOption",
                value: function() {
                    this._areRadiosCreated.done(this._setWidgetOption.bind(this, "_radios", arguments))
                }
            }, {
                key: "_toggleActiveState",
                value: function($element, value, e) {
                    _get(_getPrototypeOf(RadioGroup.prototype), "_toggleActiveState", this).call(this, $element, value, e);
                    if (this._inkRipple) {
                        var event = {
                            element: $element.find(".".concat(RADIO_BUTTON_ICON_CLASS)),
                            event: e
                        };
                        value ? this._inkRipple.showWave(event) : this._inkRipple.hideWave(event)
                    }
                }
            }, {
                key: "_updateItemsSize",
                value: function() {
                    if ("horizontal" === this.option("layout")) {
                        this.itemElements().css("height", "auto")
                    } else {
                        var itemsCount = this.option("items").length;
                        this.itemElements().css("height", 100 / itemsCount + "%")
                    }
                }
            }, {
                key: "focus",
                value: function() {
                    this._radios && this._radios.focus()
                }
            }, {
                key: "itemElements",
                value: function() {
                    return this._radios.itemElements()
                }
            }]);
            return RadioGroup
        }(_editor2.default);
        RadioGroup.include(_ui2.default);
        (0, _component_registrator2.default)("dxRadioGroup", RadioGroup);
        module.exports = RadioGroup
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/range_slider.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var Slider = __webpack_require__( /*! ./slider */ 337);
        var SliderHandle = __webpack_require__( /*! ./slider/ui.slider_handle */ 338);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var applyServerDecimalSeparator = __webpack_require__( /*! ../core/utils/common */ 3).applyServerDecimalSeparator;
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var RANGE_SLIDER_CLASS = "dx-rangeslider";
        var RANGE_SLIDER_START_HANDLE_CLASS = RANGE_SLIDER_CLASS + "-start-handle";
        var RANGE_SLIDER_END_HANDLE_CLASS = RANGE_SLIDER_CLASS + "-end-handle";
        var RangeSlider = Slider.inherit({
            _supportedKeys: function() {
                var isRTL = this.option("rtlEnabled");
                var that = this;
                var _changeHandle = function(e, capturedHandle) {
                    if (that.option("start") === that.option("end")) {
                        that._capturedHandle = capturedHandle;
                        e.target = that._capturedHandle;
                        eventsEngine.trigger(that._capturedHandle, "focus")
                    }
                };
                var _setHandleValue = function(e, step, sign) {
                    var isStart = $(e.target).hasClass(RANGE_SLIDER_START_HANDLE_CLASS);
                    var valueOption = isStart ? "start" : "end";
                    var val = that.option(valueOption);
                    step = that._valueStep(step);
                    val += sign * (isRTL ? -step : step);
                    that.option(valueOption, val)
                };
                var moveHandleRight = function(e, step) {
                    _changeHandle(e, isRTL ? that._$handleStart : that._$handleEnd);
                    _setHandleValue(e, step, 1)
                };
                var moveHandleLeft = function(e, step) {
                    _changeHandle(e, isRTL ? that._$handleEnd : that._$handleStart);
                    _setHandleValue(e, step, -1)
                };
                return extend(this.callBase(), {
                    leftArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleLeft(e, this.option("step"))
                    },
                    rightArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleRight(e, this.option("step"))
                    },
                    pageUp: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleRight(e, this.option("step") * this.option("keyStep"))
                    },
                    pageDown: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleLeft(e, this.option("step") * this.option("keyStep"))
                    },
                    home: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        var isStart = $(e.target).hasClass(RANGE_SLIDER_START_HANDLE_CLASS);
                        var valueOption = isStart ? "start" : "end";
                        var startOption = isStart ? "min" : "start";
                        var val = this.option(startOption);
                        this.option(valueOption, val)
                    },
                    end: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        var isStart = $(e.target).hasClass(RANGE_SLIDER_START_HANDLE_CLASS);
                        var valueOption = isStart ? "start" : "end";
                        var endOption = isStart ? "end" : "max";
                        var val = this.option(endOption);
                        this.option(valueOption, val)
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    start: 40,
                    end: 60,
                    value: [40, 60],
                    startName: "",
                    endName: ""
                })
            },
            _renderSubmitElement: function() {
                var $element = this.$element();
                this._$submitStartElement = $("<input>").attr("type", "hidden").attr("name", this.option("startName")).appendTo($element);
                this._$submitEndElement = $("<input>").attr("type", "hidden").attr("name", this.option("endName")).appendTo($element)
            },
            _initOptions: function(options) {
                this.callBase(options);
                var initialValue = this.initialOption("value");
                var value = this.option("value");
                if (value[0] === initialValue[0] && value[1] === initialValue[1]) {
                    this.option("value", [this.option("start"), this.option("end")])
                } else {
                    this.option({
                        start: value[0],
                        end: value[1]
                    })
                }
            },
            _initMarkup: function() {
                this.$element().addClass(RANGE_SLIDER_CLASS);
                this.callBase()
            },
            _renderContentImpl: function() {
                this._callHandlerMethod("repaint");
                this.callBase()
            },
            _renderHandle: function() {
                this._$handleStart = this._renderHandleImpl(this.option("start"), this._$handleStart).addClass(RANGE_SLIDER_START_HANDLE_CLASS);
                this._$handleEnd = this._renderHandleImpl(this.option("end"), this._$handleEnd).addClass(RANGE_SLIDER_END_HANDLE_CLASS);
                this._updateHandleAriaLabels()
            },
            _startHandler: function(args) {
                var e = args.event;
                var $range = this._$range;
                var rangeWidth = $range.width();
                var eventOffsetX = eventUtils.eventData(e).x - this._$bar.offset().left;
                var startHandleX = $range.position().left;
                var endHandleX = $range.position().left + rangeWidth;
                var rtlEnabled = this.option("rtlEnabled");
                var startHandleIsClosest = (rtlEnabled ? -1 : 1) * ((startHandleX + endHandleX) / 2 - eventOffsetX) > 0;
                this._capturedHandle = startHandleIsClosest ? this._$handleStart : this._$handleEnd;
                this.callBase(args)
            },
            _updateHandleAriaLabels: function() {
                this.setAria("label", messageLocalization.getFormatter("dxRangeSlider-ariaFrom")(this.option("dxRangeSlider-ariaFrom")), this._$handleStart);
                this.setAria("label", messageLocalization.getFormatter("dxRangeSlider-ariaTill")(this.option("dxRangeSlider-ariaTill")), this._$handleEnd)
            },
            _activeHandle: function() {
                return this._capturedHandle
            },
            _updateHandlePosition: function(e) {
                var rtlEnabled = this.option("rtlEnabled");
                var offsetDirection = rtlEnabled ? -1 : 1;
                var max = this.option("max");
                var min = this.option("min");
                var newRatio = this._startOffset + offsetDirection * e.event.offset / this._swipePixelRatio();
                newRatio = newRatio.toPrecision(12);
                var newValue = newRatio * (max - min) + min;
                this._updateSelectedRangePosition(newRatio, newRatio);
                SliderHandle.getInstance(this._activeHandle()).fitTooltipPosition;
                this._changeValueOnSwipe(newRatio);
                var startValue = this.option("start");
                var endValue = this.option("end");
                var $nextHandle;
                if (startValue === endValue) {
                    if (newValue < startValue) {
                        $nextHandle = this._$handleStart
                    } else {
                        $nextHandle = this._$handleEnd
                    }
                    eventsEngine.trigger($nextHandle, "focus");
                    if ($nextHandle && $nextHandle !== this._capturedHandle) {
                        this._updateSelectedRangePosition((startValue - min) / (max - min), (endValue - min) / (max - min));
                        this._toggleActiveState(this._activeHandle(), false);
                        this._toggleActiveState($nextHandle, true);
                        this._capturedHandle = $nextHandle
                    }
                    this._updateSelectedRangePosition(newRatio, newRatio);
                    this._changeValueOnSwipe(newRatio)
                }
            },
            _updateSelectedRangePosition: function(leftRatio, rightRatio) {
                var rtlEnabled = this.option("rtlEnabled");
                var moveRight = this._capturedHandle === this._$handleStart && rtlEnabled || this._capturedHandle === this._$handleEnd && !rtlEnabled;
                var prop = moveRight ? "right" : "left";
                if (rtlEnabled ^ moveRight) {
                    this._$range.css(prop, 100 - 100 * rightRatio + "%")
                } else {
                    this._$range.css(prop, 100 * leftRatio + "%")
                }
            },
            _setValueOnSwipe: function(value) {
                var option = this._capturedHandle === this._$handleStart ? "start" : "end";
                var start = this.option("start");
                var end = this.option("end");
                var max = this.option("max");
                var min = this.option("min");
                start = Math.min(Math.max(start, min), max);
                end = Math.min(Math.max(end, min), max);
                if ("start" === option) {
                    start = value > end ? end : value
                } else {
                    end = value < start ? start : value
                }
                this.option("value", [start, end])
            },
            _renderValue: function() {
                var valStart = this.option("start");
                var valEnd = this.option("end");
                var min = this.option("min");
                var max = this.option("max");
                var rtlEnabled = this.option("rtlEnabled");
                valStart = Math.max(min, Math.min(valStart, max));
                valEnd = Math.max(valStart, Math.min(valEnd, max));
                this._setOptionWithoutOptionChange("start", valStart);
                this._setOptionWithoutOptionChange("end", valEnd);
                this._setOptionWithoutOptionChange("value", [valStart, valEnd]);
                this._$submitStartElement.val(applyServerDecimalSeparator(valStart));
                this._$submitEndElement.val(applyServerDecimalSeparator(valEnd));
                var ratio1 = max === min ? 0 : (valStart - min) / (max - min);
                var ratio2 = max === min ? 0 : (valEnd - min) / (max - min);
                var startOffset = parseFloat((100 * ratio1).toPrecision(12)) + "%";
                var endOffset = parseFloat((100 * (1 - ratio2)).toPrecision(12)) + "%";
                !this._needPreventAnimation && this._setRangeStyles({
                    right: rtlEnabled ? startOffset : endOffset,
                    left: rtlEnabled ? endOffset : startOffset
                });
                SliderHandle.getInstance(this._$handleStart).option("value", valStart);
                SliderHandle.getInstance(this._$handleEnd).option("value", valEnd)
            },
            _callHandlerMethod: function(name, args) {
                SliderHandle.getInstance(this._$handleStart)[name](args);
                SliderHandle.getInstance(this._$handleEnd)[name](args)
            },
            _setValueOption: function() {
                var start = this.option("start");
                var end = this.option("end");
                this.option("value", [start, end])
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        if (args.value[0] === args.previousValue[0] && args.value[1] === args.previousValue[1]) {
                            break
                        }
                        this._setOptionWithoutOptionChange("start", args.value[0]);
                        this._setOptionWithoutOptionChange("end", args.value[1]);
                        this._renderValue();
                        var start = this.option("start");
                        var end = this.option("end");
                        this._createActionByOption("onValueChanged", {
                            excludeValidators: ["disabled", "readOnly"]
                        })({
                            start: start,
                            end: end,
                            value: [start, end],
                            event: this._valueChangeEventInstance
                        });
                        this.validationRequest.fire({
                            value: [start, end],
                            editor: this
                        });
                        this._saveValueChangeEvent(void 0);
                        break;
                    case "start":
                    case "end":
                        this._setValueOption();
                        break;
                    case "startName":
                        this._$submitStartElement.attr("name", args.value);
                        break;
                    case "endName":
                        this._$submitEndElement.attr("name", args.value);
                        break;
                    case "name":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxRangeSlider", RangeSlider);
        module.exports = RangeSlider
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/slider/ui.slider.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var domUtils = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var numberLocalization = __webpack_require__( /*! ../../localization/number */ 49);
        var devices = __webpack_require__( /*! ../../core/devices */ 15);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var applyServerDecimalSeparator = __webpack_require__( /*! ../../core/utils/common */ 3).applyServerDecimalSeparator;
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var TrackBar = __webpack_require__( /*! ../track_bar */ 239);
        var eventUtils = __webpack_require__( /*! ../../events/utils */ 8);
        var pointerEvents = __webpack_require__( /*! ../../events/pointer */ 23);
        var feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 134);
        var SliderHandle = __webpack_require__( /*! ./ui.slider_handle */ 338);
        var inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 71);
        var clickEvent = __webpack_require__( /*! ../../events/click */ 19);
        var Swipeable = __webpack_require__( /*! ../../events/gesture/swipeable */ 158);
        var themes = __webpack_require__( /*! ../themes */ 32);
        var Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6).Deferred;
        var SLIDER_CLASS = "dx-slider";
        var SLIDER_WRAPPER_CLASS = "dx-slider-wrapper";
        var SLIDER_HANDLE_SELECTOR = ".dx-slider-handle";
        var SLIDER_BAR_CLASS = "dx-slider-bar";
        var SLIDER_RANGE_CLASS = "dx-slider-range";
        var SLIDER_RANGE_VISIBLE_CLASS = "dx-slider-range-visible";
        var SLIDER_LABEL_CLASS = "dx-slider-label";
        var SLIDER_LABEL_POSITION_CLASS_PREFIX = "dx-slider-label-position-";
        var SLIDER_TOOLTIP_POSITION_CLASS_PREFIX = "dx-slider-tooltip-position-";
        var INVALID_MESSAGE_VISIBLE_CLASS = "dx-invalid-message-visible";
        var SLIDER_VALIDATION_NAMESPACE = "Validation";
        var Slider = TrackBar.inherit({
            _activeStateUnit: SLIDER_HANDLE_SELECTOR,
            _supportedKeys: function() {
                var isRTL = this.option("rtlEnabled");
                var that = this;
                var roundedValue = function(offset, isLeftDirection) {
                    offset = that._valueStep(offset);
                    var step = that.option("step");
                    var value = that.option("value");
                    var division = (value - that.option("min")) % step;
                    var result = isLeftDirection ? value - offset + (division ? step - division : 0) : value + offset - division;
                    var min = that.option("min");
                    var max = that.option("max");
                    if (result < min) {
                        result = min
                    } else {
                        if (result > max) {
                            result = max
                        }
                    }
                    return result
                };
                var moveHandleRight = function(offset) {
                    that.option("value", roundedValue(offset, isRTL))
                };
                var moveHandleLeft = function(offset) {
                    that.option("value", roundedValue(offset, !isRTL))
                };
                return extend(this.callBase(), {
                    leftArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleLeft(this.option("step"))
                    },
                    rightArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleRight(this.option("step"))
                    },
                    pageUp: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleRight(this.option("step") * this.option("keyStep"))
                    },
                    pageDown: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        moveHandleLeft(this.option("step") * this.option("keyStep"))
                    },
                    home: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        var min = this.option("min");
                        this.option("value", min)
                    },
                    end: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        var max = this.option("max");
                        this.option("value", max)
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: 50,
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    step: 1,
                    showRange: true,
                    tooltip: {
                        enabled: false,
                        format: function(value) {
                            return value
                        },
                        position: "top",
                        showMode: "onHover"
                    },
                    label: {
                        visible: false,
                        position: "bottom",
                        format: function(value) {
                            return value
                        }
                    },
                    keyStep: 1,
                    useInkRipple: false,
                    validationMessageOffset: themes.isMaterial() ? {
                        h: 18,
                        v: 0
                    } : {
                        h: 7,
                        v: 4
                    },
                    focusStateEnabled: true
                })
            },
            _toggleValidationMessage: function(visible) {
                if (!this.option("isValid")) {
                    this.$element().toggleClass(INVALID_MESSAGE_VISIBLE_CLASS, visible)
                }
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        var themeName = themes.current();
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        useInkRipple: true
                    }
                }])
            },
            _initMarkup: function() {
                this.$element().addClass(SLIDER_CLASS);
                this._renderSubmitElement();
                this.option("useInkRipple") && this._renderInkRipple();
                this.callBase();
                this._renderLabels();
                this._renderStartHandler();
                this._renderAriaMinAndMax()
            },
            _attachFocusEvents: function() {
                this.callBase();
                var namespace = this.NAME + SLIDER_VALIDATION_NAMESPACE;
                var focusInEvent = eventUtils.addNamespace("focusin", namespace);
                var focusOutEvent = eventUtils.addNamespace("focusout", namespace);
                var $focusTarget = this._focusTarget();
                eventsEngine.on($focusTarget, focusInEvent, this._toggleValidationMessage.bind(this, true));
                eventsEngine.on($focusTarget, focusOutEvent, this._toggleValidationMessage.bind(this, false))
            },
            _detachFocusEvents: function() {
                this.callBase();
                var $focusTarget = this._focusTarget();
                this._toggleValidationMessage(false);
                eventsEngine.off($focusTarget, this.NAME + SLIDER_VALIDATION_NAMESPACE)
            },
            _render: function() {
                this.callBase();
                this._repaintHandle()
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render({
                    waveSizeCoefficient: .7,
                    isCentered: true,
                    wavesNumber: 2,
                    useHoldAnimation: false
                })
            },
            _renderInkWave: function(element, dxEvent, doRender, waveIndex) {
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: element,
                    event: dxEvent,
                    wave: waveIndex
                };
                if (doRender) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _visibilityChanged: function() {
                this.repaint()
            },
            _renderWrapper: function() {
                this.callBase();
                this._$wrapper.addClass(SLIDER_WRAPPER_CLASS);
                this._createComponent(this._$wrapper, Swipeable, {
                    elastic: false,
                    immediate: true,
                    onStart: this._swipeStartHandler.bind(this),
                    onUpdated: this._swipeUpdateHandler.bind(this),
                    onEnd: this._swipeEndHandler.bind(this),
                    itemSizeFunc: this._itemWidthFunc.bind(this)
                })
            },
            _renderContainer: function() {
                this.callBase();
                this._$bar.addClass(SLIDER_BAR_CLASS)
            },
            _renderRange: function() {
                this.callBase();
                this._$range.addClass(SLIDER_RANGE_CLASS);
                this._renderHandle();
                this._renderRangeVisibility()
            },
            _renderRangeVisibility: function() {
                this._$range.toggleClass(SLIDER_RANGE_VISIBLE_CLASS, Boolean(this.option("showRange")))
            },
            _renderHandle: function() {
                this._$handle = this._renderHandleImpl(this.option("value"), this._$handle)
            },
            _renderHandleImpl: function(value, $element) {
                var $handle = $element || $("<div>").appendTo(this._$range);
                var format = this.option("tooltip.format");
                var tooltipEnabled = this.option("tooltip.enabled");
                var tooltipPosition = this.option("tooltip.position");
                this.$element().toggleClass(SLIDER_TOOLTIP_POSITION_CLASS_PREFIX + "bottom", tooltipEnabled && "bottom" === tooltipPosition).toggleClass(SLIDER_TOOLTIP_POSITION_CLASS_PREFIX + "top", tooltipEnabled && "top" === tooltipPosition);
                this._createComponent($handle, SliderHandle, {
                    value: value,
                    tooltipEnabled: tooltipEnabled,
                    tooltipPosition: tooltipPosition,
                    tooltipFormat: format,
                    tooltipShowMode: this.option("tooltip.showMode"),
                    tooltipFitIn: this.$element()
                });
                return $handle
            },
            _renderAriaMinAndMax: function() {
                this.setAria({
                    valuemin: this.option("min"),
                    valuemax: this.option("max")
                }, this._$handle)
            },
            _hoverStartHandler: function(e) {
                SliderHandle.getInstance($(e.currentTarget)).updateTooltip()
            },
            _toggleActiveState: function($element, value) {
                this.callBase($element, value);
                if (value) {
                    SliderHandle.getInstance($element).updateTooltip()
                }
                this._renderInkWave($element, null, !!value, 1)
            },
            _toggleFocusClass: function(isFocused, $element) {
                this.callBase(isFocused, $element);
                if (this._disposed) {
                    return
                }
                var $focusTarget = $($element || this._focusTarget());
                this._renderInkWave($focusTarget, null, isFocused, 0)
            },
            _renderLabels: function() {
                this.$element().removeClass(SLIDER_LABEL_POSITION_CLASS_PREFIX + "bottom").removeClass(SLIDER_LABEL_POSITION_CLASS_PREFIX + "top");
                if (this.option("label.visible")) {
                    var min = this.option("min");
                    var max = this.option("max");
                    var position = this.option("label.position");
                    var labelFormat = this.option("label.format");
                    if (!this._$minLabel) {
                        this._$minLabel = $("<div>").addClass(SLIDER_LABEL_CLASS).appendTo(this._$wrapper)
                    }
                    this._$minLabel.html(numberLocalization.format(min, labelFormat));
                    if (!this._$maxLabel) {
                        this._$maxLabel = $("<div>").addClass(SLIDER_LABEL_CLASS).appendTo(this._$wrapper)
                    }
                    this._$maxLabel.html(numberLocalization.format(max, labelFormat));
                    this.$element().addClass(SLIDER_LABEL_POSITION_CLASS_PREFIX + position)
                } else {
                    if (this._$minLabel) {
                        this._$minLabel.remove();
                        delete this._$minLabel
                    }
                    if (this._$maxLabel) {
                        this._$maxLabel.remove();
                        delete this._$maxLabel
                    }
                }
            },
            _renderStartHandler: function() {
                var pointerDownEventName = eventUtils.addNamespace(pointerEvents.down, this.NAME);
                var clickEventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                var startAction = this._createAction(this._startHandler.bind(this));
                var $element = this.$element();
                eventsEngine.off($element, pointerDownEventName);
                eventsEngine.on($element, pointerDownEventName, function(e) {
                    if (eventUtils.isMouseEvent(e)) {
                        startAction({
                            event: e
                        })
                    }
                });
                eventsEngine.off($element, clickEventName);
                eventsEngine.on($element, clickEventName, function(e) {
                    var $handle = this._activeHandle();
                    if ($handle) {
                        eventsEngine.trigger($handle, "focusin");
                        eventsEngine.trigger($handle, "focus")
                    }
                    startAction({
                        event: e
                    })
                }.bind(this))
            },
            _itemWidthFunc: function() {
                return this._itemWidthRatio
            },
            _swipeStartHandler: function(e) {
                var rtlEnabled = this.option("rtlEnabled");
                if (eventUtils.isTouchEvent(e.event)) {
                    this._createAction(this._startHandler.bind(this))({
                        event: e.event
                    })
                }
                this._feedbackDeferred = new Deferred;
                feedbackEvents.lock(this._feedbackDeferred);
                this._toggleActiveState(this._activeHandle(), this.option("activeStateEnabled"));
                this._startOffset = this._currentRatio;
                var startOffset = this._startOffset * this._swipePixelRatio();
                var endOffset = (1 - this._startOffset) * this._swipePixelRatio();
                e.event.maxLeftOffset = rtlEnabled ? endOffset : startOffset;
                e.event.maxRightOffset = rtlEnabled ? startOffset : endOffset;
                this._itemWidthRatio = this.$element().width() / this._swipePixelRatio();
                this._needPreventAnimation = true
            },
            _swipeEndHandler: function(e) {
                this._feedbackDeferred.resolve();
                this._toggleActiveState(this._activeHandle(), false);
                var offsetDirection = this.option("rtlEnabled") ? -1 : 1;
                delete this._needPreventAnimation;
                this._changeValueOnSwipe(this._startOffset + offsetDirection * e.event.targetOffset / this._swipePixelRatio());
                delete this._startOffset;
                this._renderValue()
            },
            _activeHandle: function() {
                return this._$handle
            },
            _swipeUpdateHandler: function(e) {
                this._saveValueChangeEvent(e);
                this._updateHandlePosition(e)
            },
            _updateHandlePosition: function(e) {
                var offsetDirection = this.option("rtlEnabled") ? -1 : 1;
                var newRatio = Math.min(this._startOffset + offsetDirection * e.event.offset / this._swipePixelRatio(), 1);
                this._$range.width(100 * newRatio + "%");
                SliderHandle.getInstance(this._activeHandle()).fitTooltipPosition;
                this._changeValueOnSwipe(newRatio)
            },
            _swipePixelRatio: function() {
                var min = this.option("min");
                var max = this.option("max");
                var step = this._valueStep(this.option("step"));
                return (max - min) / step
            },
            _valueStep: function(step) {
                if (!step || isNaN(step)) {
                    step = 1
                }
                step = parseFloat(step.toFixed(5));
                if (0 === step) {
                    step = 1e-5
                }
                return step
            },
            _changeValueOnSwipe: function(ratio) {
                var min = this.option("min");
                var max = this.option("max");
                var step = this._valueStep(this.option("step"));
                var newChange = ratio * (max - min);
                var newValue = min + newChange;
                if (step < 0) {
                    return
                }
                if (newValue === max || newValue === min) {
                    this._setValueOnSwipe(newValue)
                } else {
                    var stepExponent = (step + "").split(".")[1];
                    var minExponent = (min + "").split(".")[1];
                    var exponentLength = Math.max(stepExponent && stepExponent.length || 0, minExponent && minExponent.length || 0);
                    var stepCount = Math.round((newValue - min) / step);
                    newValue = Number((stepCount * step + min).toFixed(exponentLength));
                    this._setValueOnSwipe(Math.max(Math.min(newValue, max), min))
                }
            },
            _setValueOnSwipe: function(value) {
                this.option("value", value)
            },
            _startHandler: function(args) {
                var e = args.event;
                this._currentRatio = (eventUtils.eventData(e).x - this._$bar.offset().left) / this._$bar.width();
                if (this.option("rtlEnabled")) {
                    this._currentRatio = 1 - this._currentRatio
                }
                this._saveValueChangeEvent(e);
                this._changeValueOnSwipe(this._currentRatio)
            },
            _renderValue: function() {
                this.callBase();
                var value = this.option("value");
                this._getSubmitElement().val(applyServerDecimalSeparator(value));
                SliderHandle.getInstance(this._activeHandle()).option("value", value)
            },
            _setRangeStyles: function(options) {
                options && this._$range.css(options)
            },
            _callHandlerMethod: function(name, args) {
                SliderHandle.getInstance(this._$handle)[name](args)
            },
            _repaintHandle: function() {
                this._callHandlerMethod("repaint")
            },
            _fitTooltip: function() {
                this._callHandlerMethod("fitTooltipPosition")
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "visible":
                        this.callBase(args);
                        this._renderHandle();
                        this._repaintHandle();
                        domUtils.triggerShownEvent(this.$element());
                        break;
                    case "min":
                    case "max":
                        this._renderValue();
                        this.callBase(args);
                        this._renderLabels();
                        this._renderAriaMinAndMax();
                        this._fitTooltip();
                        break;
                    case "step":
                        this._renderValue();
                        break;
                    case "keyStep":
                        break;
                    case "showRange":
                        this._renderRangeVisibility();
                        break;
                    case "tooltip":
                        this._renderHandle();
                        break;
                    case "label":
                        this._renderLabels();
                        break;
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _refresh: function() {
                this._toggleRTLDirection(this.option("rtlEnabled"));
                this._renderDimensions();
                this._renderValue();
                this._renderHandle();
                this._repaintHandle()
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxSlider", Slider);
        module.exports = Slider
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/speed_dial_action.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./speed_dial_action/speed_dial_action */ 621)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/speed_dial_action/speed_dial_action.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _ready_callbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 51);
        var _ready_callbacks2 = _interopRequireDefault(_ready_callbacks);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _speed_dial_main_item = __webpack_require__( /*! ./speed_dial_main_item */ 309);
        var _swatch_container = __webpack_require__( /*! ../widget/swatch_container */ 157);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ready = _ready_callbacks2.default.add;
        var SpeedDialAction = function(_Widget) {
            _inherits(SpeedDialAction, _Widget);
            var _super = _createSuper(SpeedDialAction);

            function SpeedDialAction() {
                _classCallCheck(this, SpeedDialAction);
                return _super.apply(this, arguments)
            }
            _createClass(SpeedDialAction, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(SpeedDialAction.prototype), "_getDefaultOptions", this).call(this), {
                        icon: "",
                        onClick: null,
                        label: "",
                        visible: true,
                        index: 0,
                        onContentReady: null,
                        activeStateEnabled: true,
                        hoverStateEnabled: true,
                        animation: {
                            show: {
                                type: "pop",
                                duration: 200,
                                easing: "cubic-bezier(0.4, 0, 0.2, 1)",
                                from: {
                                    scale: 0,
                                    opacity: 0
                                },
                                to: {
                                    scale: 1,
                                    opacity: 1
                                }
                            },
                            hide: {
                                type: "pop",
                                duration: 200,
                                easing: "cubic-bezier(0.4, 0, 0.2, 1)",
                                from: {
                                    scale: 1,
                                    opacity: 1
                                },
                                to: {
                                    scale: 0,
                                    opacity: 0
                                }
                            }
                        },
                        id: new _guid2.default
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onClick":
                        case "icon":
                        case "label":
                        case "visible":
                        case "index":
                        case "onInitializing":
                            (0, _speed_dial_main_item.initAction)(this);
                            break;
                        case "animation":
                        case "id":
                            break;
                        default:
                            _get(_getPrototypeOf(SpeedDialAction.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_render",
                value: function() {
                    var _this = this;
                    this._toggleVisibility(false);
                    if (!(0, _swatch_container.getSwatchContainer)(this.$element())) {
                        ready(function() {
                            return (0, _speed_dial_main_item.initAction)(_this)
                        })
                    } else {
                        (0, _speed_dial_main_item.initAction)(this)
                    }
                }
            }, {
                key: "_dispose",
                value: function() {
                    (0, _speed_dial_main_item.disposeAction)(this._options.silent("id"));
                    _get(_getPrototypeOf(SpeedDialAction.prototype), "_dispose", this).call(this)
                }
            }]);
            return SpeedDialAction
        }(_ui2.default);
        (0, _component_registrator2.default)("dxSpeedDialAction", SpeedDialAction);
        module.exports = SpeedDialAction
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tile_view.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var devices = __webpack_require__( /*! ../core/devices */ 15);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var inflector = __webpack_require__( /*! ../core/utils/inflector */ 34);
        var iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 4);
        var isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 7);
        var getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 11).getPublicElement;
        var deferRender = __webpack_require__( /*! ../core/utils/common */ 3).deferRender;
        var ScrollView = __webpack_require__( /*! ./scroll_view */ 107);
        var CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 52);
        var TILEVIEW_CLASS = "dx-tileview";
        var TILEVIEW_CONTAINER_CLASS = "dx-tileview-wrapper";
        var TILEVIEW_ITEM_CLASS = "dx-tile";
        var TILEVIEW_ITEM_SELECTOR = "." + TILEVIEW_ITEM_CLASS;
        var TILEVIEW_ITEM_DATA_KEY = "dxTileData";
        var CONFIGS = {
            horizontal: {
                itemMainRatio: "widthRatio",
                itemCrossRatio: "heightRatio",
                baseItemMainDimension: "baseItemWidth",
                baseItemCrossDimension: "baseItemHeight",
                mainDimension: "width",
                crossDimension: "height",
                mainPosition: "left",
                crossPosition: "top"
            },
            vertical: {
                itemMainRatio: "heightRatio",
                itemCrossRatio: "widthRatio",
                baseItemMainDimension: "baseItemHeight",
                baseItemCrossDimension: "baseItemWidth",
                mainDimension: "height",
                crossDimension: "width",
                mainPosition: "top",
                crossPosition: "left"
            }
        };
        var TileView = CollectionWidget.inherit({
            _activeStateUnit: TILEVIEW_ITEM_SELECTOR,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    items: null,
                    direction: "horizontal",
                    hoverStateEnabled: true,
                    showScrollbar: false,
                    height: 500,
                    baseItemWidth: 100,
                    baseItemHeight: 100,
                    itemMargin: 20,
                    activeStateEnabled: true,
                    indicateLoading: true
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _itemClass: function() {
                return TILEVIEW_ITEM_CLASS
            },
            _itemDataKey: function() {
                return TILEVIEW_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return this._$container
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(TILEVIEW_CLASS);
                this._initScrollView()
            },
            _dataSourceLoadingChangedHandler: function(isLoading) {
                var scrollView = this._scrollView;
                if (!scrollView || !scrollView.startLoading) {
                    return
                }
                if (isLoading && this.option("indicateLoading")) {
                    scrollView.startLoading()
                } else {
                    scrollView.finishLoading()
                }
            },
            _hideLoadingIfLoadIndicationOff: function() {
                if (!this.option("indicateLoading")) {
                    this._dataSourceLoadingChangedHandler(false)
                }
            },
            _initScrollView: function() {
                this._scrollView = this._createComponent(this.$element(), ScrollView, {
                    direction: this.option("direction"),
                    scrollByContent: true,
                    useKeyboard: false,
                    showScrollbar: this.option("showScrollbar")
                });
                this._$container = $(this._scrollView.content());
                this._$container.addClass(TILEVIEW_CONTAINER_CLASS);
                this._scrollView.option("onUpdated", this._renderGeometry.bind(this))
            },
            _initMarkup: function() {
                this.callBase();
                deferRender(function() {
                    this._cellsPerDimension = 1;
                    this._renderGeometry();
                    this._updateScrollView();
                    this._fireContentReadyAction()
                }.bind(this))
            },
            _updateScrollView: function() {
                this._scrollView.option("direction", this.option("direction"));
                this._scrollView.update();
                this._indicateLoadingIfAlreadyStarted()
            },
            _indicateLoadingIfAlreadyStarted: function() {
                if (this._isDataSourceLoading()) {
                    this._dataSourceLoadingChangedHandler(true)
                }
            },
            _renderGeometry: function() {
                this._config = CONFIGS[this.option("direction")];
                var items = this.option("items") || [];
                var config = this._config;
                var itemMargin = this.option("itemMargin");
                var maxItemCrossRatio = Math.max.apply(Math, iteratorUtils.map(items || [], function(item) {
                    return Math.round(item[config.itemCrossRatio] || 1)
                }));
                var crossDimensionValue = windowUtils.hasWindow() ? this.$element()[config.crossDimension]() : parseInt(this.$element().get(0).style[config.crossDimension]);
                this._cellsPerDimension = Math.floor(crossDimensionValue / (this.option(config.baseItemCrossDimension) + itemMargin));
                this._cellsPerDimension = Math.max(this._cellsPerDimension, maxItemCrossRatio);
                this._cells = [];
                this._cells.push(new Array(this._cellsPerDimension));
                this._arrangeItems(items);
                this._renderContentSize(config, itemMargin)
            },
            _renderContentSize: function(config, itemMargin) {
                if (windowUtils.hasWindow()) {
                    var actualContentSize = this._cells.length * this.option(config.baseItemMainDimension) + (this._cells.length + 1) * itemMargin;
                    var containerSize = this._$container[config.mainDimension]();
                    if (actualContentSize > containerSize) {
                        this._$container[config.mainDimension](actualContentSize)
                    }
                }
            },
            _arrangeItems: function(items) {
                var config = this._config;
                var itemMainRatio = config.itemMainRatio;
                var itemCrossRatio = config.itemCrossRatio;
                var mainPosition = config.mainPosition;
                this._itemsPositions = [];
                iteratorUtils.each(items, function(index, item) {
                    var currentItem = {};
                    currentItem[itemMainRatio] = item[itemMainRatio] || 1;
                    currentItem[itemCrossRatio] = item[itemCrossRatio] || 1;
                    currentItem.index = index;
                    currentItem[itemMainRatio] = currentItem[itemMainRatio] <= 0 ? 0 : Math.round(currentItem[config.itemMainRatio]);
                    currentItem[itemCrossRatio] = currentItem[itemCrossRatio] <= 0 ? 0 : Math.round(currentItem[config.itemCrossRatio]);
                    var itemPosition = this._getItemPosition(currentItem);
                    if (itemPosition[mainPosition] === -1) {
                        itemPosition[mainPosition] = this._cells.push(new Array(this._cellsPerDimension)) - 1
                    }
                    this._occupyCells(currentItem, itemPosition);
                    this._arrangeItem(currentItem, itemPosition);
                    this._itemsPositions.push(itemPosition)
                }.bind(this))
            },
            _getItemPosition: function(item) {
                var config = this._config;
                var mainPosition = config.mainPosition;
                var crossPosition = config.crossPosition;
                var position = {};
                position[mainPosition] = -1;
                position[crossPosition] = 0;
                for (var main = 0; main < this._cells.length; main++) {
                    for (var cross = 0; cross < this._cellsPerDimension; cross++) {
                        if (this._itemFit(main, cross, item)) {
                            position[mainPosition] = main;
                            position[crossPosition] = cross;
                            break
                        }
                    }
                    if (position[mainPosition] > -1) {
                        break
                    }
                }
                return position
            },
            _itemFit: function(mainPosition, crossPosition, item) {
                var result = true;
                var config = this._config;
                var itemRatioMain = item[config.itemMainRatio];
                var itemRatioCross = item[config.itemCrossRatio];
                if (crossPosition + itemRatioCross > this._cellsPerDimension) {
                    return false
                }
                for (var main = mainPosition; main < mainPosition + itemRatioMain; main++) {
                    for (var cross = crossPosition; cross < crossPosition + itemRatioCross; cross++) {
                        if (this._cells.length - 1 < main) {
                            this._cells.push(new Array(this._cellsPerDimension))
                        } else {
                            if (void 0 !== this._cells[main][cross]) {
                                result = false;
                                break
                            }
                        }
                    }
                }
                return result
            },
            _occupyCells: function(item, itemPosition) {
                var config = this._config;
                var itemPositionMain = itemPosition[config.mainPosition];
                var itemPositionCross = itemPosition[config.crossPosition];
                var itemRatioMain = item[config.itemMainRatio];
                var itemRatioCross = item[config.itemCrossRatio];
                for (var main = itemPositionMain; main < itemPositionMain + itemRatioMain; main++) {
                    for (var cross = itemPositionCross; cross < itemPositionCross + itemRatioCross; cross++) {
                        this._cells[main][cross] = item.index
                    }
                }
            },
            _arrangeItem: function(item, itemPosition) {
                var config = this._config;
                var itemPositionMain = itemPosition[config.mainPosition];
                var itemPositionCross = itemPosition[config.crossPosition];
                var itemRatioMain = item[config.itemMainRatio];
                var itemRatioCross = item[config.itemCrossRatio];
                var baseItemCross = this.option(config.baseItemCrossDimension);
                var baseItemMain = this.option(config.baseItemMainDimension);
                var itemMargin = this.option("itemMargin");
                var cssProps = {
                    display: itemRatioMain <= 0 || itemRatioCross <= 0 ? "none" : ""
                };
                var mainDimension = itemRatioMain * baseItemMain + (itemRatioMain - 1) * itemMargin;
                var crossDimension = itemRatioCross * baseItemCross + (itemRatioCross - 1) * itemMargin;
                cssProps[config.mainDimension] = mainDimension < 0 ? 0 : mainDimension;
                cssProps[config.crossDimension] = crossDimension < 0 ? 0 : crossDimension;
                cssProps[config.mainPosition] = itemPositionMain * baseItemMain + (itemPositionMain + 1) * itemMargin;
                cssProps[config.crossPosition] = itemPositionCross * baseItemCross + (itemPositionCross + 1) * itemMargin;
                if (this.option("rtlEnabled")) {
                    var offsetCorrection = this._$container.width();
                    var baseItemWidth = this.option("baseItemWidth");
                    var itemPositionX = itemPosition.left;
                    var offsetPosition = itemPositionX * baseItemWidth;
                    var itemBaseOffset = baseItemWidth + itemMargin;
                    var itemWidth = itemBaseOffset * item.widthRatio;
                    var subItemMargins = itemPositionX * itemMargin;
                    cssProps.left = offsetCorrection - (offsetPosition + itemWidth + subItemMargins)
                }
                this._itemElements().eq(item.index).css(cssProps)
            },
            _moveFocus: function(location) {
                var FOCUS_UP = "up";
                var FOCUS_DOWN = "down";
                var FOCUS_LEFT = this.option("rtlEnabled") ? "right" : "left";
                var FOCUS_RIGHT = this.option("rtlEnabled") ? "left" : "right";
                var FOCUS_PAGE_UP = "pageup";
                var FOCUS_PAGE_DOWN = "pagedown";
                var horizontalDirection = "horizontal" === this.option("direction");
                var cells = this._cells;
                var index = $(this.option("focusedElement")).index();
                var targetCol = this._itemsPositions[index].left;
                var targetRow = this._itemsPositions[index].top;
                var colCount = (horizontalDirection ? cells : cells[0]).length;
                var rowCount = (horizontalDirection ? cells[0] : cells).length;
                var getCell = function(col, row) {
                    if (horizontalDirection) {
                        return cells[col][row]
                    }
                    return cells[row][col]
                };
                switch (location) {
                    case FOCUS_PAGE_UP:
                    case FOCUS_UP:
                        while (targetRow > 0 && index === getCell(targetCol, targetRow)) {
                            targetRow--
                        }
                        if (targetRow < 0) {
                            targetRow = 0
                        }
                        break;
                    case FOCUS_PAGE_DOWN:
                    case FOCUS_DOWN:
                        while (targetRow < rowCount && index === getCell(targetCol, targetRow)) {
                            targetRow++
                        }
                        if (targetRow === rowCount) {
                            targetRow = rowCount - 1
                        }
                        break;
                    case FOCUS_RIGHT:
                        while (targetCol < colCount && index === getCell(targetCol, targetRow)) {
                            targetCol++
                        }
                        if (targetCol === colCount) {
                            targetCol = colCount - 1
                        }
                        break;
                    case FOCUS_LEFT:
                        while (targetCol >= 0 && index === getCell(targetCol, targetRow)) {
                            targetCol--
                        }
                        if (targetCol < 0) {
                            targetCol = 0
                        }
                        break;
                    default:
                        this.callBase.apply(this, arguments);
                        return
                }
                var newTargetIndex = getCell(targetCol, targetRow);
                if (!isDefined(newTargetIndex)) {
                    return
                }
                var $newTarget = this._itemElements().eq(newTargetIndex);
                this.option("focusedElement", getPublicElement($newTarget));
                this._scrollToItem($newTarget)
            },
            _scrollToItem: function($itemElement) {
                if (!$itemElement.length) {
                    return
                }
                var config = this._config;
                var outerMainProp = "outer" + inflector.captionize(config.mainDimension);
                var itemMargin = this.option("itemMargin");
                var itemPosition = $itemElement.position()[config.mainPosition];
                var itemDimension = $itemElement[outerMainProp]();
                var itemTail = itemPosition + itemDimension;
                var scrollPosition = this.scrollPosition();
                var clientWidth = this.$element()[outerMainProp]();
                if (scrollPosition <= itemPosition && itemTail <= scrollPosition + clientWidth) {
                    return
                }
                if (scrollPosition > itemPosition) {
                    this._scrollView.scrollTo(itemPosition - itemMargin)
                } else {
                    this._scrollView.scrollTo(itemPosition + itemDimension - clientWidth + itemMargin)
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "items":
                        this.callBase(args);
                        this._renderGeometry();
                        this._updateScrollView();
                        break;
                    case "showScrollbar":
                        this._initScrollView();
                        break;
                    case "disabled":
                        this._scrollView.option("disabled", args.value);
                        this.callBase(args);
                        break;
                    case "baseItemWidth":
                    case "baseItemHeight":
                    case "itemMargin":
                        this._renderGeometry();
                        break;
                    case "width":
                    case "height":
                        this.callBase(args);
                        this._renderGeometry();
                        this._updateScrollView();
                        break;
                    case "direction":
                        this._renderGeometry();
                        this._updateScrollView();
                        break;
                    case "indicateLoading":
                        this._hideLoadingIfLoadIndicationOff();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            scrollPosition: function() {
                return this._scrollView.scrollOffset()[this._config.mainPosition]
            }
        });
        registerComponent("dxTileView", TileView);
        module.exports = TileView
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/html_editor/converters/markdown.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _turndown = __webpack_require__( /*! turndown */ 624);
        var _turndown2 = _interopRequireDefault(_turndown);
        var _showdown = __webpack_require__( /*! showdown */ 625);
        var _showdown2 = _interopRequireDefault(_showdown);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);
        var _ui = __webpack_require__( /*! ../../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _converterController = __webpack_require__( /*! ../converterController */ 242);
        var _converterController2 = _interopRequireDefault(_converterController);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var MarkdownConverter = function() {
            function MarkdownConverter() {
                _classCallCheck(this, MarkdownConverter);
                var window = (0, _window.getWindow)();
                var turndown = window && window.TurndownService || _turndown2.default;
                var showdown = window && window.showdown || _showdown2.default;
                if (!turndown) {
                    throw _ui2.default.Error("E1041", "Turndown")
                }
                if (!showdown) {
                    throw _ui2.default.Error("E1041", "Showdown")
                }
                this._html2Markdown = new turndown;
                this._markdown2Html = new showdown.Converter({
                    simpleLineBreaks: true,
                    strikethrough: true
                })
            }
            _createClass(MarkdownConverter, [{
                key: "toMarkdown",
                value: function(htmlMarkup) {
                    return this._html2Markdown.turndown(htmlMarkup)
                }
            }, {
                key: "toHtml",
                value: function(markdownMarkup) {
                    var markup = this._markdown2Html.makeHtml(markdownMarkup);
                    if (markup) {
                        markup = markup.replace(new RegExp("\\r?\\n", "g"), "")
                    }
                    return markup
                }
            }]);
            return MarkdownConverter
        }();
        _converterController2.default.addConverter("markdown", MarkdownConverter);
        exports.default = MarkdownConverter
    },
    /*!*****************************************!*\
      !*** external "window.TurndownService" ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.TurndownService
    },
    /*!**********************************!*\
      !*** external "window.showdown" ***!
      \**********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.showdown
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/hierarchical_collection/ui.data_adapter.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var commonUtils = __webpack_require__( /*! ../../core/utils/common */ 3);
        var iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var errors = __webpack_require__( /*! ../../ui/widget/ui.errors */ 18);
        var getOperationBySearchMode = __webpack_require__( /*! ../../ui/widget/ui.search_box_mixin */ 231).getOperationBySearchMode;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var query = __webpack_require__( /*! ../../data/query */ 45);
        var storeHelper = __webpack_require__( /*! ../../data/store_helper */ 86);
        var HierarchicalDataConverter = __webpack_require__( /*! ./ui.data_converter */ 627);
        var EXPANDED = "expanded";
        var SELECTED = "selected";
        var DISABLED = "disabled";
        var DataAdapter = Class.inherit({
            ctor: function(options) {
                this.options = {};
                extend(this.options, this._defaultOptions(), options);
                this.options.dataConverter.setDataAccessors(this.options.dataAccessors);
                this._selectedNodesKeys = [];
                this._expandedNodesKeys = [];
                this._dataStructure = [];
                this._createInternalDataStructure();
                this.getTreeNodes()
            },
            setOption: function(name, value) {
                this.options[name] = value;
                if ("recursiveSelection" === name) {
                    this._updateSelection()
                }
            },
            _defaultOptions: function() {
                return {
                    dataAccessors: void 0,
                    items: [],
                    multipleSelection: true,
                    recursiveSelection: false,
                    recursiveExpansion: false,
                    rootValue: 0,
                    searchValue: "",
                    dataType: "tree",
                    searchMode: "contains",
                    dataConverter: new HierarchicalDataConverter,
                    onNodeChanged: commonUtils.noop,
                    sort: null
                }
            },
            _createInternalDataStructure: function() {
                this._initialDataStructure = this.options.dataConverter.createPlainStructure(this.options.items, this.options.rootValue, this.options.dataType);
                this._dataStructure = this.options.searchValue.length ? this.search(this.options.searchValue) : this._initialDataStructure;
                this.options.dataConverter._dataStructure = this._dataStructure;
                this._updateSelection();
                this._updateExpansion()
            },
            _updateSelection: function() {
                if (this.options.recursiveSelection) {
                    this._setChildrenSelection();
                    this._setParentSelection()
                }
                this._selectedNodesKeys = this._updateNodesKeysArray(SELECTED)
            },
            _updateExpansion: function(key) {
                if (this.options.recursiveExpansion) {
                    key ? this._updateOneBranch(key) : this._setParentExpansion()
                }
                this._expandedNodesKeys = this._updateNodesKeysArray(EXPANDED)
            },
            _updateNodesKeysArray: function(property) {
                var that = this;
                var array = [];
                each(that._getDataBySelectionMode(), function(_, node) {
                    if (!that._isNodeVisible(node)) {
                        return
                    }
                    if (node.internalFields[property]) {
                        if (property === EXPANDED || that.options.multipleSelection) {
                            array.push(node.internalFields.key)
                        } else {
                            array.length && that.toggleSelection(array[0], false, true);
                            array = [node.internalFields.key]
                        }
                    }
                });
                return array
            },
            _getDataBySelectionMode: function() {
                return this.options.multipleSelection ? this.getData() : this.getFullData()
            },
            _isNodeVisible: function(node) {
                return false !== node.internalFields.item.visible
            },
            _getByKey: function(data, key) {
                return data === this._dataStructure ? this.options.dataConverter._getByKey(key) : this.options.dataConverter.getByKey(data, key)
            },
            _setChildrenSelection: function() {
                var that = this;
                each(this._dataStructure, function(_, node) {
                    if (!node.internalFields.childrenKeys.length) {
                        return
                    }
                    var isSelected = node.internalFields.selected;
                    true === isSelected && that._toggleChildrenSelection(node, isSelected)
                })
            },
            _setParentSelection: function() {
                var that = this;
                each(this._dataStructure, function(_, node) {
                    var parent = that.options.dataConverter.getParentNode(node);
                    if (parent && node.internalFields.parentKey !== that.options.rootValue) {
                        that._iterateParents(node, function(parent) {
                            var newParentState = that._calculateSelectedState(parent);
                            that._setFieldState(parent, SELECTED, newParentState)
                        })
                    }
                })
            },
            _setParentExpansion: function() {
                var that = this;
                each(this._dataStructure, function(_, node) {
                    if (!node.internalFields.expanded) {
                        return
                    }
                    that._updateOneBranch(node.internalFields.key)
                })
            },
            _updateOneBranch: function(key) {
                var that = this;
                var node = this.getNodeByKey(key);
                that._iterateParents(node, function(parent) {
                    that._setFieldState(parent, EXPANDED, true)
                })
            },
            _iterateChildren: function(node, recursive, callback, processedKeys) {
                if (!typeUtils.isFunction(callback)) {
                    return
                }
                var that = this;
                var nodeKey = node.internalFields.key;
                processedKeys = processedKeys || [];
                if (processedKeys.indexOf(nodeKey) === -1) {
                    processedKeys.push(nodeKey);
                    each(node.internalFields.childrenKeys, function(_, key) {
                        var child = that.getNodeByKey(key);
                        callback(child);
                        if (child.internalFields.childrenKeys.length && recursive) {
                            that._iterateChildren(child, recursive, callback, processedKeys)
                        }
                    })
                }
            },
            _iterateParents: function(node, callback, processedKeys) {
                if (node.internalFields.parentKey === this.options.rootValue || !typeUtils.isFunction(callback)) {
                    return
                }
                processedKeys = processedKeys || [];
                var key = node.internalFields.key;
                if (processedKeys.indexOf(key) === -1) {
                    processedKeys.push(key);
                    var parent = this.options.dataConverter.getParentNode(node);
                    if (parent) {
                        callback(parent);
                        if (parent.internalFields.parentKey !== this.options.rootValue) {
                            this._iterateParents(parent, callback, processedKeys)
                        }
                    }
                }
            },
            _calculateSelectedState: function(node) {
                var itemsCount = node.internalFields.childrenKeys.length;
                var selectedItemsCount = 0;
                var invisibleItemsCount = 0;
                var result = false;
                for (var i = 0; i <= itemsCount - 1; i++) {
                    var childNode = this.getNodeByKey(node.internalFields.childrenKeys[i]);
                    var isChildInvisible = false === childNode.internalFields.item.visible;
                    var childState = childNode.internalFields.selected;
                    if (isChildInvisible) {
                        invisibleItemsCount++;
                        continue
                    }
                    if (childState) {
                        selectedItemsCount++
                    } else {
                        if (void 0 === childState) {
                            selectedItemsCount += .5
                        }
                    }
                }
                if (selectedItemsCount) {
                    result = selectedItemsCount === itemsCount - invisibleItemsCount ? true : void 0
                }
                return result
            },
            _toggleChildrenSelection: function(node, state) {
                var that = this;
                this._iterateChildren(node, true, function(child) {
                    if (that._isNodeVisible(child)) {
                        that._setFieldState(child, SELECTED, state)
                    }
                })
            },
            _setFieldState: function(node, field, state) {
                if (node.internalFields[field] === state) {
                    return
                }
                node.internalFields[field] = state;
                if (node.internalFields.publicNode) {
                    node.internalFields.publicNode[field] = state
                }
                this.options.dataAccessors.setters[field](node.internalFields.item, state);
                this.options.onNodeChanged(node)
            },
            _markChildren: function(keys) {
                var that = this;
                each(keys, function(_, key) {
                    var index = that.getIndexByKey(key);
                    var node = that.getNodeByKey(key);
                    that._dataStructure[index] = 0;
                    node.internalFields.childrenKeys.length && that._markChildren(node.internalFields.childrenKeys)
                })
            },
            _removeNode: function(key) {
                var node = this.getNodeByKey(key);
                this._dataStructure[this.getIndexByKey(key)] = 0;
                this._markChildren(node.internalFields.childrenKeys);
                var that = this;
                var counter = 0;
                var items = extend([], this._dataStructure);
                each(items, function(index, item) {
                    if (!item) {
                        that._dataStructure.splice(index - counter, 1);
                        counter++
                    }
                })
            },
            _addNode: function(item) {
                var dataConverter = this.options.dataConverter;
                var node = dataConverter._convertItemToNode(item, this.options.dataAccessors.getters.parentKey(item));
                this._dataStructure = this._dataStructure.concat(node);
                this._initialDataStructure = this._initialDataStructure.concat(node);
                dataConverter._dataStructure = dataConverter._dataStructure.concat(node)
            },
            _updateFields: function() {
                this.options.dataConverter.updateChildrenKeys();
                this._updateSelection();
                this._updateExpansion()
            },
            getSelectedNodesKeys: function() {
                return this._selectedNodesKeys
            },
            getExpandedNodesKeys: function() {
                return this._expandedNodesKeys
            },
            getData: function() {
                return this._dataStructure
            },
            getFullData: function() {
                return this._initialDataStructure
            },
            getNodeByItem: function(item) {
                var result = null;
                each(this._dataStructure, function(_, node) {
                    if (node.internalFields.item === item) {
                        result = node;
                        return false
                    }
                });
                return result
            },
            getNodesByItems: function(items) {
                var that = this;
                var nodes = [];
                each(items, function(_, item) {
                    var node = that.getNodeByItem(item);
                    node && nodes.push(node)
                });
                return nodes
            },
            getNodeByKey: function(key, data) {
                return this._getByKey(data || this._getDataBySelectionMode(), key)
            },
            getTreeNodes: function() {
                return this.options.dataConverter.convertToPublicNodes(this.getRootNodes())
            },
            getItemsCount: function() {
                return this.options.dataConverter.getItemsCount()
            },
            getVisibleItemsCount: function() {
                return this.options.dataConverter.getVisibleItemsCount()
            },
            getPublicNode: function(node) {
                return node.internalFields.publicNode
            },
            getRootNodes: function() {
                return this.getChildrenNodes(this.options.rootValue)
            },
            getChildrenNodes: function(parentKey) {
                return query(this._dataStructure).filter(["internalFields.parentKey", parentKey]).toArray()
            },
            getIndexByKey: function(key) {
                return this.options.dataConverter.getIndexByKey(key)
            },
            addItem: function(item) {
                this._addNode(item);
                this._updateFields()
            },
            removeItem: function(key) {
                this._removeNode(key);
                this._updateFields()
            },
            toggleSelection: function(key, state, selectRecursive) {
                var isSingleModeUnselect = this._isSingleModeUnselect(state);
                var node = this._getByKey(selectRecursive || isSingleModeUnselect ? this._initialDataStructure : this._dataStructure, key);
                this._setFieldState(node, SELECTED, state);
                if (this.options.recursiveSelection && !selectRecursive) {
                    state ? this._setChildrenSelection() : this._toggleChildrenSelection(node, state);
                    this._setParentSelection()
                }
                this._selectedNodesKeys = this._updateNodesKeysArray(SELECTED)
            },
            _isSingleModeUnselect: function(selectionState) {
                return !this.options.multipleSelection && !selectionState
            },
            toggleNodeDisabledState: function(key, state) {
                var node = this.getNodeByKey(key);
                this._setFieldState(node, DISABLED, state)
            },
            toggleSelectAll: function(state) {
                if (!typeUtils.isDefined(state)) {
                    return
                }
                var that = this;
                var lastSelectedKey = that._selectedNodesKeys[that._selectedNodesKeys.length - 1];
                var dataStructure = that._isSingleModeUnselect(state) ? this._initialDataStructure : this._dataStructure;
                each(dataStructure, function(index, node) {
                    if (!that._isNodeVisible(node)) {
                        return
                    }
                    that._setFieldState(node, SELECTED, state)
                });
                that._selectedNodesKeys = that._updateNodesKeysArray(SELECTED);
                if (!state && that.options.selectionRequired) {
                    that.toggleSelection(lastSelectedKey, true)
                }
            },
            isAllSelected: function() {
                if (this.getSelectedNodesKeys().length) {
                    return this.getSelectedNodesKeys().length === this.getVisibleItemsCount() ? true : void 0
                } else {
                    return false
                }
            },
            toggleExpansion: function(key, state) {
                var node = this.getNodeByKey(key);
                this._setFieldState(node, EXPANDED, state);
                if (state) {
                    this._updateExpansion(key)
                }
                this._expandedNodesKeys = this._updateNodesKeysArray(EXPANDED)
            },
            isFiltered: function(item) {
                return !this.options.searchValue.length || !!this._filterDataStructure(this.options.searchValue, [item]).length
            },
            _createCriteria: function(selector, value, operation) {
                var searchFilter = [];
                if (!Array.isArray(selector)) {
                    return [selector, operation, value]
                }
                iteratorUtils.each(selector, function(i, item) {
                    searchFilter.push([item, operation, value], "or")
                });
                searchFilter.pop();
                return searchFilter
            },
            _filterDataStructure: function(filterValue, dataStructure) {
                var selector = this.options.searchExpr || this.options.dataAccessors.getters.display;
                var operation = getOperationBySearchMode(this.options.searchMode);
                var criteria = this._createCriteria(selector, filterValue, operation);
                dataStructure = dataStructure || this._initialDataStructure;
                return query(dataStructure).filter(criteria).toArray()
            },
            search: function(searchValue) {
                var that = this;
                var matches = this._filterDataStructure(searchValue);
                var dataConverter = this.options.dataConverter;

                function lookForParents(matches, index) {
                    var length = matches.length;
                    while (index < length) {
                        var node = matches[index];
                        if (node.internalFields.parentKey === that.options.rootValue) {
                            index++;
                            continue
                        }
                        var parent = dataConverter.getParentNode(node);
                        if (!parent) {
                            errors.log("W1007", node.internalFields.parentKey, node.internalFields.key);
                            index++;
                            continue
                        }
                        if (!parent.internalFields.expanded) {
                            that._setFieldState(parent, EXPANDED, true)
                        }
                        if (inArray(parent, matches) > -1) {
                            index++;
                            continue
                        }
                        matches.splice(index, 0, parent);
                        lookForParents(matches, index)
                    }
                }
                lookForParents(matches, 0);
                if (this.options.sort) {
                    matches = storeHelper.queryByOptions(query(matches), {
                        sort: this.options.sort
                    }).toArray()
                }
                dataConverter._indexByKey = {};
                each(matches, function(index, node) {
                    node.internalFields.childrenKeys = [];
                    dataConverter._indexByKey[node.internalFields.key] = index
                });
                dataConverter._dataStructure = matches;
                dataConverter.setChildrenKeys();
                return dataConverter._dataStructure
            }
        });
        module.exports = DataAdapter
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/hierarchical_collection/ui.data_converter.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 16);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var errors = __webpack_require__( /*! ../../ui/widget/ui.errors */ 18);
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var DataConverter = Class.inherit({
            ctor: function() {
                this._dataStructure = [];
                this._itemsCount = 0;
                this._visibleItemsCount = 0
            },
            _indexByKey: {},
            _convertItemsToNodes: function(items, parentKey) {
                var that = this;
                each(items, function(_, item) {
                    var parentId = typeUtils.isDefined(parentKey) ? parentKey : that._getParentId(item);
                    var node = that._convertItemToNode(item, parentId);
                    that._dataStructure.push(node);
                    that._checkForDuplicateId(node.internalFields.key);
                    that._indexByKey[node.internalFields.key] = that._dataStructure.length - 1;
                    if (that._itemHasChildren(item)) {
                        that._convertItemsToNodes(that._dataAccessors.getters.items(item), node.internalFields.key)
                    }
                })
            },
            _checkForDuplicateId: function(key) {
                if (typeUtils.isDefined(this._indexByKey[key])) {
                    throw errors.Error("E1040", key)
                }
            },
            _getParentId: function(item) {
                return "plain" === this._dataType ? this._dataAccessors.getters.parentKey(item) : void 0
            },
            _itemHasChildren: function(item) {
                if ("plain" === this._dataType) {
                    return
                }
                var items = this._dataAccessors.getters.items(item);
                return items && items.length
            },
            _getUniqueKey: function(item) {
                var keyGetter = this._dataAccessors.getters.key;
                var itemKey = keyGetter(item);
                var isCorrectKey = keyGetter && (itemKey || 0 === itemKey) && typeUtils.isPrimitive(itemKey);
                return isCorrectKey ? itemKey : this.getItemsCount()
            },
            _convertItemToNode: function(item, parentKey) {
                this._itemsCount++;
                false !== item.visible && this._visibleItemsCount++;
                var that = this;
                var node = {
                    internalFields: {
                        disabled: that._dataAccessors.getters.disabled(item, {
                            defaultValue: false
                        }),
                        expanded: that._dataAccessors.getters.expanded(item, {
                            defaultValue: false
                        }),
                        selected: that._dataAccessors.getters.selected(item, {
                            defaultValue: false
                        }),
                        key: that._getUniqueKey(item),
                        parentKey: typeUtils.isDefined(parentKey) ? parentKey : that._rootValue,
                        item: that._makeObjectFromPrimitive(item),
                        childrenKeys: []
                    }
                };
                extend(node, item);
                delete node.items;
                return node
            },
            setChildrenKeys: function() {
                var that = this;
                each(this._dataStructure, function(_, node) {
                    if (node.internalFields.parentKey === that._rootValue) {
                        return
                    }
                    var parent = that.getParentNode(node);
                    parent && parent.internalFields.childrenKeys.push(node.internalFields.key)
                })
            },
            _makeObjectFromPrimitive: function(item) {
                if (typeUtils.isPrimitive(item)) {
                    var key = item;
                    item = {};
                    this._dataAccessors.setters.key(item, key)
                }
                return item
            },
            _convertToPublicNode: function(node, parent) {
                if (!node) {
                    return null
                }
                var publicNode = {
                    text: this._dataAccessors.getters.display(node),
                    key: node.internalFields.key,
                    selected: node.internalFields.selected,
                    expanded: node.internalFields.expanded,
                    disabled: node.internalFields.disabled,
                    parent: parent || null,
                    itemData: node.internalFields.item,
                    children: [],
                    items: []
                };
                if (publicNode.parent) {
                    publicNode.parent.children.push(publicNode);
                    publicNode.parent.items.push(publicNode)
                }
                return publicNode
            },
            convertToPublicNodes: function(data, parent) {
                if (!data.length) {
                    return []
                }
                var that = this;
                var publicNodes = [];
                each(data, function(_, node) {
                    node = typeUtils.isPrimitive(node) ? that._getByKey(node) : node;
                    var publicNode = that._convertToPublicNode(node, parent);
                    publicNode.children = that.convertToPublicNodes(node.internalFields.childrenKeys, publicNode);
                    publicNodes.push(publicNode);
                    node.internalFields.publicNode = publicNode
                });
                return publicNodes
            },
            setDataAccessors: function(accessors) {
                this._dataAccessors = accessors
            },
            _getByKey: function(key) {
                return this._dataStructure[this.getIndexByKey(key)] || null
            },
            getParentNode: function(node) {
                return this._getByKey(node.internalFields.parentKey)
            },
            getByKey: function getByKey(data, key) {
                var result = null;
                var that = this;
                var getByKey = function(data, key) {
                    each(data, function(_, element) {
                        var currentElementKey = element.internalFields && element.internalFields.key || that._dataAccessors.getters.key(element);
                        if (currentElementKey.toString() === key.toString()) {
                            result = element;
                            return false
                        }
                    });
                    return result
                };
                return getByKey(data, key)
            },
            getItemsCount: function() {
                return this._itemsCount
            },
            getVisibleItemsCount: function() {
                return this._visibleItemsCount
            },
            updateIndexByKey: function() {
                var that = this;
                this._indexByKey = {};
                each(this._dataStructure, function(index, node) {
                    that._checkForDuplicateId(node.internalFields.key);
                    that._indexByKey[node.internalFields.key] = index
                })
            },
            updateChildrenKeys: function() {
                this._indexByKey = {};
                this.removeChildrenKeys();
                this.updateIndexByKey();
                this.setChildrenKeys()
            },
            removeChildrenKeys: function() {
                this._indexByKey = {};
                each(this._dataStructure, function(index, node) {
                    node.internalFields.childrenKeys = []
                })
            },
            getIndexByKey: function(key) {
                return this._indexByKey[key]
            },
            createPlainStructure: function(items, rootValue, dataType) {
                this._itemsCount = 0;
                this._visibleItemsCount = 0;
                this._rootValue = rootValue;
                this._dataType = dataType;
                this._indexByKey = {};
                this._convertItemsToNodes(items);
                this.setChildrenKeys();
                return this._dataStructure
            }
        });
        module.exports = DataConverter
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/context_menu/ui.menu_base.edit.strategy.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiCollection_widgetEditStrategy = __webpack_require__( /*! ../collection/ui.collection_widget.edit.strategy.plain */ 191);
        var _uiCollection_widgetEditStrategy2 = _interopRequireDefault(_uiCollection_widgetEditStrategy);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var MenuBaseEditStrategy = function(_PlainEditStrategy) {
            _inherits(MenuBaseEditStrategy, _PlainEditStrategy);
            var _super = _createSuper(MenuBaseEditStrategy);

            function MenuBaseEditStrategy() {
                _classCallCheck(this, MenuBaseEditStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(MenuBaseEditStrategy, [{
                key: "_getPlainItems",
                value: function() {
                    return (0, _iterator.map)(this._collectionWidget.option("items"), function getMenuItems(item) {
                        return item.items ? [item].concat((0, _iterator.map)(item.items, getMenuItems)) : item
                    })
                }
            }, {
                key: "_stringifyItem",
                value: function(item) {
                    var _this = this;
                    return JSON.stringify(item, function(key, value) {
                        if ("template" === key) {
                            return _this._getTemplateString(value)
                        }
                        return value
                    })
                }
            }, {
                key: "_getTemplateString",
                value: function(template) {
                    var result;
                    if ("object" === _typeof(template)) {
                        result = (0, _renderer2.default)(template).text()
                    } else {
                        result = template.toString()
                    }
                    return result
                }
            }]);
            return MenuBaseEditStrategy
        }(_uiCollection_widgetEditStrategy2.default);
        module.exports = MenuBaseEditStrategy
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./data_grid/ui.data_grid */ 346)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.base.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _console = __webpack_require__( /*! ../../core/utils/console */ 65);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        __webpack_require__( /*! ./ui.data_grid.column_headers */ 631);
        __webpack_require__( /*! ./ui.data_grid.columns_controller */ 632);
        __webpack_require__( /*! ./ui.data_grid.data_controller */ 633);
        __webpack_require__( /*! ./ui.data_grid.sorting */ 634);
        __webpack_require__( /*! ./ui.data_grid.rows */ 635);
        __webpack_require__( /*! ./ui.data_grid.context_menu */ 636);
        __webpack_require__( /*! ./ui.data_grid.error_handling */ 637);
        __webpack_require__( /*! ./ui.data_grid.grid_view */ 638);
        __webpack_require__( /*! ./ui.data_grid.header_panel */ 639);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATAGRID_ROW_SELECTOR = ".dx-row";
        var DATAGRID_DEPRECATED_TEMPLATE_WARNING = "Specifying grid templates with the jQuery selector name is now deprecated. Use the DOM Node or the jQuery object that references this selector instead.";
        _uiData_grid2.default.registerModulesOrder(["stateStoring", "columns", "selection", "editorFactory", "columnChooser", "grouping", "editing", "masterDetail", "validating", "adaptivity", "data", "virtualScrolling", "columnHeaders", "filterRow", "headerPanel", "headerFilter", "sorting", "search", "rows", "pager", "columnsResizingReordering", "contextMenu", "keyboardNavigation", "errorHandling", "summary", "columnFixing", "export", "gridView"]);
        var DataGrid = _ui2.default.inherit({
            _activeStateUnit: DATAGRID_ROW_SELECTOR,
            _getDefaultOptions: function() {
                var that = this;
                var result = that.callBase();
                (0, _iterator.each)(_uiData_grid2.default.modules, function() {
                    if (_type2.default.isFunction(this.defaultOptions)) {
                        (0, _extend.extend)(true, result, this.defaultOptions())
                    }
                });
                return result
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    useKeyboard: {
                        since: "19.2",
                        alias: "keyboardNavigation.enabled"
                    }
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        showRowLines: true
                    }
                }, {
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        showRowLines: true,
                        showColumnLines: false,
                        headerFilter: {
                            height: 315
                        },
                        editing: {
                            useIcons: true
                        }
                    }
                }, {
                    device: function() {
                        return _browser2.default.webkit
                    },
                    options: {
                        loadingTimeout: 30,
                        loadPanel: {
                            animation: {
                                show: {
                                    easing: "cubic-bezier(1, 0, 1, 0)",
                                    duration: 500,
                                    from: {
                                        opacity: 0
                                    },
                                    to: {
                                        opacity: 1
                                    }
                                }
                            }
                        }
                    }
                }, {
                    device: function(_device) {
                        return "desktop" !== _device.deviceType
                    },
                    options: {
                        grouping: {
                            expandMode: "rowClick"
                        }
                    }
                }])
            },
            _init: function() {
                var that = this;
                that.callBase();
                _uiData_grid2.default.processModules(that, _uiData_grid2.default);
                (0, _uiData_grid.callModuleItemsMethod)(that, "init")
            },
            _clean: _common2.default.noop,
            _optionChanged: function(args) {
                var that = this;
                (0, _uiData_grid.callModuleItemsMethod)(that, "optionChanged", [args]);
                if (!args.handled) {
                    that.callBase(args)
                }
            },
            _dimensionChanged: function() {
                this.updateDimensions(true)
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this.updateDimensions()
                }
            },
            _initMarkup: function() {
                this.callBase.apply(this, arguments);
                this.getView("gridView").render(this.$element())
            },
            _renderContentImpl: function() {
                this.getView("gridView").update()
            },
            _renderContent: function() {
                var that = this;
                _common2.default.deferRender(function() {
                    that._renderContentImpl()
                })
            },
            _getTemplate: function(templateName) {
                var template = templateName;
                if (_type2.default.isString(template) && "#" === template[0]) {
                    template = (0, _renderer2.default)(templateName);
                    _console.logger.warn(DATAGRID_DEPRECATED_TEMPLATE_WARNING)
                }
                return this.callBase(template)
            },
            _dispose: function() {
                var that = this;
                that.callBase();
                (0, _uiData_grid.callModuleItemsMethod)(that, "dispose")
            },
            isReady: function() {
                return this.getController("data").isReady()
            },
            beginUpdate: function() {
                var that = this;
                that.callBase();
                (0, _uiData_grid.callModuleItemsMethod)(that, "beginUpdate")
            },
            endUpdate: function() {
                var that = this;
                (0, _uiData_grid.callModuleItemsMethod)(that, "endUpdate");
                that.callBase()
            },
            getController: function(name) {
                return this._controllers[name]
            },
            getView: function(name) {
                return this._views[name]
            },
            focus: function(element) {
                this.getController("keyboardNavigation").focus(element)
            }
        });
        DataGrid.registerModule = _uiData_grid2.default.registerModule.bind(_uiData_grid2.default);
        (0, _component_registrator2.default)("dxDataGrid", DataGrid);
        module.exports = DataGrid
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.column_headers.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_headers */ 347);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.ColumnHeadersView = _uiGrid_core2.default.views.columnHeadersView;
        _uiData_grid2.default.registerModule("columnHeaders", _uiGrid_core2.default)
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.columns_controller.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.columns_controller */ 349);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("columns", {
            defaultOptions: function() {
                return (0, _extend.extend)(true, {}, _uiGrid_core2.default.defaultOptions(), {
                    commonColumnSettings: {
                        allowExporting: true
                    }
                })
            },
            controllers: _uiGrid_core2.default.controllers
        })
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.data_controller.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiData_grid3 = __webpack_require__( /*! ./ui.data_grid.data_source_adapter */ 204);
        var _uiData_grid4 = _interopRequireDefault(_uiData_grid3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.data_controller */ 351);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.DataController = _uiGrid_core2.default.controllers.data.inherit(function() {
            return {
                _getDataSourceAdapter: function() {
                    return _uiData_grid4.default
                },
                _getSpecificDataSourceOption: function() {
                    var dataSource = this.option("dataSource");
                    if (dataSource && !Array.isArray(dataSource) && this.option("keyExpr")) {
                        _ui2.default.log("W1011")
                    }
                    return this.callBase()
                }
            }
        }());
        _uiData_grid2.default.registerModule("data", {
            defaultOptions: _uiGrid_core2.default.defaultOptions,
            controllers: {
                data: exports.DataController
            }
        })
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.sorting.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.sorting */ 352);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("sorting", _uiGrid_core2.default)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.rows.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.rows */ 354);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.RowsView = _uiGrid_core2.default.views.rowsView;
        _uiData_grid2.default.registerModule("rows", _uiGrid_core2.default)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.context_menu.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.context_menu */ 355);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("contextMenu", _uiGrid_core2.default)
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.error_handling.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.error_handling */ 356);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("errorHandling", _uiGrid_core2.default)
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.grid_view.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.grid_view */ 357);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("gridView", _uiGrid_core2.default)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.header_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.header_panel */ 358);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.HeaderPanel = _uiGrid_core2.default.views.headerPanel;
        _uiData_grid2.default.registerModule("headerPanel", _uiGrid_core2.default)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.state_storing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.state_storing */ 359);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("stateStoring", _uiGrid_core2.default)
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.selection.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.selection */ 361);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("selection", _uiGrid_core2.default)
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.column_chooser.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_chooser */ 362);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.ColumnChooserController = _uiGrid_core2.default.controllers.columnChooser;
        exports.ColumnChooserView = _uiGrid_core2.default.views.columnChooserView;
        _uiData_grid2.default.registerModule("columnChooser", _uiGrid_core2.default)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_view/ui.tree_view.base.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _click2 = _interopRequireDefault(_click);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _check_box = __webpack_require__( /*! ../check_box */ 120);
        var _check_box2 = _interopRequireDefault(_check_box);
        var _ui = __webpack_require__( /*! ../hierarchical_collection/ui.hierarchical_collection_widget */ 345);
        var _ui2 = _interopRequireDefault(_ui);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _double_click = __webpack_require__( /*! ../../events/double_click */ 137);
        var _double_click2 = _interopRequireDefault(_double_click);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 40);
        var _fx2 = _interopRequireDefault(_fx);
        var _ui3 = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var _ui4 = _interopRequireDefault(_ui3);
        var _load_indicator = __webpack_require__( /*! ../load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _ui5 = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui6 = _interopRequireDefault(_ui5);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var WIDGET_CLASS = "dx-treeview";
        var NODE_CLASS = "".concat(WIDGET_CLASS, "-node");
        var NODE_CONTAINER_CLASS = "".concat(NODE_CLASS, "-container");
        var NODE_LOAD_INDICATOR_CLASS = "".concat(NODE_CLASS, "-loadindicator");
        var OPENED_NODE_CONTAINER_CLASS = "".concat(NODE_CLASS, "-container-opened");
        var IS_LEAF = "".concat(NODE_CLASS, "-is-leaf");
        var ITEM_CLASS = "".concat(WIDGET_CLASS, "-item");
        var ITEM_WITH_CHECKBOX_CLASS = "".concat(ITEM_CLASS, "-with-checkbox");
        var ITEM_WITHOUT_CHECKBOX_CLASS = "".concat(ITEM_CLASS, "-without-checkbox");
        var ITEM_DATA_KEY = "".concat(ITEM_CLASS, "-data");
        var TOGGLE_ITEM_VISIBILITY_CLASS = "".concat(WIDGET_CLASS, "-toggle-item-visibility");
        var LOAD_INDICATOR_CLASS = "".concat(WIDGET_CLASS, "-loadindicator");
        var LOAD_INDICATOR_WRAPPER_CLASS = "".concat(WIDGET_CLASS, "-loadindicator-wrapper");
        var TOGGLE_ITEM_VISIBILITY_OPENED_CLASS = "".concat(WIDGET_CLASS, "-toggle-item-visibility-opened");
        var SELECT_ALL_ITEM_CLASS = "".concat(WIDGET_CLASS, "-select-all-item");
        var INVISIBLE_STATE_CLASS = "dx-state-invisible";
        var DISABLED_STATE_CLASS = "dx-state-disabled";
        var SELECTED_ITEM_CLASS = "dx-state-selected";
        var EXPAND_EVENT_NAMESPACE = "dxTreeView_expand";
        var DATA_ITEM_ID = "data-item-id";
        var TreeViewBase = _ui2.default.inherit({
            _supportedKeys: function(e) {
                var _this = this;
                var click = function(e) {
                    var $itemElement = (0, _renderer2.default)(_this.option("focusedElement"));
                    if (!$itemElement.length) {
                        return
                    }
                    e.target = $itemElement;
                    e.currentTarget = $itemElement;
                    _this._itemClickHandler(e, $itemElement.children("." + ITEM_CLASS));
                    var expandEventName = _this._getEventNameByOption(_this.option("expandEvent"));
                    var expandByClick = expandEventName === (0, _utils.addNamespace)(_click2.default.name, EXPAND_EVENT_NAMESPACE);
                    if (expandByClick) {
                        _this._expandEventHandler(e)
                    }
                };
                var select = function(e) {
                    e.preventDefault();
                    _this._changeCheckBoxState((0, _renderer2.default)(_this.option("focusedElement")))
                };
                var toggleExpandedNestedItems = function(state, e) {
                    if (!this.option("expandAllEnabled")) {
                        return
                    }
                    e.preventDefault();
                    var $rootElement = (0, _renderer2.default)(this.option("focusedElement"));
                    if (!$rootElement.length) {
                        return
                    }
                    var rootItem = this._getItemData($rootElement.find(".".concat(ITEM_CLASS)));
                    this._toggleExpandedNestedItems([rootItem], state)
                };
                return (0, _extend.extend)(this.callBase(), {
                    enter: this._showCheckboxes() ? select : click,
                    space: this._showCheckboxes() ? select : click,
                    asterisk: toggleExpandedNestedItems.bind(this, true),
                    minus: toggleExpandedNestedItems.bind(this, false)
                })
            },
            _changeCheckBoxState: function($element) {
                var checkboxInstance = this._getCheckBoxInstance($element);
                var currentState = checkboxInstance.option("value");
                if (!checkboxInstance.option("disabled")) {
                    this._updateItemSelection(!currentState, $element.find("." + ITEM_CLASS).get(0), true, $element)
                }
            },
            _toggleExpandedNestedItems: function(items, state) {
                if (!items) {
                    return
                }
                for (var i = 0, len = items.length; i < len; i++) {
                    var item = items[i];
                    var node = this._dataAdapter.getNodeByItem(item);
                    this._toggleExpandedState(node, state);
                    this._toggleExpandedNestedItems(item.items, state)
                }
            },
            _getNodeElement: function(node, cache) {
                var key = this._encodeString(node.internalFields.key);
                if (cache) {
                    if (!cache.$nodeByKey) {
                        cache.$nodeByKey = {};
                        this.$element().find(".".concat(NODE_CLASS)).each(function() {
                            var $node = (0, _renderer2.default)(this);
                            var key = $node.attr(DATA_ITEM_ID);
                            cache.$nodeByKey[key] = $node
                        })
                    }
                    return cache.$nodeByKey[key] || (0, _renderer2.default)()
                }
                var element = this.$element().get(0).querySelector("[".concat(DATA_ITEM_ID, '="').concat(key, '"]'));
                return (0, _renderer2.default)(element)
            },
            _activeStateUnit: "." + ITEM_CLASS,
            _widgetClass: function() {
                return WIDGET_CLASS
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    animationEnabled: true,
                    dataStructure: "tree",
                    deferRendering: true,
                    expandAllEnabled: false,
                    hasItemsExpr: "hasItems",
                    selectNodesRecursive: true,
                    expandNodesRecursive: true,
                    showCheckBoxesMode: "none",
                    selectAllText: _message2.default.format("dxList-selectAll"),
                    onItemSelectionChanged: null,
                    onItemExpanded: null,
                    onItemCollapsed: null,
                    scrollDirection: "vertical",
                    virtualModeEnabled: false,
                    rootValue: 0,
                    focusStateEnabled: false,
                    selectionMode: "multiple",
                    expandEvent: "dblclick",
                    selectByClick: false,
                    createChildren: null,
                    onSelectAllValueChanged: null
                })
            },
            _initSelectedItems: _common2.default.noop,
            _syncSelectionOptions: _common2.default.asyncNoop,
            _fireSelectionChanged: function() {
                var selectionChangePromise = this._selectionChangePromise;
                (0, _deferred.when)(selectionChangePromise).done(function() {
                    this._createActionByOption("onSelectionChanged", {
                        excludeValidators: ["disabled", "readOnly"]
                    })()
                }.bind(this))
            },
            _createSelectAllValueChangedAction: function() {
                this._selectAllValueChangedAction = this._createActionByOption("onSelectAllValueChanged", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _fireSelectAllValueChanged: function(value) {
                this._selectAllValueChangedAction({
                    value: value
                })
            },
            _checkBoxModeChange: function(value, previousValue) {
                if ("none" === previousValue || "none" === value) {
                    this.repaint();
                    return
                }
                var selectAllExists = this._$selectAllItem && this._$selectAllItem.length;
                switch (value) {
                    case "selectAll":
                        !selectAllExists && this._renderSelectAllItem();
                        break;
                    case "normal":
                        if (selectAllExists) {
                            this._$selectAllItem.remove();
                            delete this._$selectAllItem
                        }
                }
            },
            _removeSelection: function() {
                var that = this;
                (0, _iterator.each)(this._dataAdapter.getFullData(), function(_, node) {
                    if (!that._hasChildren(node)) {
                        return
                    }
                    that._dataAdapter.toggleSelection(node.internalFields.key, false, true)
                })
            },
            _optionChanged: function(args) {
                var name = args.name,
                    value = args.value,
                    previousValue = args.previousValue;
                switch (name) {
                    case "selectAllText":
                        if (this._$selectAllItem) {
                            this._$selectAllItem.dxCheckBox("instance").option("text", value)
                        }
                        break;
                    case "showCheckBoxesMode":
                        this._checkBoxModeChange(value, previousValue);
                        break;
                    case "scrollDirection":
                        this._scrollableContainer.option("direction", value);
                        break;
                    case "items":
                        delete this._$selectAllItem;
                        this.callBase(args);
                        break;
                    case "dataSource":
                        this.callBase(args);
                        this._initDataAdapter();
                        this._filter = {};
                        break;
                    case "hasItemsExpr":
                        this._initAccessors();
                        this.repaint();
                        break;
                    case "expandEvent":
                        this._initExpandEvent();
                        break;
                    case "deferRendering":
                    case "dataStructure":
                    case "rootValue":
                    case "createChildren":
                    case "expandNodesRecursive":
                    case "onItemSelectionChanged":
                    case "onItemExpanded":
                    case "onItemCollapsed":
                    case "expandAllEnabled":
                    case "animationEnabled":
                    case "virtualModeEnabled":
                    case "selectByClick":
                        break;
                    case "selectionMode":
                        this._initDataAdapter();
                        this.callBase(args);
                        break;
                    case "onSelectAllValueChanged":
                        this._createSelectAllValueChangedAction();
                        break;
                    case "selectNodesRecursive":
                        this._dataAdapter.setOption("recursiveSelection", args.value);
                        this.repaint();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _initDataSource: function() {
                if (this._useCustomChildrenLoader()) {
                    this._loadChildrenByCustomLoader(null).done(function(newItems) {
                        if (newItems && newItems.length) {
                            this.option("items", newItems)
                        }
                    }.bind(this))
                } else {
                    this.callBase();
                    this._isVirtualMode() && this._initVirtualMode()
                }
            },
            _initVirtualMode: function() {
                var filter = this._filter;
                if (!filter.custom) {
                    filter.custom = this._dataSource.filter()
                }
                if (!filter.internal) {
                    filter.internal = [this.option("parentIdExpr"), this.option("rootValue")]
                }
            },
            _useCustomChildrenLoader: function() {
                return (0, _type.isFunction)(this.option("createChildren")) && this._isDataStructurePlain()
            },
            _loadChildrenByCustomLoader: function(parentNode) {
                var invocationResult = this.option("createChildren").call(this, parentNode);
                if (Array.isArray(invocationResult)) {
                    return (new _deferred.Deferred).resolve(invocationResult).promise()
                }
                if (invocationResult && (0, _type.isFunction)(invocationResult.then)) {
                    return (0, _deferred.fromPromise)(invocationResult)
                }
                return (new _deferred.Deferred).resolve([]).promise()
            },
            _combineFilter: function() {
                if (!this._filter.custom || !this._filter.custom.length) {
                    return this._filter.internal
                }
                return [this._filter.custom, this._filter.internal]
            },
            _dataSourceLoadErrorHandler: function() {
                this._renderEmptyMessage()
            },
            _init: function() {
                this._filter = {};
                this.callBase();
                this._initStoreChangeHandlers()
            },
            _dataSourceChangedHandler: function(newItems) {
                var items = this.option("items");
                if (this._initialized && this._isVirtualMode() && items.length) {
                    return
                }
                this.option("items", newItems)
            },
            _removeTreeViewLoadIndicator: function() {
                if (!this._treeViewLoadIndicator) {
                    return
                }
                this._treeViewLoadIndicator.remove();
                this._treeViewLoadIndicator = null
            },
            _createTreeViewLoadIndicator: function() {
                this._treeViewLoadIndicator = (0, _renderer2.default)("<div>").addClass(LOAD_INDICATOR_CLASS);
                this._createComponent(this._treeViewLoadIndicator, _load_indicator2.default, {});
                return this._treeViewLoadIndicator
            },
            _dataSourceLoadingChangedHandler: function(isLoading) {
                var resultFilter;
                if (this._isVirtualMode()) {
                    resultFilter = this._combineFilter();
                    this._dataSource.filter(resultFilter)
                }
                if (isLoading && !this._dataSource.isLoaded()) {
                    this.option("items", []);
                    var $wrapper = (0, _renderer2.default)("<div>").addClass(LOAD_INDICATOR_WRAPPER_CLASS);
                    this._createTreeViewLoadIndicator().appendTo($wrapper);
                    this.itemsContainer().append($wrapper);
                    if (this._isVirtualMode() && this._dataSource.filter() !== resultFilter) {
                        this._dataSource.filter([])
                    }
                } else {
                    this._removeTreeViewLoadIndicator()
                }
            },
            _initStoreChangeHandlers: function() {
                var _this2 = this;
                if ("plain" !== this.option("dataStructure")) {
                    return
                }
                this._dataSource && this._dataSource.store().on("inserted", function(newItem) {
                    _this2.option().items = _this2.option("items").concat(newItem);
                    _this2._dataAdapter.addItem(newItem);
                    if (!_this2._dataAdapter.isFiltered(newItem)) {
                        return
                    }
                    _this2._updateLevel(_this2._parentIdGetter(newItem))
                }).on("removed", function(removedKey) {
                    var node = _this2._dataAdapter.getNodeByKey(removedKey);
                    _this2.option("items")[_this2._dataAdapter.getIndexByKey(node.internalFields.key)] = 0;
                    _this2._markChildrenItemsToRemove(node);
                    _this2._removeItems();
                    _this2._dataAdapter.removeItem(removedKey);
                    _this2._updateLevel(_this2._parentIdGetter(node))
                })
            },
            _markChildrenItemsToRemove: function(node) {
                var _this3 = this;
                var keys = node.internalFields.childrenKeys;
                (0, _iterator.each)(keys, function(_, key) {
                    _this3.option("items")[_this3._dataAdapter.getIndexByKey(key)] = 0;
                    _this3._markChildrenItemsToRemove(_this3._dataAdapter.getNodeByKey(key))
                })
            },
            _removeItems: function() {
                var _this4 = this;
                var items = (0, _extend.extend)(true, [], this.option("items"));
                var counter = 0;
                (0, _iterator.each)(items, function(index, item) {
                    if (!item) {
                        _this4.option("items").splice(index - counter, 1);
                        counter++
                    }
                })
            },
            _updateLevel: function(parentId) {
                var $container = this._getContainerByParentKey(parentId);
                this._renderItems($container, this._dataAdapter.getChildrenNodes(parentId))
            },
            _getOldContainer: function($itemElement) {
                if ($itemElement.length) {
                    return $itemElement.children(".".concat(NODE_CONTAINER_CLASS))
                }
                if (this._scrollableContainer) {
                    return this._scrollableContainer.$content().children()
                }
                return (0, _renderer2.default)()
            },
            _getContainerByParentKey: function(parentId) {
                var node = this._dataAdapter.getNodeByKey(parentId);
                var $itemElement = node ? this._getNodeElement(node) : [];
                this._getOldContainer($itemElement).remove();
                var $container = this._renderNodeContainer($itemElement);
                if (this._isRootLevel(parentId)) {
                    if (!this._scrollableContainer) {
                        this._renderScrollableContainer()
                    }
                    this._scrollableContainer.$content().append($container)
                }
                return $container
            },
            _isRootLevel: function(parentId) {
                return parentId === this.option("rootValue")
            },
            _getAccessors: function() {
                var accessors = this.callBase();
                accessors.push("hasItems");
                return accessors
            },
            _getDataAdapterOptions: function() {
                return {
                    rootValue: this.option("rootValue"),
                    multipleSelection: !this._isSingleSelection(),
                    recursiveSelection: this._isRecursiveSelection(),
                    recursiveExpansion: this.option("expandNodesRecursive"),
                    selectionRequired: this.option("selectionRequired"),
                    dataType: this.option("dataStructure"),
                    sort: this._dataSource && this._dataSource.sort()
                }
            },
            _initMarkup: function() {
                this._renderScrollableContainer();
                this._renderEmptyMessage(this._dataAdapter.getRootNodes());
                this.callBase();
                this.setAria("role", "tree")
            },
            _renderContentImpl: function() {
                var $nodeContainer = this._renderNodeContainer();
                this._scrollableContainer.$content().append($nodeContainer);
                if (!this.option("items") || !this.option("items").length) {
                    return
                }
                this._renderItems($nodeContainer, this._dataAdapter.getRootNodes());
                this._initExpandEvent();
                if (this._selectAllEnabled()) {
                    this._createSelectAllValueChangedAction();
                    this._renderSelectAllItem($nodeContainer)
                }
            },
            _isVirtualMode: function() {
                return this.option("virtualModeEnabled") && this._isDataStructurePlain() && !!this.option("dataSource")
            },
            _isDataStructurePlain: function() {
                return "plain" === this.option("dataStructure")
            },
            _fireContentReadyAction: function() {
                var dataSource = this.getDataSource();
                var skipContentReadyAction = dataSource && !dataSource.isLoaded();
                if (this._scrollableContainer && _window2.default.hasWindow()) {
                    this._scrollableContainer.update()
                }
                if (!skipContentReadyAction) {
                    this.callBase()
                }
                if (this._scrollableContainer && _window2.default.hasWindow()) {
                    this._scrollableContainer.update()
                }
            },
            _renderScrollableContainer: function() {
                this._scrollableContainer = this._createComponent((0, _renderer2.default)("<div>").appendTo(this.$element()), _ui4.default, {
                    direction: this.option("scrollDirection"),
                    useKeyboard: false
                })
            },
            _renderNodeContainer: function($parent) {
                var $container = (0, _renderer2.default)("<ul>").addClass(NODE_CONTAINER_CLASS);
                this.setAria("role", "group", $container);
                if ($parent && $parent.length) {
                    var itemData = this._getItemData($parent.children("." + ITEM_CLASS));
                    if (this._expandedGetter(itemData)) {
                        $container.addClass(OPENED_NODE_CONTAINER_CLASS)
                    }
                    $container.appendTo($parent)
                }
                return $container
            },
            _createDOMElement: function($nodeContainer, node) {
                var $node = (0, _renderer2.default)("<li>").addClass(NODE_CLASS).attr(DATA_ITEM_ID, this._encodeString(node.internalFields.key)).prependTo($nodeContainer);
                this.setAria({
                    role: "treeitem",
                    label: this._displayGetter(node.internalFields.item) || "",
                    expanded: node.internalFields.expanded || false,
                    level: this._getLevel($nodeContainer)
                }, $node);
                return $node
            },
            _getLevel: function($nodeContainer) {
                var parent = $nodeContainer.parent();
                return parent.hasClass("dx-scrollable-content") ? 1 : parseInt(parent.attr("aria-level")) + 1
            },
            _showCheckboxes: function() {
                return "none" !== this.option("showCheckBoxesMode")
            },
            _selectAllEnabled: function() {
                return "selectAll" === this.option("showCheckBoxesMode") && !this._isSingleSelection()
            },
            _renderItems: function($nodeContainer, nodes) {
                var length = nodes.length - 1;
                for (var i = length; i >= 0; i--) {
                    this._renderItem(i, nodes[i], $nodeContainer)
                }
                this._renderedItemsCount += nodes.length
            },
            _renderItem: function(nodeIndex, node, $nodeContainer) {
                var $node = this._createDOMElement($nodeContainer, node);
                var nodeData = node.internalFields;
                var showCheckBox = this._showCheckboxes();
                $node.addClass(showCheckBox ? ITEM_WITH_CHECKBOX_CLASS : ITEM_WITHOUT_CHECKBOX_CLASS);
                $node.toggleClass(INVISIBLE_STATE_CLASS, false === nodeData.item.visible);
                showCheckBox && this._renderCheckBox($node, node);
                this.setAria("selected", nodeData.selected, $node);
                this._toggleSelectedClass($node, nodeData.selected);
                this.callBase(this._renderedItemsCount + nodeIndex, nodeData.item, $node);
                if (false !== nodeData.item.visible) {
                    this._renderChildren($node, node)
                }
            },
            _setAriaSelected: function() {},
            _renderChildren: function($node, node) {
                var _this5 = this;
                if (!this._hasChildren(node)) {
                    this._addLeafClass($node);
                    return
                }
                this._renderToggleItemVisibilityIcon($node, node);
                if (this.option("deferRendering") && !node.internalFields.expanded) {
                    return
                }
                this._loadSublevel(node).done(function(childNodes) {
                    _this5._renderSublevel($node, _this5._getActualNode(node), childNodes)
                })
            },
            _getActualNode: function(cachedNode) {
                return this._dataAdapter.getNodeByKey(cachedNode.internalFields.key)
            },
            _hasChildren: function(node) {
                if (this._isVirtualMode() || this._useCustomChildrenLoader()) {
                    return false !== this._hasItemsGetter(node.internalFields.item)
                }
                return this.callBase(node)
            },
            _loadSublevel: function(node) {
                var _this6 = this;
                var deferred = new _deferred.Deferred;
                var childrenNodes = this._getChildNodes(node);
                if (childrenNodes.length) {
                    deferred.resolve(childrenNodes)
                } else {
                    this._loadNestedItems(node).done(function(items) {
                        deferred.resolve(_this6._dataAdapter.getNodesByItems(items))
                    })
                }
                return deferred.promise()
            },
            _renderSublevel: function($node, node, childNodes) {
                var $nestedNodeContainer = this._renderNodeContainer($node, node);
                var childNodesByChildrenKeys = childNodes.filter(function(childNode) {
                    return node.internalFields.childrenKeys.indexOf(childNode.internalFields.key) !== -1
                });
                this._renderItems($nestedNodeContainer, childNodesByChildrenKeys);
                if (childNodesByChildrenKeys.length && !node.internalFields.selected) {
                    var firstChild = childNodesByChildrenKeys[0];
                    this._updateParentsState(firstChild, this._getNodeElement(firstChild))
                }
                this._normalizeIconState($node, childNodesByChildrenKeys.length);
                if (node.internalFields.expanded) {
                    $nestedNodeContainer.addClass(OPENED_NODE_CONTAINER_CLASS)
                }
            },
            _executeItemRenderAction: function(itemIndex, itemData, itemElement) {
                var node = this._getNode(itemElement);
                this._getItemRenderAction()({
                    itemElement: itemElement,
                    itemIndex: itemIndex,
                    itemData: itemData,
                    node: this._dataAdapter.getPublicNode(node)
                })
            },
            _addLeafClass: function($node) {
                $node.addClass(IS_LEAF)
            },
            _expandEventHandler: function(e) {
                var $nodeElement = (0, _renderer2.default)(e.currentTarget.parentNode);
                if (!$nodeElement.hasClass(IS_LEAF)) {
                    this._toggleExpandedState(e.currentTarget, void 0, e)
                }
            },
            _initExpandEvent: function() {
                var expandedEventName = this._getEventNameByOption(this.option("expandEvent"));
                var $itemsContainer = this._itemContainer();
                var itemSelector = this._itemSelector();
                (0, _events_engine.off)($itemsContainer, "." + EXPAND_EVENT_NAMESPACE, itemSelector);
                (0, _events_engine.on)($itemsContainer, expandedEventName, itemSelector, this._expandEventHandler.bind(this))
            },
            _getEventNameByOption: function(name) {
                var event = "click" === name ? _click2.default : _double_click2.default;
                return (0, _utils.addNamespace)(event.name, EXPAND_EVENT_NAMESPACE)
            },
            _getNode: function(identifier) {
                if (!(0, _type.isDefined)(identifier)) {
                    return null
                }
                if (identifier.internalFields) {
                    return identifier
                }
                if ((0, _type.isPrimitive)(identifier)) {
                    return this._dataAdapter.getNodeByKey(identifier)
                }
                var itemElement = (0, _renderer2.default)(identifier).get(0);
                if (!itemElement) {
                    return null
                }
                if ((0, _dom_adapter.isElementNode)(itemElement)) {
                    return this._getNodeByElement(itemElement)
                }
                return this._dataAdapter.getNodeByItem(itemElement)
            },
            _getNodeByElement: function(itemElement) {
                var $node = (0, _renderer2.default)(itemElement).closest("." + NODE_CLASS);
                var key = this._decodeString($node.attr(DATA_ITEM_ID));
                return this._dataAdapter.getNodeByKey(key)
            },
            _toggleExpandedState: function(itemElement, state, e) {
                var node = this._getNode(itemElement);
                if (!node) {
                    return (new _deferred.Deferred).reject().promise()
                }
                if (node.internalFields.disabled) {
                    return (new _deferred.Deferred).reject().promise()
                }
                var currentState = node.internalFields.expanded;
                if (currentState === state) {
                    return (new _deferred.Deferred).resolve().promise()
                }
                if (this._hasChildren(node)) {
                    var $node = this._getNodeElement(node);
                    if ($node.find(".".concat(NODE_LOAD_INDICATOR_CLASS, ":not(.").concat(INVISIBLE_STATE_CLASS, ")")).length) {
                        return (new _deferred.Deferred).reject().promise()
                    }
                    this._createLoadIndicator($node)
                }
                if (!(0, _type.isDefined)(state)) {
                    state = !currentState
                }
                this._dataAdapter.toggleExpansion(node.internalFields.key, state);
                return this._updateExpandedItemsUI(node, state, e)
            },
            _createLoadIndicator: function($node) {
                var $icon = $node.children("." + TOGGLE_ITEM_VISIBILITY_CLASS);
                var $nodeContainer = $node.children(".".concat(NODE_CONTAINER_CLASS));
                if ($icon.hasClass(TOGGLE_ITEM_VISIBILITY_OPENED_CLASS) || $nodeContainer.not(":empty").length) {
                    return
                }
                this._createComponent((0, _renderer2.default)("<div>").addClass(NODE_LOAD_INDICATOR_CLASS), _load_indicator2.default, {}).$element().appendTo($node);
                $icon.hide()
            },
            _renderToggleItemVisibilityIcon: function($node, node) {
                var $icon = (0, _renderer2.default)("<div>").addClass(TOGGLE_ITEM_VISIBILITY_CLASS).appendTo($node);
                if (node.internalFields.expanded) {
                    $icon.addClass(TOGGLE_ITEM_VISIBILITY_OPENED_CLASS);
                    $node.parent().addClass(OPENED_NODE_CONTAINER_CLASS)
                }
                if (node.internalFields.disabled) {
                    $icon.addClass(DISABLED_STATE_CLASS)
                }
                this._renderToggleItemVisibilityIconClick($icon, node)
            },
            _renderToggleItemVisibilityIconClick: function($icon, node) {
                var _this7 = this;
                var eventName = (0, _utils.addNamespace)(_click2.default.name, this.NAME);
                (0, _events_engine.off)($icon, eventName);
                (0, _events_engine.on)($icon, eventName, function(e) {
                    _this7._toggleExpandedState(node.internalFields.key, void 0, e)
                })
            },
            _updateExpandedItemsUI: function(node, state, e) {
                var $node = this._getNodeElement(node);
                var isHiddenNode = !$node.length || state && $node.is(":hidden");
                if (this.option("expandNodesRecursive") && isHiddenNode) {
                    var parentNode = this._getNode(node.internalFields.parentKey);
                    if (parentNode) {
                        this._updateExpandedItemsUI(parentNode, state, e)
                    }
                }
                var $icon = $node.children("." + TOGGLE_ITEM_VISIBILITY_CLASS);
                var $nodeContainer = $node.children(".".concat(NODE_CONTAINER_CLASS));
                $icon.toggleClass(TOGGLE_ITEM_VISIBILITY_OPENED_CLASS, state);
                var nodeContainerExists = $nodeContainer.length > 0;
                var completionCallback = new _deferred.Deferred;
                if (!state || nodeContainerExists && !$nodeContainer.is(":empty")) {
                    this._animateNodeContainer(node, state, e, completionCallback);
                    return completionCallback.promise()
                }
                if (this._isVirtualMode() || this._useCustomChildrenLoader()) {
                    this._loadNestedItemsWithUpdate(node, state, e, completionCallback);
                    return completionCallback.promise()
                }
                this._renderSublevel($node, node, this._getChildNodes(node));
                this._fireContentReadyAction();
                this._animateNodeContainer(node, state, e, completionCallback);
                return completionCallback.promise()
            },
            _loadNestedItemsWithUpdate: function(node, state, e, completionCallback) {
                var _this8 = this;
                var $node = this._getNodeElement(node);
                this._loadNestedItems(node).done(function(items) {
                    var actualNodeData = _this8._getActualNode(node);
                    _this8._renderSublevel($node, actualNodeData, _this8._dataAdapter.getNodesByItems(items));
                    if (!items || !items.length) {
                        return
                    }
                    _this8._fireContentReadyAction();
                    _this8._animateNodeContainer(actualNodeData, state, e, completionCallback)
                })
            },
            _loadNestedItems: function(node) {
                var _this9 = this;
                if (this._useCustomChildrenLoader()) {
                    var publicNode = this._dataAdapter.getPublicNode(node);
                    return this._loadChildrenByCustomLoader(publicNode).done(function(newItems) {
                        if (!_this9._areNodesExists(newItems)) {
                            _this9._appendItems(newItems)
                        }
                    })
                }
                if (!this._isVirtualMode()) {
                    return (new _deferred.Deferred).resolve([]).promise()
                }
                this._filter.internal = [this.option("parentIdExpr"), node.internalFields.key];
                this._dataSource.filter(this._combineFilter());
                return this._dataSource.load().done(function(newItems) {
                    if (!_this9._areNodesExists(newItems)) {
                        _this9._appendItems(newItems)
                    }
                })
            },
            _areNodesExists: function(newItems, items) {
                var keyOfRootItem = this.keyOf(newItems[0]);
                var fullData = this._dataAdapter.getFullData();
                return !!this._dataAdapter.getNodeByKey(keyOfRootItem, fullData)
            },
            _appendItems: function(newItems) {
                this.option().items = this.option("items").concat(newItems);
                this._initDataAdapter()
            },
            _animateNodeContainer: function(node, state, e, completionCallback) {
                var $node = this._getNodeElement(node);
                var $nodeContainer = $node.children(".".concat(NODE_CONTAINER_CLASS));
                if (node && completionCallback && 0 === $nodeContainer.length) {
                    completionCallback.resolve()
                }
                $nodeContainer.addClass(OPENED_NODE_CONTAINER_CLASS);
                var nodeHeight = $nodeContainer.height();
                _fx2.default.stop($nodeContainer, true);
                _fx2.default.animate($nodeContainer, {
                    type: "custom",
                    duration: this.option("animationEnabled") ? 400 : 0,
                    from: {
                        maxHeight: state ? 0 : nodeHeight
                    },
                    to: {
                        maxHeight: state ? nodeHeight : 0
                    },
                    complete: function() {
                        $nodeContainer.css("maxHeight", "none");
                        $nodeContainer.toggleClass(OPENED_NODE_CONTAINER_CLASS, state);
                        this.setAria("expanded", state, $node);
                        this._scrollableContainer.update();
                        this._fireExpandedStateUpdatedEvent(state, node, e);
                        if (completionCallback) {
                            completionCallback.resolve()
                        }
                    }.bind(this)
                })
            },
            _fireExpandedStateUpdatedEvent: function(isExpanded, node, e) {
                if (!this._hasChildren(node)) {
                    return
                }
                var optionName = isExpanded ? "onItemExpanded" : "onItemCollapsed";
                if ((0, _type.isDefined)(e)) {
                    this._itemDXEventHandler(e, optionName, {
                        node: this._dataAdapter.getPublicNode(node)
                    })
                } else {
                    var target = this._getNodeElement(node);
                    this._itemEventHandler(target, optionName, {
                        event: e,
                        node: this._dataAdapter.getPublicNode(node)
                    })
                }
            },
            _normalizeIconState: function($node, hasNewItems) {
                var $loadIndicator = $node.find(".dx-loadindicator");
                $loadIndicator.length && _load_indicator2.default.getInstance($loadIndicator).option("visible", false);
                if (hasNewItems) {
                    var $icon = $node.find("." + TOGGLE_ITEM_VISIBILITY_CLASS);
                    $icon.show();
                    return
                }
                $node.find("." + TOGGLE_ITEM_VISIBILITY_CLASS).removeClass(TOGGLE_ITEM_VISIBILITY_CLASS);
                $node.addClass(IS_LEAF)
            },
            _emptyMessageContainer: function() {
                return this._scrollableContainer ? this._scrollableContainer.content() : this.callBase()
            },
            _renderContent: function() {
                var items = this.option("items");
                if (items && items.length) {
                    this._contentAlreadyRendered = true
                }
                this.callBase()
            },
            _renderSelectAllItem: function($container) {
                $container = $container || this.$element().find(".".concat(NODE_CONTAINER_CLASS)).first();
                this._$selectAllItem = (0, _renderer2.default)("<div>").addClass(SELECT_ALL_ITEM_CLASS);
                var value = this._dataAdapter.isAllSelected();
                this._createComponent(this._$selectAllItem, _check_box2.default, {
                    value: value,
                    text: this.option("selectAllText"),
                    onValueChanged: function(args) {
                        this._toggleSelectAll(args);
                        this._fireSelectAllValueChanged(args.value)
                    }.bind(this)
                });
                this._toggleSelectedClass(this._$selectAllItem, value);
                $container.before(this._$selectAllItem)
            },
            _toggleSelectAll: function(args) {
                this._dataAdapter.toggleSelectAll(args.value);
                this._updateItemsUI();
                this._fireSelectionChanged()
            },
            _renderCheckBox: function($node, node) {
                var $checkbox = (0, _renderer2.default)("<div>").appendTo($node);
                this._createComponent($checkbox, _check_box2.default, {
                    value: node.internalFields.selected,
                    onValueChanged: this._changeCheckboxValue.bind(this),
                    focusStateEnabled: false,
                    disabled: this._disabledGetter(node)
                })
            },
            _toggleSelectedClass: function($node, value) {
                $node.toggleClass(SELECTED_ITEM_CLASS, !!value)
            },
            _toggleNodeDisabledState: function(node, state) {
                var $node = this._getNodeElement(node);
                var $item = $node.find("." + ITEM_CLASS).eq(0);
                this._dataAdapter.toggleNodeDisabledState(node.internalFields.key, state);
                $item.toggleClass(DISABLED_STATE_CLASS, !!state);
                if (this._showCheckboxes()) {
                    var checkbox = this._getCheckBoxInstance($node);
                    checkbox.option("disabled", !!state)
                }
            },
            _itemOptionChanged: function(item, property, value) {
                var node = this._dataAdapter.getNodeByItem(item);
                if (property === this.option("disabledExpr")) {
                    this._toggleNodeDisabledState(node, value)
                }
            },
            _changeCheckboxValue: function(e) {
                var $node = (0, _renderer2.default)(e.element).parent("." + NODE_CLASS);
                var $item = $node.children("." + ITEM_CLASS);
                var item = this._getItemData($item);
                var node = this._getNodeByElement($item);
                var value = e.value;
                if (node && node.internalFields.selected === value) {
                    return
                }
                this._updateItemSelection(value, item, e.event)
            },
            _isSingleSelection: function() {
                return "single" === this.option("selectionMode")
            },
            _isRecursiveSelection: function() {
                return this.option("selectNodesRecursive") && "single" !== this.option("selectionMode")
            },
            _isLastSelectedBranch: function(publicNode, selectedNodesKeys, deep) {
                var keyIndex = selectedNodesKeys.indexOf(publicNode.key);
                if (keyIndex >= 0) {
                    selectedNodesKeys.splice(keyIndex, 1)
                }
                if (deep) {
                    (0, _iterator.each)(publicNode.children, function(_, childNode) {
                        this._isLastSelectedBranch(childNode, selectedNodesKeys, true)
                    }.bind(this))
                }
                if (publicNode.parent) {
                    this._isLastSelectedBranch(publicNode.parent, selectedNodesKeys)
                }
                return 0 === selectedNodesKeys.length
            },
            _isLastRequired: function(node) {
                var selectionRequired = this.option("selectionRequired");
                var isSingleMode = this._isSingleSelection();
                var selectedNodesKeys = this.getSelectedNodeKeys();
                if (!selectionRequired) {
                    return
                }
                if (isSingleMode) {
                    return 1 === selectedNodesKeys.length
                } else {
                    return this._isLastSelectedBranch(node.internalFields.publicNode, selectedNodesKeys.slice(), true)
                }
            },
            _updateItemSelection: function(value, itemElement, dxEvent) {
                var _this10 = this;
                var node = this._getNode(itemElement);
                if (!node) {
                    return false
                }
                if (node.internalFields.selected === value) {
                    return true
                }
                if (!value && this._isLastRequired(node)) {
                    if (this._showCheckboxes()) {
                        var $node = this._getNodeElement(node);
                        var checkbox = this._getCheckBoxInstance($node);
                        checkbox && checkbox.option("value", true)
                    }
                    return false
                }
                var selectedNodesKeys = this.getSelectedNodeKeys();
                if (this._isSingleSelection() && value) {
                    (0, _iterator.each)(selectedNodesKeys, function(index, nodeKey) {
                        _this10.unselectItem(nodeKey)
                    })
                }
                this._dataAdapter.toggleSelection(node.internalFields.key, value);
                this._updateItemsUI();
                var initiator = dxEvent || this._findItemElementByItem(node.internalFields.item);
                var handler = dxEvent ? this._itemDXEventHandler : this._itemEventHandler;
                handler.call(this, initiator, "onItemSelectionChanged", {
                    node: this._dataAdapter.getPublicNode(node),
                    itemData: node.internalFields.item
                });
                this._fireSelectionChanged();
                return true
            },
            _getCheckBoxInstance: function($node) {
                return $node.children(".dx-checkbox").dxCheckBox("instance")
            },
            _updateItemsUI: function() {
                var _this11 = this;
                var cache = {};
                (0, _iterator.each)(this._dataAdapter.getData(), function(_, node) {
                    var $node = _this11._getNodeElement(node, cache);
                    var nodeSelection = node.internalFields.selected;
                    if (!$node.length) {
                        return
                    }
                    _this11._toggleSelectedClass($node, nodeSelection);
                    _this11.setAria("selected", nodeSelection, $node);
                    if (_this11._showCheckboxes()) {
                        var checkbox = _this11._getCheckBoxInstance($node);
                        checkbox.option("value", nodeSelection)
                    }
                });
                if (this._selectAllEnabled()) {
                    this._$selectAllItem.dxCheckBox("instance").option("value", this._dataAdapter.isAllSelected())
                }
            },
            _updateParentsState: function(node, $node) {
                if (!$node) {
                    return
                }
                var parentNode = this._dataAdapter.getNodeByKey(node.internalFields.parentKey);
                var $parentNode = (0, _renderer2.default)($node.parents("." + NODE_CLASS)[0]);
                if (this._showCheckboxes()) {
                    var parentValue = parentNode.internalFields.selected;
                    this._getCheckBoxInstance($parentNode).option("value", parentValue);
                    this._toggleSelectedClass($parentNode, parentValue)
                }
                if (parentNode.internalFields.parentKey !== this.option("rootValue")) {
                    this._updateParentsState(parentNode, $parentNode)
                }
            },
            _itemEventHandlerImpl: function(initiator, action, actionArgs) {
                var $itemElement = (0, _renderer2.default)(initiator).closest("." + NODE_CLASS).children("." + ITEM_CLASS);
                return action((0, _extend.extend)(this._extendActionArgs($itemElement), actionArgs))
            },
            _itemContextMenuHandler: function(e) {
                this._createEventHandler("onItemContextMenu", e);
            },
            _itemHoldHandler: function(e) {
                this._createEventHandler("onItemHold", e)
            },
            _createEventHandler: function(eventName, e) {
                var node = this._getNodeByElement(e.currentTarget);
                this._itemDXEventHandler(e, eventName, {
                    node: this._dataAdapter.getPublicNode(node)
                })
            },
            _itemClass: function() {
                return ITEM_CLASS
            },
            _itemDataKey: function() {
                return ITEM_DATA_KEY
            },
            _attachClickEvent: function() {
                var clickSelector = "." + this._itemClass();
                var pointerDownSelector = "." + NODE_CLASS + ", ." + SELECT_ALL_ITEM_CLASS;
                var eventName = (0, _utils.addNamespace)(_click2.default.name, this.NAME);
                var pointerDownEvent = (0, _utils.addNamespace)(_pointer.down, this.NAME);
                var $itemContainer = this._itemContainer();
                var that = this;
                (0, _events_engine.off)($itemContainer, eventName, clickSelector);
                (0, _events_engine.off)($itemContainer, pointerDownEvent, pointerDownSelector);
                (0, _events_engine.on)($itemContainer, eventName, clickSelector, function(e) {
                    that._itemClickHandler(e, (0, _renderer2.default)(this))
                });
                (0, _events_engine.on)($itemContainer, pointerDownEvent, pointerDownSelector, function(e) {
                    that._itemPointerDownHandler(e)
                })
            },
            _itemClickHandler: function(e, $item) {
                var itemData = this._getItemData($item);
                var node = this._getNodeByElement($item);
                this._itemDXEventHandler(e, "onItemClick", {
                    node: this._dataAdapter.getPublicNode(node)
                });
                if (this.option("selectByClick") && !e.isDefaultPrevented()) {
                    this._updateItemSelection(!node.internalFields.selected, itemData, e)
                }
            },
            _updateSelectionToFirstItem: function($items, startIndex) {
                var itemIndex = startIndex;
                while (itemIndex >= 0) {
                    var $item = (0, _renderer2.default)($items[itemIndex]);
                    this._updateItemSelection(true, $item.find("." + ITEM_CLASS).get(0));
                    itemIndex--
                }
            },
            _updateSelectionToLastItem: function($items, startIndex) {
                var length = $items.length;
                var itemIndex = startIndex;
                while (itemIndex < length) {
                    var $item = (0, _renderer2.default)($items[itemIndex]);
                    this._updateItemSelection(true, $item.find("." + ITEM_CLASS).get(0));
                    itemIndex++
                }
            },
            _focusInHandler: function(e) {
                var _this12 = this;
                this._updateFocusState(e, true);
                if (this.option("focusedElement")) {
                    clearTimeout(this._setFocusedItemTimeout);
                    this._setFocusedItemTimeout = setTimeout(function() {
                        _this12._setFocusedItem((0, _renderer2.default)(_this12.option("focusedElement")))
                    });
                    return
                }
                var $activeItem = this._getActiveItem();
                this.option("focusedElement", (0, _dom.getPublicElement)($activeItem.closest("." + NODE_CLASS)))
            },
            _setFocusedItem: function($target) {
                if (!$target || !$target.length) {
                    return
                }
                if (!$target.children().hasClass(DISABLED_STATE_CLASS)) {
                    this.callBase($target)
                }
            },
            _itemPointerDownHandler: function(e) {
                if (!this.option("focusStateEnabled")) {
                    return
                }
                var $target = (0, _renderer2.default)(e.target).closest("." + NODE_CLASS + ", ." + SELECT_ALL_ITEM_CLASS);
                if (!$target.length) {
                    return
                }
                var itemElement = $target.hasClass(DISABLED_STATE_CLASS) ? null : $target;
                this.option("focusedElement", (0, _dom.getPublicElement)(itemElement))
            },
            _findNonDisabledNodes: function($nodes) {
                return $nodes.not(function() {
                    return (0, _renderer2.default)(this).children("." + ITEM_CLASS).hasClass(DISABLED_STATE_CLASS)
                })
            },
            _moveFocus: function(location, e) {
                var FOCUS_UP = "up";
                var FOCUS_DOWN = "down";
                var FOCUS_FIRST = "first";
                var FOCUS_LAST = "last";
                var FOCUS_LEFT = this.option("rtlEnabled") ? "right" : "left";
                var FOCUS_RIGHT = this.option("rtlEnabled") ? "left" : "right";
                this.$element().find(".".concat(NODE_CONTAINER_CLASS)).each(function() {
                    _fx2.default.stop(this, true)
                });
                var $items = this._findNonDisabledNodes(this._nodeElements());
                if (!$items || !$items.length) {
                    return
                }
                switch (location) {
                    case FOCUS_UP:
                        var $prevItem = this._prevItem($items);
                        this.option("focusedElement", (0, _dom.getPublicElement)($prevItem));
                        var prevItemElement = this._getNodeItemElement($prevItem);
                        this._scrollableContainer.scrollToElement(prevItemElement);
                        if (e.shiftKey && this._showCheckboxes()) {
                            this._updateItemSelection(true, prevItemElement)
                        }
                        break;
                    case FOCUS_DOWN:
                        var $nextItem = this._nextItem($items);
                        this.option("focusedElement", (0, _dom.getPublicElement)($nextItem));
                        var nextItemElement = this._getNodeItemElement($nextItem);
                        this._scrollableContainer.scrollToElement(nextItemElement);
                        if (e.shiftKey && this._showCheckboxes()) {
                            this._updateItemSelection(true, nextItemElement)
                        }
                        break;
                    case FOCUS_FIRST:
                        var $firstItem = $items.first();
                        if (e.shiftKey && this._showCheckboxes()) {
                            this._updateSelectionToFirstItem($items, $items.index(this._prevItem($items)))
                        }
                        this.option("focusedElement", (0, _dom.getPublicElement)($firstItem));
                        this._scrollableContainer.scrollToElement(this._getNodeItemElement($firstItem));
                        break;
                    case FOCUS_LAST:
                        var $lastItem = $items.last();
                        if (e.shiftKey && this._showCheckboxes()) {
                            this._updateSelectionToLastItem($items, $items.index(this._nextItem($items)))
                        }
                        this.option("focusedElement", (0, _dom.getPublicElement)($lastItem));
                        this._scrollableContainer.scrollToElement(this._getNodeItemElement($lastItem));
                        break;
                    case FOCUS_RIGHT:
                        this._expandFocusedContainer();
                        break;
                    case FOCUS_LEFT:
                        this._collapseFocusedContainer();
                        break;
                    default:
                        this.callBase.apply(this, arguments);
                        return
                }
            },
            _getNodeItemElement: function($node) {
                return $node.find("." + ITEM_CLASS).get(0)
            },
            _nodeElements: function() {
                return this.$element().find("." + NODE_CLASS).not(":hidden")
            },
            _expandFocusedContainer: function() {
                var $focusedNode = (0, _renderer2.default)(this.option("focusedElement"));
                if (!$focusedNode.length || $focusedNode.hasClass(IS_LEAF)) {
                    return
                }
                var $node = $focusedNode.find(".".concat(NODE_CONTAINER_CLASS)).eq(0);
                if ($node.hasClass(OPENED_NODE_CONTAINER_CLASS)) {
                    var $nextItem = this._nextItem(this._findNonDisabledNodes(this._nodeElements()));
                    this.option("focusedElement", (0, _dom.getPublicElement)($nextItem));
                    this._scrollableContainer.scrollToElement(this._getNodeItemElement($nextItem));
                    return
                }
                var node = this._getNodeByElement($focusedNode.children("." + ITEM_CLASS));
                this._toggleExpandedState(node, true)
            },
            _getClosestNonDisabledNode: function($node) {
                do {
                    $node = $node.parent().closest("." + NODE_CLASS)
                } while ($node.children(".dx-treeview-item.dx-state-disabled").length);
                return $node
            },
            _collapseFocusedContainer: function() {
                var $focusedNode = (0, _renderer2.default)(this.option("focusedElement"));
                if (!$focusedNode.length) {
                    return
                }
                var nodeElement = $focusedNode.find(".".concat(NODE_CONTAINER_CLASS)).eq(0);
                if (!$focusedNode.hasClass(IS_LEAF) && nodeElement.hasClass(OPENED_NODE_CONTAINER_CLASS)) {
                    var node = this._getNodeByElement($focusedNode.children("." + ITEM_CLASS));
                    this._toggleExpandedState(node, false)
                } else {
                    var collapsedNode = this._getClosestNonDisabledNode($focusedNode);
                    collapsedNode.length && this.option("focusedElement", (0, _dom.getPublicElement)(collapsedNode));
                    this._scrollableContainer.scrollToElement(this._getNodeItemElement(collapsedNode))
                }
            },
            _encodeString: function(value) {
                return (0, _type.isString)(value) ? encodeURI(value) : value
            },
            _decodeString: function(value) {
                return (0, _type.isString)(value) ? decodeURI(value) : value
            },
            updateDimensions: function() {
                var _this13 = this;
                var deferred = new _deferred.Deferred;
                if (this._scrollableContainer) {
                    this._scrollableContainer.update().done(function() {
                        deferred.resolveWith(_this13)
                    })
                } else {
                    deferred.resolveWith(this)
                }
                return deferred.promise()
            },
            selectItem: function(itemElement) {
                return this._updateItemSelection(true, itemElement)
            },
            unselectItem: function(itemElement) {
                return this._updateItemSelection(false, itemElement)
            },
            expandItem: function(itemElement) {
                return this._toggleExpandedState(itemElement, true)
            },
            collapseItem: function(itemElement) {
                return this._toggleExpandedState(itemElement, false)
            },
            getNodes: function() {
                return this._dataAdapter.getTreeNodes()
            },
            getSelectedNodes: function() {
                var _this14 = this;
                return this.getSelectedNodeKeys().map(function(key) {
                    var node = _this14._dataAdapter.getNodeByKey(key);
                    return _this14._dataAdapter.getPublicNode(node)
                })
            },
            getSelectedNodesKeys: function() {
                _ui6.default.log("W0002", "dxTreeView", "getSelectedNodesKeys", "20.1", "Use the 'getSelectedNodeKeys' method instead");
                return this.getSelectedNodeKeys()
            },
            getSelectedNodeKeys: function() {
                return this._dataAdapter.getSelectedNodesKeys()
            },
            selectAll: function() {
                if (this._selectAllEnabled()) {
                    this._$selectAllItem.dxCheckBox("instance").option("value", true)
                } else {
                    this._toggleSelectAll({
                        value: true
                    })
                }
            },
            unselectAll: function() {
                if (this._selectAllEnabled()) {
                    this._$selectAllItem.dxCheckBox("instance").option("value", false)
                } else {
                    this._toggleSelectAll({
                        value: false
                    })
                }
            },
            expandAll: function() {
                var dataAdapter = this._dataAdapter;
                (0, _iterator.each)(dataAdapter.getData(), function(_, node) {
                    return dataAdapter.toggleExpansion(node.internalFields.key, true)
                });
                this.repaint()
            },
            collapseAll: function() {
                (0, _iterator.each)(this._dataAdapter.getExpandedNodesKeys(), function(_, key) {
                    this._toggleExpandedState(key, false)
                }.bind(this))
            },
            scrollToItem: function(keyOrItemOrElement) {
                var _this15 = this;
                var node = this._getNode(keyOrItemOrElement);
                if (!node) {
                    return (new _deferred.Deferred).reject().promise()
                }
                var nodeKeysToExpand = [];
                var parentNode = node.internalFields.publicNode.parent;
                while (null != parentNode) {
                    if (!parentNode.expanded) {
                        nodeKeysToExpand.push(parentNode.key)
                    }
                    parentNode = parentNode.parent
                }
                var scrollCallback = new _deferred.Deferred;
                this._expandNodes(nodeKeysToExpand.reverse()).always(function() {
                    var $element = _this15._getNodeElement(node);
                    if ($element && $element.length) {
                        _this15._scrollableContainer.scrollToElementTopLeft($element);
                        scrollCallback.resolve()
                    } else {
                        scrollCallback.reject()
                    }
                });
                return scrollCallback.promise()
            },
            _expandNodes: function(keysToExpand) {
                var _this16 = this;
                if (!keysToExpand || 0 === keysToExpand.length) {
                    return (new _deferred.Deferred).resolve().promise()
                }
                var resultCallback = new _deferred.Deferred;
                var callbacksByNodes = keysToExpand.map(function(key) {
                    return _this16.expandItem(key)
                });
                _deferred.when.apply(_renderer2.default, callbacksByNodes).done(function() {
                    return resultCallback.resolve()
                }).fail(function() {
                    return resultCallback.reject()
                });
                return resultCallback.promise()
            },
            _dispose: function() {
                this.callBase();
                clearTimeout(this._setFocusedItemTimeout)
            }
        });
        module.exports = TreeViewBase
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.grouping.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiData_gridGrouping = __webpack_require__( /*! ./ui.data_grid.grouping.expanded */ 645);
        var _uiData_gridGrouping2 = __webpack_require__( /*! ./ui.data_grid.grouping.collapsed */ 646);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiData_grid3 = __webpack_require__( /*! ./ui.data_grid.data_source_adapter */ 204);
        var _uiData_grid4 = _interopRequireDefault(_uiData_grid3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.accessibility */ 245);
        var _accessibility = __webpack_require__( /*! ../shared/accessibility */ 108);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATAGRID_GROUP_PANEL_CLASS = "dx-datagrid-group-panel";
        var DATAGRID_GROUP_PANEL_MESSAGE_CLASS = "dx-group-panel-message";
        var DATAGRID_GROUP_PANEL_ITEM_CLASS = "dx-group-panel-item";
        var DATAGRID_GROUP_PANEL_LABEL_CLASS = "dx-toolbar-label";
        var DATAGRID_EXPAND_CLASS = "dx-datagrid-expand";
        var DATAGRID_GROUP_ROW_CLASS = "dx-group-row";
        var HEADER_FILTER_CLASS_SELECTOR = ".dx-header-filter";
        var GroupingDataSourceAdapterExtender = function() {
            return {
                init: function() {
                    this.callBase.apply(this, arguments);
                    this._initGroupingHelper()
                },
                _initGroupingHelper: function(options) {
                    var grouping = this._grouping;
                    var isAutoExpandAll = this.option("grouping.autoExpandAll");
                    var isFocusedRowEnabled = this.option("focusedRowEnabled");
                    var remoteOperations = options ? options.remoteOperations : this.remoteOperations();
                    var isODataRemoteOperations = remoteOperations.filtering && remoteOperations.sorting && remoteOperations.paging;
                    if (isODataRemoteOperations && !remoteOperations.grouping && (isAutoExpandAll || !isFocusedRowEnabled)) {
                        if (!grouping || grouping instanceof _uiData_gridGrouping2.GroupingHelper) {
                            this._grouping = new _uiData_gridGrouping.GroupingHelper(this)
                        }
                    } else {
                        if (!grouping || grouping instanceof _uiData_gridGrouping.GroupingHelper) {
                            this._grouping = new _uiData_gridGrouping2.GroupingHelper(this)
                        }
                    }
                },
                totalItemsCount: function() {
                    var that = this;
                    var totalCount = that.callBase();
                    return totalCount > 0 && that._dataSource.group() && that._dataSource.requireTotalCount() ? totalCount + that._grouping.totalCountCorrection() : totalCount
                },
                itemsCount: function() {
                    return this._dataSource.group() ? this._grouping.itemsCount() || 0 : this.callBase.apply(this, arguments)
                },
                allowCollapseAll: function() {
                    return this._grouping.allowCollapseAll()
                },
                isGroupItemCountable: function(item) {
                    return this._grouping.isGroupItemCountable(item)
                },
                isRowExpanded: function(key) {
                    var groupInfo = this._grouping.findGroupInfo(key);
                    return groupInfo ? groupInfo.isExpanded : !this._grouping.allowCollapseAll()
                },
                collapseAll: function(groupIndex) {
                    return this._collapseExpandAll(groupIndex, false)
                },
                expandAll: function(groupIndex) {
                    return this._collapseExpandAll(groupIndex, true)
                },
                _collapseExpandAll: function(groupIndex, isExpand) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var group = dataSource.group();
                    var groups = _uiData_grid2.default.normalizeSortingInfo(group || []);
                    if (groups.length) {
                        for (var i = 0; i < groups.length; i++) {
                            if (void 0 === groupIndex || groupIndex === i) {
                                groups[i].isExpanded = isExpand
                            } else {
                                if (group && group[i]) {
                                    groups[i].isExpanded = group[i].isExpanded
                                }
                            }
                        }
                        dataSource.group(groups);
                        that._grouping.foreachGroups(function(groupInfo, parents) {
                            if (void 0 === groupIndex || groupIndex === parents.length - 1) {
                                groupInfo.isExpanded = isExpand
                            }
                        }, false, true);
                        that.resetPagesCache()
                    }
                    return true
                },
                refresh: function() {
                    this.callBase.apply(this, arguments);
                    return this._grouping.refresh.apply(this._grouping, arguments)
                },
                changeRowExpand: function(path) {
                    var that = this;
                    var dataSource = that._dataSource;
                    if (dataSource.group()) {
                        dataSource.beginLoading();
                        if (that._lastLoadOptions) {
                            that._lastLoadOptions.groupExpand = true
                        }
                        return that._changeRowExpandCore(path).always(function() {
                            dataSource.endLoading()
                        })
                    }
                },
                _changeRowExpandCore: function(path) {
                    return this._grouping.changeRowExpand(path)
                },
                getGroupsInfo: function() {
                    return this._grouping._groupsInfo
                },
                _hasGroupLevelsExpandState: function(group, isExpanded) {
                    if (group && Array.isArray(group)) {
                        for (var i = 0; i < group.length; i++) {
                            if (group[i].isExpanded === isExpanded) {
                                return true
                            }
                        }
                    }
                },
                _customizeRemoteOperations: function(options, isReload, operationTypes) {
                    var remoteOperations = options.remoteOperations;
                    if (options.storeLoadOptions.group) {
                        if (remoteOperations.grouping && !options.isCustomLoading) {
                            if (!remoteOperations.groupPaging || this._hasGroupLevelsExpandState(options.storeLoadOptions.group, true)) {
                                remoteOperations.paging = false
                            }
                        }
                        if (!remoteOperations.grouping && (!remoteOperations.sorting || !remoteOperations.filtering || options.isCustomLoading || this._hasGroupLevelsExpandState(options.storeLoadOptions.group, false))) {
                            remoteOperations.paging = false
                        }
                    } else {
                        if (!options.isCustomLoading && remoteOperations.paging && operationTypes.grouping) {
                            this.resetCache()
                        }
                    }
                    this.callBase.apply(this, arguments)
                },
                _handleDataLoading: function(options) {
                    this.callBase(options);
                    this._initGroupingHelper(options);
                    return this._grouping.handleDataLoading(options)
                },
                _handleDataLoaded: function(options) {
                    return this._grouping.handleDataLoaded(options, this.callBase.bind(this))
                },
                _handleDataLoadedCore: function(options) {
                    return this._grouping.handleDataLoadedCore(options, this.callBase.bind(this))
                }
            }
        }();
        _uiData_grid4.default.extend(GroupingDataSourceAdapterExtender);
        var GroupingDataControllerExtender = function() {
            return {
                init: function() {
                    var that = this;
                    that.callBase();
                    that.createAction("onRowExpanding");
                    that.createAction("onRowExpanded");
                    that.createAction("onRowCollapsing");
                    that.createAction("onRowCollapsed")
                },
                _beforeProcessItems: function(items) {
                    var groupColumns = this._columnsController.getGroupColumns();
                    items = this.callBase(items);
                    if (items.length && groupColumns.length) {
                        items = this._processGroupItems(items, groupColumns.length)
                    }
                    return items
                },
                _processItem: function(item, options) {
                    if ((0, _type.isDefined)(item.groupIndex) && (0, _type.isString)(item.rowType) && 0 === item.rowType.indexOf("group")) {
                        item = this._processGroupItem(item, options);
                        options.dataIndex = 0
                    } else {
                        item = this.callBase.apply(this, arguments)
                    }
                    return item
                },
                _processGroupItem: function(item) {
                    return item
                },
                _processGroupItems: function(items, groupsCount, options) {
                    var that = this;
                    var groupedColumns = that._columnsController.getGroupColumns();
                    var column = groupedColumns[groupedColumns.length - groupsCount];
                    if (!options) {
                        var scrollingMode = that.option("scrolling.mode");
                        options = {
                            collectContinuationItems: "virtual" !== scrollingMode && "infinite" !== scrollingMode,
                            resultItems: [],
                            path: [],
                            values: []
                        }
                    }
                    var resultItems = options.resultItems;
                    if (options.data) {
                        if (options.collectContinuationItems || !options.data.isContinuation) {
                            resultItems.push({
                                rowType: "group",
                                data: options.data,
                                groupIndex: options.path.length - 1,
                                isExpanded: !!options.data.items,
                                key: options.path.slice(0),
                                values: options.values.slice(0)
                            })
                        }
                    }
                    if (items) {
                        if (0 === groupsCount) {
                            resultItems.push.apply(resultItems, items)
                        } else {
                            for (var i = 0; i < items.length; i++) {
                                var item = items[i];
                                if (item && "items" in item) {
                                    options.data = item;
                                    options.path.push(item.key);
                                    options.values.push(column && column.deserializeValue && !column.calculateDisplayValue ? column.deserializeValue(item.key) : item.key);
                                    that._processGroupItems(item.items, groupsCount - 1, options);
                                    options.data = void 0;
                                    options.path.pop();
                                    options.values.pop()
                                } else {
                                    resultItems.push(item)
                                }
                            }
                        }
                    }
                    return resultItems
                },
                publicMethods: function() {
                    return this.callBase().concat(["collapseAll", "expandAll", "isRowExpanded", "expandRow", "collapseRow"])
                },
                collapseAll: function(groupIndex) {
                    var dataSource = this._dataSource;
                    if (dataSource && dataSource.collapseAll(groupIndex)) {
                        dataSource.pageIndex(0);
                        dataSource.reload()
                    }
                },
                expandAll: function(groupIndex) {
                    var dataSource = this._dataSource;
                    if (dataSource && dataSource.expandAll(groupIndex)) {
                        dataSource.pageIndex(0);
                        dataSource.reload()
                    }
                },
                changeRowExpand: function(key) {
                    var that = this;
                    var expanded = that.isRowExpanded(key);
                    var args = {
                        key: key,
                        expanded: expanded
                    };
                    that.executeAction(expanded ? "onRowCollapsing" : "onRowExpanding", args);
                    if (!args.cancel) {
                        return (0, _deferred.when)(that._changeRowExpandCore(key)).done(function() {
                            args.expanded = !expanded;
                            that.executeAction(expanded ? "onRowCollapsed" : "onRowExpanded", args)
                        })
                    }
                    return (new _deferred.Deferred).resolve()
                },
                _changeRowExpandCore: function(key) {
                    var that = this;
                    var dataSource = this._dataSource;
                    var d = new _deferred.Deferred;
                    if (!dataSource) {
                        d.resolve()
                    } else {
                        (0, _deferred.when)(dataSource.changeRowExpand(key)).done(function() {
                            that.load().done(d.resolve).fail(d.reject)
                        }).fail(d.reject)
                    }
                    return d
                },
                isRowExpanded: function(key) {
                    var dataSource = this._dataSource;
                    return dataSource && dataSource.isRowExpanded(key)
                },
                expandRow: function(key) {
                    if (!this.isRowExpanded(key)) {
                        return this.changeRowExpand(key)
                    }
                    return (new _deferred.Deferred).resolve()
                },
                collapseRow: function(key) {
                    if (this.isRowExpanded(key)) {
                        return this.changeRowExpand(key)
                    }
                    return (new _deferred.Deferred).resolve()
                },
                optionChanged: function(args) {
                    if ("grouping" === args.name) {
                        args.name = "dataSource"
                    }
                    this.callBase(args)
                }
            }
        }();
        var onGroupingMenuItemClick = function(column, params) {
            var columnsController = this._columnsController;
            switch (params.itemData.value) {
                case "group":
                    var groups = columnsController._dataSource.group() || [];
                    columnsController.columnOption(column.dataField, "groupIndex", groups.length);
                    break;
                case "ungroup":
                    columnsController.columnOption(column.dataField, "groupIndex", -1);
                    break;
                case "ungroupAll":
                    this.component.clearGrouping()
            }
        };
        var GroupingHeaderPanelExtender = function() {
            return {
                _getToolbarItems: function() {
                    var items = this.callBase();
                    return this._appendGroupingItem(items)
                },
                _appendGroupingItem: function(items) {
                    var _this = this;
                    if (this._isGroupPanelVisible()) {
                        var isRendered = false;
                        var toolbarItem = {
                            template: function() {
                                var $groupPanel = (0, _renderer2.default)("<div>").addClass(DATAGRID_GROUP_PANEL_CLASS);
                                _this._updateGroupPanelContent($groupPanel);
                                (0, _uiGrid_core.registerKeyboardAction)("groupPanel", _this, $groupPanel, void 0, _this._handleActionKeyDown.bind(_this));
                                return $groupPanel
                            },
                            name: "groupPanel",
                            onItemRendered: function() {
                                isRendered && _this.renderCompleted.fire();
                                isRendered = true
                            },
                            location: "before",
                            locateInMenu: "never",
                            sortIndex: 1
                        };
                        items.push(toolbarItem)
                    }
                    return items
                },
                _handleActionKeyDown: function(args) {
                    var event = args.event;
                    var $target = (0, _renderer2.default)(event.target);
                    var groupColumnIndex = $target.closest(".".concat(DATAGRID_GROUP_PANEL_ITEM_CLASS)).index();
                    var column = this._columnsController.getGroupColumns()[groupColumnIndex];
                    var columnIndex = column && column.index;
                    if ($target.is(HEADER_FILTER_CLASS_SELECTOR)) {
                        this.getController("headerFilter").showHeaderFilterMenu(columnIndex, true)
                    } else {
                        this._processGroupItemAction(columnIndex)
                    }
                    event.preventDefault()
                },
                _isGroupPanelVisible: function() {
                    var groupPanelOptions = this.option("groupPanel");
                    var isVisible;
                    if (groupPanelOptions) {
                        isVisible = groupPanelOptions.visible;
                        if ("auto" === isVisible) {
                            isVisible = "desktop" === _devices2.default.current().deviceType ? true : false
                        }
                    }
                    return isVisible
                },
                _renderGroupPanelItems: function($groupPanel, groupColumns) {
                    var that = this;
                    $groupPanel.empty();
                    (0, _iterator.each)(groupColumns, function(index, groupColumn) {
                        that._createGroupPanelItem($groupPanel, groupColumn)
                    });
                    (0, _accessibility.restoreFocus)(this)
                },
                _createGroupPanelItem: function($rootElement, groupColumn) {
                    var $groupPanelItem = (0, _renderer2.default)("<div>").addClass(groupColumn.cssClass).addClass(DATAGRID_GROUP_PANEL_ITEM_CLASS).data("columnData", groupColumn).appendTo($rootElement).text(groupColumn.caption);
                    (0, _accessibility.setTabIndex)(this, $groupPanelItem);
                    return $groupPanelItem
                },
                _columnOptionChanged: function(e) {
                    if (!this._requireReady && !_uiData_grid2.default.checkChanges(e.optionNames, ["width", "visibleWidth"])) {
                        var $toolbarElement = this.element();
                        var $groupPanel = $toolbarElement && $toolbarElement.find("." + DATAGRID_GROUP_PANEL_CLASS);
                        if ($groupPanel && $groupPanel.length) {
                            this._updateGroupPanelContent($groupPanel);
                            this.renderCompleted.fire()
                        }
                    }
                    this.callBase()
                },
                _updateGroupPanelContent: function($groupPanel) {
                    var that = this;
                    var groupColumns = that.getController("columns").getGroupColumns();
                    var groupPanelOptions = that.option("groupPanel");
                    that._renderGroupPanelItems($groupPanel, groupColumns);
                    if (groupPanelOptions.allowColumnDragging && !groupColumns.length) {
                        (0, _renderer2.default)("<div>").addClass(DATAGRID_GROUP_PANEL_MESSAGE_CLASS).text(groupPanelOptions.emptyPanelText).appendTo($groupPanel);
                        $groupPanel.closest("." + DATAGRID_GROUP_PANEL_LABEL_CLASS).css("maxWidth", "none");
                        that.updateToolbarDimensions()
                    }
                },
                allowDragging: function(column) {
                    var groupPanelOptions = this.option("groupPanel");
                    return this._isGroupPanelVisible() && groupPanelOptions.allowColumnDragging && column && column.allowGrouping
                },
                getColumnElements: function() {
                    var $element = this.element();
                    return $element && $element.find("." + DATAGRID_GROUP_PANEL_ITEM_CLASS)
                },
                getColumns: function() {
                    return this.getController("columns").getGroupColumns()
                },
                getBoundingRect: function() {
                    var that = this;
                    var $element = that.element();
                    if ($element && $element.find("." + DATAGRID_GROUP_PANEL_CLASS).length) {
                        var offset = $element.offset();
                        return {
                            top: offset.top,
                            bottom: offset.top + $element.height()
                        }
                    }
                    return null
                },
                getName: function() {
                    return "group"
                },
                getContextMenuItems: function(options) {
                    var that = this;
                    var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
                    var $groupedColumnElement = (0, _renderer2.default)(options.targetElement).closest("." + DATAGRID_GROUP_PANEL_ITEM_CLASS);
                    var items;
                    if ($groupedColumnElement.length) {
                        options.column = $groupedColumnElement.data("columnData")
                    }
                    if (contextMenuEnabled && options.column) {
                        var column = options.column;
                        var isGroupingAllowed = (0, _type.isDefined)(column.allowGrouping) ? column.allowGrouping : true;
                        if (isGroupingAllowed) {
                            var isColumnGrouped = (0, _type.isDefined)(column.groupIndex) && column.groupIndex > -1;
                            var groupingTexts = that.option("grouping.texts");
                            var onItemClick = onGroupingMenuItemClick.bind(that, column);
                            items = [{
                                text: groupingTexts.ungroup,
                                value: "ungroup",
                                disabled: !isColumnGrouped,
                                onItemClick: onItemClick
                            }, {
                                text: groupingTexts.ungroupAll,
                                value: "ungroupAll",
                                onItemClick: onItemClick
                            }]
                        }
                    }
                    return items
                },
                isVisible: function() {
                    return this.callBase() || this._isGroupPanelVisible()
                },
                optionChanged: function(args) {
                    if ("groupPanel" === args.name) {
                        this._invalidate();
                        args.handled = true
                    } else {
                        this.callBase(args)
                    }
                }
            }
        }();
        exports.GroupingHeaderPanelExtender = GroupingHeaderPanelExtender;
        var GroupingRowsViewExtender = function() {
            return {
                getContextMenuItems: function(options) {
                    var that = this;
                    var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
                    var items;
                    if (contextMenuEnabled && options.row && "group" === options.row.rowType) {
                        var columnsController = that._columnsController;
                        var column = columnsController.columnOption("groupIndex:" + options.row.groupIndex);
                        if (column && column.allowGrouping) {
                            var groupingTexts = that.option("grouping.texts");
                            var onItemClick = onGroupingMenuItemClick.bind(that, column);
                            items = [];
                            items.push({
                                text: groupingTexts.ungroup,
                                value: "ungroup",
                                onItemClick: onItemClick
                            }, {
                                text: groupingTexts.ungroupAll,
                                value: "ungroupAll",
                                onItemClick: onItemClick
                            })
                        }
                    }
                    return items
                },
                _rowClick: function(e) {
                    var that = this;
                    var expandMode = that.option("grouping.expandMode");
                    var scrollingMode = that.option("scrolling.mode");
                    var isGroupRowStateChanged = "infinite" !== scrollingMode && "rowClick" === expandMode && (0, _renderer2.default)(e.event.target).closest("." + DATAGRID_GROUP_ROW_CLASS).length;
                    var isExpandButtonClicked = (0, _renderer2.default)(e.event.target).closest("." + DATAGRID_EXPAND_CLASS).length;
                    if (isGroupRowStateChanged || isExpandButtonClicked) {
                        that._changeGroupRowState(e)
                    }
                    that.callBase(e)
                },
                _changeGroupRowState: function(e) {
                    var dataController = this.getController("data");
                    var row = dataController.items()[e.rowIndex];
                    var allowCollapsing = this._columnsController.columnOption("groupIndex:" + row.groupIndex, "allowCollapsing");
                    if ("data" === row.rowType || "group" === row.rowType && false !== allowCollapsing) {
                        dataController.changeRowExpand(row.key);
                        e.event.preventDefault();
                        e.handled = true
                    }
                }
            }
        }();
        var columnHeadersViewExtender = function() {
            return {
                getContextMenuItems: function(options) {
                    var that = this;
                    var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
                    var items = that.callBase(options);
                    if (contextMenuEnabled && options.row && ("header" === options.row.rowType || "detailAdaptive" === options.row.rowType)) {
                        var column = options.column;
                        if (!column.command && (!(0, _type.isDefined)(column.allowGrouping) || column.allowGrouping)) {
                            var groupingTexts = that.option("grouping.texts");
                            var isColumnGrouped = (0, _type.isDefined)(column.groupIndex) && column.groupIndex > -1;
                            var onItemClick = onGroupingMenuItemClick.bind(that, column);
                            items = items || [];
                            items.push({
                                text: groupingTexts.groupByThisColumn,
                                value: "group",
                                beginGroup: true,
                                disabled: isColumnGrouped,
                                onItemClick: onItemClick
                            });
                            if (column.showWhenGrouped) {
                                items.push({
                                    text: groupingTexts.ungroup,
                                    value: "ungroup",
                                    disabled: !isColumnGrouped,
                                    onItemClick: onItemClick
                                })
                            }
                            items.push({
                                text: groupingTexts.ungroupAll,
                                value: "ungroupAll",
                                onItemClick: onItemClick
                            })
                        }
                    }
                    return items
                }
            }
        }();
        _uiData_grid2.default.registerModule("grouping", {
            defaultOptions: function() {
                return {
                    grouping: {
                        autoExpandAll: true,
                        allowCollapsing: true,
                        contextMenuEnabled: false,
                        expandMode: "buttonClick",
                        texts: {
                            groupContinuesMessage: _message2.default.format("dxDataGrid-groupContinuesMessage"),
                            groupContinuedMessage: _message2.default.format("dxDataGrid-groupContinuedMessage"),
                            groupByThisColumn: _message2.default.format("dxDataGrid-groupHeaderText"),
                            ungroup: _message2.default.format("dxDataGrid-ungroupHeaderText"),
                            ungroupAll: _message2.default.format("dxDataGrid-ungroupAllText")
                        }
                    },
                    groupPanel: {
                        visible: false,
                        emptyPanelText: _message2.default.format("dxDataGrid-groupPanelEmptyText"),
                        allowColumnDragging: true
                    }
                }
            },
            extenders: {
                controllers: {
                    data: GroupingDataControllerExtender,
                    columns: {
                        _getExpandColumnOptions: function() {
                            var options = this.callBase.apply(this, arguments);
                            options.cellTemplate = _uiData_grid2.default.getExpandCellTemplate();
                            return options
                        }
                    }
                },
                views: {
                    headerPanel: GroupingHeaderPanelExtender,
                    rowsView: GroupingRowsViewExtender,
                    columnHeadersView: columnHeadersViewExtender
                }
            }
        })
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.grouping.expanded.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _store_helper = __webpack_require__( /*! ../../data/store_helper */ 86);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_gridGrouping = __webpack_require__( /*! ./ui.data_grid.grouping.core */ 364);
        var _uiData_grid2 = __webpack_require__( /*! ./ui.data_grid.utils */ 246);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var loadTotalCount = function(dataSource, options) {
            var d = new _deferred.Deferred;
            var loadOptions = (0, _extend.extend)({
                skip: 0,
                take: 1,
                requireTotalCount: true
            }, options);
            dataSource.load(loadOptions).done(function(data, extra) {
                d.resolve(extra && extra.totalCount)
            }).fail(d.reject.bind(d));
            return d
        };
        exports.loadTotalCount = loadTotalCount;
        exports.GroupingHelper = _uiData_gridGrouping.GroupingHelper.inherit(function() {
            var foreachCollapsedGroups = function(that, callback, updateOffsets) {
                return that.foreachGroups(function(groupInfo) {
                    if (!groupInfo.isExpanded) {
                        return callback(groupInfo)
                    }
                }, false, false, updateOffsets, true)
            };
            var correctSkipLoadOption = function(that, skip) {
                var skipCorrection = 0;
                var resultSkip = skip || 0;
                if (skip) {
                    foreachCollapsedGroups(that, function(groupInfo) {
                        if (groupInfo.offset - skipCorrection >= skip) {
                            return false
                        }
                        skipCorrection += groupInfo.count - 1
                    });
                    resultSkip += skipCorrection
                }
                return resultSkip
            };
            var processGroupItems = function processGroupItems(that, items, path, offset, skipFirstItem, take) {
                var removeLastItemsCount = 0;
                var needRemoveFirstItem = false;
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if (void 0 !== item.items) {
                        path.push(item.key);
                        var groupInfo = that.findGroupInfo(path);
                        if (groupInfo && !groupInfo.isExpanded) {
                            item.collapsedItems = item.items;
                            item.items = null;
                            offset += groupInfo.count;
                            take--;
                            if (take < 0) {
                                removeLastItemsCount++
                            }
                            if (skipFirstItem) {
                                needRemoveFirstItem = true
                            }
                        } else {
                            if (item.items) {
                                var offsetInfo = processGroupItems(that, item.items, path, offset, skipFirstItem, take);
                                if (skipFirstItem) {
                                    if (offsetInfo.offset - offset > 1) {
                                        item.isContinuation = true
                                    } else {
                                        needRemoveFirstItem = true
                                    }
                                }
                                offset = offsetInfo.offset;
                                take = offsetInfo.take;
                                if (take < 0) {
                                    if (item.items.length) {
                                        item.isContinuationOnNextPage = true
                                    } else {
                                        removeLastItemsCount++
                                    }
                                }
                            }
                        }
                        path.pop()
                    } else {
                        if (skipFirstItem) {
                            needRemoveFirstItem = true
                        }
                        offset++;
                        take--;
                        if (take < 0) {
                            removeLastItemsCount++
                        }
                    }
                    skipFirstItem = false
                }
                if (needRemoveFirstItem) {
                    items.splice(0, 1)
                }
                if (removeLastItemsCount) {
                    items.splice(-removeLastItemsCount, removeLastItemsCount)
                }
                return {
                    offset: offset,
                    take: take
                }
            };
            var pathEquals = function(path1, path2) {
                if (path1.length !== path2.length) {
                    return false
                }
                for (var i = 0; i < path1.length; i++) {
                    if (!(0, _utils.keysEqual)(null, path1[i], path2[i])) {
                        return false
                    }
                }
                return true
            };
            var updateGroupOffsets = function updateGroupOffsets(that, items, path, offset, additionalGroupInfo) {
                if (!items) {
                    return
                }
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if ("key" in item && void 0 !== item.items) {
                        path.push(item.key);
                        if (additionalGroupInfo && pathEquals(additionalGroupInfo.path, path) && !item.isContinuation) {
                            additionalGroupInfo.offset = offset
                        }
                        var groupInfo = that.findGroupInfo(path);
                        if (groupInfo && !item.isContinuation) {
                            groupInfo.offset = offset
                        }
                        if (groupInfo && !groupInfo.isExpanded) {
                            offset += groupInfo.count
                        } else {
                            offset = updateGroupOffsets(that, item.items, path, offset, additionalGroupInfo)
                        }
                        path.pop()
                    } else {
                        offset++
                    }
                }
                return offset
            };
            var removeGroupLoadOption = function(storeLoadOptions, loadOptions) {
                if (loadOptions.group) {
                    var groups = (0, _uiData_grid.normalizeSortingInfo)(loadOptions.group);
                    var sorts = (0, _uiData_grid.normalizeSortingInfo)(storeLoadOptions.sort);
                    storeLoadOptions.sort = (0, _store_helper.arrangeSortingInfo)(groups, sorts);
                    delete loadOptions.group
                }
            };
            var createNotGroupFilter = function(path, storeLoadOptions, group) {
                var groups = (0, _uiData_grid.normalizeSortingInfo)(group || storeLoadOptions.group);
                var filter = [];
                for (var i = 0; i < path.length; i++) {
                    var filterElement = [];
                    for (var j = 0; j <= i; j++) {
                        filterElement.push([groups[j].selector, i === j ? "<>" : "=", path[j]])
                    }
                    filter.push((0, _uiData_grid.combineFilters)(filterElement))
                }
                filter = (0, _uiData_grid.combineFilters)(filter, "or");
                return (0, _uiData_grid.combineFilters)([filter, storeLoadOptions.filter])
            };
            var getGroupCount = function getGroupCount(item, groupCount) {
                var count = item.count || item.items.length;
                if (!item.count && groupCount > 1) {
                    count = 0;
                    for (var i = 0; i < item.items.length; i++) {
                        count += getGroupCount(item.items[i], groupCount - 1)
                    }
                }
                return count
            };
            return {
                handleDataLoading: function(options) {
                    var that = this;
                    var storeLoadOptions = options.storeLoadOptions;
                    var collapsedGroups = [];
                    var collapsedItemsCount = 0;
                    var skipFirstItem = false;
                    var take;
                    var group = options.loadOptions.group;
                    var skipCorrection = 0;
                    removeGroupLoadOption(storeLoadOptions, options.loadOptions);
                    options.group = options.group || group;
                    if (options.isCustomLoading) {
                        return
                    }
                    var loadOptions = (0, _extend.extend)({}, storeLoadOptions);
                    loadOptions.skip = correctSkipLoadOption(that, storeLoadOptions.skip);
                    if (loadOptions.skip && loadOptions.take && group) {
                        loadOptions.skip--;
                        loadOptions.take++;
                        skipFirstItem = true
                    }
                    if (loadOptions.take && group) {
                        take = loadOptions.take;
                        loadOptions.take++
                    }
                    foreachCollapsedGroups(that, function(groupInfo) {
                        if (groupInfo.offset >= loadOptions.skip + loadOptions.take + skipCorrection) {
                            return false
                        } else {
                            if (groupInfo.offset >= loadOptions.skip + skipCorrection && groupInfo.count) {
                                skipCorrection += groupInfo.count - 1;
                                collapsedGroups.push(groupInfo);
                                collapsedItemsCount += groupInfo.count
                            }
                        }
                    });
                    (0, _iterator.each)(collapsedGroups, function() {
                        loadOptions.filter = createNotGroupFilter(this.path, loadOptions, group)
                    });
                    options.storeLoadOptions = loadOptions;
                    options.collapsedGroups = collapsedGroups;
                    options.collapsedItemsCount = collapsedItemsCount;
                    options.skip = loadOptions.skip || 0;
                    options.skipFirstItem = skipFirstItem;
                    options.take = take
                },
                handleDataLoaded: function(options, callBase) {
                    var that = this;
                    var data = options.data;
                    var collapsedGroups = options.collapsedGroups;
                    var groups = (0, _uiData_grid.normalizeSortingInfo)(options.group);
                    var groupCount = groups.length;

                    function appendCollapsedPath(data, path, groups, collapsedGroup, offset) {
                        if (!data || !path.length || !groups.length) {
                            return
                        }
                        var keyValue;
                        var i;
                        var pathValue = (0, _data.toComparable)(path[0], true);
                        for (i = 0; i < data.length; i++) {
                            keyValue = (0, _data.toComparable)(data[i].key, true);
                            if (offset >= collapsedGroup.offset || pathValue === keyValue) {
                                break
                            } else {
                                offset += getGroupCount(data[i], groups.length)
                            }
                        }
                        if (!data.length || pathValue !== keyValue) {
                            data.splice(i, 0, {
                                key: path[0],
                                items: [],
                                count: 1 === path.length ? collapsedGroup.count : void 0
                            })
                        }
                        appendCollapsedPath(data[i].items, path.slice(1), groups.slice(1), collapsedGroup, offset)
                    }
                    if (options.collapsedItemsCount && options.extra && options.extra.totalCount >= 0) {
                        options.extra.totalCount += options.collapsedItemsCount
                    }
                    callBase(options);
                    if (groupCount) {
                        var query = (0, _query2.default)(data);
                        (0, _store_helper.multiLevelGroup)(query, groups).enumerate().done(function(groupedData) {
                            data = groupedData
                        });
                        if (collapsedGroups) {
                            for (var pathIndex = 0; pathIndex < collapsedGroups.length; pathIndex++) {
                                appendCollapsedPath(data, collapsedGroups[pathIndex].path, groups, collapsedGroups[pathIndex], options.skip)
                            }
                        }
                        if (!options.isCustomLoading) {
                            processGroupItems(that, data, [], options.skip, options.skipFirstItem, options.take)
                        }
                        options.data = data
                    }
                },
                isGroupItemCountable: function(item) {
                    return null === item.items
                },
                updateTotalItemsCount: function() {
                    var itemsCountCorrection = 0;
                    foreachCollapsedGroups(this, function(groupInfo) {
                        if (groupInfo.count) {
                            itemsCountCorrection -= groupInfo.count - 1
                        }
                    });
                    this.callBase(itemsCountCorrection)
                },
                changeRowExpand: function(path) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var beginPageIndex = dataSource.beginPageIndex ? dataSource.beginPageIndex() : dataSource.pageIndex();
                    var dataSourceItems = dataSource.items();
                    var offset = correctSkipLoadOption(that, beginPageIndex * dataSource.pageSize());
                    var groupInfo = that.findGroupInfo(path);
                    var groupCountQuery;
                    if (groupInfo && !groupInfo.isExpanded) {
                        groupCountQuery = (new _deferred.Deferred).resolve(groupInfo.count)
                    } else {
                        groupCountQuery = loadTotalCount(dataSource, {
                            filter: (0, _uiData_grid2.createGroupFilter)(path, {
                                filter: dataSource.filter(),
                                group: dataSource.group()
                            })
                        })
                    }
                    return (0, _deferred.when)(groupCountQuery).done(function(count) {
                        count = parseInt(count.length ? count[0] : count);
                        if (groupInfo) {
                            updateGroupOffsets(that, dataSourceItems, [], offset);
                            groupInfo.isExpanded = !groupInfo.isExpanded;
                            groupInfo.count = count
                        } else {
                            groupInfo = {
                                offset: -1,
                                count: count,
                                path: path,
                                isExpanded: false
                            };
                            updateGroupOffsets(that, dataSourceItems, [], offset, groupInfo);
                            if (groupInfo.offset >= 0) {
                                that.addGroupInfo(groupInfo)
                            }
                        }
                        that.updateTotalItemsCount()
                    }).fail(function() {
                        dataSource._eventsStrategy.fireEvent("loadError", arguments)
                    })
                },
                allowCollapseAll: function() {
                    return false
                },
                refresh: function(options, isReload, operationTypes) {
                    var that = this;
                    var storeLoadOptions = options.storeLoadOptions;
                    var dataSource = that._dataSource;
                    this.callBase.apply(this, arguments);
                    if (isReload || operationTypes.reload) {
                        return foreachCollapsedGroups(that, function(groupInfo) {
                            var groupCountQuery = loadTotalCount(dataSource, {
                                filter: (0, _uiData_grid2.createGroupFilter)(groupInfo.path, storeLoadOptions)
                            });
                            var groupOffsetQuery = loadTotalCount(dataSource, {
                                filter: (0, _uiData_gridGrouping.createOffsetFilter)(groupInfo.path, storeLoadOptions)
                            });
                            return (0, _deferred.when)(groupOffsetQuery, groupCountQuery).done(function(offset, count) {
                                offset = parseInt(offset.length ? offset[0] : offset);
                                count = parseInt(count.length ? count[0] : count);
                                groupInfo.offset = offset;
                                if (groupInfo.count !== count) {
                                    groupInfo.count = count;
                                    that.updateTotalItemsCount()
                                }
                            })
                        }, true)
                    }
                }
            }
        }())
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.grouping.collapsed.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_gridGrouping = __webpack_require__( /*! ./ui.data_grid.grouping.core */ 364);
        var _uiData_grid2 = __webpack_require__( /*! ./ui.data_grid.utils */ 246);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _errors = __webpack_require__( /*! ../../data/errors */ 38);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.GroupingHelper = _uiData_gridGrouping.GroupingHelper.inherit(function() {
            var foreachExpandedGroups = function(that, callback, updateGroups) {
                return that.foreachGroups(function(groupInfo, parents) {
                    if (groupInfo.isExpanded) {
                        return callback(groupInfo, parents)
                    }
                }, true, false, updateGroups, updateGroups)
            };
            var processGroupItems = function processGroupItems(that, items, groupsCount, expandedInfo, path, isCustomLoading, isLastGroupExpanded) {
                var isExpanded;
                expandedInfo.items = expandedInfo.items || [];
                expandedInfo.paths = expandedInfo.paths || [];
                expandedInfo.count = expandedInfo.count || 0;
                expandedInfo.lastCount = expandedInfo.lastCount || 0;
                if (!groupsCount) {
                    return
                }
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if (void 0 !== item.items) {
                        path.push(item.key);
                        if (isCustomLoading) {
                            isExpanded = true
                        } else {
                            var groupInfo = that.findGroupInfo(path);
                            isExpanded = groupInfo && groupInfo.isExpanded
                        }
                        if (!isExpanded) {
                            item.collapsedItems = item.items;
                            item.items = null
                        } else {
                            if (item.items) {
                                processGroupItems(that, item.items, groupsCount - 1, expandedInfo, path, isCustomLoading, isLastGroupExpanded)
                            } else {
                                if (1 === groupsCount && item.count && (!isCustomLoading || isLastGroupExpanded)) {
                                    expandedInfo.items.push(item);
                                    expandedInfo.paths.push(path.slice(0));
                                    expandedInfo.count += expandedInfo.lastCount;
                                    expandedInfo.lastCount = item.count
                                }
                            }
                        }
                        path.pop()
                    }
                }
            };
            var updateGroupInfoItem = function(that, item, isLastGroupLevel, path, offset) {
                var groupInfo = that.findGroupInfo(path);
                var count;
                if (!groupInfo) {
                    if (isLastGroupLevel) {
                        count = item.count > 0 ? item.count : item.items.length
                    }
                    that.addGroupInfo({
                        isExpanded: that._isGroupExpanded(path.length - 1),
                        path: path.slice(0),
                        offset: offset,
                        count: count || 0
                    })
                } else {
                    if (isLastGroupLevel) {
                        groupInfo.count = item.count > 0 ? item.count : item.items && item.items.length || 0
                    } else {
                        item.count = groupInfo.count || item.count
                    }
                    groupInfo.offset = offset
                }
            };
            var updateGroupInfos = function updateGroupInfos(that, options, items, loadedGroupCount, groupIndex, path, parentIndex) {
                var groupCount = options.group ? options.group.length : 0;
                var isLastGroupLevel = groupCount === loadedGroupCount;
                var remotePaging = options.remoteOperations.paging;
                var offset = 0;
                var totalCount = 0;
                var count;
                groupIndex = groupIndex || 0;
                path = path || [];
                if (remotePaging && !parentIndex) {
                    offset = 0 === groupIndex ? options.skip || 0 : options.skips[groupIndex - 1] || 0
                }
                if (groupIndex >= loadedGroupCount) {
                    return items.length
                }
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if (item) {
                        path.push(item.key);
                        if (!item.count && !item.items || void 0 === item.items) {
                            return -1
                        }
                        updateGroupInfoItem(that, item, isLastGroupLevel, path, offset + i);
                        count = item.items ? updateGroupInfos(that, options, item.items, loadedGroupCount, groupIndex + 1, path, i) : item.count || -1;
                        if (count < 0) {
                            return -1
                        }
                        totalCount += count;
                        path.pop()
                    }
                }
                return totalCount
            };
            var isGroupExpanded = function(groups, groupIndex) {
                return groups && groups.length && groups[groupIndex] && !!groups[groupIndex].isExpanded
            };
            var getTotalOffset = function(groupInfos, pageSize, offset) {
                var groupSize;
                var totalOffset = offset;
                for (var groupIndex = 0; groupIndex < groupInfos.length; groupIndex++) {
                    groupSize = groupInfos[groupIndex].offset + 1;
                    if (groupIndex > 0) {
                        groupSize += groupInfos[groupIndex - 1].childrenTotalCount;
                        if (pageSize) {
                            groupSize += getContinuationGroupCount(totalOffset, pageSize, groupSize, groupIndex - 1) * groupIndex
                        }
                    }
                    totalOffset += groupSize
                }
                return totalOffset
            };

            function getContinuationGroupCount(groupOffset, pageSize, groupSize, groupIndex) {
                groupIndex = groupIndex || 0;
                if (pageSize > 1 && groupSize > 0) {
                    var pageOffset = groupOffset - Math.floor(groupOffset / pageSize) * pageSize || pageSize;
                    pageOffset += groupSize - groupIndex - 2;
                    if (pageOffset < 0) {
                        pageOffset += pageSize
                    }
                    return Math.floor(pageOffset / (pageSize - groupIndex - 1))
                }
                return 0
            }
            exports.getContinuationGroupCount = getContinuationGroupCount;

            function applyContinuationToGroupItem(options, expandedInfo, groupLevel, expandedItemIndex) {
                var item = expandedInfo.items[expandedItemIndex];
                var skip = options.skips && options.skips[groupLevel];
                var take = options.takes && options.takes[groupLevel];
                var isLastExpandedItem = expandedItemIndex === expandedInfo.items.length - 1;
                var isFirstExpandedItem = 0 === expandedItemIndex;
                var lastExpandedItemSkip = isFirstExpandedItem && skip || 0;
                var isItemsTruncatedByTake = item.count > take + lastExpandedItemSkip;
                if (isFirstExpandedItem && void 0 !== skip) {
                    item.isContinuation = true
                }
                if (isLastExpandedItem && void 0 !== take && isItemsTruncatedByTake) {
                    item.isContinuationOnNextPage = true
                }
            }

            function fillSkipTakeInExpandedInfo(options, expandedInfo, currentGroupCount) {
                var currentGroupIndex = currentGroupCount - 1;
                var groupCount = options.group ? options.group.length : 0;
                expandedInfo.skip = options.skips && options.skips[currentGroupIndex];
                if (options.takes && void 0 !== options.takes[currentGroupIndex]) {
                    if (groupCount === currentGroupCount) {
                        expandedInfo.take = expandedInfo.count ? expandedInfo.count - (expandedInfo.skip || 0) : 0
                    } else {
                        expandedInfo.take = 0
                    }
                    expandedInfo.take += options.takes[currentGroupIndex]
                }
            }

            function isDataDeferred(data) {
                return !Array.isArray(data)
            }

            function makeDataDeferred(options) {
                if (!isDataDeferred(options.data)) {
                    options.data = new _deferred.Deferred
                }
            }

            function loadGroupItems(that, options, loadedGroupCount, expandedInfo, groupLevel, data) {
                if (!options.isCustomLoading) {
                    expandedInfo = {};
                    processGroupItems(that, data, loadedGroupCount, expandedInfo, []);
                    fillSkipTakeInExpandedInfo(options, expandedInfo, loadedGroupCount)
                }
                var groupCount = options.group ? options.group.length : 0;
                if (expandedInfo.paths.length && groupCount - loadedGroupCount > 0) {
                    makeDataDeferred(options);
                    loadExpandedGroups(that, options, expandedInfo, loadedGroupCount, groupLevel, data)
                } else {
                    if (expandedInfo.paths.length && options.storeLoadOptions.group) {
                        makeDataDeferred(options);
                        loadLastLevelGroupItems(that, options, expandedInfo, data)
                    } else {
                        if (isDataDeferred(options.data)) {
                            options.data.resolve(data)
                        }
                    }
                }
            }

            function loadExpandedGroups(that, options, expandedInfo, loadedGroupCount, groupLevel, data) {
                var groups = options.group || [];
                var currentGroup = groups[groupLevel + 1];
                var deferreds = [];
                (0, _iterator.each)(expandedInfo.paths, function(expandedItemIndex) {
                    var loadOptions = {
                        requireTotalCount: false,
                        requireGroupCount: true,
                        group: [currentGroup],
                        groupSummary: options.storeLoadOptions.groupSummary,
                        filter: (0, _uiData_grid2.createGroupFilter)(expandedInfo.paths[expandedItemIndex], {
                            filter: options.storeLoadOptions.filter,
                            group: groups
                        }),
                        select: options.storeLoadOptions.select
                    };
                    if (0 === expandedItemIndex) {
                        loadOptions.skip = expandedInfo.skip || 0
                    }
                    if (expandedItemIndex === expandedInfo.paths.length - 1) {
                        loadOptions.take = expandedInfo.take
                    }
                    var loadResult = 0 === loadOptions.take ? [] : that._dataSource.loadFromStore(loadOptions);
                    (0, _deferred.when)(loadResult).done(function(data) {
                        var item = expandedInfo.items[expandedItemIndex];
                        applyContinuationToGroupItem(options, expandedInfo, groupLevel, expandedItemIndex);
                        item.items = data
                    });
                    deferreds.push(loadResult)
                });
                _deferred.when.apply(null, deferreds).done(function() {
                    updateGroupInfos(that, options, data, loadedGroupCount + 1);
                    loadGroupItems(that, options, loadedGroupCount + 1, expandedInfo, groupLevel + 1, data)
                })
            }

            function loadLastLevelGroupItems(that, options, expandedInfo, data) {
                var expandedFilters = [];
                var groups = options.group || [];
                (0, _iterator.each)(expandedInfo.paths, function(_, expandedPath) {
                    expandedFilters.push((0, _uiData_grid2.createGroupFilter)(expandedPath, {
                        group: options.isCustomLoading ? options.storeLoadOptions.group : groups
                    }))
                });
                var filter = options.storeLoadOptions.filter;
                if (!options.storeLoadOptions.isLoadingAll) {
                    filter = (0, _uiData_grid.combineFilters)([filter, (0, _uiData_grid.combineFilters)(expandedFilters, "or")])
                }
                var loadOptions = (0, _extend.extend)({}, options.storeLoadOptions, {
                    requireTotalCount: false,
                    requireGroupCount: false,
                    group: null,
                    sort: groups.concat((0, _uiData_grid.normalizeSortingInfo)(options.storeLoadOptions.sort || [])),
                    filter: filter
                });
                var isPagingLocal = that._dataSource.isLastLevelGroupItemsPagingLocal();
                if (!isPagingLocal) {
                    loadOptions.skip = expandedInfo.skip;
                    loadOptions.take = expandedInfo.take
                }(0, _deferred.when)(0 === expandedInfo.take ? [] : that._dataSource.loadFromStore(loadOptions)).done(function(items, extra) {
                    if (isPagingLocal) {
                        items = that._dataSource.sortLastLevelGroupItems(items, groups, expandedInfo.paths);
                        items = expandedInfo.skip ? items.slice(expandedInfo.skip) : items;
                        items = expandedInfo.take ? items.slice(0, expandedInfo.take) : items
                    }(0, _iterator.each)(expandedInfo.items, function(index, item) {
                        var itemCount = item.count - (0 === index && expandedInfo.skip || 0);
                        var expandedItems = items.splice(0, itemCount);
                        applyContinuationToGroupItem(options, expandedInfo, groups.length - 1, index);
                        item.items = expandedItems
                    });
                    options.data.resolve(data)
                }).fail(options.data.reject)
            }
            var loadGroupTotalCount = function(dataSource, options) {
                var d = new _deferred.Deferred;
                var isGrouping = !!(options.group && options.group.length);
                var loadOptions = (0, _extend.extend)({
                    skip: 0,
                    take: 1,
                    requireGroupCount: isGrouping,
                    requireTotalCount: !isGrouping
                }, options, {
                    group: isGrouping ? options.group : null
                });
                dataSource.load(loadOptions).done(function(data, extra) {
                    var count = extra && (isGrouping ? extra.groupCount : extra.totalCount);
                    if (!isFinite(count)) {
                        d.reject(_errors.errors.Error(isGrouping ? "E4022" : "E4021"));
                        return
                    }
                    d.resolve(count)
                }).fail(d.reject.bind(d));
                return d
            };
            return {
                updateTotalItemsCount: function(options) {
                    var totalItemsCount = 0;
                    var totalCount = options.extra && options.extra.totalCount || 0;
                    var groupCount = options.extra && options.extra.groupCount || 0;
                    var pageSize = this._dataSource.pageSize();
                    var isVirtualPaging = this._isVirtualPaging();
                    foreachExpandedGroups(this, function(groupInfo) {
                        groupInfo.childrenTotalCount = 0
                    });
                    foreachExpandedGroups(this, function(groupInfo, parents) {
                        var totalOffset = getTotalOffset(parents, isVirtualPaging ? 0 : pageSize, totalItemsCount);
                        var count = groupInfo.count + groupInfo.childrenTotalCount;
                        if (!isVirtualPaging) {
                            count += getContinuationGroupCount(totalOffset, pageSize, count, parents.length - 1)
                        }
                        if (parents[parents.length - 2]) {
                            parents[parents.length - 2].childrenTotalCount += count
                        } else {
                            totalItemsCount += count
                        }
                    });
                    this.callBase(totalItemsCount - totalCount + groupCount)
                },
                _isGroupExpanded: function(groupIndex) {
                    var groups = this._dataSource.group();
                    return isGroupExpanded(groups, groupIndex)
                },
                _updatePagingOptions: function(options, callback) {
                    var that = this;
                    var isVirtualPaging = that._isVirtualPaging();
                    var pageSize = that._dataSource.pageSize();
                    var skips = [];
                    var takes = [];
                    var skipChildrenTotalCount = 0;
                    var childrenTotalCount = 0;
                    if (options.take) {
                        foreachExpandedGroups(this, function(groupInfo) {
                            groupInfo.childrenTotalCount = 0;
                            groupInfo.skipChildrenTotalCount = 0
                        });
                        foreachExpandedGroups(that, function(groupInfo, parents) {
                            var take;
                            var takeCorrection = 0;
                            var parentTakeCorrection = 0;
                            var totalOffset = getTotalOffset(parents, isVirtualPaging ? 0 : pageSize, childrenTotalCount);
                            var continuationGroupCount = 0;
                            var skipContinuationGroupCount = 0;
                            var groupInfoCount = groupInfo.count + groupInfo.childrenTotalCount;
                            var childrenGroupInfoCount = groupInfoCount;
                            callback && callback(groupInfo, totalOffset);
                            var skip = options.skip - totalOffset;
                            if (totalOffset <= options.skip + options.take && groupInfoCount) {
                                take = options.take;
                                if (!isVirtualPaging) {
                                    continuationGroupCount = getContinuationGroupCount(totalOffset, pageSize, groupInfoCount, parents.length - 1);
                                    groupInfoCount += continuationGroupCount * parents.length;
                                    childrenGroupInfoCount += continuationGroupCount;
                                    if (pageSize && skip >= 0) {
                                        takeCorrection = parents.length;
                                        parentTakeCorrection = parents.length - 1;
                                        skipContinuationGroupCount = Math.floor(skip / pageSize)
                                    }
                                }
                                if (skip >= 0) {
                                    if (totalOffset + groupInfoCount > options.skip) {
                                        skips.unshift(skip - skipContinuationGroupCount * takeCorrection - groupInfo.skipChildrenTotalCount)
                                    }
                                    if (totalOffset + groupInfoCount >= options.skip + take) {
                                        takes.unshift(take - takeCorrection - groupInfo.childrenTotalCount + groupInfo.skipChildrenTotalCount)
                                    }
                                } else {
                                    if (totalOffset + groupInfoCount >= options.skip + take) {
                                        takes.unshift(take + skip - groupInfo.childrenTotalCount)
                                    }
                                }
                            }
                            if (totalOffset <= options.skip) {
                                if (parents[parents.length - 2]) {
                                    parents[parents.length - 2].skipChildrenTotalCount += Math.min(childrenGroupInfoCount, skip + 1 - skipContinuationGroupCount * parentTakeCorrection)
                                } else {
                                    skipChildrenTotalCount += Math.min(childrenGroupInfoCount, skip + 1)
                                }
                            }
                            if (totalOffset <= options.skip + take) {
                                groupInfoCount = Math.min(childrenGroupInfoCount, skip + take - (skipContinuationGroupCount + 1) * parentTakeCorrection);
                                if (parents[parents.length - 2]) {
                                    parents[parents.length - 2].childrenTotalCount += groupInfoCount
                                } else {
                                    childrenTotalCount += groupInfoCount
                                }
                            }
                        });
                        options.skip -= skipChildrenTotalCount;
                        options.take -= childrenTotalCount - skipChildrenTotalCount
                    }
                    options.skips = skips;
                    options.takes = takes
                },
                changeRowExpand: function(path) {
                    var that = this;
                    var groupInfo = that.findGroupInfo(path);
                    var dataSource = that._dataSource;
                    var remoteGroupPaging = dataSource.remoteOperations().groupPaging;
                    var groups = (0, _uiData_grid.normalizeSortingInfo)(dataSource.group());
                    if (groupInfo) {
                        groupInfo.isExpanded = !groupInfo.isExpanded;
                        if (remoteGroupPaging && groupInfo.isExpanded && path.length < groups.length) {
                            return loadGroupTotalCount(dataSource, {
                                filter: (0, _uiData_grid2.createGroupFilter)(path, {
                                    filter: dataSource.lastLoadOptions().filter,
                                    group: dataSource.group()
                                }),
                                group: [groups[path.length]],
                                select: dataSource.select()
                            }).done(function(groupCount) {
                                groupInfo.count = groupCount
                            })
                        }
                        return (new _deferred.Deferred).resolve()
                    }
                    return (new _deferred.Deferred).reject()
                },
                handleDataLoading: function(options) {
                    var that = this;
                    var storeLoadOptions = options.storeLoadOptions;
                    var groups = (0, _uiData_grid.normalizeSortingInfo)(storeLoadOptions.group || options.loadOptions.group);
                    if (options.isCustomLoading || !groups.length) {
                        return
                    }
                    if (options.remoteOperations.grouping) {
                        var remotePaging = that._dataSource.remoteOperations().paging;
                        storeLoadOptions.group = (0, _uiData_grid.normalizeSortingInfo)(storeLoadOptions.group);
                        storeLoadOptions.group.forEach(function(group, index) {
                            var isLastGroup = index === storeLoadOptions.group.length - 1;
                            group.isExpanded = !remotePaging || !isLastGroup
                        })
                    }
                    options.group = options.group || groups;
                    if (options.remoteOperations.paging) {
                        options.skip = storeLoadOptions.skip;
                        options.take = storeLoadOptions.take;
                        storeLoadOptions.requireGroupCount = true;
                        storeLoadOptions.group = groups.slice(0, 1);
                        that._updatePagingOptions(options);
                        storeLoadOptions.skip = options.skip;
                        storeLoadOptions.take = options.take
                    } else {
                        that.foreachGroups(function(groupInfo) {
                            groupInfo.count = 0
                        })
                    }
                },
                handleDataLoadedCore: function(options, callBase) {
                    var that = this;
                    var loadedGroupCount = (0, _uiData_grid.normalizeSortingInfo)(options.storeLoadOptions.group || options.loadOptions.group).length;
                    var groupCount = options.group ? options.group.length : 0;
                    var totalCount;
                    var expandedInfo = {};
                    if (options.isCustomLoading) {
                        callBase(options);
                        processGroupItems(that, options.data, loadedGroupCount, expandedInfo, [], options.isCustomLoading, options.storeLoadOptions.isLoadingAll)
                    } else {
                        totalCount = updateGroupInfos(that, options, options.data, loadedGroupCount);
                        if (totalCount < 0) {
                            options.data = (new _deferred.Deferred).reject(_ui2.default.Error("E1037"));
                            return
                        }
                        if (!options.remoteOperations.paging) {
                            if (loadedGroupCount && options.extra && options.loadOptions.requireTotalCount) {
                                options.extra.totalCount = totalCount;
                                options.extra.groupCount = options.data.length
                            }
                        }
                        if (groupCount && options.storeLoadOptions.requireGroupCount && !isFinite(options.extra.groupCount)) {
                            options.data = (new _deferred.Deferred).reject(_errors.errors.Error("E4022"));
                            return
                        }
                        that.updateTotalItemsCount(options);
                        if (!options.remoteOperations.paging) {
                            that._updatePagingOptions(options)
                        }
                        callBase(options);
                        if (!options.remoteOperations.paging) {
                            that._processPaging(options, loadedGroupCount)
                        }
                    }
                    loadGroupItems(that, options, loadedGroupCount, expandedInfo, 0, options.data)
                },
                _processSkips: function(items, skips, groupCount) {
                    if (!groupCount) {
                        return
                    }
                    var firstItem = items[0];
                    var skip = skips[0];
                    var children = firstItem && firstItem.items;
                    if (void 0 !== skip) {
                        firstItem.isContinuation = true;
                        if (children) {
                            firstItem.items = children.slice(skip);
                            this._processSkips(firstItem.items, skips.slice(1), groupCount - 1)
                        }
                    }
                },
                _processTakes: function(items, skips, takes, groupCount, parents) {
                    if (!groupCount || !items) {
                        return
                    }
                    parents = parents || [];
                    var lastItem = items[items.length - 1];
                    var children = lastItem && lastItem.items;
                    var take = takes[0];
                    var skip = skips[0];
                    if (lastItem) {
                        var maxTakeCount = lastItem.count - (lastItem.isContinuation && skip || 0) || children.length;
                        if (void 0 !== take && maxTakeCount > take) {
                            lastItem.isContinuationOnNextPage = true;
                            parents.forEach(function(parent) {
                                parent.isContinuationOnNextPage = true
                            });
                            if (children) {
                                children = children.slice(0, take);
                                lastItem.items = children
                            }
                        }
                        parents.push(lastItem);
                        this._processTakes(children, skips.slice(1), takes.slice(1), groupCount - 1, parents)
                    }
                },
                _processPaging: function(options, groupCount) {
                    this._processSkips(options.data, options.skips, groupCount);
                    this._processTakes(options.data, options.skips, options.takes, groupCount)
                },
                isLastLevelGroupItemsPagingLocal: function() {
                    return false
                },
                sortLastLevelGroupItems: function(items) {
                    return items
                },
                refresh: function(options, isReload, operationTypes) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var storeLoadOptions = options.storeLoadOptions;
                    var group = options.group || options.storeLoadOptions.group;
                    var oldGroups = (0, _uiData_grid.normalizeSortingInfo)(that._group);
                    var isExpanded;
                    var groupIndex;

                    function handleGroup(groupInfo, parents) {
                        if (parents.length === groupIndex + 1) {
                            groupInfo.isExpanded = isExpanded
                        }
                    }
                    for (groupIndex = 0; groupIndex < oldGroups.length; groupIndex++) {
                        isExpanded = isGroupExpanded(group, groupIndex);
                        if (isGroupExpanded(that._group, groupIndex) !== isExpanded) {
                            that.foreachGroups(handleGroup)
                        }
                    }
                    that.callBase.apply(this, arguments);
                    if (group && options.remoteOperations.paging && (isReload || operationTypes.reload)) {
                        return foreachExpandedGroups(that, function(groupInfo) {
                            var groupCountQuery = loadGroupTotalCount(dataSource, {
                                filter: (0, _uiData_grid2.createGroupFilter)(groupInfo.path, {
                                    filter: storeLoadOptions.filter,
                                    group: group
                                }),
                                group: group.slice(groupInfo.path.length),
                                select: storeLoadOptions.select
                            });
                            var groupOffsetQuery = loadGroupTotalCount(dataSource, {
                                filter: (0, _uiData_gridGrouping.createOffsetFilter)(groupInfo.path, {
                                    filter: storeLoadOptions.filter,
                                    group: group
                                }),
                                group: group.slice(groupInfo.path.length - 1, groupInfo.path.length),
                                select: storeLoadOptions.select
                            });
                            return (0, _deferred.when)(groupOffsetQuery, groupCountQuery).done(function(offset, count) {
                                offset = parseInt(offset.length ? offset[0] : offset);
                                count = parseInt(count.length ? count[0] : count);
                                groupInfo.offset = offset;
                                if (groupInfo.count !== count) {
                                    groupInfo.count = count;
                                    that.updateTotalItemsCount(options)
                                }
                            })
                        }, true)
                    }
                }
            }
        }())
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.master_detail.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.master_detail */ 365);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("masterDetail", _uiGrid_core2.default)
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.editing.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./ui.data_grid.editor_factory */ 649);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.editing */ 368);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("editing", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    data: {
                        _changeRowExpandCore: function(key) {
                            var editingController = this._editingController;
                            if (Array.isArray(key)) {
                                editingController && editingController.refresh()
                            }
                            return this.callBase.apply(this, arguments)
                        }
                    }
                }
            }
        }))
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.editor_factory.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.editor_factory */ 366);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("editorFactory", _uiGrid_core2.default)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.validating.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.validating */ 369);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("validating", _uiGrid_core2.default)
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.virtual_scrolling.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiData_grid3 = __webpack_require__( /*! ./ui.data_grid.data_source_adapter */ 204);
        var _uiData_grid4 = _interopRequireDefault(_uiData_grid3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_scrolling */ 370);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("virtualScrolling", _uiGrid_core2.default);
        _uiData_grid4.default.extend(_uiGrid_core2.default.extenders.dataSourceAdapter)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.filter_row.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_row */ 372);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("filterRow", _uiGrid_core2.default)
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/ui/menu/ui.submenu.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS = "dx-context-menu-content-delimiter";
        var DX_SUBMENU_CLASS = "dx-submenu";
        var Submenu = function(_ContextMenu) {
            _inherits(Submenu, _ContextMenu);
            var _super = _createSuper(Submenu);

            function Submenu() {
                _classCallCheck(this, Submenu);
                return _super.apply(this, arguments)
            }
            _createClass(Submenu, [{
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Submenu.prototype), "_getDefaultOptions", this).call(this), {
                        orientation: "horizontal",
                        tabIndex: null,
                        onHoverStart: _common.noop
                    })
                }
            }, {
                key: "_initDataAdapter",
                value: function() {
                    this._dataAdapter = this.option("_dataAdapter");
                    if (!this._dataAdapter) {
                        _get(_getPrototypeOf(Submenu.prototype), "_initDataAdapter", this).call(this)
                    }
                }
            }, {
                key: "_renderContentImpl",
                value: function() {
                    this._renderContextMenuOverlay();
                    _get(_getPrototypeOf(Submenu.prototype), "_renderContentImpl", this).call(this);
                    var node = this._dataAdapter.getNodeByKey(this.option("_parentKey"));
                    node && this._renderItems(this._getChildNodes(node));
                    this._renderDelimiter()
                }
            }, {
                key: "_renderDelimiter",
                value: function() {
                    this.$contentDelimiter = (0, _renderer2.default)("<div>").appendTo(this._itemContainer()).addClass(DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS)
                }
            }, {
                key: "_getOverlayOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Submenu.prototype), "_getOverlayOptions", this).call(this), {
                        onPositioned: this._overlayPositionedActionHandler.bind(this)
                    })
                }
            }, {
                key: "_overlayPositionedActionHandler",
                value: function(arg) {
                    this._showDelimiter(arg)
                }
            }, {
                key: "_hoverEndHandler",
                value: function(e) {
                    _get(_getPrototypeOf(Submenu.prototype), "_hoverEndHandler", this).call(this, e);
                    this._toggleFocusClass(false, e.currentTarget)
                }
            }, {
                key: "_isMenuHorizontal",
                value: function() {
                    return "horizontal" === this.option("orientation")
                }
            }, {
                key: "_hoverStartHandler",
                value: function(e) {
                    var hoverStartAction = this.option("onHoverStart");
                    hoverStartAction(e);
                    _get(_getPrototypeOf(Submenu.prototype), "_hoverStartHandler", this).call(this, e);
                    this._toggleFocusClass(true, e.currentTarget)
                }
            }, {
                key: "_drawSubmenu",
                value: function($rootItem) {
                    this._actions.onShowing({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: this
                    });
                    _get(_getPrototypeOf(Submenu.prototype), "_drawSubmenu", this).call(this, $rootItem);
                    this._actions.onShown({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: this
                    })
                }
            }, {
                key: "_hideSubmenu",
                value: function($rootItem) {
                    this._actions.onHiding({
                        cancel: true,
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: this
                    });
                    _get(_getPrototypeOf(Submenu.prototype), "_hideSubmenu", this).call(this, $rootItem);
                    this._actions.onHidden({
                        rootItem: (0, _dom.getPublicElement)($rootItem),
                        submenu: this
                    })
                }
            }, {
                key: "_showDelimiter",
                value: function(arg) {
                    if (!this.$contentDelimiter) {
                        return
                    }
                    var $submenu = this._itemContainer().children(".".concat(DX_SUBMENU_CLASS)).eq(0);
                    var $rootItem = this.option("position").of;
                    var position = {
                        of: $submenu
                    };
                    var containerOffset = arg.position;
                    var vLocation = containerOffset.v.location;
                    var hLocation = containerOffset.h.location;
                    var rootOffset = $rootItem.offset();
                    var offsetLeft = Math.round(rootOffset.left);
                    var offsetTop = Math.round(rootOffset.top);
                    var rootWidth = $rootItem.width();
                    var rootHeight = $rootItem.height();
                    var submenuWidth = $submenu.width();
                    var submenuHeight = $submenu.height();
                    this.$contentDelimiter.css("display", "block");
                    this.$contentDelimiter.width(this._isMenuHorizontal() ? rootWidth < submenuWidth ? rootWidth - 2 : submenuWidth : 2);
                    this.$contentDelimiter.height(this._isMenuHorizontal() ? 2 : rootHeight < submenuHeight ? rootHeight - 2 : submenuHeight);
                    if (this._isMenuHorizontal()) {
                        if (vLocation > offsetTop) {
                            if (Math.round(hLocation) === offsetLeft) {
                                position.offset = "1 -1";
                                position.at = position.my = "left top"
                            } else {
                                position.offset = "-1 -1";
                                position.at = position.my = "right top"
                            }
                        } else {
                            this.$contentDelimiter.height(5);
                            if (Math.round(hLocation) === offsetLeft) {
                                position.offset = "1 4";
                                position.at = position.my = "left bottom"
                            } else {
                                position.offset = "-1 2";
                                position.at = position.my = "right bottom"
                            }
                        }
                    } else {
                        if (hLocation > offsetLeft) {
                            if (Math.round(vLocation) === offsetTop) {
                                position.offset = "-1 1";
                                position.at = position.my = "left top"
                            } else {
                                position.offset = "-1 -1";
                                position.at = position.my = "left bottom"
                            }
                        } else {
                            if (Math.round(vLocation) === offsetTop) {
                                position.offset = "1 1";
                                position.at = position.my = "right top"
                            } else {
                                position.offset = "1 -1";
                                position.at = position.my = "right bottom"
                            }
                        }
                    }(0, _position.setup)(this.$contentDelimiter, position)
                }
            }, {
                key: "_getContextMenuPosition",
                value: function() {
                    return this.option("position")
                }
            }, {
                key: "isOverlayVisible",
                value: function() {
                    return this._overlay.option("visible")
                }
            }, {
                key: "getOverlayContent",
                value: function() {
                    return this._overlay.$content()
                }
            }]);
            return Submenu
        }(_context_menu2.default);
        module.exports = Submenu
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.header_filter.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.header_filter */ 375);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("headerFilter", _uiGrid_core2.default)
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.filter_sync.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_sync */ 377);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("filterSync", _uiGrid_core2.default)
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/filter_builder/between.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var FILTER_BUILDER_RANGE_CLASS = "dx-filterbuilder-range";
        var FILTER_BUILDER_RANGE_START_CLASS = FILTER_BUILDER_RANGE_CLASS + "-start";
        var FILTER_BUILDER_RANGE_END_CLASS = FILTER_BUILDER_RANGE_CLASS + "-end";
        var FILTER_BUILDER_RANGE_SEPARATOR_CLASS = FILTER_BUILDER_RANGE_CLASS + "-separator";
        var SEPARATOR = "\u2013";

        function editorTemplate(conditionInfo, container) {
            var $editorStart = $("<div>").addClass(FILTER_BUILDER_RANGE_START_CLASS);
            var $editorEnd = $("<div>").addClass(FILTER_BUILDER_RANGE_END_CLASS);
            var values = conditionInfo.value || [];
            var getStartValue = function(values) {
                return values && values.length > 0 ? values[0] : null
            };
            var getEndValue = function(values) {
                return values && 2 === values.length ? values[1] : null
            };
            container.append($editorStart);
            container.append($("<span>").addClass(FILTER_BUILDER_RANGE_SEPARATOR_CLASS).text(SEPARATOR));
            container.append($editorEnd);
            container.addClass(FILTER_BUILDER_RANGE_CLASS);
            this._editorFactory.createEditor.call(this, $editorStart, extend({}, conditionInfo.field, conditionInfo, {
                value: getStartValue(values),
                parentType: "filterBuilder",
                setValue: function(value) {
                    values = [value, getEndValue(values)];
                    conditionInfo.setValue(values)
                }
            }));
            this._editorFactory.createEditor.call(this, $editorEnd, extend({}, conditionInfo.field, conditionInfo, {
                value: getEndValue(values),
                parentType: "filterBuilder",
                setValue: function(value) {
                    values = [getStartValue(values), value];
                    conditionInfo.setValue(values)
                }
            }))
        }

        function getConfig(caption, context) {
            return {
                name: "between",
                caption: caption,
                icon: "range",
                valueSeparator: SEPARATOR,
                dataTypes: ["number", "date", "datetime"],
                editorTemplate: editorTemplate.bind(context),
                notForLookup: true
            }
        }
        exports.getConfig = getConfig
    },
    /*!***********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/filter_builder/ui.filter_operations_dictionary.js ***!
      \***********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var OPERATION_ICONS = {
            "=": "equal",
            "<>": "notequal",
            "<": "less",
            "<=": "lessorequal",
            ">": "greater",
            ">=": "greaterorequal",
            notcontains: "doesnotcontain",
            contains: "contains",
            startswith: "startswith",
            endswith: "endswith",
            isblank: "isblank",
            isnotblank: "isnotblank"
        };
        var OPERATION_NAME = {
            "=": "equal",
            "<>": "notEqual",
            "<": "lessThan",
            "<=": "lessThanOrEqual",
            ">": "greaterThan",
            ">=": "greaterThanOrEqual",
            startswith: "startsWith",
            contains: "contains",
            notcontains: "notContains",
            endswith: "endsWith",
            isblank: "isBlank",
            isnotblank: "isNotBlank",
            between: "between"
        };
        module.exports = {
            getIconByFilterOperation: function(filterOperation) {
                return OPERATION_ICONS[filterOperation]
            },
            getNameByFilterOperation: function(filterOperation) {
                return OPERATION_NAME[filterOperation]
            }
        }
    },
    /*!************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/grid_core/ui.grid_core.filter_custom_operations.js ***!
      \************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _filter_builder = __webpack_require__( /*! ../filter_builder/filter_builder */ 378);
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var DataSource = __webpack_require__( /*! ../../data/data_source/data_source */ 61).DataSource;
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var utils = __webpack_require__( /*! ../filter_builder/utils */ 205);

        function baseOperation(grid) {
            var calculateFilterExpression = function(filterValue, field) {
                var result = [];
                var lastIndex = filterValue.length - 1;
                filterValue && filterValue.forEach(function(value, index) {
                    if (utils.isCondition(value) || utils.isGroup(value)) {
                        var filterExpression = utils.getFilterExpression(value, [field], [], "headerFilter");
                        result.push(filterExpression)
                    } else {
                        result.push(utils.getFilterExpression([field.dataField, "=", value], [field], [], "headerFilter"))
                    }
                    index !== lastIndex && result.push("or")
                });
                if (1 === result.length) {
                    result = result[0]
                }
                return result
            };
            var getFullText = function(itemText, parentText) {
                return parentText ? parentText + "/" + itemText : itemText
            };
            var getSelectedItemsTexts = function getSelectedItemsTexts(items, parentText) {
                var result = [];
                items.forEach(function(item) {
                    if (item.items) {
                        var selectedItemsTexts = getSelectedItemsTexts(item.items, getFullText(item.text, parentText));
                        result = result.concat(selectedItemsTexts)
                    }
                    item.selected && result.push(getFullText(item.text, parentText))
                });
                return result
            };
            var headerFilterController = grid && grid.getController("headerFilter");
            var customizeText = function(fieldInfo) {
                var value = fieldInfo.value;
                var column = grid.columnOption(fieldInfo.field.dataField);
                var headerFilter = column && column.headerFilter;
                var lookup = column && column.lookup;
                if (headerFilter && headerFilter.dataSource || lookup && lookup.dataSource) {
                    column = extend({}, column, {
                        filterType: "include",
                        filterValues: [value]
                    });
                    var dataSourceOptions = headerFilterController.getDataSource(column);
                    dataSourceOptions.paginate = false;
                    var dataSource = new DataSource(dataSourceOptions);
                    var result = new deferredUtils.Deferred;
                    var key = dataSource.store().key();
                    if (key) {
                        dataSource.filter([key, "=", fieldInfo.value])
                    }
                    dataSource.load().done(function(items) {
                        result.resolve(getSelectedItemsTexts(items)[0])
                    });
                    return result
                } else {
                    var text = headerFilterController.getHeaderItemText(value, column, 0, grid.option("headerFilter"));
                    return text
                }
            };
            return {
                dataTypes: ["string", "date", "datetime", "number", "boolean", "object"],
                calculateFilterExpression: calculateFilterExpression,
                editorTemplate: function(conditionInfo, container) {
                    var div = $("<div>").addClass("dx-filterbuilder-item-value-text").appendTo(container);
                    var column = extend(true, {}, grid.columnOption(conditionInfo.field.dataField));
                    (0, _filter_builder.renderValueText)(div, conditionInfo.text && conditionInfo.text.split("|"));
                    var setValue = function(value) {
                        conditionInfo.setValue(value)
                    };
                    column.filterType = "include";
                    column.filterValues = conditionInfo.value ? conditionInfo.value.slice() : [];
                    headerFilterController.showHeaderFilterMenuBase({
                        columnElement: div,
                        column: column,
                        apply: function() {
                            setValue(this.filterValues);
                            headerFilterController.hideHeaderFilterMenu();
                            conditionInfo.closeEditor()
                        },
                        onHidden: function() {
                            conditionInfo.closeEditor()
                        },
                        isFilterBuilder: true
                    });
                    return container
                },
                customizeText: customizeText
            }
        }

        function anyOf(grid) {
            return extend(baseOperation(grid), {
                name: "anyof",
                icon: "selectall",
                caption: messageLocalization.format("dxFilterBuilder-filterOperationAnyOf")
            })
        }

        function noneOf(grid) {
            var baseOp = baseOperation(grid);
            return extend({}, baseOp, {
                calculateFilterExpression: function(filterValue, field) {
                    var baseFilter = baseOp.calculateFilterExpression(filterValue, field);
                    if (!baseFilter || 0 === baseFilter.length) {
                        return null
                    }
                    return "!" === baseFilter[0] ? baseFilter : ["!", baseFilter]
                },
                name: "noneof",
                icon: "unselectall",
                caption: messageLocalization.format("dxFilterBuilder-filterOperationNoneOf")
            })
        }
        exports.anyOf = anyOf;
        exports.noneOf = noneOf
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.filter_builder.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_builder */ 379);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("filterBuilder", _uiGrid_core2.default)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.filter_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_panel */ 381);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("filterPanel", _uiGrid_core2.default)
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.search.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.search */ 382);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("search", _uiGrid_core2.default)
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.pager.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.pager */ 383);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("pager", _uiGrid_core2.default)
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/pager.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var Class = __webpack_require__( /*! ../core/class */ 16);
        var stringUtils = __webpack_require__( /*! ../core/utils/string */ 43);
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 9);
        var commonUtils = __webpack_require__( /*! ../core/utils/common */ 3);
        var each = __webpack_require__( /*! ../core/utils/iterator */ 4).each;
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1);
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var clickEvent = __webpack_require__( /*! ../events/click */ 19);
        var pointerEvents = __webpack_require__( /*! ../events/pointer */ 23);
        var messageLocalization = __webpack_require__( /*! ../localization/message */ 10);
        var Widget = __webpack_require__( /*! ./widget/ui.widget */ 17);
        var SelectBox = __webpack_require__( /*! ./select_box */ 97);
        var NumberBox = __webpack_require__( /*! ./number_box */ 121);
        var eventUtils = __webpack_require__( /*! ../events/utils */ 8);
        var accessibility = __webpack_require__( /*! ./shared/accessibility */ 108);
        var PAGES_LIMITER = 4;
        var PAGER_CLASS = "dx-pager";
        var PAGER_PAGE_CLASS = "dx-page";
        var PAGER_PAGE_CLASS_SELECTOR = "." + PAGER_PAGE_CLASS;
        var PAGER_PAGES_CLASS = "dx-pages";
        var LIGHT_MODE_CLASS = "dx-light-mode";
        var LIGHT_PAGES_CLASS = "dx-light-pages";
        var PAGER_PAGE_INDEX_CLASS = "dx-page-index";
        var PAGER_PAGES_COUNT_CLASS = "dx-pages-count";
        var PAGER_SELECTION_CLASS = "dx-selection";
        var PAGER_PAGE_SEPARATOR_CLASS = "dx-separator";
        var PAGER_PAGE_SIZES_CLASS = "dx-page-sizes";
        var PAGER_PAGE_SIZE_CLASS = "dx-page-size";
        var PAGER_PAGE_SIZE_CLASS_SELECTOR = "." + PAGER_PAGE_SIZE_CLASS;
        var PAGER_NAVIGATE_BUTTON = "dx-navigate-button";
        var PAGER_PREV_BUTTON_CLASS = "dx-prev-button";
        var PAGER_NEXT_BUTTON_CLASS = "dx-next-button";
        var PAGER_INFO_CLASS = "dx-info";
        var PAGER_INFO_TEXT_CLASS = "dx-info-text";
        var PAGER_BUTTON_DISABLE_CLASS = "dx-button-disable";
        var Page = Class.inherit({
            ctor: function(value, index) {
                var that = this;
                that.index = index;
                that._$page = $("<div>").text(value).addClass(PAGER_PAGE_CLASS)
            },
            value: function(_value) {
                var that = this;
                if (typeUtils.isDefined(_value)) {
                    that._$page.text(_value)
                } else {
                    var text = that._$page.text();
                    if (typeUtils.isNumeric(text)) {
                        return parseInt(text)
                    } else {
                        return text
                    }
                }
            },
            element: function() {
                return this._$page
            },
            select: function(value) {
                this._$page.toggleClass(PAGER_SELECTION_CLASS, value)
            },
            render: function(rootElement, rtlEnabled) {
                rtlEnabled ? this._$page.prependTo(rootElement) : this._$page.appendTo(rootElement)
            }
        });
        var Pager = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    visible: true,
                    pagesNavigatorVisible: "auto",
                    pageIndex: 1,
                    maxPagesCount: 10,
                    pageCount: 10,
                    totalCount: 0,
                    pageSize: 5,
                    showPageSizes: true,
                    pageSizes: [5, 10],
                    hasKnownLastPage: true,
                    showNavigationButtons: false,
                    showInfo: false,
                    infoText: messageLocalization.getFormatter("dxPager-infoText"),
                    pagesCountText: messageLocalization.getFormatter("dxPager-pagesCountText"),
                    rtlEnabled: false,
                    lightModeEnabled: false,
                    pageIndexChanged: commonUtils.noop,
                    pageSizeChanged: commonUtils.noop
                })
            },
            _toggleVisibility: function(value) {
                var $element = this.$element();
                if ($element) {
                    $element.css("display", value ? "" : "none")
                }
            },
            _getPages: function(currentPage, count) {
                var pages = [];
                var showMoreButton = !this.option("hasKnownLastPage");
                var firstValue;
                var i;
                this._testPagesCount = count;
                this._testShowMoreButton = showMoreButton;
                if (count > 0 || showMoreButton) {
                    if (count <= this.option("maxPagesCount")) {
                        for (i = 1; i <= count; i++) {
                            pages.push(new Page(i, i - 1))
                        }
                        if (showMoreButton) {
                            pages.push(new Page(">", i - 1))
                        }
                    } else {
                        pages.push(new Page(1, 0));
                        firstValue = currentPage ? currentPage.value() - currentPage.index : 1;
                        for (i = 1; i <= PAGES_LIMITER; i++) {
                            pages.push(new Page(firstValue + i, i))
                        }
                        pages.push(new Page(count, PAGES_LIMITER + 1));
                        if (showMoreButton) {
                            pages.push(new Page(">", PAGES_LIMITER + 1))
                        }
                    }
                }
                return pages
            },
            _getPageByValue: function(value) {
                var that = this;
                var page;
                var i;
                for (i = 0; i < that._pages.length; i++) {
                    page = that._pages[i];
                    if (page.value() === value) {
                        return page
                    }
                }
            },
            _processSelectedPage: function(maxPagesCount, pageIndex, pageCount) {
                var that = this;
                var isPageIndexValid = false;
                var selectedPageIndex;
                if (that._pages) {
                    each(that._pages, function(key, page) {
                        if (pageIndex === page.value()) {
                            isPageIndexValid = true
                        }
                    });
                    if (!isPageIndexValid) {
                        that.selectedPage = null
                    }
                }
                if (typeUtils.isDefined(that.selectedPage)) {
                    if (pageIndex === pageCount && pageCount > maxPagesCount && that.selectedPage.index !== PAGES_LIMITER + 1) {
                        that.selectedPage.index = PAGES_LIMITER + 1
                    }
                } else {
                    if (pageIndex > PAGES_LIMITER && pageIndex < pageCount) {
                        selectedPageIndex = pageCount - PAGES_LIMITER < pageIndex ? PAGES_LIMITER - (pageCount - pageIndex) + 1 : 2;
                        that.selectedPage = new Page(pageIndex, selectedPageIndex)
                    }
                }
            },
            _selectPageByValue: function(value) {
                var that = this;
                var i;
                var page = that._getPageByValue(value);
                var pages = that._pages;
                var pagesLength = pages.length;
                var nextPage;
                var morePage;
                if (!typeUtils.isDefined(page)) {
                    return
                }
                var prevPage = that._pages[page.index - 1];
                nextPage = that._pages[page.index + 1];
                if (nextPage && ">" === nextPage.value()) {
                    morePage = nextPage;
                    nextPage = void 0;
                    pagesLength--;
                    pages.pop()
                }
                if (that.selectedPage) {
                    that.selectedPage.select(false)
                }
                page.select(true);
                that.selectedPage = page;
                if (nextPage && nextPage.value() - value > 1) {
                    if (0 !== page.index) {
                        prevPage.value(value + 1);
                        that._pages.splice(page.index, 1);
                        that._pages.splice(page.index - 1, 0, page);
                        that._pages[page.index].index = page.index;
                        page.index = page.index - 1;
                        for (i = page.index - 1; i > 0; i--) {
                            that._pages[i].value(that._pages[i + 1].value() - 1)
                        }
                    } else {
                        for (i = 0; i < pagesLength - 1; i++) {
                            that._pages[i].value(i + 1)
                        }
                    }
                }
                if (prevPage && value - prevPage.value() > 1) {
                    if (page.index !== pagesLength - 1) {
                        nextPage.value(value - 1);
                        that._pages.splice(page.index, 1);
                        that._pages.splice(page.index + 1, 0, page);
                        that._pages[page.index].index = page.index;
                        page.index = page.index + 1;
                        for (i = page.index + 1; i < pagesLength - 1; i++) {
                            that._pages[i].value(that._pages[i - 1].value() + 1)
                        }
                    } else {
                        for (i = 1; i <= pagesLength - 2; i++) {
                            that._pages[pagesLength - 1 - i].value(that._pages[pagesLength - 1].value() - i)
                        }
                    }
                }
                if (morePage) {
                    pages.push(morePage)
                }
            },
            _updatePagesTabIndices: function() {
                var _this = this;
                var $selectedPage = this.selectedPage._$page;
                var updatePageIndices = function updatePageIndices() {
                    var buttons = $(_this.element()).find("[role=button]:not(.dx-button-disable)");
                    each(buttons, function(_, element) {
                        return $(element).attr("tabindex", 0)
                    });
                    eventsEngine.off($selectedPage, "focus", updatePageIndices)
                };
                eventsEngine.on($selectedPage, "focus", updatePageIndices)
            },
            _nextPage: function(direction) {
                var pageIndex = this.option("pageIndex");
                var pageCount = this.option("pageCount");
                if (typeUtils.isDefined(pageIndex)) {
                    pageIndex = "next" === direction ? ++pageIndex : --pageIndex;
                    if (pageIndex > 0 && pageIndex <= pageCount) {
                        this.option("pageIndex", pageIndex)
                    }
                }
            },
            _wrapClickAction: function(action) {
                var _this2 = this;
                return function(e) {
                    if ("dxpointerup" === e.type) {
                        _this2._pointerUpHappened = true
                    } else {
                        if (_this2._pointerUpHappened) {
                            _this2._pointerUpHappened = false;
                            return
                        }
                    }
                    action({
                        event: e
                    })
                }
            },
            _renderPages: function(pages) {
                var that = this;
                var $separator;
                var pagesLength = pages.length;
                var clickPagesIndexAction = that._createAction(function(args) {
                    var e = args.event;
                    var pageNumber = $(e.target).text();
                    var pageIndex = ">" === pageNumber ? that.option("pageCount") + 1 : Number(pageNumber);
                    that._testPageIndex = pageIndex;
                    that.option("pageIndex", pageIndex)
                });
                var page;
                if (pagesLength > 1) {
                    that._pageClickHandler = this._wrapClickAction(clickPagesIndexAction);
                    eventsEngine.on(that._$pagesChooser, eventUtils.addNamespace([pointerEvents.up, clickEvent.name], that.Name + "Pages"), PAGER_PAGE_CLASS_SELECTOR, that._pageClickHandler);
                    accessibility.registerKeyboardAction("pager", that, that._$pagesChooser, PAGER_PAGE_CLASS_SELECTOR, clickPagesIndexAction)
                }
                for (var i = 0; i < pagesLength; i++) {
                    page = pages[i];
                    page.render(that._$pagesChooser, that.option("rtlEnabled"));
                    that.setAria({
                        role: "button",
                        label: "Page " + page.value()
                    }, page.element());
                    accessibility.setTabIndex(that, page.element());
                    if (pages[i + 1] && pages[i + 1].value() - page.value() > 1) {
                        $separator = $("<div>").text(". . .").addClass(PAGER_PAGE_SEPARATOR_CLASS);
                        that.option("rtlEnabled") ? $separator.prependTo(that._$pagesChooser) : $separator.appendTo(that._$pagesChooser)
                    }
                }
            },
            _calculateLightPagesWidth: function($pageIndex, pageCount) {
                return Number($pageIndex.css("minWidth").replace("px", "")) + 10 * pageCount.toString().length
            },
            _renderLightPages: function() {
                var that = this;
                var pageCount = this.option("pageCount");
                var pageIndex = this.option("pageIndex");
                var clickAction = that._createAction(function() {
                    that.option("pageIndex", pageCount)
                });
                var pagesCountText = this.option("pagesCountText");
                var $container = $("<div>").addClass(LIGHT_PAGES_CLASS).appendTo(this._$pagesChooser);
                var $pageIndex = $("<div>").addClass(PAGER_PAGE_INDEX_CLASS).appendTo($container);
                that._pageIndexEditor = that._createComponent($pageIndex, NumberBox, {
                    value: pageIndex,
                    min: 1,
                    max: pageCount,
                    width: that._calculateLightPagesWidth($pageIndex, pageCount),
                    onValueChanged: function(e) {
                        that.option("pageIndex", e.value)
                    }
                });
                $("<span>").text(pagesCountText).addClass(PAGER_INFO_TEXT_CLASS + " " + PAGER_INFO_CLASS).appendTo($container);
                var $pageCount = $("<span>").addClass(PAGER_PAGES_COUNT_CLASS).text(pageCount);
                eventsEngine.on($pageCount, eventUtils.addNamespace(clickEvent.name, that.Name + "PagesCount"), function(e) {
                    clickAction({
                        event: e
                    })
                });
                accessibility.registerKeyboardAction("pager", that, $pageCount, void 0, clickAction);
                $pageCount.appendTo($container);
                that.setAria({
                    role: "button",
                    label: "Navigates to the last page"
                }, $pageCount)
            },
            _renderPagesChooser: function() {
                var that = this;
                var lightModeEnabled = that.option("lightModeEnabled");
                var pagesNavigatorVisible = that.option("pagesNavigatorVisible");
                var $element = that.$element();
                that._$pagesChooser && that._$pagesChooser.remove();
                if (!pagesNavigatorVisible) {
                    return
                }
                if (that._pages && 0 === that._pages.length) {
                    that.selectedPage = null;
                    return
                }
                that._$pagesChooser = $("<div>").addClass(PAGER_PAGES_CLASS).appendTo($element);
                if ("auto" === pagesNavigatorVisible) {
                    that._$pagesChooser.css("visibility", 1 === that.option("pageCount") ? "hidden" : "")
                }
                if (!lightModeEnabled) {
                    that._renderInfo()
                }
                that._renderNavigateButton("prev");
                if (lightModeEnabled) {
                    that._renderLightPages()
                } else {
                    that._renderPages(that._pages)
                }
                that._renderNavigateButton("next");
                that._updatePagesChooserWidth()
            },
            _renderPageSizes: function() {
                var that = this;
                var i;
                var pageSizes = that.option("pageSizes");
                var pagesSizesLength = pageSizes && pageSizes.length;
                var pageSizeValue;
                var currentPageSize = that.option("pageSize");
                var $pageSize;
                var clickPagesSizeAction = that._createAction(function(args) {
                    var e = args.event;
                    pageSizeValue = parseInt($(e.target).text());
                    that._testPageSizeIndex = pageSizeValue;
                    that.option("pageSize", pageSizeValue)
                });
                that._testCurrentPageSize = currentPageSize;
                eventsEngine.on(that._$pagesSizeChooser, eventUtils.addNamespace(clickEvent.name, that.Name + "PageSize"), PAGER_PAGE_SIZE_CLASS_SELECTOR, function(e) {
                    clickPagesSizeAction({
                        event: e
                    })
                });
                accessibility.registerKeyboardAction("pager", that, that._$pagesSizeChooser, PAGER_PAGE_SIZE_CLASS_SELECTOR, clickPagesSizeAction);
                for (i = 0; i < pagesSizesLength; i++) {
                    $pageSize = $("<div>").text(pageSizes[i]).addClass(PAGER_PAGE_SIZE_CLASS);
                    that.setAria({
                        role: "button",
                        label: "Display " + pageSizes[i] + " items on page"
                    }, $pageSize);
                    accessibility.setTabIndex(that, $pageSize);
                    if (currentPageSize === pageSizes[i]) {
                        $pageSize.addClass(PAGER_SELECTION_CLASS)
                    }
                    that._$pagesSizeChooser.append($pageSize)
                }
            },
            _calculateLightPageSizesWidth: function(pageSizes) {
                return Number(this._$pagesSizeChooser.css("minWidth").replace("px", "")) + 10 * Math.max.apply(Math, pageSizes).toString().length
            },
            _renderLightPageSizes: function() {
                var that = this;
                var pageSizes = that.option("pageSizes");
                var $editor = $("<div>").appendTo(that._$pagesSizeChooser);
                that._pageSizeEditor = that._createComponent($editor, SelectBox, {
                    dataSource: pageSizes,
                    value: that.option("pageSize"),
                    onSelectionChanged: function(e) {
                        that._testPageSizeIndex = e.selectedItem;
                        that.option("pageSize", e.selectedItem)
                    },
                    width: that._calculateLightPageSizesWidth(pageSizes)
                })
            },
            _renderPagesSizeChooser: function() {
                var that = this;
                var pageSizes = that.option("pageSizes");
                var showPageSizes = that.option("showPageSizes");
                var pagesSizesLength = pageSizes && pageSizes.length;
                var $element = that.$element();
                that._$pagesSizeChooser && that._$pagesSizeChooser.remove();
                if (!showPageSizes || !pagesSizesLength) {
                    return
                }
                that._$pagesSizeChooser = $("<div>").addClass(PAGER_PAGE_SIZES_CLASS).appendTo($element);
                if (that.option("lightModeEnabled")) {
                    that._renderLightPageSizes()
                } else {
                    that._renderPageSizes()
                }
                that._pagesSizeChooserWidth = that._$pagesSizeChooser.width()
            },
            _renderInfo: function() {
                var infoText = this.option("infoText");
                if (this.option("showInfo") && typeUtils.isDefined(infoText)) {
                    this._$info = $("<div>").css("display", this._isInfoHide ? "none" : "").addClass(PAGER_INFO_CLASS).text(stringUtils.format(infoText, this.selectedPage && this.selectedPage.value(), this.option("pageCount"), this.option("totalCount"))).appendTo(this._$pagesChooser);
                    if (!this._isInfoHide) {
                        this._infoWidth = this._$info.outerWidth(true)
                    }
                }
            },
            _renderNavigateButton: function(direction) {
                var that = this;
                var clickAction = that._createAction(function() {
                    that._nextPage(direction)
                });
                var $button;
                if (that.option("showNavigationButtons") || that.option("lightModeEnabled")) {
                    $button = $("<div>").addClass(PAGER_NAVIGATE_BUTTON);
                    eventsEngine.on($button, eventUtils.addNamespace([pointerEvents.up, clickEvent.name], that.Name + "Pages"), that._wrapClickAction(clickAction));
                    accessibility.registerKeyboardAction("pager", that, $button, void 0, clickAction);
                    that.setAria({
                        role: "button",
                        label: "prev" === direction ? "Previous page" : " Next page"
                    }, $button);
                    accessibility.setTabIndex(that, $button);
                    if (that.option("rtlEnabled")) {
                        $button.addClass("prev" === direction ? PAGER_NEXT_BUTTON_CLASS : PAGER_PREV_BUTTON_CLASS);
                        $button.prependTo(this._$pagesChooser)
                    } else {
                        $button.addClass("prev" === direction ? PAGER_PREV_BUTTON_CLASS : PAGER_NEXT_BUTTON_CLASS);
                        $button.appendTo(this._$pagesChooser)
                    }
                }
            },
            _renderContentImpl: function() {
                this.$element().toggleClass(LIGHT_MODE_CLASS, this.option("lightModeEnabled"));
                this._toggleVisibility(this.option("visible"));
                this._updatePageSizes(true);
                this._updatePages(true);
                accessibility.restoreFocus(this)
            },
            _initMarkup: function() {
                var $element = this.$element();
                $element.addClass(PAGER_CLASS);
                var $pageSize = $("<div>").addClass(PAGER_PAGE_CLASS);
                this._$pagesChooser = $("<div>").addClass(PAGER_PAGES_CLASS).append($pageSize).appendTo($element)
            },
            _render: function() {
                this.option().lightModeEnabled = false;
                this.callBase();
                this._updateLightMode()
            },
            _updatePageSizes: function(forceRender) {
                var lightModeEnabled = this.option("lightModeEnabled");
                var pageSize = this.option("pageSize");
                var pageSizes = this.option("pageSizes");
                if (lightModeEnabled) {
                    this._pageSizeEditor && this._pageSizeEditor.option({
                        value: pageSize,
                        dataSource: pageSizes,
                        width: this._calculateLightPageSizesWidth(pageSizes)
                    })
                }
                if (!lightModeEnabled || forceRender) {
                    this._renderPagesSizeChooser()
                }
            },
            _updatePages: function(forceRender) {
                var pageCount = this.option("pageCount");
                var pageIndex = this.option("pageIndex");
                var lightModeEnabled = this.option("lightModeEnabled");
                if (!lightModeEnabled) {
                    this._processSelectedPage(this.option("maxPagesCount"), pageIndex, pageCount);
                    this._pages = this._getPages(this.selectedPage, pageCount);
                    this._selectPageByValue(pageIndex)
                } else {
                    this._pageIndexEditor && this._pageIndexEditor.option({
                        value: pageIndex,
                        width: this._calculateLightPagesWidth(this._pageIndexEditor.$element(), pageCount)
                    })
                }
                if (!lightModeEnabled || forceRender) {
                    this._renderPagesChooser()
                }
                this._updateButtonsState(pageIndex)
            },
            _isPageIndexInvalid: function(direction, pageIndex) {
                var isNextDirection = "next" === direction;
                var rtlEnabled = this.option("rtlEnabled");
                if (rtlEnabled && isNextDirection || !rtlEnabled && !isNextDirection) {
                    return pageIndex <= 1
                }
                return pageIndex >= this.option("pageCount")
            },
            _updateButtonsState: function(pageIndex) {
                var nextButton = this.$element().find("." + PAGER_NEXT_BUTTON_CLASS);
                var prevButton = this.$element().find("." + PAGER_PREV_BUTTON_CLASS);
                nextButton.toggleClass(PAGER_BUTTON_DISABLE_CLASS, this._isPageIndexInvalid("next", pageIndex));
                prevButton.toggleClass(PAGER_BUTTON_DISABLE_CLASS, this._isPageIndexInvalid("prev", pageIndex))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "visible":
                        this._toggleVisibility(args.value);
                        break;
                    case "pageIndex":
                        var pageIndexChanged = this.option("pageIndexChanged");
                        if (pageIndexChanged) {
                            pageIndexChanged(args.value)
                        }
                        this._updatePages();
                        break;
                    case "maxPagesCount":
                    case "pageCount":
                    case "totalCount":
                    case "hasKnownLastPage":
                    case "pagesNavigatorVisible":
                    case "showNavigationButtons":
                        this._updatePages();
                        break;
                    case "pageSize":
                        var pageSizeChanged = this.option("pageSizeChanged");
                        if (pageSizeChanged) {
                            pageSizeChanged(args.value)
                        }
                        this._updatePageSizes();
                        break;
                    case "pageSizes":
                        this._updatePageSizes();
                        break;
                    case "lightModeEnabled":
                        this._renderContentImpl();
                        !args.value && this._updateLightMode();
                        break;
                    default:
                        this._invalidate()
                }
            },
            _clean: function() {
                if (this._$pagesChooser) {
                    eventsEngine.off(this._$pagesChooser, eventUtils.addNamespace([pointerEvents.up, clickEvent.name], this.Name + "Pages"), PAGER_PAGE_CLASS_SELECTOR, this._pageClickHandler);
                    accessibility.registerKeyboardAction("pager", this, this._$pagesChooser, PAGER_PAGE_CLASS_SELECTOR, this._pageKeyDownHandler)
                }
                this.callBase()
            },
            _getMinPagerWidth: function() {
                var pagesChooserWidth = typeUtils.isDefined(this._pagesChooserWidth) ? this._pagesChooserWidth : 0;
                var pagesSizeChooserWidth = typeUtils.isDefined(this._pagesSizeChooserWidth) ? this._pagesSizeChooserWidth : 0;
                return pagesChooserWidth + pagesSizeChooserWidth
            },
            _updatePagesChooserWidth: commonUtils.deferUpdater(function() {
                var lastPageWidth = this._pages && this._pages.length > 0 ? this._pages[this._pages.length - 1]._$page.width() : 0;
                this._pagesChooserWidth = this._$pagesChooser.width() + lastPageWidth
            }),
            _updateLightMode: commonUtils.deferUpdater(function() {
                var that = this;
                var width = this.$element().width();
                var infoWidth = typeUtils.isDefined(this._infoWidth) ? this._infoWidth : 0;
                commonUtils.deferRender(function() {
                    if (that._isInfoHide && width > that._getMinPagerWidth() + infoWidth) {
                        that._$info.show();
                        that._updatePagesChooserWidth();
                        that._isInfoHide = false
                    }
                    if (!that._isInfoHide && width > that._getMinPagerWidth() - infoWidth && width < that._getMinPagerWidth()) {
                        that._$info.hide();
                        that._updatePagesChooserWidth();
                        that._isInfoHide = true
                    }
                    commonUtils.deferUpdate(function() {
                        commonUtils.deferRender(function() {
                            if (that.option("lightModeEnabled") && width > that._previousWidth) {
                                that.option("lightModeEnabled", false)
                            } else {
                                if (width < that._getMinPagerWidth()) {
                                    that.option("lightModeEnabled", true)
                                }
                            }
                            that._previousWidth = width
                        })
                    })
                })
            }),
            _dimensionChanged: function() {
                this._updateLightMode()
            },
            getHeight: function() {
                return this.option("visible") ? this.$element().outerHeight() : 0
            }
        });
        module.exports = Pager;
        registerComponent("dxPager", Pager)
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.columns_resizing_reordering.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.columns_resizing_reordering */ 384);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.DraggingHeaderView = _uiGrid_core2.default.views.draggingHeaderView;
        exports.DraggingHeaderViewController = _uiGrid_core2.default.controllers.draggingHeader;
        exports.ColumnsSeparatorView = _uiGrid_core2.default.views.columnsSeparatorView;
        exports.TablePositionViewController = _uiGrid_core2.default.controllers.tablePosition;
        exports.ColumnsResizerViewController = _uiGrid_core2.default.controllers.columnsResizer;
        exports.TrackerView = _uiGrid_core2.default.views.trackerView;
        _uiData_grid2.default.registerModule("columnsResizingReordering", _uiGrid_core2.default)
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.keyboard_navigation.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.keyboard_navigation */ 385);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("keyboardNavigation", _uiGrid_core2.default)
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.summary.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiData_grid3 = __webpack_require__( /*! ./ui.data_grid.data_source_adapter */ 204);
        var _uiData_grid4 = _interopRequireDefault(_uiData_grid3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.columns_view */ 170);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _aggregate_calculator = __webpack_require__( /*! ./aggregate_calculator */ 667);
        var _aggregate_calculator2 = _interopRequireDefault(_aggregate_calculator);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _store_helper = __webpack_require__( /*! ../../data/store_helper */ 86);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATAGRID_TOTAL_FOOTER_CLASS = "dx-datagrid-total-footer";
        var DATAGRID_SUMMARY_ITEM_CLASS = "dx-datagrid-summary-item";
        var DATAGRID_TEXT_CONTENT_CLASS = "dx-datagrid-text-content";
        var DATAGRID_GROUP_FOOTER_CLASS = "dx-datagrid-group-footer";
        var DATAGRID_GROUP_TEXT_CONTENT_CLASS = "dx-datagrid-group-text-content";
        var DATAGRID_NOWRAP_CLASS = "dx-datagrid-nowrap";
        var DATAGRID_GROUP_FOOTER_ROW_TYPE = "groupFooter";
        var renderSummaryCell = function(cell, options) {
            var $cell = (0, _renderer2.default)(cell);
            var column = options.column;
            var summaryItems = options.summaryItems;
            var $summaryItems = [];
            if (!column.command && summaryItems) {
                for (var i = 0; i < summaryItems.length; i++) {
                    var summaryItem = summaryItems[i];
                    $summaryItems.push((0, _renderer2.default)("<div>").css("textAlign", summaryItem.alignment || column.alignment).addClass(DATAGRID_SUMMARY_ITEM_CLASS).addClass(DATAGRID_TEXT_CONTENT_CLASS).addClass(summaryItem.cssClass).toggleClass(DATAGRID_GROUP_TEXT_CONTENT_CLASS, "group" === options.rowType).text(_uiData_grid2.default.getSummaryText(summaryItem, options.summaryTexts)))
                }
                $cell.append($summaryItems)
            }
        };
        var getSummaryCellOptions = function(that, options) {
            var summaryTexts = that.option("summary.texts") || {};
            return {
                totalItem: options.row,
                summaryItems: options.row.summaryCells[options.columnIndex],
                summaryTexts: summaryTexts
            }
        };
        var getGroupAggregates = function(data) {
            return data.summary || data.aggregates || []
        };
        var recalculateWhileEditing = function(that) {
            return that.option("summary.recalculateWhileEditing")
        };
        exports.FooterView = _uiGrid_core2.default.ColumnsView.inherit(function() {
            return {
                _getRows: function() {
                    return this._dataController.footerItems()
                },
                _getCellOptions: function(options) {
                    return (0, _extend.extend)(this.callBase(options), getSummaryCellOptions(this, options))
                },
                _renderCellContent: function($cell, options) {
                    renderSummaryCell($cell, options);
                    this.callBase($cell, options)
                },
                _renderCore: function(change) {
                    var totalItem = this._dataController.footerItems()[0];
                    if (!change || !change.columnIndices) {
                        this.element().empty().addClass(DATAGRID_TOTAL_FOOTER_CLASS).toggleClass(DATAGRID_NOWRAP_CLASS, !this.option("wordWrapEnabled"))
                    }
                    if (totalItem && totalItem.summaryCells && totalItem.summaryCells.length) {
                        this._updateContent(this._renderTable({
                            change: change
                        }), change)
                    }
                },
                _updateContent: function($newTable, change) {
                    if (change && "update" === change.changeType && change.columnIndices) {
                        var $row = this._getTableElement().find(".dx-row");
                        var $newRow = $newTable.find(".dx-row");
                        this._updateCells($row, $newRow, change.columnIndices[0])
                    } else {
                        return this.callBase.apply(this, arguments)
                    }
                },
                _rowClick: function(e) {
                    var item = this._dataController.footerItems()[e.rowIndex] || {};
                    this.executeAction("onRowClick", (0, _extend.extend)({}, e, item))
                },
                _columnOptionChanged: function(e) {
                    var optionNames = e.optionNames;
                    if (e.changeTypes.grouping) {
                        return
                    }
                    if (optionNames.width || optionNames.visibleWidth) {
                        this.callBase(e)
                    }
                },
                _handleDataChanged: function(e) {
                    var changeType = e.changeType;
                    if ("update" === e.changeType && e.repaintChangesOnly) {
                        if (!e.totalColumnIndices) {
                            this.render()
                        } else {
                            if (e.totalColumnIndices.length) {
                                this.render(null, {
                                    changeType: "update",
                                    columnIndices: [e.totalColumnIndices]
                                })
                            }
                        }
                    } else {
                        if ("refresh" === changeType || "append" === changeType || "prepend" === changeType) {
                            this.render()
                        }
                    }
                },
                getHeight: function() {
                    return this.getElementHeight()
                },
                isVisible: function() {
                    return !!this._dataController.footerItems().length
                }
            }
        }());
        var SummaryDataSourceAdapterExtender = function() {
            function forEachGroup(groups, groupCount, callback, path) {
                path = path || [];
                for (var i = 0; i < groups.length; i++) {
                    path.push(groups[i].key);
                    if (1 === groupCount) {
                        callback(path, groups[i].items)
                    } else {
                        forEachGroup(groups[i].items, groupCount - 1, callback, path)
                    }
                    path.pop()
                }
            }
            return {
                init: function() {
                    this.callBase.apply(this, arguments);
                    this._totalAggregates = [];
                    this._summaryGetter = _common.noop
                },
                summaryGetter: function(_summaryGetter) {
                    if (!arguments.length) {
                        return this._summaryGetter
                    }
                    if ((0, _type.isFunction)(_summaryGetter)) {
                        this._summaryGetter = _summaryGetter
                    }
                },
                summary: function(_summary) {
                    if (!arguments.length) {
                        return this._summaryGetter()
                    }
                    this._summaryGetter = function() {
                        return _summary
                    }
                },
                totalAggregates: function() {
                    return this._totalAggregates
                },
                isLastLevelGroupItemsPagingLocal: function() {
                    var summary = this.summary();
                    var sortByGroupsInfo = summary && summary.sortByGroups();
                    return sortByGroupsInfo && sortByGroupsInfo.length
                },
                sortLastLevelGroupItems: function(items, groups, paths) {
                    var groupedItems = (0, _store_helper.multiLevelGroup)((0, _query2.default)(items), groups).toArray();
                    var result = [];
                    paths.forEach(function(path) {
                        forEachGroup(groupedItems, groups.length, function(itemsPath, items) {
                            if (path.toString() === itemsPath.toString()) {
                                result = result.concat(items)
                            }
                        })
                    });
                    return result
                }
            }
        }();
        var SummaryDataSourceAdapterClientExtender = function() {
            var applyAddedData = function applyAddedData(data, insertedData, groupLevel) {
                if (groupLevel) {
                    return applyAddedData(data, insertedData.map(function(item) {
                        return {
                            items: [item]
                        }
                    }, groupLevel - 1))
                }
                return data.concat(insertedData)
            };
            var applyRemovedData = function applyRemovedData(data, removedData, groupLevel) {
                if (groupLevel) {
                    return data.map(function(data) {
                        var updatedData = {};
                        var updatedItems = applyRemovedData(data.items || [], removedData, groupLevel - 1);
                        Object.defineProperty(updatedData, "aggregates", {
                            get: function() {
                                return data.aggregates
                            },
                            set: function(value) {
                                data.aggregates = value
                            }
                        });
                        return (0, _extend.extend)(updatedData, data, {
                            items: updatedItems
                        })
                    })
                }
                return data.filter(function(data) {
                    return removedData.indexOf(data) < 0
                })
            };
            var calculateAggregates = function(that, summary, data, groupLevel) {
                var calculator;
                if (recalculateWhileEditing(that)) {
                    var editingController = that.getController("editing");
                    if (editingController) {
                        var insertedData = editingController.getInsertedData();
                        if (insertedData.length) {
                            data = applyAddedData(data, insertedData, groupLevel)
                        }
                        var removedData = editingController.getRemovedData();
                        if (removedData.length) {
                            data = applyRemovedData(data, removedData, groupLevel)
                        }
                    }
                }
                if (summary) {
                    calculator = new _aggregate_calculator2.default({
                        totalAggregates: summary.totalAggregates,
                        groupAggregates: summary.groupAggregates,
                        data: data,
                        groupLevel: groupLevel
                    });
                    calculator.calculate()
                }
                return calculator ? calculator.totalAggregates() : []
            };
            var sortGroupsBySummaryCore = function sortGroupsBySummaryCore(items, groups, sortByGroups) {
                if (!items || !groups.length) {
                    return items
                }
                var group = groups[0];
                var sorts = sortByGroups[0];
                var query;
                if (group && sorts && sorts.length) {
                    query = (0, _query2.default)(items);
                    (0, _iterator.each)(sorts, function(index) {
                        if (0 === index) {
                            query = query.sortBy(this.selector, this.desc)
                        } else {
                            query = query.thenBy(this.selector, this.desc)
                        }
                    });
                    query.enumerate().done(function(sortedItems) {
                        items = sortedItems
                    })
                }
                groups = groups.slice(1);
                sortByGroups = sortByGroups.slice(1);
                if (groups.length && sortByGroups.length) {
                    (0, _iterator.each)(items, function() {
                        this.items = sortGroupsBySummaryCore(this.items, groups, sortByGroups)
                    })
                }
                return items
            };
            var sortGroupsBySummary = function(data, group, summary) {
                var sortByGroups = summary && summary.sortByGroups && summary.sortByGroups();
                if (sortByGroups && sortByGroups.length) {
                    return sortGroupsBySummaryCore(data, group, sortByGroups)
                }
                return data
            };
            return {
                _customizeRemoteOperations: function(options) {
                    var summary = this.summary();
                    if (summary) {
                        if (options.remoteOperations.summary) {
                            if (!options.isCustomLoading || options.storeLoadOptions.isLoadingAll) {
                                if (options.storeLoadOptions.group) {
                                    if (options.remoteOperations.grouping) {
                                        options.storeLoadOptions.groupSummary = summary.groupAggregates
                                    } else {
                                        if (summary.groupAggregates.length) {
                                            options.remoteOperations.paging = false
                                        }
                                    }
                                }
                                options.storeLoadOptions.totalSummary = summary.totalAggregates
                            }
                        } else {
                            if (summary.totalAggregates.length || summary.groupAggregates.length && options.storeLoadOptions.group) {
                                options.remoteOperations.paging = false
                            }
                        }
                    }
                    this.callBase.apply(this, arguments);
                    var cachedExtra = options.cachedPagesData.extra;
                    if (cachedExtra && cachedExtra.summary && !options.isCustomLoading) {
                        options.storeLoadOptions.totalSummary = void 0
                    }
                },
                _handleDataLoadedCore: function(options) {
                    var that = this;
                    var groups = (0, _utils.normalizeSortingInfo)(options.storeLoadOptions.group || options.loadOptions.group || []);
                    var remoteOperations = options.remoteOperations || {};
                    var summary = that.summaryGetter()(remoteOperations);
                    var totalAggregates;
                    if (!options.isCustomLoading || options.storeLoadOptions.isLoadingAll) {
                        if (remoteOperations.summary) {
                            if (!remoteOperations.paging && groups.length && summary) {
                                if (!remoteOperations.grouping) {
                                    calculateAggregates(that, {
                                        groupAggregates: summary.groupAggregates
                                    }, options.data, groups.length)
                                }
                                options.data = sortGroupsBySummary(options.data, groups, summary)
                            }
                        } else {
                            if (!remoteOperations.paging) {
                                totalAggregates = calculateAggregates(that, summary, options.data, groups.length);
                                options.data = sortGroupsBySummary(options.data, groups, summary);
                                options.extra = (0, _type.isPlainObject)(options.extra) ? options.extra : {};
                                options.extra.summary = totalAggregates
                            }
                        }
                    }
                    if (!options.isCustomLoading) {
                        that._totalAggregates = options.extra && options.extra.summary || that._totalAggregates
                    }
                    that.callBase(options)
                }
            }
        }();
        _uiData_grid4.default.extend(SummaryDataSourceAdapterExtender);
        _uiData_grid4.default.extend(SummaryDataSourceAdapterClientExtender);
        exports.renderSummaryCell = renderSummaryCell;
        _uiData_grid2.default.registerModule("summary", {
            defaultOptions: function() {
                return {
                    summary: {
                        groupItems: void 0,
                        totalItems: void 0,
                        calculateCustomSummary: void 0,
                        skipEmptyValues: true,
                        recalculateWhileEditing: false,
                        texts: {
                            sum: _message2.default.getFormatter("dxDataGrid-summarySum"),
                            sumOtherColumn: _message2.default.getFormatter("dxDataGrid-summarySumOtherColumn"),
                            min: _message2.default.getFormatter("dxDataGrid-summaryMin"),
                            minOtherColumn: _message2.default.getFormatter("dxDataGrid-summaryMinOtherColumn"),
                            max: _message2.default.getFormatter("dxDataGrid-summaryMax"),
                            maxOtherColumn: _message2.default.getFormatter("dxDataGrid-summaryMaxOtherColumn"),
                            avg: _message2.default.getFormatter("dxDataGrid-summaryAvg"),
                            avgOtherColumn: _message2.default.getFormatter("dxDataGrid-summaryAvgOtherColumn"),
                            count: _message2.default.getFormatter("dxDataGrid-summaryCount")
                        }
                    },
                    sortByGroupSummaryInfo: void 0
                }
            },
            views: {
                footerView: exports.FooterView
            },
            extenders: {
                controllers: {
                    data: function() {
                        return {
                            _isDataColumn: function(column) {
                                return column && (!(0, _type.isDefined)(column.groupIndex) || column.showWhenGrouped)
                            },
                            _isGroupFooterVisible: function() {
                                var groupItems = this.option("summary.groupItems") || [];
                                for (var i = 0; i < groupItems.length; i++) {
                                    var groupItem = groupItems[i];
                                    var column = this._columnsController.columnOption(groupItem.showInColumn || groupItem.column);
                                    if (groupItem.showInGroupFooter && this._isDataColumn(column)) {
                                        return true
                                    }
                                }
                                return false
                            },
                            _processGroupItems: function(items, groupCount, options) {
                                var data = options && options.data;
                                var result = this.callBase.apply(this, arguments);
                                if (options) {
                                    if (void 0 === options.isGroupFooterVisible) {
                                        options.isGroupFooterVisible = this._isGroupFooterVisible()
                                    }
                                    if (data && data.items && options.isGroupFooterVisible && (options.collectContinuationItems || !data.isContinuationOnNextPage)) {
                                        result.push({
                                            rowType: DATAGRID_GROUP_FOOTER_ROW_TYPE,
                                            key: options.path.slice(),
                                            data: data,
                                            groupIndex: options.path.length - 1,
                                            values: []
                                        })
                                    }
                                }
                                return result
                            },
                            _processGroupItem: function(groupItem, options) {
                                var that = this;
                                if (!options.summaryGroupItems) {
                                    options.summaryGroupItems = that.option("summary.groupItems") || []
                                }
                                if ("group" === groupItem.rowType) {
                                    var groupColumnIndex = -1;
                                    var afterGroupColumnIndex = -1;
                                    (0, _iterator.each)(options.visibleColumns, function(visibleIndex) {
                                        var prevColumn = options.visibleColumns[visibleIndex - 1];
                                        if (groupItem.groupIndex === this.groupIndex) {
                                            groupColumnIndex = this.index
                                        }
                                        if (visibleIndex > 0 && "expand" === prevColumn.command && "expand" !== this.command) {
                                            afterGroupColumnIndex = this.index
                                        }
                                    });
                                    groupItem.summaryCells = this._calculateSummaryCells(options.summaryGroupItems, getGroupAggregates(groupItem.data), options.visibleColumns, function(summaryItem, column) {
                                        if (summaryItem.showInGroupFooter) {
                                            return -1
                                        }
                                        if (summaryItem.alignByColumn && column && !(0, _type.isDefined)(column.groupIndex) && column.index !== afterGroupColumnIndex) {
                                            return column.index
                                        } else {
                                            return groupColumnIndex
                                        }
                                    })
                                }
                                if (groupItem.rowType === DATAGRID_GROUP_FOOTER_ROW_TYPE) {
                                    groupItem.summaryCells = this._calculateSummaryCells(options.summaryGroupItems, getGroupAggregates(groupItem.data), options.visibleColumns, function(summaryItem, column) {
                                        return summaryItem.showInGroupFooter && that._isDataColumn(column) ? column.index : -1
                                    })
                                }
                                return groupItem
                            },
                            _calculateSummaryCells: function(summaryItems, aggregates, visibleColumns, calculateTargetColumnIndex) {
                                var that = this;
                                var summaryCells = [];
                                var summaryCellsByColumns = {};
                                (0, _iterator.each)(summaryItems, function(summaryIndex, summaryItem) {
                                    var column = that._columnsController.columnOption(summaryItem.column);
                                    var showInColumn = summaryItem.showInColumn && that._columnsController.columnOption(summaryItem.showInColumn) || column;
                                    var columnIndex = calculateTargetColumnIndex(summaryItem, showInColumn);
                                    if (columnIndex >= 0) {
                                        if (!summaryCellsByColumns[columnIndex]) {
                                            summaryCellsByColumns[columnIndex] = []
                                        }
                                        var aggregate = aggregates[summaryIndex];
                                        if (aggregate === aggregate) {
                                            var valueFormat;
                                            if ((0, _type.isDefined)(summaryItem.valueFormat)) {
                                                valueFormat = summaryItem.valueFormat
                                            } else {
                                                if ("count" !== summaryItem.summaryType) {
                                                    valueFormat = _uiData_grid2.default.getFormatByDataType(column && column.dataType)
                                                }
                                            }
                                            summaryCellsByColumns[columnIndex].push((0, _extend.extend)({}, summaryItem, {
                                                value: (0, _type.isString)(aggregate) && column && column.deserializeValue ? column.deserializeValue(aggregate) : aggregate,
                                                valueFormat: valueFormat,
                                                columnCaption: column && column.index !== columnIndex ? column.caption : void 0
                                            }))
                                        }
                                    }
                                });
                                if (!(0, _type.isEmptyObject)(summaryCellsByColumns)) {
                                    (0, _iterator.each)(visibleColumns, function() {
                                        summaryCells.push(summaryCellsByColumns[this.index] || [])
                                    })
                                }
                                return summaryCells
                            },
                            _getSummaryCells: function(summaryTotalItems, totalAggregates) {
                                var that = this;
                                var columnsController = that._columnsController;
                                return that._calculateSummaryCells(summaryTotalItems, totalAggregates, columnsController.getVisibleColumns(), function(summaryItem, column) {
                                    return that._isDataColumn(column) ? column.index : -1
                                })
                            },
                            _updateItemsCore: function(change) {
                                var that = this;
                                var summaryCells;
                                var dataSource = that._dataSource;
                                var footerItems = that._footerItems;
                                var oldSummaryCells = footerItems && footerItems[0] && footerItems[0].summaryCells;
                                var summaryTotalItems = that.option("summary.totalItems");
                                that._footerItems = [];
                                if (dataSource && summaryTotalItems && summaryTotalItems.length) {
                                    var totalAggregates = dataSource.totalAggregates();
                                    summaryCells = that._getSummaryCells(summaryTotalItems, totalAggregates);
                                    if (change && change.repaintChangesOnly && oldSummaryCells) {
                                        change.totalColumnIndices = summaryCells.map(function(summaryCell, index) {
                                            if (JSON.stringify(summaryCell) !== JSON.stringify(oldSummaryCells[index])) {
                                                return index
                                            }
                                            return -1
                                        }).filter(function(index) {
                                            return index >= 0
                                        })
                                    }
                                    if (summaryCells.length) {
                                        that._footerItems.push({
                                            rowType: "totalFooter",
                                            summaryCells: summaryCells
                                        })
                                    }
                                }
                                that.callBase(change)
                            },
                            _prepareUnsavedDataSelector: function(selector) {
                                var that = this;
                                if (recalculateWhileEditing(that)) {
                                    var editingController = that.getController("editing");
                                    if (editingController) {
                                        return function(data) {
                                            data = editingController.getUpdatedData(data);
                                            return selector(data)
                                        }
                                    }
                                }
                                return selector
                            },
                            _prepareAggregateSelector: function(selector, aggregator) {
                                selector = this._prepareUnsavedDataSelector(selector);
                                if ("avg" === aggregator || "sum" === aggregator) {
                                    return function(data) {
                                        var value = selector(data);
                                        return (0, _type.isDefined)(value) ? Number(value) : value
                                    }
                                }
                                return selector
                            },
                            _getAggregates: function(summaryItems, remoteOperations) {
                                var that = this;
                                var columnsController = that.getController("columns");
                                var calculateCustomSummary = that.option("summary.calculateCustomSummary");
                                var commonSkipEmptyValues = that.option("summary.skipEmptyValues");
                                return (0, _iterator.map)(summaryItems || [], function(summaryItem) {
                                    var column = columnsController.columnOption(summaryItem.column);
                                    var calculateCellValue = column && column.calculateCellValue ? column.calculateCellValue.bind(column) : (0, _data.compileGetter)(column ? column.dataField : summaryItem.column);
                                    var aggregator = summaryItem.summaryType || "count";
                                    var selector = summaryItem.column;
                                    var skipEmptyValues = (0, _type.isDefined)(summaryItem.skipEmptyValues) ? summaryItem.skipEmptyValues : commonSkipEmptyValues;
                                    if (remoteOperations) {
                                        return {
                                            selector: summaryItem.column,
                                            summaryType: aggregator
                                        }
                                    } else {
                                        selector = that._prepareAggregateSelector(calculateCellValue, aggregator);
                                        if ("custom" === aggregator) {
                                            if (!calculateCustomSummary) {
                                                _ui2.default.log("E1026");
                                                calculateCustomSummary = function() {}
                                            }
                                            var options = {
                                                component: that.component,
                                                name: summaryItem.name
                                            };
                                            calculateCustomSummary(options);
                                            options.summaryProcess = "calculate";
                                            aggregator = {
                                                seed: function(groupIndex) {
                                                    options.summaryProcess = "start";
                                                    options.totalValue = void 0;
                                                    options.groupIndex = groupIndex;
                                                    delete options.value;
                                                    calculateCustomSummary(options);
                                                    return options.totalValue
                                                },
                                                step: function(totalValue, value) {
                                                    options.summaryProcess = "calculate";
                                                    options.totalValue = totalValue;
                                                    options.value = value;
                                                    calculateCustomSummary(options);
                                                    return options.totalValue
                                                },
                                                finalize: function(totalValue) {
                                                    options.summaryProcess = "finalize";
                                                    options.totalValue = totalValue;
                                                    delete options.value;
                                                    calculateCustomSummary(options);
                                                    return options.totalValue
                                                }
                                            }
                                        }
                                        return {
                                            selector: selector,
                                            aggregator: aggregator,
                                            skipEmptyValues: skipEmptyValues
                                        }
                                    }
                                })
                            },
                            _addSortInfo: function(sortByGroups, groupColumn, selector, sortOrder) {
                                if (groupColumn) {
                                    var groupIndex = groupColumn.groupIndex;
                                    sortOrder = sortOrder || groupColumn.sortOrder;
                                    if ((0, _type.isDefined)(groupIndex)) {
                                        sortByGroups[groupIndex] = sortByGroups[groupIndex] || [];
                                        sortByGroups[groupIndex].push({
                                            selector: selector,
                                            desc: "desc" === sortOrder
                                        })
                                    }
                                }
                            },
                            _findSummaryItem: function(summaryItems, name) {
                                var summaryItemIndex = -1;
                                var getFullName = function(summaryItem) {
                                    var summaryType = summaryItem.summaryType;
                                    var column = summaryItem.column;
                                    return summaryType && column && summaryType + "_" + column
                                };
                                if ((0, _type.isDefined)(name)) {
                                    (0, _iterator.each)(summaryItems || [], function(index) {
                                        if (this.name === name || index === name || this.summaryType === name || this.column === name || getFullName(this) === name) {
                                            summaryItemIndex = index;
                                            return false
                                        }
                                    })
                                }
                                return summaryItemIndex
                            },
                            _getSummarySortByGroups: function(sortByGroupSummaryInfo, groupSummaryItems) {
                                var that = this;
                                var columnsController = that._columnsController;
                                var groupColumns = columnsController.getGroupColumns();
                                var sortByGroups = [];
                                if (!groupSummaryItems || !groupSummaryItems.length) {
                                    return
                                }(0, _iterator.each)(sortByGroupSummaryInfo || [], function() {
                                    var sortOrder = this.sortOrder;
                                    var groupColumn = this.groupColumn;
                                    var summaryItemIndex = that._findSummaryItem(groupSummaryItems, this.summaryItem);
                                    if (summaryItemIndex < 0) {
                                        return
                                    }
                                    var selector = function(data) {
                                        return getGroupAggregates(data)[summaryItemIndex]
                                    };
                                    if ((0, _type.isDefined)(groupColumn)) {
                                        groupColumn = columnsController.columnOption(groupColumn);
                                        that._addSortInfo(sortByGroups, groupColumn, selector, sortOrder)
                                    } else {
                                        (0, _iterator.each)(groupColumns, function(groupIndex, groupColumn) {
                                            that._addSortInfo(sortByGroups, groupColumn, selector, sortOrder)
                                        })
                                    }
                                });
                                return sortByGroups
                            },
                            _createDataSourceAdapterCore: function(dataSource, remoteOperations) {
                                var that = this;
                                var dataSourceAdapter = this.callBase(dataSource, remoteOperations);
                                dataSourceAdapter.summaryGetter(function(currentRemoteOperations) {
                                    return that._getSummaryOptions(currentRemoteOperations || remoteOperations)
                                });
                                return dataSourceAdapter
                            },
                            _getSummaryOptions: function(remoteOperations) {
                                var that = this;
                                var groupSummaryItems = that.option("summary.groupItems");
                                var totalSummaryItems = that.option("summary.totalItems");
                                var sortByGroupSummaryInfo = that.option("sortByGroupSummaryInfo");
                                var groupAggregates = that._getAggregates(groupSummaryItems, remoteOperations && remoteOperations.grouping && remoteOperations.summary);
                                var totalAggregates = that._getAggregates(totalSummaryItems, remoteOperations && remoteOperations.summary);
                                var sortByGroups = function() {
                                    return that._getSummarySortByGroups(sortByGroupSummaryInfo, groupSummaryItems)
                                };
                                if (groupAggregates.length || totalAggregates.length) {
                                    return {
                                        groupAggregates: groupAggregates,
                                        totalAggregates: totalAggregates,
                                        sortByGroups: sortByGroups
                                    }
                                }
                            },
                            publicMethods: function() {
                                var methods = this.callBase();
                                methods.push("getTotalSummaryValue");
                                return methods
                            },
                            getTotalSummaryValue: function(summaryItemName) {
                                var summaryItemIndex = this._findSummaryItem(this.option("summary.totalItems"), summaryItemName);
                                var aggregates = this._dataSource.totalAggregates();
                                if (aggregates.length && summaryItemIndex > -1) {
                                    return aggregates[summaryItemIndex]
                                }
                            },
                            optionChanged: function(args) {
                                if ("summary" === args.name || "sortByGroupSummaryInfo" === args.name) {
                                    args.name = "dataSource"
                                }
                                this.callBase(args)
                            },
                            init: function() {
                                this._footerItems = [];
                                this.callBase()
                            },
                            footerItems: function() {
                                return this._footerItems
                            }
                        }
                    }(),
                    editing: function() {
                        return {
                            _refreshSummary: function() {
                                if (recalculateWhileEditing(this) && !this.isSaving()) {
                                    this._dataController.refresh({
                                        load: true,
                                        changesOnly: true
                                    })
                                }
                            },
                            _addEditData: function(params) {
                                var result = this.callBase.apply(this, arguments);
                                if (params.type) {
                                    this._refreshSummary()
                                }
                                return result
                            },
                            _removeEditDataItem: function() {
                                var result = this.callBase.apply(this, arguments);
                                this._refreshSummary();
                                return result
                            },
                            cancelEditData: function() {
                                var result = this.callBase.apply(this, arguments);
                                this._refreshSummary();
                                return result
                            }
                        }
                    }()
                },
                views: {
                    rowsView: function() {
                        return {
                            _createRow: function(row) {
                                var $row = this.callBase(row);
                                row && $row.addClass(row.rowType === DATAGRID_GROUP_FOOTER_ROW_TYPE ? DATAGRID_GROUP_FOOTER_CLASS : "");
                                return $row
                            },
                            _renderCells: function($row, options) {
                                this.callBase.apply(this, arguments);
                                if ("group" === options.row.rowType && options.row.summaryCells && options.row.summaryCells.length) {
                                    this._renderGroupSummaryCells($row, options)
                                }
                            },
                            _hasAlignByColumnSummaryItems: function(columnIndex, options) {
                                return !(0, _type.isDefined)(options.columns[columnIndex].groupIndex) && options.row.summaryCells[columnIndex].length
                            },
                            _getAlignByColumnCellCount: function(groupCellColSpan, options) {
                                var alignByColumnCellCount = 0;
                                for (var i = 1; i < groupCellColSpan; i++) {
                                    var columnIndex = options.row.summaryCells.length - i;
                                    alignByColumnCellCount = this._hasAlignByColumnSummaryItems(columnIndex, options) ? i : alignByColumnCellCount
                                }
                                return alignByColumnCellCount
                            },
                            _renderGroupSummaryCells: function($row, options) {
                                var $groupCell = $row.children().last();
                                var groupCellColSpan = Number($groupCell.attr("colSpan")) || 1;
                                var alignByColumnCellCount = this._getAlignByColumnCellCount(groupCellColSpan, options);
                                this._renderGroupSummaryCellsCore($groupCell, options, groupCellColSpan, alignByColumnCellCount)
                            },
                            _renderGroupSummaryCellsCore: function($groupCell, options, groupCellColSpan, alignByColumnCellCount) {
                                if (alignByColumnCellCount > 0) {
                                    $groupCell.attr("colSpan", groupCellColSpan - alignByColumnCellCount);
                                    for (var i = 0; i < alignByColumnCellCount; i++) {
                                        var columnIndex = options.columns.length - alignByColumnCellCount + i;
                                        this._renderCell($groupCell.parent(), (0, _extend.extend)({
                                            column: options.columns[columnIndex],
                                            columnIndex: this._getSummaryCellIndex(columnIndex, options.columns)
                                        }, options))
                                    }
                                }
                            },
                            _getSummaryCellIndex: function(columnIndex) {
                                return columnIndex
                            },
                            _getCellTemplate: function(options) {
                                if (!options.column.command && !(0, _type.isDefined)(options.column.groupIndex) && options.summaryItems && options.summaryItems.length) {
                                    return renderSummaryCell
                                } else {
                                    return this.callBase(options)
                                }
                            },
                            _getCellOptions: function(options) {
                                var that = this;
                                var parameters = that.callBase(options);
                                if (options.row.summaryCells) {
                                    return (0, _extend.extend)(parameters, getSummaryCellOptions(that, options))
                                } else {
                                    return parameters
                                }
                            }
                        }
                    }()
                }
            }
        })
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/aggregate_calculator.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _errors = __webpack_require__( /*! ../../data/errors */ 38);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function depthFirstSearch(i, depth, root, callback) {
            var j = 0;
            if (i < depth) {
                for (; j < root.items.length; j++) {
                    depthFirstSearch(i + 1, depth, root.items[j], callback)
                }
            }
            if (i === depth) {
                callback(root)
            }
        }

        function map(array, callback) {
            var i;
            if ("map" in array) {
                return array.map(callback)
            }
            var result = new Array(array.length);
            for (i in array) {
                result[i] = callback(array[i], i)
            }
            return result
        }

        function isEmpty(x) {
            return x !== x || "" === x || null === x || void 0 === x
        }

        function isCount(aggregator) {
            return aggregator === _utils.aggregators.count
        }

        function normalizeAggregate(aggregate) {
            var selector = (0, _data.compileGetter)(aggregate.selector);
            var skipEmptyValues = "skipEmptyValues" in aggregate ? aggregate.skipEmptyValues : true;
            var aggregator = aggregate.aggregator;
            if ("string" === typeof aggregator) {
                aggregator = _utils.aggregators[aggregator];
                if (!aggregator) {
                    throw _errors.errors.Error("E4001", aggregate.aggregator)
                }
            }
            return {
                selector: selector,
                aggregator: aggregator,
                skipEmptyValues: skipEmptyValues
            }
        }
        module.exports = _class2.default.inherit({
            ctor: function(options) {
                this._data = options.data;
                this._groupLevel = options.groupLevel || 0;
                this._totalAggregates = map(options.totalAggregates || [], normalizeAggregate);
                this._groupAggregates = map(options.groupAggregates || [], normalizeAggregate);
                this._totals = []
            },
            calculate: function() {
                if (this._totalAggregates.length) {
                    this._calculateTotals(0, {
                        items: this._data
                    })
                }
                if (this._groupAggregates.length && this._groupLevel > 0) {
                    this._calculateGroups({
                        items: this._data
                    })
                }
            },
            totalAggregates: function() {
                return this._totals
            },
            _aggregate: function(aggregates, data, container) {
                var length = data.items ? data.items.length : 0;
                for (var i = 0; i < aggregates.length; i++) {
                    if (isCount(aggregates[i].aggregator)) {
                        container[i] = (container[i] || 0) + length;
                        continue
                    }
                    for (var j = 0; j < length; j++) {
                        this._accumulate(i, aggregates[i], container, data.items[j])
                    }
                }
            },
            _calculateTotals: function(level, data) {
                if (0 === level) {
                    this._totals = this._seed(this._totalAggregates)
                }
                if (level === this._groupLevel) {
                    this._aggregate(this._totalAggregates, data, this._totals)
                } else {
                    for (var i = 0; i < data.items.length; i++) {
                        this._calculateTotals(level + 1, data.items[i])
                    }
                }
                if (0 === level) {
                    this._totals = this._finalize(this._totalAggregates, this._totals)
                }
            },
            _calculateGroups: function(root) {
                var maxLevel = this._groupLevel;
                var currentLevel = maxLevel + 1;
                var seedFn = this._seed.bind(this, this._groupAggregates);
                var stepFn = this._aggregate.bind(this, this._groupAggregates);
                var finalizeFn = this._finalize.bind(this, this._groupAggregates);

                function aggregator(node) {
                    node.aggregates = seedFn(currentLevel - 1);
                    if (currentLevel === maxLevel) {
                        stepFn(node, node.aggregates)
                    } else {
                        depthFirstSearch(currentLevel, maxLevel, node, function(innerNode) {
                            stepFn(innerNode, node.aggregates)
                        })
                    }
                    node.aggregates = finalizeFn(node.aggregates)
                }
                while (--currentLevel > 0) {
                    depthFirstSearch(0, currentLevel, root, aggregator)
                }
            },
            _seed: function(aggregates, groupIndex) {
                return map(aggregates, function(aggregate) {
                    var aggregator = aggregate.aggregator;
                    var seed = "seed" in aggregator ? (0, _type.isFunction)(aggregator.seed) ? aggregator.seed(groupIndex) : aggregator.seed : NaN;
                    return seed
                })
            },
            _accumulate: function(aggregateIndex, aggregate, results, item) {
                var value = aggregate.selector(item);
                var aggregator = aggregate.aggregator;
                var skipEmptyValues = aggregate.skipEmptyValues;
                if (skipEmptyValues && isEmpty(value)) {
                    return
                }
                if (results[aggregateIndex] !== results[aggregateIndex]) {
                    results[aggregateIndex] = value
                } else {
                    results[aggregateIndex] = aggregator.step(results[aggregateIndex], value)
                }
            },
            _finalize: function(aggregates, results) {
                return map(aggregates, function(aggregate, index) {
                    var fin = aggregate.aggregator.finalize;
                    return fin ? fin(results[index]) : results[index]
                })
            }
        })
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.column_fixing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_fixing */ 386);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("columnFixing", _uiGrid_core2.default)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.adaptivity.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.adaptivity */ 387);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("adaptivity", _uiGrid_core2.default)
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.virtual_columns.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_columns */ 388);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("virtualColumns", _uiGrid_core2.default)
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.export.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.export_mixin */ 390);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _exporter = __webpack_require__( /*! ../../exporter */ 179);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _list = __webpack_require__( /*! ../list */ 104);
        var _list2 = _interopRequireDefault(_list);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DATAGRID_EXPORT_MENU_CLASS = "dx-datagrid-export-menu";
        var DATAGRID_EXPORT_BUTTON_CLASS = "dx-datagrid-export-button";
        var DATAGRID_EXPORT_ICON = "export-to";
        var DATAGRID_EXPORT_EXCEL_ICON = "xlsxfile";
        var DATAGRID_EXPORT_SELECTED_ICON = "exportselected";
        var DATAGRID_EXPORT_EXCEL_BUTTON_ICON = "export-excel-button";
        var TOOLBAR_ITEM_AUTO_HIDE_CLASS = "dx-toolbar-item-auto-hide";
        var TOOLBAR_HIDDEN_BUTTON_CLASS = "dx-toolbar-hidden-button";
        var BUTTON_CLASS = "dx-button";
        var DATA_STYLE_OFFSET = 3;
        exports.DataProvider = _class2.default.inherit({
            _getGroupValue: function(item) {
                var key = item.key,
                    data = item.data,
                    rowType = item.rowType,
                    groupIndex = item.groupIndex,
                    summaryCells = item.summaryCells;
                var groupColumn = this._options.groupColumns[groupIndex];
                var value = _uiData_grid2.default.getDisplayValue(groupColumn, groupColumn.deserializeValue ? groupColumn.deserializeValue(key[groupIndex]) : key[groupIndex], data, rowType);
                var result = groupColumn.caption + ": " + _uiData_grid2.default.formatValue(value, groupColumn);
                if (summaryCells && summaryCells[0] && summaryCells[0].length) {
                    result += " " + _uiData_grid2.default.getGroupRowSummaryText(summaryCells[0], this._options.summaryTexts)
                }
                return result
            },
            _correctCellIndex: function(cellIndex) {
                return cellIndex
            },
            _initOptions: function() {
                var exportController = this._exportController;
                var groupColumns = exportController._columnsController.getGroupColumns();
                var excelWrapTextEnabled = exportController.option("export.excelWrapTextEnabled");
                this._options = {
                    columns: exportController._getColumns(this._initialColumnWidthsByColumnIndex),
                    groupColumns: groupColumns,
                    items: this._selectedRowsOnly || exportController._selectionOnly ? exportController._getSelectedItems() : exportController._getAllItems(),
                    getVisibleIndex: exportController._columnsController.getVisibleIndex.bind(exportController._columnsController),
                    isHeadersVisible: exportController.option("showColumnHeaders"),
                    summaryTexts: exportController.option("summary.texts"),
                    customizeExportData: exportController.option("customizeExportData"),
                    rtlEnabled: exportController.option("rtlEnabled"),
                    wrapTextEnabled: (0, _type.isDefined)(excelWrapTextEnabled) ? excelWrapTextEnabled : !!exportController.option("wordWrapEnabled"),
                    customizeExcelCell: exportController.option("export.customizeExcelCell")
                }
            },
            hasCustomizeExcelCell: function() {
                return (0, _type.isDefined)(this._options.customizeExcelCell)
            },
            customizeExcelCell: function(e, cellSourceData) {
                if (this._options.customizeExcelCell) {
                    e.gridCell = cellSourceData;
                    if ((0, _type.isDefined)(this._exportController) && (0, _type.isDefined)(this._exportController.component)) {
                        e.component = this._exportController.component
                    }
                    this._options.customizeExcelCell(e)
                }
            },
            ctor: function(exportController, initialColumnWidthsByColumnIndex, selectedRowsOnly) {
                this._exportController = exportController;
                this._initialColumnWidthsByColumnIndex = initialColumnWidthsByColumnIndex;
                this._selectedRowsOnly = selectedRowsOnly
            },
            getStyles: function() {
                var wrapTextEnabled = this._options.wrapTextEnabled;
                var styles = ["center", "left", "right"].map(function(alignment) {
                    return {
                        bold: true,
                        alignment: alignment,
                        wrapText: true
                    }
                });
                this.getColumns().forEach(function(column) {
                    styles.push({
                        alignment: column.alignment || "left",
                        format: column.format,
                        wrapText: wrapTextEnabled,
                        dataType: column.dataType
                    })
                });
                styles.push({
                    bold: true,
                    wrapText: false,
                    alignment: (0, _position.getDefaultAlignment)(this._options.rtlEnabled)
                });
                return styles
            },
            _getTotalCellStyleId: function(cellIndex) {
                var alignment = this.getColumns()[cellIndex] && this.getColumns()[cellIndex].alignment || "right";
                return ["center", "left", "right"].indexOf(alignment)
            },
            getStyleId: function(rowIndex, cellIndex) {
                if (rowIndex < this.getHeaderRowCount()) {
                    return 0
                } else {
                    if (this.isTotalCell(rowIndex - this.getHeaderRowCount(), cellIndex)) {
                        return this._getTotalCellStyleId(cellIndex)
                    } else {
                        if (this.isGroupRow(rowIndex - this.getHeaderRowCount())) {
                            return DATA_STYLE_OFFSET + this.getColumns().length
                        } else {
                            return cellIndex + DATA_STYLE_OFFSET
                        }
                    }
                }
            },
            getColumns: function(getColumnsByAllRows) {
                var columns = this._options.columns;
                return getColumnsByAllRows ? columns : columns[columns.length - 1]
            },
            getRowsCount: function() {
                return this._options.items.length + this.getHeaderRowCount()
            },
            getHeaderRowCount: function() {
                if (this.isHeadersVisible()) {
                    return this._options.columns.length - 1
                }
                return 0
            },
            isGroupRow: function(rowIndex) {
                return rowIndex < this._options.items.length && "group" === this._options.items[rowIndex].rowType
            },
            getGroupLevel: function(rowIndex) {
                var item = this._options.items[rowIndex - this.getHeaderRowCount()];
                var groupIndex = item && item.groupIndex;
                if (item && "totalFooter" === item.rowType) {
                    return 0
                }
                return (0, _type.isDefined)(groupIndex) ? groupIndex : this._options.groupColumns.length
            },
            getCellType: function(rowIndex, cellIndex) {
                var columns = this.getColumns();
                if (rowIndex < this.getHeaderRowCount()) {
                    return "string"
                } else {
                    rowIndex -= this.getHeaderRowCount()
                }
                if (cellIndex < columns.length) {
                    var item = this._options.items.length && this._options.items[rowIndex];
                    var column = columns[cellIndex];
                    if (item && "data" === item.rowType) {
                        if (isFinite(item.values[this._correctCellIndex(cellIndex)]) && !(0, _type.isDefined)(column.customizeText)) {
                            return (0, _type.isDefined)(column.lookup) ? column.lookup.dataType : column.dataType
                        }
                    }
                    return "string"
                }
            },
            ready: function() {
                var that = this;
                that._initOptions();
                var options = that._options;
                return (0, _deferred.when)(options.items).done(function(items) {
                    options.customizeExportData && options.customizeExportData(that.getColumns(that.getHeaderRowCount() > 1), items);
                    options.items = items
                }).fail(function() {
                    options.items = []
                })
            },
            _convertFromGridGroupSummaryItems: function(gridGroupSummaryItems) {
                if ((0, _type.isDefined)(gridGroupSummaryItems) && gridGroupSummaryItems.length > 0) {
                    return gridGroupSummaryItems.map(function(item) {
                        return {
                            value: item.value,
                            name: item.name
                        }
                    })
                }
            },
            getCellData: function(rowIndex, cellIndex, isExcelJS) {
                var result = {
                    cellSourceData: {},
                    value: value
                };
                var column;
                var value;
                var columns = this.getColumns();
                var correctedCellIndex = this._correctCellIndex(cellIndex);
                if (rowIndex < this.getHeaderRowCount()) {
                    var columnsRow = this.getColumns(true)[rowIndex];
                    column = columnsRow[cellIndex];
                    result.cellSourceData.rowType = "header";
                    result.cellSourceData.column = column && column.gridColumn;
                    result.value = column && column.caption
                } else {
                    rowIndex -= this.getHeaderRowCount();
                    var item = this._options.items.length && this._options.items[rowIndex];
                    if (item) {
                        var itemValues = item.values;
                        result.cellSourceData.rowType = item.rowType;
                        result.cellSourceData.column = columns[cellIndex] && columns[cellIndex].gridColumn;
                        switch (item.rowType) {
                            case "groupFooter":
                            case "totalFooter":
                                if (correctedCellIndex < itemValues.length) {
                                    value = itemValues[correctedCellIndex];
                                    if ((0, _type.isDefined)(value)) {
                                        result.cellSourceData.value = value.value;
                                        result.cellSourceData.totalSummaryItemName = value.name;
                                        result.value = _uiData_grid2.default.getSummaryText(value, this._options.summaryTexts)
                                    } else {
                                        result.cellSourceData.value = void 0
                                    }
                                }
                                break;
                            case "group":
                                result.cellSourceData.groupIndex = item.groupIndex;
                                if (cellIndex < 1) {
                                    result.cellSourceData.column = this._options.groupColumns[item.groupIndex];
                                    result.cellSourceData.value = item.key[item.groupIndex];
                                    result.cellSourceData.groupSummaryItems = this._convertFromGridGroupSummaryItems(item.summaryCells[0]);
                                    result.value = this._getGroupValue(item)
                                } else {
                                    var summaryItems = item.values[correctedCellIndex];
                                    if (Array.isArray(summaryItems)) {
                                        result.cellSourceData.groupSummaryItems = this._convertFromGridGroupSummaryItems(summaryItems);
                                        value = "";
                                        for (var i = 0; i < summaryItems.length; i++) {
                                            value += (i > 0 ? isExcelJS ? "\n" : " \n " : "") + _uiData_grid2.default.getSummaryText(summaryItems[i], this._options.summaryTexts)
                                        }
                                        result.value = value
                                    } else {
                                        result.cellSourceData.value = void 0
                                    }
                                }
                                break;
                            default:
                                column = columns[cellIndex];
                                if (column) {
                                    var _value = itemValues[correctedCellIndex];
                                    var displayValue = _uiData_grid2.default.getDisplayValue(column, _value, item.data, item.rowType);
                                    if (!isFinite(displayValue) || (0, _type.isDefined)(column.customizeText)) {
                                        if (isExcelJS && (0, _type.isDefined)(column.customizeText) && column.customizeText === this._exportController._columnsController.getCustomizeTextByDataType("boolean")) {
                                            result.value = displayValue
                                        } else {
                                            result.value = _uiData_grid2.default.formatValue(displayValue, column)
                                        }
                                    } else {
                                        result.value = displayValue
                                    }
                                    result.cellSourceData.value = _value
                                }
                                result.cellSourceData.data = item.data
                        }
                    }
                }
                return result
            },
            isHeadersVisible: function() {
                return this._options.isHeadersVisible
            },
            isTotalCell: function(rowIndex, cellIndex) {
                var items = this._options.items;
                var item = items[rowIndex];
                var correctCellIndex = this._correctCellIndex(cellIndex);
                var isSummaryAlignByColumn = item.summaryCells && item.summaryCells[correctCellIndex] && item.summaryCells[correctCellIndex].length > 0 && item.summaryCells[correctCellIndex][0].alignByColumn;
                return item && "groupFooter" === item.rowType || "totalFooter" === item.rowType || isSummaryAlignByColumn
            },
            getCellMerging: function(rowIndex, cellIndex) {
                var columns = this._options.columns;
                var column = columns[rowIndex] && columns[rowIndex][cellIndex];
                return column ? {
                    colspan: (column.exportColspan || 1) - 1,
                    rowspan: (column.rowspan || 1) - 1
                } : {
                    colspan: 0,
                    rowspan: 0
                }
            },
            getFrozenArea: function() {
                var that = this;
                return {
                    x: 0,
                    y: that.getHeaderRowCount()
                }
            }
        });
        exports.ExportController = _uiData_grid2.default.ViewController.inherit({}).include(_uiGrid_core2.default).inherit({
            _getEmptyCell: function() {
                return {
                    caption: "",
                    colspan: 1,
                    rowspan: 1
                }
            },
            _updateColumnWidth: function(column, width) {
                column.width = width
            },
            _getColumns: function(initialColumnWidthsByColumnIndex) {
                var result = [];
                var i;
                var columns;
                var columnsController = this._columnsController;
                var rowCount = columnsController.getRowCount();
                for (i = 0; i <= rowCount; i++) {
                    var currentHeaderRow = [];
                    columns = columnsController.getVisibleColumns(i, true);
                    var columnWidthsByColumnIndex = void 0;
                    if (i === rowCount) {
                        if (this._updateLockCount) {
                            columnWidthsByColumnIndex = initialColumnWidthsByColumnIndex
                        } else {
                            var columnWidths = this._getColumnWidths(this._headersView, this._rowsView);
                            if (columnWidths && columnWidths.length) {
                                columnWidthsByColumnIndex = {};
                                for (var _i = 0; _i < columns.length; _i++) {
                                    columnWidthsByColumnIndex[columns[_i].index] = columnWidths[_i]
                                }
                            }
                        }
                    }
                    for (var j = 0; j < columns.length; j++) {
                        var column = (0, _extend.extend)({}, columns[j], {
                            dataType: "datetime" === columns[j].dataType ? "date" : columns[j].dataType,
                            gridColumn: columns[j]
                        });
                        if (this._needColumnExporting(column)) {
                            var currentColspan = this._calculateExportColspan(column);
                            if ((0, _type.isDefined)(currentColspan)) {
                                column.exportColspan = currentColspan
                            }
                            if (columnWidthsByColumnIndex) {
                                this._updateColumnWidth(column, columnWidthsByColumnIndex[column.index])
                            }
                            currentHeaderRow.push(column)
                        }
                    }
                    result.push(currentHeaderRow)
                }
                columns = result[rowCount];
                result = this._prepareItems(result.slice(0, -1));
                result.push(columns);
                return result
            },
            _calculateExportColspan: function(column) {
                var _this = this;
                if (!column.isBand) {
                    return
                }
                var childColumns = this._columnsController.getChildrenByBandColumn(column.index, true);
                if (!(0, _type.isDefined)(childColumns)) {
                    return
                }
                return childColumns.reduce(function(result, childColumn) {
                    if (_this._needColumnExporting(childColumn)) {
                        return result + (_this._calculateExportColspan(childColumn) || 1)
                    } else {
                        return result
                    }
                }, 0)
            },
            _needColumnExporting: function(column) {
                return !column.command && (column.allowExporting || void 0 === column.allowExporting)
            },
            _getFooterSummaryItems: function(summaryCells, isTotal) {
                var result = [];
                var estimatedItemsCount = 1;
                var i = 0;
                do {
                    var values = [];
                    for (var j = 0; j < summaryCells.length; j++) {
                        var summaryCell = summaryCells[j];
                        var itemsLength = summaryCell.length;
                        if (estimatedItemsCount < itemsLength) {
                            estimatedItemsCount = itemsLength
                        }
                        values.push(summaryCell[i])
                    }
                    result.push({
                        values: values,
                        rowType: isTotal ? "totalFooter" : "groupFooter"
                    })
                } while (i++ < estimatedItemsCount - 1);
                return result
            },
            _hasSummaryGroupFooters: function() {
                var groupItems = this.option("summary.groupItems");
                if ((0, _type.isDefined)(groupItems)) {
                    for (var i = 0; i < groupItems.length; i++) {
                        if (groupItems[i].showInGroupFooter) {
                            return true
                        }
                    }
                }
                return false
            },
            _getItemsWithSummaryGroupFooters: function(sourceItems) {
                var result = [];
                var beforeGroupFooterItems = [];
                var groupFooterItems = [];
                for (var i = 0; i < sourceItems.length; i++) {
                    var item = sourceItems[i];
                    if ("groupFooter" === item.rowType) {
                        groupFooterItems = this._getFooterSummaryItems(item.summaryCells);
                        result = result.concat(beforeGroupFooterItems, groupFooterItems);
                        beforeGroupFooterItems = []
                    } else {
                        beforeGroupFooterItems.push(item)
                    }
                }
                return result.length ? result : beforeGroupFooterItems
            },
            _updateGroupValuesWithSummaryByColumn: function(sourceItems) {
                var summaryValues = [];
                for (var i = 0; i < sourceItems.length; i++) {
                    var item = sourceItems[i];
                    var summaryCells = item.summaryCells;
                    if ("group" === item.rowType && summaryCells && summaryCells.length > 1) {
                        var groupColumnCount = item.values.length;
                        for (var j = 1; j < summaryCells.length; j++) {
                            for (var k = 0; k < summaryCells[j].length; k++) {
                                var summaryItem = summaryCells[j][k];
                                if (summaryItem && summaryItem.alignByColumn) {
                                    if (!Array.isArray(summaryValues[j - groupColumnCount])) {
                                        summaryValues[j - groupColumnCount] = []
                                    }
                                    summaryValues[j - groupColumnCount].push(summaryItem)
                                }
                            }
                        }
                        if (summaryValues.length > 0) {
                            _array2.default.merge(item.values, summaryValues);
                            summaryValues = []
                        }
                    }
                }
            },
            _processUnExportedItems: function(items) {
                var columns = this._columnsController.getVisibleColumns(null, true);
                var groupColumns = this._columnsController.getGroupColumns();
                var values;
                var summaryCells;
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    values = [];
                    summaryCells = [];
                    for (var j = 0; j < columns.length; j++) {
                        var column = columns[j];
                        if (this._needColumnExporting(column)) {
                            if (item.values) {
                                if ("group" === item.rowType && !values.length) {
                                    values.push(item.key[item.groupIndex])
                                } else {
                                    values.push(item.values[j])
                                }
                            }
                            if (item.summaryCells) {
                                if ("group" === item.rowType && !summaryCells.length) {
                                    summaryCells.push(item.summaryCells[j - groupColumns.length + item.groupIndex])
                                } else {
                                    summaryCells.push(item.summaryCells[j])
                                }
                            }
                        }
                    }
                    if (values.length) {
                        item.values = values
                    }
                    if (summaryCells.length) {
                        item.summaryCells = summaryCells
                    }
                }
            },
            _getAllItems: function(data) {
                var that = this;
                var d = new _deferred.Deferred;
                var dataController = this.getController("data");
                var footerItems = dataController.footerItems();
                var totalItem = footerItems.length && footerItems[0];
                var summaryTotalItems = that.option("summary.totalItems");
                var summaryCells;
                (0, _deferred.when)(data).done(function(data) {
                    dataController.loadAll(data).done(function(sourceItems, totalAggregates) {
                        that._updateGroupValuesWithSummaryByColumn(sourceItems);
                        if (that._hasSummaryGroupFooters()) {
                            sourceItems = that._getItemsWithSummaryGroupFooters(sourceItems)
                        }
                        summaryCells = totalItem && totalItem.summaryCells;
                        if ((0, _type.isDefined)(totalAggregates) && summaryTotalItems) {
                            summaryCells = dataController._getSummaryCells(summaryTotalItems, totalAggregates)
                        }
                        var summaryItems = totalItem && that._getFooterSummaryItems(summaryCells, true);
                        if (summaryItems) {
                            sourceItems = sourceItems.concat(summaryItems)
                        }
                        that._processUnExportedItems(sourceItems);
                        d.resolve(sourceItems)
                    }).fail(d.reject)
                }).fail(d.reject);
                return d
            },
            _getSelectedItems: function() {
                var selectionController = this.getController("selection");
                var selectedRowData = selectionController.getSelectedRowsData();
                return this._getAllItems(selectedRowData)
            },
            _getColumnWidths: function(headersView, rowsView) {
                return headersView && headersView.isVisible() ? headersView.getColumnWidths() : rowsView.getColumnWidths()
            },
            init: function() {
                this._columnsController = this.getController("columns");
                this._rowsView = this.getView("rowsView");
                this._headersView = this.getView("columnHeadersView");
                this.createAction("onExporting", {
                    excludeValidators: ["disabled", "readOnly"]
                });
                this.createAction("onExported", {
                    excludeValidators: ["disabled", "readOnly"]
                });
                this.createAction("onFileSaving", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            callbackNames: function() {
                return ["selectionOnlyChanged"]
            },
            getExportFormat: function() {
                return ["EXCEL"]
            },
            getDataProvider: function(selectedRowsOnly) {
                var columnWidths = this._getColumnWidths(this._headersView, this._rowsView);
                var initialColumnWidthsByColumnIndex;
                if (columnWidths && columnWidths.length) {
                    initialColumnWidthsByColumnIndex = {};
                    var columnsLastRowVisibleColumns = this._columnsController.getVisibleColumns(this._columnsController.getRowCount(), true);
                    for (var i = 0; i < columnsLastRowVisibleColumns.length; i++) {
                        initialColumnWidthsByColumnIndex[columnsLastRowVisibleColumns[i].index] = columnWidths[i]
                    }
                }
                return new exports.DataProvider(this, initialColumnWidthsByColumnIndex, selectedRowsOnly)
            },
            exportToExcel: function(selectionOnly) {
                var that = this;
                that._selectionOnly = selectionOnly;
                (0, _exporter.export)(that.component.getDataProvider(), {
                    fileName: that.option("export.fileName"),
                    proxyUrl: that.option("export.proxyUrl"),
                    format: "EXCEL",
                    autoFilterEnabled: !!that.option("export.excelFilterEnabled"),
                    rtlEnabled: that.option("rtlEnabled"),
                    ignoreErrors: that.option("export.ignoreExcelErrors"),
                    exportingAction: that.getAction("onExporting"),
                    exportedAction: that.getAction("onExported"),
                    fileSavingAction: that.getAction("onFileSaving")
                }, _exporter.excel.getData)
            },
            publicMethods: function() {
                return ["getDataProvider", "getExportFormat", "exportToExcel"]
            },
            selectionOnly: function(value) {
                if ((0, _type.isDefined)(value)) {
                    this._isSelectedRows = value;
                    this.selectionOnlyChanged.fire()
                } else {
                    return this._isSelectedRows
                }
            }
        });
        _uiData_grid2.default.registerModule("export", {
            defaultOptions: function() {
                return {
                    "export": {
                        enabled: false,
                        fileName: "DataGrid",
                        excelFilterEnabled: false,
                        excelWrapTextEnabled: void 0,
                        proxyUrl: void 0,
                        allowExportSelectedData: false,
                        ignoreExcelErrors: true,
                        texts: {
                            exportTo: _message2.default.format("dxDataGrid-exportTo"),
                            exportAll: _message2.default.format("dxDataGrid-exportAll"),
                            exportSelectedRows: _message2.default.format("dxDataGrid-exportSelectedRows")
                        }
                    }
                }
            },
            controllers: {
                "export": exports.ExportController
            },
            extenders: {
                controllers: {
                    editing: {
                        callbackNames: function() {
                            var callbackList = this.callBase();
                            return (0, _type.isDefined)(callbackList) ? callbackList.push("editingChanged") : ["editingChanged"]
                        },
                        _updateEditButtons: function() {
                            this.callBase();
                            this.editingChanged.fire(this.hasChanges())
                        }
                    }
                },
                views: {
                    headerPanel: {
                        _getToolbarItems: function() {
                            var items = this.callBase();
                            return this._appendExportItems(items)
                        },
                        _appendExportItems: function(items) {
                            var that = this;
                            var exportOptions = that.option("export");
                            if (exportOptions.enabled) {
                                var exportItems = [];
                                if (exportOptions.allowExportSelectedData) {
                                    exportItems.push({
                                        template: function(data, index, container) {
                                            var $container = (0, _renderer2.default)(container);
                                            that._renderButton(data, $container);
                                            that._renderExportMenu($container)
                                        },
                                        menuItemTemplate: function(data, index, container) {
                                            that._renderList(data, (0, _renderer2.default)(container))
                                        },
                                        name: "exportButton",
                                        allowExportSelected: true,
                                        location: "after",
                                        locateInMenu: "auto",
                                        sortIndex: 30
                                    })
                                } else {
                                    exportItems.push({
                                        template: function(data, index, container) {
                                            that._renderButton(data, (0, _renderer2.default)(container))
                                        },
                                        menuItemTemplate: function(data, index, container) {
                                            that._renderButton(data, (0, _renderer2.default)(container), true)
                                        },
                                        name: "exportButton",
                                        location: "after",
                                        locateInMenu: "auto",
                                        sortIndex: 30
                                    })
                                }
                                items = items.concat(exportItems);
                                that._correctItemsPosition(items)
                            }
                            return items
                        },
                        _renderButton: function(data, $container, withText) {
                            var that = this;
                            var buttonOptions = that._getButtonOptions(data.allowExportSelected);
                            var $buttonContainer = that._getButtonContainer().addClass(DATAGRID_EXPORT_BUTTON_CLASS).appendTo($container);
                            if (withText) {
                                var wrapperNode = (0, _renderer2.default)("<div>").addClass(TOOLBAR_ITEM_AUTO_HIDE_CLASS);
                                $container.wrapInner(wrapperNode).parent().addClass("dx-toolbar-menu-action dx-toolbar-menu-button " + TOOLBAR_HIDDEN_BUTTON_CLASS);
                                buttonOptions.text = buttonOptions.hint
                            }
                            that._createComponent($buttonContainer, _button2.default, buttonOptions)
                        },
                        _renderList: function(data, $container) {
                            var that = this;
                            var texts = that.option("export.texts");
                            var items = [{
                                template: function(data, index, container) {
                                    that._renderFakeButton(data, (0, _renderer2.default)(container), DATAGRID_EXPORT_EXCEL_ICON)
                                },
                                text: texts.exportAll
                            }, {
                                template: function(data, index, container) {
                                    that._renderFakeButton(data, (0, _renderer2.default)(container), DATAGRID_EXPORT_SELECTED_ICON)
                                },
                                text: texts.exportSelectedRows,
                                exportSelected: true
                            }];
                            that._createComponent($container, _list2.default, {
                                items: items,
                                onItemClick: function(e) {
                                    that._exportController.exportToExcel(e.itemData.exportSelected)
                                },
                                scrollingEnabled: false
                            })
                        },
                        _renderFakeButton: function(data, $container, iconName) {
                            var $icon = (0, _renderer2.default)("<div>").addClass("dx-icon dx-icon-" + iconName);
                            var $text = (0, _renderer2.default)("<span>").addClass("dx-button-text").text(data.text);
                            var $content = (0, _renderer2.default)("<div>").addClass("dx-button-content").append($icon).append($text);
                            var $button = (0, _renderer2.default)("<div>").addClass(BUTTON_CLASS + " dx-button-has-text dx-button-has-icon dx-datagrid-toolbar-button").append($content);
                            var $toolbarItem = (0, _renderer2.default)("<div>").addClass(TOOLBAR_ITEM_AUTO_HIDE_CLASS).append($button);
                            $container.append($toolbarItem).parent().addClass("dx-toolbar-menu-custom " + TOOLBAR_HIDDEN_BUTTON_CLASS)
                        },
                        _correctItemsPosition: function(items) {
                            items.sort(function(itemA, itemB) {
                                return itemA.sortIndex - itemB.sortIndex
                            })
                        },
                        _renderExportMenu: function($buttonContainer) {
                            var that = this;
                            var $button = $buttonContainer.find("." + BUTTON_CLASS);
                            var texts = that.option("export.texts");
                            var menuItems = [{
                                text: texts.exportAll,
                                icon: DATAGRID_EXPORT_EXCEL_ICON
                            }, {
                                text: texts.exportSelectedRows,
                                exportSelected: true,
                                icon: DATAGRID_EXPORT_SELECTED_ICON
                            }];
                            var $menuContainer = (0, _renderer2.default)("<div>").appendTo($buttonContainer);
                            that._contextMenu = that._createComponent($menuContainer, _context_menu2.default, {
                                showEvent: "dxclick",
                                items: menuItems,
                                cssClass: DATAGRID_EXPORT_MENU_CLASS,
                                onItemClick: function(e) {
                                    that._exportController.exportToExcel(e.itemData.exportSelected)
                                },
                                target: $button,
                                position: {
                                    at: "left bottom",
                                    my: "left top",
                                    offset: "0 3",
                                    collision: "fit",
                                    boundary: that._$parent,
                                    boundaryOffset: "1 1"
                                }
                            })
                        },
                        _isExportButtonVisible: function() {
                            return this.option("export.enabled")
                        },
                        _getButtonOptions: function(allowExportSelected) {
                            var that = this;
                            var texts = that.option("export.texts");
                            var options;
                            if (allowExportSelected) {
                                options = {
                                    hint: texts.exportTo,
                                    icon: DATAGRID_EXPORT_ICON
                                }
                            } else {
                                options = {
                                    hint: texts.exportAll,
                                    icon: DATAGRID_EXPORT_EXCEL_BUTTON_ICON,
                                    onClick: function() {
                                        that._exportController.exportToExcel()
                                    }
                                }
                            }
                            return options
                        },
                        optionChanged: function(args) {
                            this.callBase(args);
                            if ("export" === args.name) {
                                args.handled = true;
                                this._invalidate()
                            }
                        },
                        init: function() {
                            var that = this;
                            this.callBase();
                            this._exportController = this.getController("export");
                            this._editingController = this.getController("editing");
                            this._editingController.editingChanged.add(function(hasChanges) {
                                that.setToolbarItemDisabled("exportButton", hasChanges)
                            })
                        },
                        isVisible: function() {
                            return this.callBase() || this._isExportButtonVisible()
                        }
                    }
                }
            }
        })
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.focus.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.focus */ 391);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiData_grid3 = __webpack_require__( /*! ./ui.data_grid.utils */ 246);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
        _uiData_grid2.default.registerModule("focus", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    data: {
                        changeRowExpand: function(path) {
                            if (this.option("focusedRowEnabled") && Array.isArray(path) && this.isRowExpanded(path)) {
                                if (this._isFocusedRowInsideGroup(path)) {
                                    this.option("focusedRowKey", path)
                                }
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _isFocusedRowInsideGroup: function(path) {
                            var columnsController = this.getController("columns");
                            var focusedRowKey = this.option("focusedRowKey");
                            var rowIndex = this.getRowIndexByKey(focusedRowKey);
                            var focusedRow = rowIndex >= 0 && this.getVisibleRows()[rowIndex];
                            var groups = columnsController.getGroupDataSourceParameters(true);
                            if (focusedRow) {
                                for (var i = 0; i < path.length; ++i) {
                                    var getter = (0, _data.compileGetter)(groups[i] && groups[i].selector);
                                    if (getter(focusedRow.data) !== path[i]) {
                                        return false
                                    }
                                }
                            }
                            return true
                        },
                        _getGroupPath: function(group) {
                            var groupPath = [group.key];
                            var items = group.items;
                            while (items && items[0]) {
                                var item = items[0];
                                if (void 0 !== item.key) {
                                    groupPath.push(item.key)
                                }
                                items = item.items
                            }
                            return groupPath
                        },
                        _expandGroupByPath: function(that, groupPath, level) {
                            var d = new _deferred.Deferred;
                            level++;
                            that.expandRow(groupPath.slice(0, level)).done(function() {
                                if (level === groupPath.length) {
                                    d.resolve()
                                } else {
                                    that._expandGroupByPath(that, groupPath, level).done(d.resolve).fail(d.reject)
                                }
                            }).fail(d.reject);
                            return d.promise()
                        },
                        _calculateGlobalRowIndexByGroupedData: function(key) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var filter = that._generateFilterByKey(key);
                            var deferred = new _deferred.Deferred;
                            var isGroupKey = Array.isArray(key);
                            var group = dataSource.group();
                            if (isGroupKey) {
                                return deferred.resolve(-1).promise()
                            }
                            if (!dataSource._grouping._updatePagingOptions) {
                                that._calculateGlobalRowIndexByFlatData(key, null, true).done(deferred.resolve).fail(deferred.reject);
                                return deferred
                            }
                            dataSource.load({
                                filter: that._concatWithCombinedFilter(filter),
                                group: group
                            }).done(function(data) {
                                if (!data || 0 === data.length || !(0, _type.isDefined)(data[0].key) || data[0].key === -1) {
                                    return deferred.resolve(-1).promise()
                                }
                                var groupPath = that._getGroupPath(data[0]);
                                that._expandGroupByPath(that, groupPath, 0).done(function() {
                                    that._calculateExpandedRowGlobalIndex(deferred, key, groupPath, group)
                                }).fail(deferred.reject)
                            }).fail(deferred.reject);
                            return deferred.promise()
                        },
                        _calculateExpandedRowGlobalIndex: function(deferred, key, groupPath, group) {
                            var groupFilter = (0, _uiData_grid3.createGroupFilter)(groupPath, {
                                group: group
                            });
                            var dataSource = this._dataSource;
                            var scrollingMode = this.option("scrolling.mode");
                            var isVirtualScrolling = "virtual" === scrollingMode || "infinite" === scrollingMode;
                            var pageSize = dataSource.pageSize();
                            var groupOffset;
                            dataSource._grouping._updatePagingOptions({
                                skip: 0,
                                take: MAX_SAFE_INTEGER
                            }, function(groupInfo, totalOffset) {
                                if ((0, _common.equalByValue)(groupInfo.path, groupPath)) {
                                    groupOffset = totalOffset
                                }
                            });
                            this._calculateGlobalRowIndexByFlatData(key, groupFilter).done(function(dataOffset) {
                                var count;
                                var groupContinuationCount;
                                if (dataOffset < 0) {
                                    deferred.resolve(-1);
                                    return
                                }
                                var currentPageOffset = groupOffset % pageSize || pageSize;
                                count = currentPageOffset + dataOffset - groupPath.length;
                                if (isVirtualScrolling) {
                                    groupContinuationCount = 0
                                } else {
                                    groupContinuationCount = Math.floor(count / (pageSize - groupPath.length)) * groupPath.length
                                }
                                count = groupOffset + dataOffset + groupContinuationCount;
                                deferred.resolve(count)
                            }).fail(deferred.reject)
                        }
                    }
                }
            }
        }))
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/data_grid/ui.data_grid.row_dragging.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiData_grid = __webpack_require__( /*! ./ui.data_grid.core */ 25);
        var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.row_dragging */ 392);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiData_grid2.default.registerModule("rowDragging", _uiGrid_core2.default)
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.base */ 675);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        __webpack_require__( /*! ./ui.tree_list.state_storing */ 685);
        __webpack_require__( /*! ./ui.tree_list.column_chooser */ 686);
        __webpack_require__( /*! ./ui.tree_list.master_detail */ 687);
        __webpack_require__( /*! ./ui.tree_list.editing */ 688);
        __webpack_require__( /*! ./ui.tree_list.validating */ 690);
        __webpack_require__( /*! ./ui.tree_list.virtual_scrolling */ 691);
        __webpack_require__( /*! ./ui.tree_list.filter_row */ 692);
        __webpack_require__( /*! ./ui.tree_list.header_filter */ 693);
        __webpack_require__( /*! ./ui.tree_list.filter_sync */ 694);
        __webpack_require__( /*! ./ui.tree_list.filter_builder */ 695);
        __webpack_require__( /*! ./ui.tree_list.filter_panel */ 696);
        __webpack_require__( /*! ./ui.tree_list.pager */ 697);
        __webpack_require__( /*! ./ui.tree_list.columns_resizing_reordering */ 698);
        __webpack_require__( /*! ./ui.tree_list.column_fixing */ 699);
        __webpack_require__( /*! ./ui.tree_list.adaptivity */ 700);
        __webpack_require__( /*! ./ui.tree_list.selection */ 701);
        __webpack_require__( /*! ./ui.tree_list.search */ 702);
        __webpack_require__( /*! ./ui.tree_list.keyboard_navigation */ 703);
        __webpack_require__( /*! ./ui.tree_list.virtual_columns */ 704);
        __webpack_require__( /*! ./ui.tree_list.focus */ 705);
        __webpack_require__( /*! ./ui.tree_list.row_dragging */ 706);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _uiTree_list2.default
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.base.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        __webpack_require__( /*! ./ui.tree_list.column_headers */ 676);
        __webpack_require__( /*! ./ui.tree_list.columns_controller */ 677);
        __webpack_require__( /*! ./ui.tree_list.data_controller */ 678);
        __webpack_require__( /*! ./ui.tree_list.sorting */ 679);
        __webpack_require__( /*! ./ui.tree_list.rows */ 680);
        __webpack_require__( /*! ./ui.tree_list.context_menu */ 681);
        __webpack_require__( /*! ./ui.tree_list.error_handling */ 682);
        __webpack_require__( /*! ./ui.tree_list.grid_view */ 683);
        __webpack_require__( /*! ./ui.tree_list.header_panel */ 684);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var callModuleItemsMethod = _uiTree_list2.default.callModuleItemsMethod;
        var DATAGRID_ROW_SELECTOR = ".dx-row";
        var TREELIST_CLASS = "dx-treelist";
        _uiTree_list2.default.registerModulesOrder(["stateStoring", "columns", "selection", "editorFactory", "columnChooser", "editing", "grouping", "masterDetail", "validating", "adaptivity", "data", "virtualScrolling", "columnHeaders", "filterRow", "headerPanel", "headerFilter", "sorting", "search", "rows", "pager", "columnsResizingReordering", "contextMenu", "keyboardNavigation", "errorHandling", "summary", "columnFixing", "export", "gridView"]);
        var TreeList = _ui2.default.inherit({
            _activeStateUnit: DATAGRID_ROW_SELECTOR,
            _getDefaultOptions: function() {
                var that = this;
                var result = that.callBase();
                (0, _iterator.each)(_uiTree_list2.default.modules, function() {
                    if (_type2.default.isFunction(this.defaultOptions)) {
                        (0, _extend.extend)(true, result, this.defaultOptions())
                    }
                });
                return result
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        showRowLines: true,
                        showColumnLines: false,
                        headerFilter: {
                            height: 315
                        },
                        editing: {
                            useIcons: true
                        }
                    }
                }])
            },
            _init: function() {
                var that = this;
                that.callBase();
                _uiTree_list2.default.processModules(that, _uiTree_list2.default);
                callModuleItemsMethod(that, "init")
            },
            _clean: _common2.default.noop,
            _optionChanged: function(args) {
                var that = this;
                callModuleItemsMethod(that, "optionChanged", [args]);
                if (!args.handled) {
                    that.callBase(args)
                }
            },
            _dimensionChanged: function() {
                this.updateDimensions(true)
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this.updateDimensions()
                }
            },
            _initMarkup: function() {
                this.callBase.apply(this, arguments);
                this.$element().addClass(TREELIST_CLASS);
                this.getView("gridView").render(this.$element())
            },
            _renderContentImpl: function() {
                this.getView("gridView").update()
            },
            _renderContent: function() {
                var that = this;
                _common2.default.deferRender(function() {
                    that._renderContentImpl()
                })
            },
            _dispose: function() {
                var that = this;
                that.callBase();
                callModuleItemsMethod(that, "dispose")
            },
            isReady: function() {
                return this.getController("data").isReady()
            },
            beginUpdate: function() {
                var that = this;
                that.callBase();
                callModuleItemsMethod(that, "beginUpdate")
            },
            endUpdate: function() {
                var that = this;
                callModuleItemsMethod(that, "endUpdate");
                that.callBase()
            },
            getController: function(name) {
                return this._controllers[name]
            },
            getView: function(name) {
                return this._views[name]
            },
            focus: function(element) {
                this.callBase();
                if (_type2.default.isDefined(element)) {
                    this.getController("keyboardNavigation").focus(element)
                }
            }
        });
        TreeList.registerModule = _uiTree_list2.default.registerModule.bind(_uiTree_list2.default);
        (0, _component_registrator2.default)("dxTreeList", TreeList);
        module.exports = TreeList
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.column_headers.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_headers */ 347);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("columnHeaders", _uiGrid_core2.default)
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.columns_controller.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.columns_controller */ 349);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.ColumnsController = _uiGrid_core2.default.controllers.columns.inherit(function() {
            return {
                _getFirstItems: function(dataSourceAdapter) {
                    return this.callBase(dataSourceAdapter).map(function(node) {
                        return node.data
                    })
                },
                getFirstDataColumnIndex: function() {
                    var visibleColumns = this.getVisibleColumns();
                    var visibleColumnsLength = visibleColumns.length;
                    var firstDataColumnIndex = 0;
                    for (var i = 0; i <= visibleColumnsLength - 1; i++) {
                        if (!(0, _type.isDefined)(visibleColumns[i].command)) {
                            firstDataColumnIndex = visibleColumns[i].index;
                            break
                        }
                    }
                    return firstDataColumnIndex
                }
            }
        }());
        _uiTree_list2.default.registerModule("columns", {
            defaultOptions: _uiGrid_core2.default.defaultOptions,
            controllers: {
                columns: exports.ColumnsController
            }
        })
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.data_controller.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiTree_list3 = __webpack_require__( /*! ./ui.tree_list.data_source_adapter */ 394);
        var _uiTree_list4 = _interopRequireDefault(_uiTree_list3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.data_controller */ 351);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.DataController = _uiGrid_core2.default.controllers.data.inherit(function() {
            return {
                _getDataSourceAdapter: function() {
                    return _uiTree_list4.default
                },
                _getNodeLevel: function(node) {
                    var level = -1;
                    while (node.parent) {
                        if (node.visible) {
                            level++
                        }
                        node = node.parent
                    }
                    return level
                },
                _generateDataItem: function(node, options) {
                    return {
                        rowType: "data",
                        node: node,
                        key: node.key,
                        data: node.data,
                        isExpanded: this.isRowExpanded(node.key, options),
                        level: this._getNodeLevel(node)
                    }
                },
                _loadOnOptionChange: function() {
                    this._dataSource.load()
                },
                _isItemEquals: function(item1, item2) {
                    if (!this.callBase.apply(this, arguments)) {
                        return false
                    }
                    if (item1.node && item2.node && item1.node.hasChildren !== item2.node.hasChildren) {
                        return false
                    }
                    if (item1.level !== item2.level) {
                        return false
                    }
                    return true
                },
                init: function() {
                    this.createAction("onRowExpanding");
                    this.createAction("onRowExpanded");
                    this.createAction("onRowCollapsing");
                    this.createAction("onRowCollapsed");
                    this.callBase.apply(this, arguments)
                },
                keyOf: function(data) {
                    var dataSource = this._dataSource;
                    if (dataSource) {
                        return dataSource.keyOf(data)
                    }
                },
                key: function() {
                    var dataSource = this._dataSource;
                    if (dataSource) {
                        return dataSource.getKeyExpr()
                    }
                },
                publicMethods: function() {
                    return this.callBase().concat(["expandRow", "collapseRow", "isRowExpanded", "getRootNode", "getNodeByKey", "loadDescendants", "forEachNode"])
                },
                changeRowExpand: function(key) {
                    if (this._dataSource) {
                        var that = this;
                        var args = {
                            key: key
                        };
                        var isExpanded = this.isRowExpanded(key);
                        that.executeAction(isExpanded ? "onRowCollapsing" : "onRowExpanding", args);
                        if (!args.cancel) {
                            return that._dataSource.changeRowExpand(key).done(function() {
                                that.executeAction(isExpanded ? "onRowCollapsed" : "onRowExpanded", args)
                            })
                        }
                    }
                    return (new _deferred.Deferred).resolve()
                },
                isRowExpanded: function(key, cache) {
                    return this._dataSource && this._dataSource.isRowExpanded(key, cache)
                },
                expandRow: function(key) {
                    if (!this.isRowExpanded(key)) {
                        return this.changeRowExpand(key)
                    }
                    return (new _deferred.Deferred).resolve()
                },
                collapseRow: function(key) {
                    if (this.isRowExpanded(key)) {
                        return this.changeRowExpand(key)
                    }
                    return (new _deferred.Deferred).resolve()
                },
                getRootNode: function() {
                    return this._dataSource && this._dataSource.getRootNode()
                },
                optionChanged: function(args) {
                    switch (args.name) {
                        case "rootValue":
                        case "parentIdExpr":
                        case "itemsExpr":
                        case "filterMode":
                        case "expandNodesOnFiltering":
                        case "autoExpandAll":
                        case "hasItemsExpr":
                        case "dataStructure":
                            this._columnsController.reset();
                            this._items = [];
                            this._refreshDataSource();
                            args.handled = true;
                            break;
                        case "expandedRowKeys":
                        case "onNodesInitialized":
                            if (this._dataSource && !this._dataSource._isNodesInitializing && !(0, _common.equalByValue)(args.value, args.previousValue)) {
                                this._loadOnOptionChange()
                            }
                            args.handled = true;
                            break;
                        case "maxFilterLengthInRequest":
                            args.handled = true;
                            break;
                        default:
                            this.callBase(args)
                    }
                },
                getNodeByKey: function(key) {
                    if (!this._dataSource) {
                        return
                    }
                    return this._dataSource.getNodeByKey(key)
                },
                getChildNodeKeys: function(parentKey) {
                    if (!this._dataSource) {
                        return
                    }
                    return this._dataSource.getChildNodeKeys(parentKey)
                },
                loadDescendants: function(keys, childrenOnly) {
                    if (!this._dataSource) {
                        return
                    }
                    return this._dataSource.loadDescendants(keys, childrenOnly)
                },
                forEachNode: function() {
                    this._dataSource.forEachNode.apply(this, arguments)
                }
            }
        }());
        _uiTree_list2.default.registerModule("data", {
            defaultOptions: function() {
                return (0, _extend.extend)({}, _uiGrid_core2.default.defaultOptions(), {
                    itemsExpr: "items",
                    parentIdExpr: "parentId",
                    rootValue: 0,
                    dataStructure: "plain",
                    expandedRowKeys: [],
                    filterMode: "withAncestors",
                    expandNodesOnFiltering: true,
                    autoExpandAll: false,
                    onNodesInitialized: null,
                    maxFilterLengthInRequest: 1500,
                    paging: {
                        enabled: false
                    }
                })
            },
            controllers: {
                data: exports.DataController
            }
        })
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.sorting.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.sorting */ 352);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("sorting", _uiGrid_core2.default)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.rows.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.rows */ 354);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TREELIST_TEXT_CONTENT = "dx-treelist-text-content";
        var TREELIST_EXPAND_ICON_CONTAINER_CLASS = "dx-treelist-icon-container";
        var TREELIST_CELL_EXPANDABLE_CLASS = "dx-treelist-cell-expandable";
        var TREELIST_EMPTY_SPACE = "dx-treelist-empty-space";
        var TREELIST_EXPANDED_CLASS = "dx-treelist-expanded";
        var TREELIST_COLLAPSED_CLASS = "dx-treelist-collapsed";
        exports.RowsView = _uiGrid_core2.default.views.rowsView.inherit(function() {
            var createCellContent = function($container) {
                return (0, _renderer2.default)("<div>").addClass(TREELIST_TEXT_CONTENT).appendTo($container)
            };
            var createIcon = function(hasIcon, isExpanded) {
                var $iconElement = (0, _renderer2.default)("<div>").addClass(TREELIST_EMPTY_SPACE);
                if (hasIcon) {
                    $iconElement.toggleClass(TREELIST_EXPANDED_CLASS, isExpanded).toggleClass(TREELIST_COLLAPSED_CLASS, !isExpanded).append((0, _renderer2.default)("<span>"))
                }
                return $iconElement
            };
            return {
                _renderIconContainer: function($container, options) {
                    var _this = this;
                    var $iconContainer = (0, _renderer2.default)("<div>").addClass(TREELIST_EXPAND_ICON_CONTAINER_CLASS).appendTo($container);
                    options.watch && options.watch(function() {
                        return [options.row.level, options.row.isExpanded, options.row.node.hasChildren]
                    }, function() {
                        $iconContainer.empty();
                        _this._renderIcons($iconContainer, options)
                    });
                    $container.addClass(TREELIST_CELL_EXPANDABLE_CLASS);
                    return this._renderIcons($iconContainer, options)
                },
                _renderIcons: function($iconContainer, options) {
                    var row = options.row;
                    var level = row.level;
                    for (var i = 0; i <= level; i++) {
                        $iconContainer.append(createIcon(i === level && row.node.hasChildren, row.isExpanded))
                    }
                    return $iconContainer
                },
                _renderCellCommandContent: function(container, model) {
                    this._renderIconContainer(container, model);
                    return true
                },
                _processTemplate: function(template, options) {
                    var that = this;
                    var resultTemplate;
                    var renderingTemplate = this.callBase(template);
                    var firstDataColumnIndex = that._columnsController.getFirstDataColumnIndex();
                    if (renderingTemplate && options.column.index === firstDataColumnIndex) {
                        resultTemplate = {
                            render: function(options) {
                                var $container = options.container;
                                if (that._renderCellCommandContent($container, options.model)) {
                                    options.container = createCellContent($container)
                                }
                                renderingTemplate.render(options)
                            }
                        }
                    } else {
                        resultTemplate = renderingTemplate
                    }
                    return resultTemplate
                },
                _updateCell: function($cell, options) {
                    $cell = $cell.hasClass(TREELIST_TEXT_CONTENT) ? $cell.parent() : $cell;
                    this.callBase($cell, options)
                },
                _rowClick: function(e) {
                    var dataController = this._dataController;
                    var $targetElement = (0, _renderer2.default)(e.event.target);
                    var isExpandIcon = this.isExpandIcon($targetElement);
                    var item = dataController && dataController.items()[e.rowIndex];
                    if (isExpandIcon && item) {
                        dataController.changeRowExpand(item.key)
                    }
                    this.callBase(e)
                },
                _createRow: function(row) {
                    var node = row && row.node;
                    var $rowElement = this.callBase.apply(this, arguments);
                    if (node) {
                        this.setAria("level", row.level, $rowElement);
                        if (node.hasChildren) {
                            this.setAria("expanded", row.isExpanded, $rowElement)
                        }
                    }
                    return $rowElement
                },
                isExpandIcon: function($targetElement) {
                    return !!$targetElement.closest("." + TREELIST_EXPANDED_CLASS + ", ." + TREELIST_COLLAPSED_CLASS).length
                }
            }
        }());
        _uiTree_list2.default.registerModule("rows", {
            defaultOptions: _uiGrid_core2.default.defaultOptions,
            views: {
                rowsView: exports.RowsView
            }
        })
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.context_menu.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.context_menu */ 355);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("contextMenu", _uiGrid_core2.default)
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.error_handling.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.error_handling */ 356);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("errorHandling", _uiGrid_core2.default)
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.grid_view.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.grid_view */ 357);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var GridView = _uiGrid_core2.default.views.gridView.inherit(function() {
            return {
                _getWidgetAriaLabel: function() {
                    return "dxTreeList-ariaTreeList"
                },
                _getTableRoleName: function() {
                    return "treegrid"
                }
            }
        }());
        _uiTree_list2.default.registerModule("gridView", {
            defaultOptions: _uiGrid_core2.default.defaultOptions,
            controllers: _uiGrid_core2.default.controllers,
            views: {
                gridView: GridView
            },
            extenders: {
                controllers: {
                    resizing: {
                        _toggleBestFitMode: function(isBestFit) {
                            this.callBase(isBestFit);
                            if (!this.option("legacyRendering")) {
                                var $rowsTable = this._rowsView._getTableElement();
                                $rowsTable.find(".dx-treelist-cell-expandable").toggleClass(this.addWidgetPrefix("best-fit"), isBestFit)
                            }
                        }
                    }
                }
            }
        })
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.header_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.header_panel */ 358);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("headerPanel", _uiGrid_core2.default)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.state_storing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.state_storing */ 359);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var origApplyState = _uiGrid_core2.default.extenders.controllers.stateStoring.applyState;
        _uiTree_list2.default.registerModule("stateStoring", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    stateStoring: {
                        applyState: function(state) {
                            origApplyState.apply(this, arguments);
                            if (Object.prototype.hasOwnProperty.call(state, "expandedRowKeys")) {
                                this.option("expandedRowKeys", state.expandedRowKeys && state.expandedRowKeys.slice())
                            }
                        }
                    },
                    data: {
                        getUserState: function() {
                            var state = this.callBase.apply(this, arguments);
                            if (!this.option("autoExpandAll")) {
                                state.expandedRowKeys = this.option("expandedRowKeys")
                            }
                            return state
                        }
                    }
                }
            }
        }))
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.column_chooser.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_chooser */ 362);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("columnChooser", _uiGrid_core2.default)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.master_detail.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.master_detail */ 365);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("masterDetail", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    data: {
                        isRowExpanded: function() {
                            return this.callBase.apply(this, arguments)
                        },
                        _processItems: function() {
                            return this.callBase.apply(this, arguments)
                        },
                        _processDataItem: function() {
                            return this.callBase.apply(this, arguments)
                        }
                    }
                }
            }
        }))
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.editing.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./ui.tree_list.editor_factory */ 689);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ../grid_core/ui.grid_core.editing */ 368);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TREELIST_EXPAND_ICON_CONTAINER_CLASS = "dx-treelist-icon-container";
        var SELECT_CHECKBOX_CLASS = "dx-select-checkbox";
        var DATA_EDIT_DATA_INSERT_TYPE = "insert";
        var EditingController = _uiGrid_core4.default.controllers.editing.inherit(function() {
            return {
                _generateNewItem: function(key) {
                    var item = this.callBase(key);
                    item.data = {
                        key: key
                    };
                    item.children = [];
                    item.level = 0;
                    item.parentKey = this.option("rootValue");
                    return item
                },
                _needInsertItem: function(editData, changeType, items, item) {
                    var parentKey = editData.key.parentKey;
                    if (void 0 !== parentKey && parentKey !== this.option("rootValue")) {
                        var rowIndex = _uiGrid_core2.default.getIndexByKey(parentKey, items);
                        if (rowIndex >= 0 && this._dataController.isRowExpanded(parentKey)) {
                            items.splice(rowIndex + 1, 0, item)
                        }
                        return false
                    }
                    return this.callBase.apply(this, arguments)
                },
                _isEditColumnVisible: function() {
                    var result = this.callBase.apply(this, arguments);
                    var editingOptions = this.option("editing");
                    return result || editingOptions && editingOptions.allowAdding
                },
                _isDefaultButtonVisible: function(button, options) {
                    var result = this.callBase.apply(this, arguments);
                    var row = options.row;
                    if ("add" === button.name) {
                        return this.allowAdding(options) && row.rowIndex !== this._getVisibleEditRowIndex() && !(row.removed || row.isNewRow)
                    }
                    return result
                },
                _getEditingButtons: function(options) {
                    var buttons = this.callBase.apply(this, arguments);
                    if (!options.column.buttons) {
                        buttons.unshift(this._getButtonConfig("add", options))
                    }
                    return buttons
                },
                _beforeSaveEditData: function(editData) {
                    var dataController = this._dataController;
                    var result = this.callBase.apply(this, arguments);
                    if (editData && editData.type !== DATA_EDIT_DATA_INSERT_TYPE) {
                        var store = dataController && dataController.store();
                        var key = store && store.key();
                        if (!(0, _type.isDefined)(key)) {
                            throw _ui2.default.Error("E1045")
                        }
                    }
                    return result
                },
                addRowByRowIndex: function(rowIndex) {
                    var dataController = this.getController("data");
                    var row = dataController.getVisibleRows()[rowIndex];
                    return this.addRow(row ? row.key : void 0)
                },
                addRow: function(key) {
                    var that = this;
                    var callBase = that.callBase;
                    var dataController = that.getController("data");
                    if (void 0 !== key && !dataController.isRowExpanded(key)) {
                        var deferred = new _deferred.Deferred;
                        dataController.expandRow(key).done(function() {
                            setTimeout(function() {
                                callBase.call(that, key).done(deferred.resolve).fail(deferred.reject)
                            })
                        }).fail(deferred.reject);
                        return deferred.promise()
                    }
                    if (void 0 === key) {
                        key = that.option("rootValue")
                    }
                    return callBase.call(that, key)
                },
                _initNewRow: function(options, parentKey) {
                    var dataController = this.getController("data");
                    var dataSourceAdapter = dataController.dataSource();
                    var parentIdSetter = dataSourceAdapter.createParentIdSetter();
                    parentIdSetter(options.data, parentKey);
                    return this.callBase.apply(this, arguments)
                },
                allowAdding: function(options) {
                    return this._allowEditAction("allowAdding", options)
                },
                _needToCloseEditableCell: function($targetElement) {
                    return this.callBase.apply(this, arguments) || $targetElement.closest("." + TREELIST_EXPAND_ICON_CONTAINER_CLASS).length && this.isEditing()
                },
                getButtonLocalizationNames: function() {
                    var names = this.callBase.apply(this);
                    names.add = "dxTreeList-editingAddRowToNode";
                    return names
                }
            }
        }());
        var originalRowClick = _uiGrid_core4.default.extenders.views.rowsView._rowClick;
        var originalRowDblClick = _uiGrid_core4.default.extenders.views.rowsView._rowDblClick;
        var validateClick = function(e) {
            var $targetElement = (0, _renderer2.default)(e.event.target);
            var originalClickHandler = "dxdblclick" === e.event.type ? originalRowDblClick : originalRowClick;
            if ($targetElement.closest("." + SELECT_CHECKBOX_CLASS).length) {
                return false
            }
            return !needToCallOriginalClickHandler.call(this, e, originalClickHandler)
        };

        function needToCallOriginalClickHandler(e, originalClickHandler) {
            var $targetElement = (0, _renderer2.default)(e.event.target);
            if (!$targetElement.closest("." + TREELIST_EXPAND_ICON_CONTAINER_CLASS).length) {
                originalClickHandler.call(this, e);
                return true
            }
            return false
        }
        var RowsViewExtender = (0, _extend.extend)({}, _uiGrid_core4.default.extenders.views.rowsView, {
            _renderCellCommandContent: function($container, options) {
                var editingController = this._editingController;
                var isEditRow = options.row && editingController.isEditRow(options.row.rowIndex);
                var isEditing = options.isEditing || isEditRow;
                if (!isEditing) {
                    return this.callBase.apply(this, arguments)
                }
                return false
            },
            _rowClick: function(e) {
                if (validateClick.call(this, e)) {
                    this.callBase.apply(this, arguments)
                }
            },
            _rowDblClick: function(e) {
                if (validateClick.call(this, e)) {
                    this.callBase.apply(this, arguments)
                }
            }
        });
        _uiTree_list2.default.registerModule("editing", {
            defaultOptions: function() {
                return (0, _extend.extend)(true, _uiGrid_core4.default.defaultOptions(), {
                    editing: {
                        texts: {
                            addRowToNode: _message2.default.format("dxTreeList-editingAddRowToNode")
                        }
                    }
                })
            },
            controllers: {
                editing: EditingController
            },
            extenders: {
                controllers: (0, _extend.extend)(true, {}, _uiGrid_core4.default.extenders.controllers, {
                    data: {
                        changeRowExpand: function() {
                            this._editingController.refresh();
                            return this.callBase.apply(this, arguments)
                        }
                    }
                }),
                views: {
                    rowsView: RowsViewExtender,
                    headerPanel: _uiGrid_core4.default.extenders.views.headerPanel
                }
            }
        })
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.editor_factory.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.editor_factory */ 366);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("editorFactory", _uiGrid_core2.default)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.validating.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.validating */ 369);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var EditingControllerExtender = (0, _extend.extend)({}, _uiGrid_core2.default.extenders.controllers.editing);
        delete EditingControllerExtender.processItems;
        delete EditingControllerExtender.processDataItem;
        _uiTree_list2.default.registerModule("validating", {
            defaultOptions: _uiGrid_core2.default.defaultOptions,
            controllers: _uiGrid_core2.default.controllers,
            extenders: {
                controllers: {
                    editing: EditingControllerExtender,
                    editorFactory: _uiGrid_core2.default.extenders.controllers.editorFactory
                },
                views: _uiGrid_core2.default.extenders.views
            }
        })
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.virtual_scrolling.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiTree_list3 = __webpack_require__( /*! ./ui.tree_list.data_source_adapter */ 394);
        var _uiTree_list4 = _interopRequireDefault(_uiTree_list3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_scrolling */ 370);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var oldDefaultOptions = _uiGrid_core2.default.defaultOptions;
        var originalDataControllerExtender = _uiGrid_core2.default.extenders.controllers.data;
        var originalDataSourceAdapterExtender = _uiGrid_core2.default.extenders.dataSourceAdapter;
        _uiGrid_core2.default.extenders.controllers.data = (0, _extend.extend)({}, originalDataControllerExtender, {
            _loadOnOptionChange: function() {
                var virtualScrollController = this._dataSource && this._dataSource._virtualScrollController;
                virtualScrollController && virtualScrollController.reset();
                this.callBase()
            }
        });
        _uiGrid_core2.default.extenders.dataSourceAdapter = (0, _extend.extend)({}, originalDataSourceAdapterExtender, {
            changeRowExpand: function() {
                var _this = this;
                return this.callBase.apply(this, arguments).done(function() {
                    var viewportItemIndex = _this.getViewportItemIndex();
                    viewportItemIndex >= 0 && _this.setViewportItemIndex(viewportItemIndex)
                })
            }
        });
        _uiTree_list2.default.registerModule("virtualScrolling", (0, _extend.extend)({}, _uiGrid_core2.default, {
            defaultOptions: function() {
                return (0, _extend.extend)(true, oldDefaultOptions(), {
                    scrolling: {
                        mode: "virtual"
                    }
                })
            }
        }));
        _uiTree_list4.default.extend(_uiGrid_core2.default.extenders.dataSourceAdapter)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.filter_row.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_row */ 372);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("filterRow", _uiGrid_core2.default)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.header_filter.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.header_filter */ 375);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("headerFilter", _uiGrid_core2.default)
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.filter_sync.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_sync */ 377);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("filterSync", _uiGrid_core2.default)
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.filter_builder.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_builder */ 379);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("filterBuilder", _uiGrid_core2.default)
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.filter_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.filter_panel */ 381);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("filterPanel", _uiGrid_core2.default)
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.pager.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.pager */ 383);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("pager", _uiGrid_core2.default)
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.columns_resizing_reordering.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.columns_resizing_reordering */ 384);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("columnsResizingReordering", _uiGrid_core2.default)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.column_fixing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.column_fixing */ 386);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("columnFixing", _uiGrid_core2.default)
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.adaptivity.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.adaptivity */ 387);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("adaptivity", _uiGrid_core2.default)
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.selection.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.selection */ 361);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var TREELIST_SELECT_ALL_CLASS = "dx-treelist-select-all";
        var CELL_FOCUS_DISABLED_CLASS = "dx-cell-focus-disabled";
        var SELECT_CHECKBOX_CLASS = "dx-select-checkbox";
        var originalRowClick = _uiGrid_core2.default.extenders.views.rowsView._rowClick;
        var originalHandleDataChanged = _uiGrid_core2.default.extenders.controllers.data._handleDataChanged;
        var nodeExists = function(array, currentKey) {
            return !!array.filter(function(key) {
                return key === currentKey
            }).length
        };
        _uiTree_list2.default.registerModule("selection", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            defaultOptions: function() {
                return (0, _extend.extend)(true, _uiGrid_core2.default.defaultOptions(), {
                    selection: {
                        showCheckBoxesMode: "always",
                        recursive: false
                    }
                })
            },
            extenders: {
                controllers: {
                    data: {
                        _handleDataChanged: function(e) {
                            var selectionController = this.getController("selection");
                            var isRecursiveSelection = selectionController.isRecursiveSelection();
                            if (isRecursiveSelection && (!e || "updateSelectionState" !== e.changeType)) {
                                selectionController.updateSelectionState({
                                    selectedItemKeys: this.option("selectedRowKeys")
                                })
                            }
                            originalHandleDataChanged.apply(this, arguments)
                        },
                        loadDescendants: function() {
                            var that = this;
                            var d = that.callBase.apply(that, arguments);
                            var selectionController = that.getController("selection");
                            var isRecursiveSelection = selectionController.isRecursiveSelection();
                            if (isRecursiveSelection) {
                                d.done(function() {
                                    selectionController.updateSelectionState({
                                        selectedItemKeys: that.option("selectedRowKeys")
                                    })
                                })
                            }
                            return d
                        }
                    },
                    selection: {
                        init: function() {
                            this.callBase.apply(this, arguments);
                            this._selectionStateByKey = {}
                        },
                        _getSelectionConfig: function() {
                            var _arguments = arguments,
                                _this = this;
                            var config = this.callBase.apply(this, arguments);
                            var plainItems = config.plainItems;
                            config.plainItems = function(all) {
                                if (all) {
                                    return _this._dataController.getCachedStoreData() || []
                                }
                                return plainItems.apply(_this, _arguments).map(function(item) {
                                    return item.data
                                })
                            };
                            config.isItemSelected = function(item) {
                                var key = _this._dataController.keyOf(item);
                                return _this.isRowSelected(key)
                            };
                            config.isSelectableItem = function() {
                                return true
                            };
                            config.getItemData = function(item) {
                                return item
                            };
                            return config
                        },
                        renderSelectCheckBoxContainer: function($container, model) {
                            var that = this;
                            var rowsView = that.component.getView("rowsView");
                            $container.addClass(CELL_FOCUS_DISABLED_CLASS);
                            var $checkbox = rowsView._renderSelectCheckBox($container, {
                                value: model.row.isSelected,
                                row: model.row,
                                column: model.column
                            });
                            rowsView._attachCheckBoxClickEvent($checkbox)
                        },
                        _updateSelectColumn: _common.noop,
                        _getSelectAllNodeKeys: function() {
                            var component = this.component;
                            var root = component.getRootNode();
                            var cache = {};
                            var keys = [];
                            var isRecursiveSelection = this.isRecursiveSelection();
                            root && _uiTree_list2.default.foreachNodes(root.children, function(node) {
                                if (void 0 !== node.key && (node.visible || isRecursiveSelection)) {
                                    keys.push(node.key)
                                }
                                if (!node.visible) {
                                    return true
                                }
                                return isRecursiveSelection ? false : component.isRowExpanded(node.key, cache)
                            });
                            return keys
                        },
                        isSelectAll: function() {
                            var component = this.component;
                            var visibleKeys = this._getSelectAllNodeKeys();
                            var selectedVisibleKeys = visibleKeys.filter(function(key) {
                                return component.isRowSelected(key)
                            });
                            if (!selectedVisibleKeys.length) {
                                var hasIndeterminateState = visibleKeys.some(function(key) {
                                    return void 0 === component.isRowSelected(key)
                                });
                                return hasIndeterminateState ? void 0 : false
                            } else {
                                if (selectedVisibleKeys.length === visibleKeys.length) {
                                    return true
                                }
                            }
                        },
                        selectAll: function() {
                            var that = this;
                            var visibleKeys = that._getSelectAllNodeKeys().filter(function(key) {
                                return !that.isRowSelected(key)
                            });
                            return that.selectRows(visibleKeys, true)
                        },
                        deselectAll: function() {
                            var visibleKeys = this._getSelectAllNodeKeys();
                            return this.deselectRows(visibleKeys)
                        },
                        selectedItemKeys: function(value, preserve, isDeselect, isSelectAll) {
                            var that = this;
                            var selectedRowKeys = that.option("selectedRowKeys");
                            var isRecursiveSelection = this.isRecursiveSelection();
                            var normalizedArgs = isRecursiveSelection && that._normalizeSelectionArgs({
                                keys: value || []
                            }, !isDeselect);
                            if (normalizedArgs && !(0, _common.equalByValue)(normalizedArgs.selectedRowKeys, selectedRowKeys)) {
                                that._isSelectionNormalizing = true;
                                return this.callBase(normalizedArgs.selectedRowKeys, false, false, false).always(function() {
                                    that._isSelectionNormalizing = false
                                }).done(function(items) {
                                    normalizedArgs.selectedRowsData = items;
                                    that._fireSelectionChanged(normalizedArgs)
                                })
                            }
                            return this.callBase(value, preserve, isDeselect, isSelectAll)
                        },
                        changeItemSelection: function(itemIndex, keyboardKeys) {
                            var isRecursiveSelection = this.isRecursiveSelection();
                            if (isRecursiveSelection && !keyboardKeys.shift) {
                                var key = this._dataController.getKeyByRowIndex(itemIndex);
                                return this.selectedItemKeys(key, true, this.isRowSelected(key))
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _updateParentSelectionState: function(node, isSelected) {
                            var that = this;
                            var state = isSelected;
                            var parentNode = node.parent;
                            if (parentNode) {
                                if (parentNode.children.length > 1) {
                                    if (false === isSelected) {
                                        var hasSelectedState = parentNode.children.some(function(childNode, index, children) {
                                            return that._selectionStateByKey[childNode.key]
                                        });
                                        state = hasSelectedState ? void 0 : false
                                    } else {
                                        if (true === isSelected) {
                                            var hasNonSelectedState = parentNode.children.some(function(childNode) {
                                                return !that._selectionStateByKey[childNode.key]
                                            });
                                            state = hasNonSelectedState ? void 0 : true
                                        }
                                    }
                                }
                                this._selectionStateByKey[parentNode.key] = state;
                                if (parentNode.parent && parentNode.parent.level >= 0) {
                                    this._updateParentSelectionState(parentNode, state)
                                }
                            }
                        },
                        _updateChildrenSelectionState: function(node, isSelected) {
                            var that = this;
                            var children = node.children;
                            children && children.forEach(function(childNode) {
                                that._selectionStateByKey[childNode.key] = isSelected;
                                if (childNode.children.length > 0) {
                                    that._updateChildrenSelectionState(childNode, isSelected)
                                }
                            })
                        },
                        _updateSelectionStateCore: function(keys, isSelected) {
                            var dataController = this._dataController;
                            for (var i = 0; i < keys.length; i++) {
                                this._selectionStateByKey[keys[i]] = isSelected;
                                var node = dataController.getNodeByKey(keys[i]);
                                if (node) {
                                    this._updateParentSelectionState(node, isSelected);
                                    this._updateChildrenSelectionState(node, isSelected)
                                }
                            }
                        },
                        _getSelectedParentKeys: function(key, selectedItemKeys, useCash) {
                            var selectedParentNode;
                            var node = this._dataController.getNodeByKey(key);
                            var parentNode = node && node.parent;
                            var result = [];
                            while (parentNode && parentNode.level >= 0) {
                                result.unshift(parentNode.key);
                                var isSelected = useCash ? !nodeExists(selectedItemKeys, parentNode.key) && this.isRowSelected(parentNode.key) : selectedItemKeys.indexOf(parentNode.key) >= 0;
                                if (isSelected) {
                                    selectedParentNode = parentNode;
                                    result = this._getSelectedParentKeys(selectedParentNode.key, selectedItemKeys, useCash).concat(result);
                                    break
                                } else {
                                    if (useCash) {
                                        break
                                    }
                                }
                                parentNode = parentNode.parent
                            }
                            return selectedParentNode && result || []
                        },
                        _getSelectedChildKeys: function(node, keysToIgnore) {
                            var that = this;
                            var childKeys = [];
                            node && _uiTree_list2.default.foreachNodes(node.children, function(childNode) {
                                var ignoreKeyIndex = keysToIgnore.indexOf(childNode.key);
                                if (ignoreKeyIndex < 0) {
                                    childKeys.push(childNode.key)
                                }
                                return ignoreKeyIndex > 0 || ignoreKeyIndex < 0 && void 0 === that._selectionStateByKey[childNode.key]
                            });
                            return childKeys
                        },
                        _normalizeParentKeys: function(key, args) {
                            var that = this;
                            var keysToIgnore = [key];
                            var parentNodeKeys = that._getSelectedParentKeys(key, args.selectedRowKeys);
                            if (parentNodeKeys.length) {
                                keysToIgnore = keysToIgnore.concat(parentNodeKeys);
                                keysToIgnore.forEach(function(key) {
                                    var index = args.selectedRowKeys.indexOf(key);
                                    if (index >= 0) {
                                        args.selectedRowKeys.splice(index, 1)
                                    }
                                });
                                var parentNode = that._dataController.getNodeByKey(parentNodeKeys[0]);
                                var childKeys = that._getSelectedChildKeys(parentNode, keysToIgnore);
                                args.selectedRowKeys = args.selectedRowKeys.concat(childKeys)
                            }
                        },
                        _normalizeChildrenKeys: function(key, args) {
                            var that = this;
                            var node = that._dataController.getNodeByKey(key);
                            node && node.children.forEach(function(childNode) {
                                var index = args.selectedRowKeys.indexOf(childNode.key);
                                if (index >= 0) {
                                    args.selectedRowKeys.splice(index, 1)
                                }
                                that._normalizeChildrenKeys(childNode.key, args)
                            })
                        },
                        _normalizeSelectedRowKeysCore: function(keys, args, isSelect) {
                            var that = this;
                            keys.forEach(function(key) {
                                if (that.isRowSelected(key) === isSelect) {
                                    return
                                }
                                that._normalizeChildrenKeys(key, args);
                                var index = args.selectedRowKeys.indexOf(key);
                                if (isSelect) {
                                    if (index < 0) {
                                        args.selectedRowKeys.push(key)
                                    }
                                    args.currentSelectedRowKeys.push(key)
                                } else {
                                    if (index >= 0) {
                                        args.selectedRowKeys.splice(index, 1)
                                    }
                                    args.currentDeselectedRowKeys.push(key);
                                    that._normalizeParentKeys(key, args)
                                }
                            })
                        },
                        _normalizeSelectionArgs: function(args, isSelect) {
                            var result;
                            var keys = Array.isArray(args.keys) ? args.keys : [args.keys];
                            var selectedRowKeys = this.option("selectedRowKeys") || [];
                            if (keys.length) {
                                result = {
                                    currentSelectedRowKeys: [],
                                    currentDeselectedRowKeys: [],
                                    selectedRowKeys: selectedRowKeys.slice(0)
                                };
                                this._normalizeSelectedRowKeysCore(keys, result, isSelect)
                            }
                            return result
                        },
                        _updateSelectedItems: function(args) {
                            this.updateSelectionState(args);
                            this.callBase(args)
                        },
                        _fireSelectionChanged: function() {
                            if (!this._isSelectionNormalizing) {
                                this.callBase.apply(this, arguments)
                            }
                        },
                        _isModeLeavesOnly: function(mode) {
                            return "leavesOnly" === mode || true === mode
                        },
                        _getAllSelectedRowKeys: function(parentKeys) {
                            var that = this;
                            var result = [];
                            parentKeys.forEach(function(key) {
                                var insertIndex = result.length;
                                var parentKeys = that._getSelectedParentKeys(key, result, true);
                                var childKeys = that._dataController.getChildNodeKeys(key);
                                result.splice.apply(result, [insertIndex, 0].concat(parentKeys));
                                result.push(key);
                                result = result.concat(childKeys)
                            });
                            return result
                        },
                        _getParentSelectedRowKeys: function(keys) {
                            var that = this;
                            var result = [];
                            keys.forEach(function(key) {
                                var parentKeys = that._getSelectedParentKeys(key, keys);
                                !parentKeys.length && result.push(key)
                            });
                            return result
                        },
                        _getLeafSelectedRowKeys: function(keys) {
                            var that = this;
                            var result = [];
                            var dataController = that._dataController;
                            keys.forEach(function(key) {
                                var node = dataController.getNodeByKey(key);
                                node && !node.hasChildren && result.push(key)
                            });
                            return result
                        },
                        isRecursiveSelection: function() {
                            var selectionMode = this.option("selection.mode");
                            var isRecursive = this.option("selection.recursive");
                            return "multiple" === selectionMode && isRecursive
                        },
                        updateSelectionState: function(options) {
                            var removedItemKeys = options.removedItemKeys || [];
                            var selectedItemKeys = options.selectedItemKeys || [];
                            this._updateSelectionStateCore(removedItemKeys, false);
                            this._updateSelectionStateCore(selectedItemKeys, true)
                        },
                        isRowSelected: function(key) {
                            var result = this.callBase.apply(this, arguments);
                            var isRecursiveSelection = this.isRecursiveSelection();
                            if (!result && isRecursiveSelection) {
                                if (key in this._selectionStateByKey) {
                                    return this._selectionStateByKey[key]
                                }
                                return false
                            }
                            return result
                        },
                        getSelectedRowKeys: function(mode) {
                            var that = this;
                            if (!that._dataController) {
                                return []
                            }
                            if (true === mode) {
                                _ui2.default.log("W0002", "dxTreeList", "getSelectedRowKeys(leavesOnly)", "18.1", "Use the 'getSelectedRowKeys(mode)' method with a string parameter instead")
                            }
                            var selectedRowKeys = that.callBase.apply(that, arguments);
                            if (mode) {
                                if (this.isRecursiveSelection()) {
                                    selectedRowKeys = this._getAllSelectedRowKeys(selectedRowKeys)
                                }
                                if ("all" !== mode) {
                                    if ("excludeRecursive" === mode) {
                                        selectedRowKeys = that._getParentSelectedRowKeys(selectedRowKeys)
                                    } else {
                                        if (that._isModeLeavesOnly(mode)) {
                                            selectedRowKeys = that._getLeafSelectedRowKeys(selectedRowKeys)
                                        }
                                    }
                                }
                            }
                            return selectedRowKeys
                        },
                        getSelectedRowsData: function(mode) {
                            var that = this;
                            var dataController = that._dataController;
                            var selectedKeys = this.getSelectedRowKeys(mode) || [];
                            var selectedRowsData = [];
                            selectedKeys.forEach(function(key) {
                                var node = dataController.getNodeByKey(key);
                                node && selectedRowsData.push(node.data)
                            });
                            return selectedRowsData
                        },
                        refresh: function() {
                            this._selectionStateByKey = {};
                            return this.callBase.apply(this, arguments)
                        }
                    }
                },
                views: {
                    columnHeadersView: {
                        _processTemplate: function(template, options) {
                            var that = this;
                            var resultTemplate;
                            var renderingTemplate = this.callBase(template, options);
                            var firstDataColumnIndex = that._columnsController.getFirstDataColumnIndex();
                            if (renderingTemplate && "header" === options.rowType && options.column.index === firstDataColumnIndex) {
                                resultTemplate = {
                                    render: function(options) {
                                        if ("multiple" === that.option("selection.mode")) {
                                            that.renderSelectAll(options.container, options.model)
                                        }
                                        renderingTemplate.render(options)
                                    }
                                }
                            } else {
                                resultTemplate = renderingTemplate
                            }
                            return resultTemplate
                        },
                        renderSelectAll: function($cell, options) {
                            $cell.addClass(TREELIST_SELECT_ALL_CLASS);
                            this._renderSelectAllCheckBox($cell)
                        },
                        _isSortableElement: function($target) {
                            return this.callBase($target) && !$target.closest("." + SELECT_CHECKBOX_CLASS).length
                        }
                    },
                    rowsView: {
                        _renderIcons: function($iconContainer, options) {
                            this.callBase.apply(this, arguments);
                            if ("multiple" === this.option("selection.mode")) {
                                this.getController("selection").renderSelectCheckBoxContainer($iconContainer, options)
                            }
                            return $iconContainer
                        },
                        _rowClick: function(e) {
                            var $targetElement = (0, _renderer2.default)(e.event.target);
                            if (this.isExpandIcon($targetElement)) {
                                this.callBase.apply(this, arguments)
                            } else {
                                originalRowClick.apply(this, arguments)
                            }
                        }
                    }
                }
            }
        }))
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.search.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.search */ 382);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("search", _uiGrid_core2.default)
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.keyboard_navigation.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.keyboard_navigation */ 385);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("keyboardNavigation", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    keyboardNavigation: {
                        _leftRightKeysHandler: function(eventArgs, isEditing) {
                            var rowIndex = this.getVisibleRowIndex();
                            var dataController = this._dataController;
                            if (eventArgs.ctrl) {
                                var directionCode = this._getDirectionCodeByKey(eventArgs.keyName);
                                var key = dataController.getKeyByRowIndex(rowIndex);
                                if ("nextInRow" === directionCode) {
                                    dataController.expandRow(key)
                                } else {
                                    dataController.collapseRow(key)
                                }
                            } else {
                                return this.callBase.apply(this, arguments)
                            }
                        }
                    }
                }
            }
        }))
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.virtual_columns.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_columns */ 388);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("virtualColumns", _uiGrid_core2.default)
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.focus.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.focus */ 391);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function findIndex(items, callback) {
            var result = -1;
            items.forEach(function(node, index) {
                if (callback(node)) {
                    result = index
                }
            });
            return result
        }
        _uiTree_list2.default.registerModule("focus", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
            extenders: {
                controllers: {
                    data: {
                        changeRowExpand: function(key) {
                            if (this.option("focusedRowEnabled") && this.isRowExpanded(key)) {
                                if (this._isFocusedRowInside(key)) {
                                    this.option("focusedRowKey", key)
                                }
                            }
                            return this.callBase.apply(this, arguments)
                        },
                        _isFocusedRowInside: function(parentKey) {
                            var focusedRowKey = this.option("focusedRowKey");
                            var rowIndex = this.getRowIndexByKey(focusedRowKey);
                            var focusedRow = rowIndex >= 0 && this.getVisibleRows()[rowIndex];
                            var parent = focusedRow && focusedRow.node.parent;
                            while (parent) {
                                if (parent.key === parentKey) {
                                    return true
                                }
                                parent = parent.parent
                            }
                            return false
                        },
                        getParentKey: function(key) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var node = that.getNodeByKey(key);
                            var d = new _deferred.Deferred;
                            if (node) {
                                d.resolve(node.parent ? node.parent.key : void 0)
                            } else {
                                dataSource.load({
                                    filter: [dataSource.getKeyExpr(), "=", key]
                                }).done(function(items) {
                                    var parentData = items[0];
                                    if (parentData) {
                                        d.resolve(dataSource.parentKeyOf(parentData))
                                    } else {
                                        d.reject()
                                    }
                                }).fail(d.reject)
                            }
                            return d.promise()
                        },
                        expandAscendants: function(key) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var d = new _deferred.Deferred;
                            that.getParentKey(key).done(function(parentKey) {
                                if (dataSource && void 0 !== parentKey && parentKey !== that.option("rootValue")) {
                                    dataSource._isNodesInitializing = true;
                                    that.expandRow(parentKey);
                                    dataSource._isNodesInitializing = false;
                                    that.expandAscendants(parentKey).done(d.resolve).fail(d.reject)
                                } else {
                                    d.resolve()
                                }
                            }).fail(d.reject);
                            return d.promise()
                        },
                        getPageIndexByKey: function(key) {
                            var that = this;
                            var dataSource = that._dataSource;
                            var d = new _deferred.Deferred;
                            that.expandAscendants(key).done(function() {
                                dataSource.load({
                                    filter: that.getCombinedFilter(),
                                    sort: that.getController("columns").getSortDataSourceParameters(!dataSource.remoteOperations().sorting),
                                    parentIds: []
                                }).done(function(nodes) {
                                    var offset = findIndex(nodes, function(node) {
                                        return that.keyOf(node.data) === key
                                    });
                                    var pageIndex = that.pageIndex();
                                    if (offset >= 0) {
                                        pageIndex = Math.floor(offset / that.pageSize())
                                    }
                                    d.resolve(pageIndex)
                                }).fail(d.reject)
                            }).fail(d.reject);
                            return d.promise()
                        }
                    }
                }
            }
        }))
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/tree_list/ui.tree_list.row_dragging.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiTree_list = __webpack_require__( /*! ./ui.tree_list.core */ 29);
        var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.row_dragging */ 392);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _uiTree_list2.default.registerModule("rowDragging", _uiGrid_core2.default)
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./pivot_grid/ui.pivot_grid */ 708)
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _click = __webpack_require__( /*! ../../events/click */ 19);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.utils */ 33);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _uiPivot_grid2 = __webpack_require__( /*! ./ui.pivot_grid.data_controller */ 709);
        var _uiPivot_grid3 = __webpack_require__( /*! ./ui.pivot_grid.data_area */ 713);
        var _uiPivot_grid4 = __webpack_require__( /*! ./ui.pivot_grid.headers_area */ 714);
        var _size = __webpack_require__( /*! ../../core/utils/size */ 180);
        var _uiPivot_grid5 = __webpack_require__( /*! ./ui.pivot_grid.fields_area */ 715);
        var _uiPivot_grid6 = __webpack_require__( /*! ./ui.pivot_grid.field_chooser */ 396);
        var _uiPivot_grid7 = _interopRequireDefault(_uiPivot_grid6);
        var _uiPivot_grid8 = __webpack_require__( /*! ./ui.pivot_grid.field_chooser_base */ 249);
        var _uiPivot_grid9 = _interopRequireDefault(_uiPivot_grid8);
        var _uiPivot_grid10 = __webpack_require__( /*! ./ui.pivot_grid.export */ 717);
        var _uiPivot_grid11 = __webpack_require__( /*! ./ui.pivot_grid.chart_integration */ 718);
        var _uiPivot_grid12 = _interopRequireDefault(_uiPivot_grid11);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var window = (0, _window.getWindow)();
        var DATA_AREA_CELL_CLASS = "dx-area-data-cell";
        var ROW_AREA_CELL_CLASS = "dx-area-row-cell";
        var COLUMN_AREA_CELL_CLASS = "dx-area-column-cell";
        var DESCRIPTION_AREA_CELL_CLASS = "dx-area-description-cell";
        var BORDERS_CLASS = "dx-pivotgrid-border";
        var PIVOTGRID_CLASS = "dx-pivotgrid";
        var ROW_LINES_CLASS = "dx-row-lines";
        var BOTTOM_ROW_CLASS = "dx-bottom-row";
        var BOTTOM_BORDER_CLASS = "dx-bottom-border";
        var FIELDS_CONTAINER_CLASS = "dx-pivotgrid-fields-container";
        var FIELDS_CLASS = "dx-area-fields";
        var FIELD_CHOOSER_POPUP_CLASS = "dx-fieldchooser-popup";
        var INCOMPRESSIBLE_FIELDS_CLASS = "dx-incompressible-fields";
        var OVERFLOW_HIDDEN_CLASS = "dx-overflow-hidden";
        var TR = "<tr>";
        var TD = "<td>";
        var DIV = "<div>";
        var TEST_HEIGHT = 66666;

        function getArraySum(array) {
            var sum = 0;
            (0, _iterator.each)(array, function(_, value) {
                sum += value || 0
            });
            return sum
        }

        function adjustSizeArray(sizeArray, space) {
            var delta = space / sizeArray.length;
            for (var i = 0; i < sizeArray.length; i++) {
                sizeArray[i] -= delta
            }
        }

        function unsubscribeScrollEvents(area) {
            area.off("scroll").off("stop")
        }

        function subscribeToScrollEvent(area, handler) {
            unsubscribeScrollEvents(area);
            area.on("scroll", handler).on("stop", handler)
        }
        var scrollBarInfoCache = {};

        function getScrollBarInfo(useNativeScrolling) {
            if (scrollBarInfoCache[useNativeScrolling]) {
                return scrollBarInfoCache[useNativeScrolling]
            }
            var scrollBarWidth = 0;
            var options = {};
            var container = (0, _renderer2.default)(DIV).css({
                position: "absolute",
                visibility: "hidden",
                top: -1e3,
                left: -1e3,
                width: 100,
                height: 100
            }).appendTo("body");
            var content = (0, _renderer2.default)("<p>").css({
                width: "100%",
                height: 200
            }).appendTo(container);
            if ("auto" !== useNativeScrolling) {
                options.useNative = !!useNativeScrolling;
                options.useSimulatedScrollbar = !useNativeScrolling
            }
            container.dxScrollable(options);
            var scrollBarUseNative = container.dxScrollable("instance").option("useNative");
            scrollBarWidth = scrollBarUseNative ? container.width() - content.width() : 0;
            container.remove();
            scrollBarInfoCache[useNativeScrolling] = {
                scrollBarWidth: scrollBarWidth,
                scrollBarUseNative: scrollBarUseNative
            };
            return scrollBarInfoCache[useNativeScrolling]
        }

        function getCommonBorderWidth(elements, direction) {
            var borderStyleNames = "width" === direction ? ["borderLeftWidth", "borderRightWidth"] : ["borderTopWidth", "borderBottomWidth"];
            var width = 0;
            (0, _iterator.each)(elements, function(_, elem) {
                var computedStyle = window.getComputedStyle(elem.get(0));
                borderStyleNames.forEach(function(borderStyleName) {
                    width += parseFloat(computedStyle[borderStyleName]) || 0
                })
            });
            return width
        }

        function clickedOnFieldsArea($targetElement) {
            return $targetElement.closest("." + FIELDS_CLASS).length || $targetElement.find("." + FIELDS_CLASS).length
        }
        var PivotGrid = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    scrolling: {
                        timeout: 300,
                        renderingThreshold: 150,
                        minTimeout: 10,
                        mode: "standard",
                        useNative: "auto",
                        removeInvisiblePages: true,
                        virtualRowHeight: 50,
                        virtualColumnWidth: 100
                    },
                    encodeHtml: true,
                    dataSource: null,
                    activeStateEnabled: false,
                    fieldChooser: {
                        minWidth: 250,
                        minHeight: 250,
                        enabled: true,
                        allowSearch: false,
                        searchTimeout: 500,
                        layout: 0,
                        title: (0, _message.format)("dxPivotGrid-fieldChooserTitle"),
                        width: 600,
                        height: 600,
                        applyChangesMode: "instantly"
                    },
                    onContextMenuPreparing: null,
                    allowSorting: false,
                    allowSortingBySummary: false,
                    allowFiltering: false,
                    allowExpandAll: false,
                    wordWrapEnabled: true,
                    fieldPanel: {
                        showColumnFields: true,
                        showFilterFields: true,
                        showDataFields: true,
                        showRowFields: true,
                        allowFieldDragging: true,
                        visible: false,
                        texts: {
                            columnFieldArea: (0, _message.format)("dxPivotGrid-columnFieldArea"),
                            rowFieldArea: (0, _message.format)("dxPivotGrid-rowFieldArea"),
                            filterFieldArea: (0, _message.format)("dxPivotGrid-filterFieldArea"),
                            dataFieldArea: (0, _message.format)("dxPivotGrid-dataFieldArea")
                        }
                    },
                    dataFieldArea: "column",
                    "export": {
                        enabled: false,
                        fileName: "PivotGrid",
                        proxyUrl: void 0,
                        ignoreExcelErrors: true
                    },
                    showRowTotals: true,
                    showRowGrandTotals: true,
                    showColumnTotals: true,
                    showColumnGrandTotals: true,
                    hideEmptySummaryCells: true,
                    showTotalsPrior: "none",
                    rowHeaderLayout: "standard",
                    loadPanel: {
                        enabled: true,
                        text: (0, _message.format)("Loading"),
                        width: 200,
                        height: 70,
                        showIndicator: true,
                        indicatorSrc: "",
                        showPane: true
                    },
                    texts: {
                        grandTotal: (0, _message.format)("dxPivotGrid-grandTotal"),
                        total: (0, _message.getFormatter)("dxPivotGrid-total"),
                        noData: (0, _message.format)("dxDataGrid-noDataText"),
                        showFieldChooser: (0, _message.format)("dxPivotGrid-showFieldChooser"),
                        expandAll: (0, _message.format)("dxPivotGrid-expandAll"),
                        collapseAll: (0, _message.format)("dxPivotGrid-collapseAll"),
                        sortColumnBySummary: (0, _message.getFormatter)("dxPivotGrid-sortColumnBySummary"),
                        sortRowBySummary: (0, _message.getFormatter)("dxPivotGrid-sortRowBySummary"),
                        removeAllSorting: (0, _message.format)("dxPivotGrid-removeAllSorting"),
                        exportToExcel: (0, _message.format)("dxDataGrid-exportToExcel"),
                        dataNotAvailable: (0, _message.format)("dxPivotGrid-dataNotAvailable")
                    },
                    onCellClick: null,
                    onCellPrepared: null,
                    showBorders: false,
                    stateStoring: {
                        enabled: false,
                        storageKey: null,
                        type: "localStorage",
                        customLoad: null,
                        customSave: null,
                        savingTimeout: 2e3
                    },
                    onExpandValueChanging: null,
                    renderCellCountLimit: 2e4,
                    onExporting: null,
                    onExported: null,
                    onFileSaving: null,
                    headerFilter: {
                        width: 252,
                        height: 325,
                        allowSearch: false,
                        showRelevantValues: false,
                        searchTimeout: 500,
                        texts: {
                            emptyValue: (0, _message.format)("dxDataGrid-headerFilterEmptyValue"),
                            ok: (0, _message.format)("dxDataGrid-headerFilterOK"),
                            cancel: (0, _message.format)("dxDataGrid-headerFilterCancel")
                        }
                    }
                })
            },
            _getDataControllerOptions: function() {
                var that = this;
                return {
                    component: that,
                    dataSource: that.option("dataSource"),
                    texts: that.option("texts"),
                    showRowTotals: that.option("showRowTotals"),
                    showRowGrandTotals: that.option("showRowGrandTotals"),
                    showColumnTotals: that.option("showColumnTotals"),
                    showTotalsPrior: that.option("showTotalsPrior"),
                    showColumnGrandTotals: that.option("showColumnGrandTotals"),
                    dataFieldArea: that.option("dataFieldArea"),
                    rowHeaderLayout: that.option("rowHeaderLayout"),
                    hideEmptySummaryCells: that.option("hideEmptySummaryCells"),
                    onFieldsPrepared: function(fields) {
                        (0, _iterator.each)(fields, function(index, field) {
                            (0, _iterator.each)(["allowSorting", "allowSortingBySummary", "allowFiltering", "allowExpandAll"], function(_, optionName) {
                                if (void 0 === field[optionName]) {
                                    (0, _uiPivot_grid.setFieldProperty)(field, optionName, that.option(optionName))
                                }
                            })
                        })
                    }
                }
            },
            _initDataController: function() {
                var that = this;
                that._dataController && that._dataController.dispose();
                that._dataController = new _uiPivot_grid2.DataController(that._getDataControllerOptions());
                if ((0, _window.hasWindow)()) {
                    that._dataController.changed.add(function() {
                        that._render()
                    })
                }
                that._dataController.scrollChanged.add(function(options) {
                    that._scrollLeft = options.left;
                    that._scrollTop = options.top
                });
                that._dataController.loadingChanged.add(function(isLoading) {
                    that._updateLoading()
                });
                that._dataController.progressChanged.add(that._updateLoading.bind(that));
                that._dataController.dataSourceChanged.add(function() {
                    that._trigger("onChanged")
                });
                var expandValueChanging = that.option("onExpandValueChanging");
                if (expandValueChanging) {
                    that._dataController.expandValueChanging.add(function(e) {
                        expandValueChanging(e)
                    })
                }
            },
            _init: function() {
                var that = this;
                that.callBase();
                that._initDataController();
                that._scrollLeft = that._scrollTop = null;
                that._initActions()
            },
            _initActions: function() {
                var that = this;
                that._actions = {
                    onChanged: that._createActionByOption("onChanged"),
                    onContextMenuPreparing: that._createActionByOption("onContextMenuPreparing"),
                    onCellClick: that._createActionByOption("onCellClick"),
                    onExporting: that._createActionByOption("onExporting"),
                    onExported: that._createActionByOption("onExported"),
                    onFileSaving: that._createActionByOption("onFileSaving"),
                    onCellPrepared: that._createActionByOption("onCellPrepared")
                }
            },
            _trigger: function(eventName, eventArg) {
                this._actions[eventName](eventArg)
            },
            _optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "dataSource":
                    case "allowSorting":
                    case "allowFiltering":
                    case "allowExpandAll":
                    case "allowSortingBySummary":
                    case "scrolling":
                    case "stateStoring":
                        that._initDataController();
                        that._fieldChooserPopup.hide();
                        that._renderFieldChooser();
                        that._invalidate();
                        break;
                    case "texts":
                    case "showTotalsPrior":
                    case "showRowTotals":
                    case "showRowGrandTotals":
                    case "showColumnTotals":
                    case "showColumnGrandTotals":
                    case "hideEmptySummaryCells":
                    case "dataFieldArea":
                        that._dataController.updateViewOptions(that._getDataControllerOptions());
                        break;
                    case "useNativeScrolling":
                    case "encodeHtml":
                    case "renderCellCountLimit":
                        break;
                    case "rtlEnabled":
                        that.callBase(args);
                        that._renderFieldChooser();
                        that._renderContextMenu();
                        (0, _window.hasWindow)() && that._renderLoadPanel(that._dataArea.groupElement(), that.$element());
                        that._invalidate();
                        break;
                    case "export":
                        that._renderDescriptionArea();
                        break;
                    case "onExpandValueChanging":
                        break;
                    case "onCellClick":
                    case "onContextMenuPreparing":
                    case "onExporting":
                    case "onExported":
                    case "onFileSaving":
                    case "onCellPrepared":
                        that._actions[args.name] = that._createActionByOption(args.name);
                        break;
                    case "fieldChooser":
                        that._renderFieldChooser();
                        that._renderDescriptionArea();
                        break;
                    case "loadPanel":
                        if ((0, _window.hasWindow)()) {
                            that._renderLoadPanel(that._dataArea.groupElement(), that.$element());
                            that._invalidate()
                        }
                        break;
                    case "fieldPanel":
                        that._renderDescriptionArea();
                        that._invalidate();
                        break;
                    case "headerFilter":
                        that._renderFieldChooser();
                        that._invalidate();
                        break;
                    case "showBorders":
                        that._tableElement().toggleClass(BORDERS_CLASS, !!args.value);
                        that.updateDimensions();
                        break;
                    case "wordWrapEnabled":
                        that._tableElement().toggleClass("dx-word-wrap", !!args.value);
                        that.updateDimensions();
                        break;
                    case "rowHeaderLayout":
                        that._tableElement().find("." + ROW_AREA_CELL_CLASS).toggleClass("dx-area-tree-view", "tree" === args.value);
                        that._dataController.updateViewOptions(that._getDataControllerOptions());
                        break;
                    case "height":
                    case "width":
                        that._hasHeight = null;
                        that.callBase(args);
                        that.resize();
                        break;
                    default:
                        that.callBase(args)
                }
            },
            _updateScrollPosition: function(columnsArea, rowsArea, dataArea) {
                var that = this;
                var scrollTop;
                var scrollLeft;
                var scrolled = that._scrollTop || that._scrollLeft;
                if (that._scrollUpdating) {
                    return
                }
                that._scrollUpdating = true;
                if (rowsArea && !rowsArea.hasScroll() && that._hasHeight) {
                    that._scrollTop = null
                }
                if (columnsArea && !columnsArea.hasScroll()) {
                    that._scrollLeft = null
                }
                if (null !== that._scrollTop || null !== that._scrollLeft || scrolled || that.option("rtlEnabled")) {
                    scrollTop = that._scrollTop || 0;
                    scrollLeft = that._scrollLeft || 0;
                    dataArea.scrollTo({
                        x: scrollLeft,
                        y: scrollTop
                    });
                    columnsArea.scrollTo(scrollLeft);
                    rowsArea.scrollTo(scrollTop);
                    that._dataController.updateWindowScrollPosition(that._scrollTop)
                }
                that._scrollUpdating = false
            },
            _subscribeToEvents: function(columnsArea, rowsArea, dataArea) {
                var that = this;
                var scrollHandler = function(e) {
                    var scrollOffset = e.scrollOffset;
                    var leftOffset = (0, _type.isDefined)(scrollOffset.left) ? scrollOffset.left : that._scrollLeft;
                    var topOffset = (0, _type.isDefined)(scrollOffset.top) && that._hasHeight ? scrollOffset.top : that._scrollTop;
                    if ((that._scrollLeft || 0) !== (leftOffset || 0) || (that._scrollTop || 0) !== (topOffset || 0)) {
                        that._scrollLeft = leftOffset;
                        that._scrollTop = topOffset;
                        that._updateScrollPosition(columnsArea, rowsArea, dataArea);
                        if ("virtual" === that.option("scrolling.mode")) {
                            that._dataController.setViewportPosition(that._scrollLeft, that._scrollTop)
                        }
                    }
                };
                (0, _iterator.each)([columnsArea, rowsArea, dataArea], function(_, area) {
                    subscribeToScrollEvent(area, scrollHandler)
                });
                !that._hasHeight && that._dataController.subscribeToWindowScrollEvents(dataArea.groupElement())
            },
            _clean: _common.noop,
            _needDelayResizing: function(cellsInfo) {
                var cellsCount = cellsInfo.length * (cellsInfo.length ? cellsInfo[0].length : 0);
                return cellsCount > this.option("renderCellCountLimit")
            },
            _renderFieldChooser: function() {
                var that = this;
                var container = that._pivotGridContainer;
                var fieldChooserOptions = that.option("fieldChooser") || {};
                var toolbarItems = "onDemand" === fieldChooserOptions.applyChangesMode ? [{
                    toolbar: "bottom",
                    location: "after",
                    widget: "dxButton",
                    options: {
                        text: (0, _message.format)("OK"),
                        onClick: function(e) {
                            that._fieldChooserPopup.$content().dxPivotGridFieldChooser("applyChanges");
                            that._fieldChooserPopup.hide()
                        }
                    }
                }, {
                    toolbar: "bottom",
                    location: "after",
                    widget: "dxButton",
                    options: {
                        text: (0, _message.format)("Cancel"),
                        onClick: function(e) {
                            that._fieldChooserPopup.hide()
                        }
                    }
                }] : [];
                var fieldChooserComponentOptions = {
                    layout: fieldChooserOptions.layout,
                    texts: fieldChooserOptions.texts || {},
                    dataSource: that.getDataSource(),
                    allowSearch: fieldChooserOptions.allowSearch,
                    searchTimeout: fieldChooserOptions.searchTimeout,
                    width: void 0,
                    height: void 0,
                    headerFilter: that.option("headerFilter"),
                    encodeHtml: that.option("encodeHtml"),
                    applyChangesMode: fieldChooserOptions.applyChangesMode,
                    onContextMenuPreparing: function(e) {
                        that._trigger("onContextMenuPreparing", e)
                    }
                };
                var popupOptions = {
                    shading: false,
                    title: fieldChooserOptions.title,
                    width: fieldChooserOptions.width,
                    height: fieldChooserOptions.height,
                    showCloseButton: true,
                    resizeEnabled: true,
                    minWidth: fieldChooserOptions.minWidth,
                    minHeight: fieldChooserOptions.minHeight,
                    toolbarItems: toolbarItems,
                    onResize: function(e) {
                        e.component.$content().dxPivotGridFieldChooser("updateDimensions")
                    },
                    onShown: function(e) {
                        that._createComponent(e.component.content(), _uiPivot_grid7.default, fieldChooserComponentOptions)
                    },
                    onHidden: function(e) {
                        var fieldChooser = e.component.$content().dxPivotGridFieldChooser("instance");
                        fieldChooser.resetTreeView();
                        fieldChooser.cancelChanges()
                    }
                };
                if (that._fieldChooserPopup) {
                    that._fieldChooserPopup.option(popupOptions);
                    that._fieldChooserPopup.$content().dxPivotGridFieldChooser(fieldChooserComponentOptions)
                } else {
                    that._fieldChooserPopup = that._createComponent((0, _renderer2.default)(DIV).addClass(FIELD_CHOOSER_POPUP_CLASS).appendTo(container), _popup2.default, popupOptions)
                }
            },
            _renderContextMenu: function() {
                var that = this;
                var $container = that._pivotGridContainer;
                if (that._contextMenu) {
                    that._contextMenu.$element().remove()
                }
                that._contextMenu = that._createComponent((0, _renderer2.default)(DIV).appendTo($container), _context_menu2.default, {
                    onPositioning: function(actionArgs) {
                        var event = actionArgs.event;
                        actionArgs.cancel = true;
                        if (!event) {
                            return
                        }
                        var targetElement = event.target.cellIndex >= 0 ? event.target : (0, _renderer2.default)(event.target).closest("td").get(0);
                        if (!targetElement) {
                            return
                        }
                        var args = that._createEventArgs(targetElement, event);
                        var items = that._getContextMenuItems(args);
                        if (items) {
                            actionArgs.component.option("items", items);
                            actionArgs.cancel = false;
                            return
                        }
                    },
                    onItemClick: function(params) {
                        params.itemData.onItemClick && params.itemData.onItemClick(params)
                    },
                    cssClass: PIVOTGRID_CLASS,
                    target: that.$element()
                })
            },
            _getContextMenuItems: function(e) {
                var that = this;
                var items = [];
                var texts = that.option("texts");
                if ("row" === e.area || "column" === e.area) {
                    var areaFields = e[e.area + "Fields"];
                    var oppositeAreaFields = e["column" === e.area ? "rowFields" : "columnFields"];
                    var field = e.cell.path && areaFields[e.cell.path.length - 1];
                    var dataSource = that.getDataSource();
                    if (field && field.allowExpandAll && e.cell.path.length < e[e.area + "Fields"].length && !dataSource.paginate()) {
                        items.push({
                            beginGroup: true,
                            icon: "none",
                            text: texts.expandAll,
                            onItemClick: function() {
                                dataSource.expandAll(field.index)
                            }
                        });
                        items.push({
                            text: texts.collapseAll,
                            icon: "none",
                            onItemClick: function() {
                                dataSource.collapseAll(field.index)
                            }
                        })
                    }
                    if (e.cell.isLast && !dataSource.paginate()) {
                        var sortingBySummaryItemCount = 0;
                        (0, _iterator.each)(oppositeAreaFields, function(index, field) {
                            if (!field.allowSortingBySummary) {
                                return
                            }(0, _iterator.each)(e.dataFields, function(dataIndex, dataField) {
                                if ((0, _type.isDefined)(e.cell.dataIndex) && e.cell.dataIndex !== dataIndex) {
                                    return
                                }
                                var showDataFieldCaption = !(0, _type.isDefined)(e.cell.dataIndex) && e.dataFields.length > 1;
                                var textFormat = "column" === e.area ? texts.sortColumnBySummary : texts.sortRowBySummary;
                                var checked = (0, _uiPivot_grid.findField)(e.dataFields, field.sortBySummaryField) === dataIndex && (e.cell.path || []).join("/") === (field.sortBySummaryPath || []).join("/");
                                var text = (0, _string.format)(textFormat, showDataFieldCaption ? field.caption + " - " + dataField.caption : field.caption);
                                items.push({
                                    beginGroup: 0 === sortingBySummaryItemCount,
                                    icon: checked ? "desc" === field.sortOrder ? "sortdowntext" : "sortuptext" : "none",
                                    text: text,
                                    onItemClick: function() {
                                        dataSource.field(field.index, {
                                            sortBySummaryField: dataField.name || dataField.caption || dataField.dataField,
                                            sortBySummaryPath: e.cell.path,
                                            sortOrder: "desc" === field.sortOrder ? "asc" : "desc"
                                        });
                                        dataSource.load()
                                    }
                                });
                                sortingBySummaryItemCount++
                            })
                        });
                        (0, _iterator.each)(oppositeAreaFields, function(index, field) {
                            if (!field.allowSortingBySummary || !(0, _type.isDefined)(field.sortBySummaryField)) {
                                return
                            }
                            items.push({
                                beginGroup: 0 === sortingBySummaryItemCount,
                                icon: "none",
                                text: texts.removeAllSorting,
                                onItemClick: function() {
                                    (0, _iterator.each)(oppositeAreaFields, function(index, field) {
                                        dataSource.field(field.index, {
                                            sortBySummaryField: void 0,
                                            sortBySummaryPath: void 0,
                                            sortOrder: void 0
                                        })
                                    });
                                    dataSource.load()
                                }
                            });
                            return false
                        })
                    }
                }
                if (that.option("fieldChooser.enabled")) {
                    items.push({
                        beginGroup: true,
                        icon: "columnchooser",
                        text: texts.showFieldChooser,
                        onItemClick: function() {
                            that._fieldChooserPopup.show()
                        }
                    })
                }
                if (that.option("export.enabled")) {
                    items.push({
                        beginGroup: true,
                        icon: "xlsxfile",
                        text: texts.exportToExcel,
                        onItemClick: function() {
                            that.exportToExcel()
                        }
                    })
                }
                e.items = items;
                that._trigger("onContextMenuPreparing", e);
                items = e.items;
                if (items && items.length) {
                    return items
                }
            },
            _createEventArgs: function(targetElement, dxEvent) {
                var that = this;
                var dataSource = that.getDataSource();
                var args = {
                    rowFields: dataSource.getAreaFields("row"),
                    columnFields: dataSource.getAreaFields("column"),
                    dataFields: dataSource.getAreaFields("data"),
                    event: dxEvent
                };
                if (clickedOnFieldsArea((0, _renderer2.default)(targetElement))) {
                    return (0, _extend.extend)(that._createFieldArgs(targetElement), args)
                } else {
                    return (0, _extend.extend)(that._createCellArgs(targetElement), args)
                }
            },
            _createFieldArgs: function(targetElement) {
                var field = (0, _renderer2.default)(targetElement).children().data("field");
                var args = {
                    field: field
                };
                return (0, _type.isDefined)(field) ? args : {}
            },
            _createCellArgs: function(cellElement) {
                var $cellElement = (0, _renderer2.default)(cellElement);
                var columnIndex = cellElement.cellIndex;
                var rowIndex = cellElement.parentElement.rowIndex;
                var $table = $cellElement.closest("table");
                var data = $table.data("data");
                var cell = data && data[rowIndex] && data[rowIndex][columnIndex];
                var args = {
                    area: $table.data("area"),
                    rowIndex: rowIndex,
                    columnIndex: columnIndex,
                    cellElement: (0, _dom.getPublicElement)($cellElement),
                    cell: cell
                };
                return args
            },
            _handleCellClick: function(e) {
                var that = this;
                var args = that._createEventArgs(e.currentTarget, e);
                var cell = args.cell;
                if (!cell || !args.area && (args.rowIndex || args.columnIndex)) {
                    return
                }
                that._trigger("onCellClick", args);
                cell && !args.cancel && (0, _type.isDefined)(cell.expanded) && setTimeout(function() {
                    that._dataController[cell.expanded ? "collapseHeaderItem" : "expandHeaderItem"](args.area, cell.path)
                })
            },
            _getNoDataText: function() {
                return this.option("texts.noData")
            },
            _renderNoDataText: _uiGrid_core.renderNoDataText,
            _renderLoadPanel: _uiGrid_core.renderLoadPanel,
            _updateLoading: function(progress) {
                var that = this;
                var isLoading = that._dataController.isLoading();
                if (!that._loadPanel) {
                    return
                }
                var loadPanelVisible = that._loadPanel.option("visible");
                if (!loadPanelVisible) {
                    that._startLoadingTime = new Date
                }
                if (isLoading) {
                    if (progress) {
                        if (new Date - that._startLoadingTime >= 1e3) {
                            that._loadPanel.option("message", Math.floor(100 * progress) + "%")
                        }
                    } else {
                        that._loadPanel.option("message", that.option("loadPanel.text"))
                    }
                }
                clearTimeout(that._hideLoadingTimeoutID);
                if (loadPanelVisible && !isLoading) {
                    that._hideLoadingTimeoutID = setTimeout(function() {
                        that._loadPanel.option("visible", false);
                        that.$element().removeClass(OVERFLOW_HIDDEN_CLASS)
                    })
                } else {
                    that._loadPanel.option("visible", isLoading);
                    that.$element().toggleClass(OVERFLOW_HIDDEN_CLASS, !isLoading)
                }
            },
            _renderDescriptionArea: function() {
                var _this = this;
                var $element = this.$element();
                var $descriptionCell = $element.find("." + DESCRIPTION_AREA_CELL_CLASS);
                var $toolbarContainer = (0, _renderer2.default)(DIV).addClass("dx-pivotgrid-toolbar");
                var fieldPanel = this.option("fieldPanel");
                var $filterHeader = $element.find(".dx-filter-header");
                var $columnHeader = $element.find(".dx-column-header");
                var $targetContainer;
                if (fieldPanel.visible && fieldPanel.showFilterFields) {
                    $targetContainer = $filterHeader
                } else {
                    if (fieldPanel.visible && (fieldPanel.showDataFields || fieldPanel.showColumnFields)) {
                        $targetContainer = $columnHeader
                    } else {
                        $targetContainer = $descriptionCell
                    }
                }
                $columnHeader.toggleClass(BOTTOM_BORDER_CLASS, !!(fieldPanel.visible && (fieldPanel.showDataFields || fieldPanel.showColumnFields)));
                $filterHeader.toggleClass(BOTTOM_BORDER_CLASS, !!(fieldPanel.visible && fieldPanel.showFilterFields));
                $descriptionCell.toggleClass("dx-pivotgrid-background", fieldPanel.visible && (fieldPanel.showDataFields || fieldPanel.showColumnFields || fieldPanel.showRowFields));
                this.$element().find(".dx-pivotgrid-toolbar").remove();
                $toolbarContainer.prependTo($targetContainer);
                if (this.option("fieldChooser.enabled")) {
                    var $buttonElement = (0, _renderer2.default)(DIV).appendTo($toolbarContainer).addClass("dx-pivotgrid-field-chooser-button");
                    var buttonOptions = {
                        icon: "columnchooser",
                        hint: this.option("texts.showFieldChooser"),
                        onClick: function() {
                            _this.getFieldChooserPopup().show()
                        }
                    };
                    this._createComponent($buttonElement, "dxButton", buttonOptions)
                }
                if (this.option("export.enabled")) {
                    var _$buttonElement = (0, _renderer2.default)(DIV).appendTo($toolbarContainer).addClass("dx-pivotgrid-export-button");
                    var _buttonOptions = {
                        icon: "xlsxfile",
                        hint: this.option("texts.exportToExcel"),
                        onClick: function() {
                            _this.exportToExcel()
                        }
                    };
                    this._createComponent(_$buttonElement, "dxButton", _buttonOptions)
                }
            },
            _detectHasContainerHeight: function() {
                var that = this;
                var element = that.$element();
                if ((0, _type.isDefined)(that._hasHeight) || element.is(":hidden")) {
                    return
                }
                that._pivotGridContainer.addClass("dx-hidden");
                var testElement = (0, _renderer2.default)(DIV).height(TEST_HEIGHT);
                element.append(testElement);
                that._hasHeight = element.height() !== TEST_HEIGHT;
                that._pivotGridContainer.removeClass("dx-hidden");
                testElement.remove()
            },
            _renderHeaders: function(rowHeaderContainer, columnHeaderContainer, filterHeaderContainer, dataHeaderContainer) {
                var that = this;
                var dataSource = that.getDataSource();
                that._rowFields = that._rowFields || new _uiPivot_grid5.FieldsArea(that, "row");
                that._rowFields.render(rowHeaderContainer, dataSource.getAreaFields("row"));
                that._columnFields = that._columnFields || new _uiPivot_grid5.FieldsArea(that, "column");
                that._columnFields.render(columnHeaderContainer, dataSource.getAreaFields("column"));
                that._filterFields = that._filterFields || new _uiPivot_grid5.FieldsArea(that, "filter");
                that._filterFields.render(filterHeaderContainer, dataSource.getAreaFields("filter"));
                that._dataFields = that._dataFields || new _uiPivot_grid5.FieldsArea(that, "data");
                that._dataFields.render(dataHeaderContainer, dataSource.getAreaFields("data"));
                that.$element().dxPivotGridFieldChooserBase("instance").renderSortable()
            },
            _createTableElement: function() {
                var that = this;
                var $table = (0, _renderer2.default)("<table>").css({
                    width: "100%"
                }).toggleClass(BORDERS_CLASS, !!that.option("showBorders")).toggleClass("dx-word-wrap", !!that.option("wordWrapEnabled"));
                _events_engine2.default.on($table, (0, _utils.addNamespace)(_click.name, "dxPivotGrid"), "td", that._handleCellClick.bind(that));
                return $table
            },
            _renderDataArea: function(dataAreaElement) {
                var that = this;
                var dataArea = that._dataArea || new _uiPivot_grid3.DataArea(that);
                that._dataArea = dataArea;
                dataArea.render(dataAreaElement, that._dataController.getCellsInfo());
                return dataArea
            },
            _renderRowsArea: function(rowsAreaElement) {
                var that = this;
                var rowsArea = that._rowsArea || new _uiPivot_grid4.VerticalHeadersArea(that);
                that._rowsArea = rowsArea;
                rowsArea.render(rowsAreaElement, that._dataController.getRowsInfo());
                return rowsArea
            },
            _renderColumnsArea: function(columnsAreaElement) {
                var that = this;
                var columnsArea = that._columnsArea || new _uiPivot_grid4.HorizontalHeadersArea(that);
                that._columnsArea = columnsArea;
                columnsArea.render(columnsAreaElement, that._dataController.getColumnsInfo());
                return columnsArea
            },
            _initMarkup: function() {
                var that = this;
                that.callBase.apply(this, arguments);
                that.$element().addClass(PIVOTGRID_CLASS)
            },
            _renderContentImpl: function() {
                var that = this;
                var columnsAreaElement;
                var rowsAreaElement;
                var dataAreaElement;
                var tableElement;
                var isFirstDrawing = !that._pivotGridContainer;
                var rowHeaderContainer;
                var columnHeaderContainer;
                var filterHeaderContainer;
                var dataHeaderContainer;
                tableElement = !isFirstDrawing && that._tableElement();
                if (!tableElement) {
                    that.$element().addClass(ROW_LINES_CLASS).addClass(FIELDS_CONTAINER_CLASS);
                    that._pivotGridContainer = (0, _renderer2.default)(DIV).addClass("dx-pivotgrid-container");
                    that._renderFieldChooser();
                    that._renderContextMenu();
                    columnsAreaElement = (0, _renderer2.default)(TD).addClass(COLUMN_AREA_CELL_CLASS);
                    rowsAreaElement = (0, _renderer2.default)(TD).addClass(ROW_AREA_CELL_CLASS);
                    dataAreaElement = (0, _renderer2.default)(TD).addClass(DATA_AREA_CELL_CLASS);
                    tableElement = that._createTableElement();
                    dataHeaderContainer = (0, _renderer2.default)(TD).addClass("dx-data-header");
                    filterHeaderContainer = (0, _renderer2.default)("<td>").attr("colspan", "2").addClass("dx-filter-header");
                    columnHeaderContainer = (0, _renderer2.default)(TD).addClass("dx-column-header");
                    rowHeaderContainer = (0, _renderer2.default)(TD).addClass(DESCRIPTION_AREA_CELL_CLASS);
                    (0, _renderer2.default)(TR).append(filterHeaderContainer).appendTo(tableElement);
                    (0, _renderer2.default)(TR).append(dataHeaderContainer).append(columnHeaderContainer).appendTo(tableElement);
                    (0, _renderer2.default)(TR).toggleClass("dx-ie", true === _browser.msie).append(rowHeaderContainer).append(columnsAreaElement).appendTo(tableElement);
                    (0, _renderer2.default)(TR).addClass(BOTTOM_ROW_CLASS).append(rowsAreaElement).append(dataAreaElement).appendTo(tableElement);
                    that._pivotGridContainer.append(tableElement);
                    that.$element().append(that._pivotGridContainer);
                    if ("tree" === that.option("rowHeaderLayout")) {
                        rowsAreaElement.addClass("dx-area-tree-view")
                    }
                }
                that.$element().addClass(OVERFLOW_HIDDEN_CLASS);
                that._createComponent(that.$element(), _uiPivot_grid9.default, {
                    dataSource: that.getDataSource(),
                    encodeHtml: that.option("encodeHtml"),
                    allowFieldDragging: that.option("fieldPanel.allowFieldDragging"),
                    headerFilter: that.option("headerFilter"),
                    visible: that.option("visible")
                });
                var dataArea = that._renderDataArea(dataAreaElement);
                var rowsArea = that._renderRowsArea(rowsAreaElement);
                var columnsArea = that._renderColumnsArea(columnsAreaElement);
                dataArea.tableElement().prepend(columnsArea.headElement());
                if (isFirstDrawing) {
                    that._renderLoadPanel(dataArea.groupElement().parent(), that.$element());
                    that._renderDescriptionArea();
                    rowsArea.processScroll();
                    columnsArea.processScroll()
                } [dataArea, rowsArea, columnsArea].forEach(function(area) {
                    unsubscribeScrollEvents(area)
                });
                that._renderHeaders(rowHeaderContainer, columnHeaderContainer, filterHeaderContainer, dataHeaderContainer);
                that._update(isFirstDrawing)
            },
            _update: function(isFirstDrawing) {
                var that = this;
                var updateHandler = function() {
                    that.updateDimensions().done(function() {
                        that._subscribeToEvents(that._columnsArea, that._rowsArea, that._dataArea)
                    })
                };
                if (that._needDelayResizing(that._dataArea.getData()) && isFirstDrawing) {
                    setTimeout(updateHandler)
                } else {
                    updateHandler()
                }
            },
            _fireContentReadyAction: function() {
                if (!this._dataController.isLoading()) {
                    this.callBase()
                }
            },
            getScrollPath: function(area) {
                var that = this;
                if ("column" === area) {
                    return that._columnsArea.getScrollPath(that._scrollLeft)
                } else {
                    return that._rowsArea.getScrollPath(that._scrollTop)
                }
            },
            getDataSource: function() {
                return this._dataController.getDataSource()
            },
            getFieldChooserPopup: function() {
                return this._fieldChooserPopup
            },
            hasScroll: function(area) {
                var that = this;
                return "column" === area ? that._columnsArea.hasScroll() : that._rowsArea.hasScroll()
            },
            _dimensionChanged: function() {
                this.updateDimensions()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this.updateDimensions()
                }
            },
            _dispose: function() {
                var that = this;
                clearTimeout(that._hideLoadingTimeoutID);
                that.callBase.apply(that, arguments);
                if (that._dataController) {
                    that._dataController.dispose()
                }
            },
            _tableElement: function() {
                return this.$element().find("table").first()
            },
            addWidgetPrefix: function(className) {
                return "dx-pivotgrid-" + className
            },
            resize: function() {
                this.updateDimensions()
            },
            isReady: function() {
                return this.callBase() && !this._dataController.isLoading()
            },
            updateDimensions: function() {
                var that = this;
                var groupWidth;
                var tableElement = that._tableElement();
                var rowsArea = that._rowsArea;
                var columnsArea = that._columnsArea;
                var dataArea = that._dataArea;
                var bordersWidth;
                var totalWidth = 0;
                var totalHeight = 0;
                var rowsAreaWidth = 0;
                var hasRowsScroll;
                var hasColumnsScroll;
                var scrollingOptions = that.option("scrolling") || {};
                var scrollBarInfo = getScrollBarInfo(scrollingOptions.useNative);
                var scrollBarWidth = scrollBarInfo.scrollBarWidth;
                var dataAreaCell = tableElement.find("." + DATA_AREA_CELL_CLASS);
                var rowAreaCell = tableElement.find("." + ROW_AREA_CELL_CLASS);
                var columnAreaCell = tableElement.find("." + COLUMN_AREA_CELL_CLASS);
                var descriptionCell = tableElement.find("." + DESCRIPTION_AREA_CELL_CLASS);
                var filterHeaderCell = tableElement.find(".dx-filter-header");
                var columnHeaderCell = tableElement.find(".dx-column-header");
                var rowFieldsHeader = that._rowFields;
                var d = new _deferred.Deferred;
                if (!(0, _window.hasWindow)()) {
                    return
                }
                var needSynchronizeFieldPanel = rowFieldsHeader.isVisible() && "tree" !== that.option("rowHeaderLayout");
                that.__scrollBarUseNative = scrollBarInfo.scrollBarUseNative;
                that.__scrollBarWidth = scrollBarWidth;
                that._detectHasContainerHeight();
                if (!dataArea.headElement().length) {
                    dataArea.tableElement().prepend(columnsArea.headElement())
                }
                if (needSynchronizeFieldPanel) {
                    rowsArea.updateColspans(rowFieldsHeader.getColumnsCount());
                    rowsArea.tableElement().prepend(rowFieldsHeader.headElement())
                }
                tableElement.addClass(INCOMPRESSIBLE_FIELDS_CLASS);
                dataArea.reset();
                rowsArea.reset();
                columnsArea.reset();
                rowFieldsHeader.reset();
                var calculateHasScroll = function(areaSize, totalSize) {
                    return totalSize - areaSize >= 1
                };
                var calculateGroupHeight = function(dataAreaHeight, totalHeight, hasRowsScroll, hasColumnsScroll, scrollBarWidth) {
                    return hasRowsScroll ? dataAreaHeight : totalHeight + (hasColumnsScroll ? scrollBarWidth : 0)
                };
                (0, _common.deferUpdate)(function() {
                    var resultWidths = dataArea.getColumnsWidth();
                    var rowHeights = rowsArea.getRowsHeight();
                    var rowsAreaHeights = needSynchronizeFieldPanel ? rowHeights.slice(1) : rowHeights;
                    var dataAreaHeights = dataArea.getRowsHeight();
                    var descriptionCellHeight = (0, _size.getSize)(descriptionCell[0], "height", {
                        paddings: true,
                        borders: true,
                        margins: true
                    }) + (needSynchronizeFieldPanel ? rowHeights[0] : 0);
                    var columnsAreaRowCount = that._dataController.getColumnsInfo().length;
                    var resultHeights = (0, _uiPivot_grid.mergeArraysByMaxValue)(rowsAreaHeights, dataAreaHeights.slice(columnsAreaRowCount));
                    var columnsAreaRowHeights = dataAreaHeights.slice(0, columnsAreaRowCount);
                    var columnsAreaHeight = getArraySum(columnsAreaRowHeights);
                    var rowsAreaColumnWidths = rowsArea.getColumnsWidth();
                    var filterAreaHeight = 0;
                    var dataAreaHeight = 0;
                    if (that._hasHeight) {
                        filterAreaHeight = filterHeaderCell.height();
                        bordersWidth = getCommonBorderWidth([columnAreaCell, dataAreaCell, tableElement, columnHeaderCell, filterHeaderCell], "height");
                        dataAreaHeight = that.$element().height() - filterAreaHeight - tableElement.find(".dx-data-header").height() - (Math.max(dataArea.headElement().height(), columnAreaCell.height(), descriptionCellHeight) + bordersWidth)
                    }
                    totalWidth = dataArea.tableElement().width();
                    totalHeight = getArraySum(resultHeights);
                    if (!totalWidth || !totalHeight) {
                        d.resolve();
                        return
                    }
                    rowsAreaWidth = getArraySum(rowsAreaColumnWidths);
                    var elementWidth = that.$element().width();
                    bordersWidth = getCommonBorderWidth([rowAreaCell, dataAreaCell, tableElement], "width");
                    groupWidth = elementWidth - rowsAreaWidth - bordersWidth;
                    groupWidth = groupWidth > 0 ? groupWidth : totalWidth;
                    hasRowsScroll = that._hasHeight && calculateHasScroll(dataAreaHeight, totalHeight);
                    hasColumnsScroll = calculateHasScroll(groupWidth, totalWidth);
                    var groupHeight = calculateGroupHeight(dataAreaHeight, totalHeight, hasRowsScroll, hasColumnsScroll, scrollBarWidth);
                    (0, _common.deferRender)(function() {
                        columnsArea.tableElement().append(dataArea.headElement());
                        rowFieldsHeader.tableElement().append(rowsArea.headElement());
                        if (!hasColumnsScroll && hasRowsScroll && scrollBarWidth) {
                            adjustSizeArray(resultWidths, scrollBarWidth);
                            totalWidth -= scrollBarWidth
                        }
                        if (descriptionCellHeight > columnsAreaHeight) {
                            adjustSizeArray(columnsAreaRowHeights, columnsAreaHeight - descriptionCellHeight);
                            columnsArea.setRowsHeight(columnsAreaRowHeights)
                        }
                        tableElement.removeClass(INCOMPRESSIBLE_FIELDS_CLASS);
                        columnHeaderCell.children().css("maxWidth", groupWidth);
                        columnsArea.groupWidth(groupWidth);
                        columnsArea.processScrollBarSpacing(hasRowsScroll ? scrollBarWidth : 0);
                        columnsArea.setColumnsWidth(resultWidths);
                        rowsArea.groupHeight(that._hasHeight ? groupHeight : "auto");
                        rowsArea.processScrollBarSpacing(hasColumnsScroll ? scrollBarWidth : 0);
                        rowsArea.setColumnsWidth(rowsAreaColumnWidths);
                        rowsArea.setRowsHeight(resultHeights);
                        dataArea.setColumnsWidth(resultWidths);
                        dataArea.setRowsHeight(resultHeights);
                        dataArea.groupWidth(groupWidth);
                        dataArea.groupHeight(that._hasHeight ? groupHeight : "auto");
                        needSynchronizeFieldPanel && rowFieldsHeader.setColumnsWidth(rowsAreaColumnWidths);
                        dataAreaCell.toggleClass(BOTTOM_BORDER_CLASS, !hasRowsScroll);
                        rowAreaCell.toggleClass(BOTTOM_BORDER_CLASS, !hasRowsScroll);
                        if (!that._hasHeight && elementWidth !== that.$element().width()) {
                            var diff = elementWidth - that.$element().width();
                            if (!hasColumnsScroll) {
                                adjustSizeArray(resultWidths, diff);
                                columnsArea.setColumnsWidth(resultWidths);
                                dataArea.setColumnsWidth(resultWidths)
                            }
                            dataArea.groupWidth(groupWidth - diff);
                            columnsArea.groupWidth(groupWidth - diff)
                        }
                        if (that._hasHeight && that._filterFields.isVisible() && filterHeaderCell.height() !== filterAreaHeight) {
                            var _diff = filterHeaderCell.height() - filterAreaHeight;
                            if (_diff > 0) {
                                hasRowsScroll = calculateHasScroll(dataAreaHeight - _diff, totalHeight);
                                var _groupHeight = calculateGroupHeight(dataAreaHeight - _diff, totalHeight, hasRowsScroll, hasColumnsScroll, scrollBarWidth);
                                dataArea.groupHeight(_groupHeight);
                                rowsArea.groupHeight(_groupHeight)
                            }
                        }
                        if ("virtual" === scrollingOptions.mode) {
                            var virtualContentParams = that._dataController.calculateVirtualContentParams({
                                virtualRowHeight: scrollingOptions.virtualRowHeight,
                                virtualColumnWidth: scrollingOptions.virtualColumnWidth,
                                itemWidths: resultWidths,
                                itemHeights: resultHeights,
                                rowCount: resultHeights.length,
                                columnCount: resultWidths.length,
                                viewportWidth: groupWidth,
                                viewportHeight: that._hasHeight ? groupHeight : (0, _renderer2.default)(window).outerHeight()
                            });
                            dataArea.setVirtualContentParams({
                                top: virtualContentParams.contentTop,
                                left: virtualContentParams.contentLeft,
                                width: virtualContentParams.width,
                                height: virtualContentParams.height
                            });
                            rowsArea.setVirtualContentParams({
                                top: virtualContentParams.contentTop,
                                width: rowsAreaWidth,
                                height: virtualContentParams.height
                            });
                            columnsArea.setVirtualContentParams({
                                left: virtualContentParams.contentLeft,
                                width: virtualContentParams.width,
                                height: columnsArea.groupElement().height()
                            })
                        }
                        var updateScrollableResults = [];
                        dataArea.processScroll(scrollBarInfo.scrollBarUseNative, hasColumnsScroll, hasRowsScroll);
                        (0, _iterator.each)([columnsArea, rowsArea, dataArea], function(_, area) {
                            updateScrollableResults.push(area && area.updateScrollable())
                        });
                        that._updateLoading();
                        that._renderNoDataText(dataAreaCell);
                        that._testResultWidths = resultWidths;
                        that._testResultHeights = resultHeights;
                        _deferred.when.apply(_renderer2.default, updateScrollableResults).done(function() {
                            that._updateScrollPosition(columnsArea, rowsArea, dataArea);
                            d.resolve()
                        })
                    })
                });
                return d
            },
            applyPartialDataSource: function(area, path, dataSource) {
                this._dataController.applyPartialDataSource(area, path, dataSource)
            }
        }).inherit(_uiPivot_grid10.ExportMixin).include(_uiPivot_grid12.default);
        (0, _component_registrator2.default)("dxPivotGrid", PivotGrid);
        module.exports = PivotGrid
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.data_controller.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _extend2 = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _string2 = _interopRequireDefault(_string);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_scrolling_core */ 371);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _uiGrid_core3 = __webpack_require__( /*! ../grid_core/ui.grid_core.virtual_columns_core */ 389);
        var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
        var _uiGrid_core5 = __webpack_require__( /*! ../grid_core/ui.grid_core.state_storing_core */ 360);
        var _uiGrid_core6 = _interopRequireDefault(_uiGrid_core5);
        var _data_source = __webpack_require__( /*! ./data_source */ 247);
        var _data_source2 = _interopRequireDefault(_data_source);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _uiPivot_grid2 = _interopRequireDefault(_uiPivot_grid);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var math = Math;
        var GRAND_TOTAL_TYPE = "GT";
        var TOTAL_TYPE = "T";
        var DATA_TYPE = "D";
        var NOT_AVAILABLE = "#N/A";
        var CHANGING_DURATION_IF_PAGINATE = 300;
        var proxyMethod = function(instance, methodName, defaultResult) {
            if (!instance[methodName]) {
                instance[methodName] = function() {
                    var dataSource = this._dataSource;
                    return dataSource ? dataSource[methodName].apply(dataSource, arguments) : defaultResult
                }
            }
        };
        exports.DataController = _class2.default.inherit(function() {
            function getHeaderItemText(item, description, options) {
                var text = item.text;
                if ((0, _type.isDefined)(item.displayText)) {
                    text = item.displayText
                } else {
                    if ((0, _type.isDefined)(item.caption)) {
                        text = item.caption
                    } else {
                        if (item.type === GRAND_TOTAL_TYPE) {
                            text = options.texts.grandTotal
                        }
                    }
                }
                if (item.isAdditionalTotal) {
                    text = _string2.default.format(options.texts.total || "", text)
                }
                return text
            }

            function formatCellValue(value, dataField, errorText) {
                return value === NOT_AVAILABLE ? errorText : (0, _uiPivot_grid.formatValue)(value, dataField)
            }
            var createHeaderInfo = function() {
                var getHeaderItemsDepth = function(headerItems) {
                    var depth = 0;
                    (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
                        depth = math.max(depth, items.length)
                    });
                    return depth
                };
                var createInfoItem = function(headerItem, breadth, isHorizontal, isTree) {
                    var infoItem = {
                        type: headerItem.type,
                        text: headerItem.text
                    };
                    if (headerItem.path) {
                        infoItem.path = headerItem.path
                    }
                    if (headerItem.width) {
                        infoItem.width = headerItem.width
                    }
                    if ((0, _type.isDefined)(headerItem.wordWrapEnabled)) {
                        infoItem.wordWrapEnabled = headerItem.wordWrapEnabled
                    }
                    if (headerItem.isLast) {
                        infoItem.isLast = true
                    }
                    if (headerItem.sorted) {
                        infoItem.sorted = true
                    }
                    if (headerItem.isMetric) {
                        infoItem.dataIndex = headerItem.dataIndex
                    }
                    if ((0, _type.isDefined)(headerItem.expanded)) {
                        infoItem.expanded = headerItem.expanded
                    }
                    if (breadth > 1) {
                        infoItem[isHorizontal ? "colspan" : "rowspan"] = breadth
                    }
                    if (headerItem.depthSize && headerItem.depthSize > 1) {
                        infoItem[isHorizontal ? "rowspan" : "colspan"] = headerItem.depthSize
                    }
                    if (headerItem.index >= 0) {
                        infoItem.dataSourceIndex = headerItem.index
                    }
                    if (isTree && headerItem.children && headerItem.children.length && !headerItem.children[0].isMetric) {
                        infoItem.width = null;
                        infoItem.isWhiteSpace = true
                    }
                    return infoItem
                };
                var addInfoItem = function(info, options) {
                    var breadth = options.lastIndex - options.index || 1;
                    var addInfoItemCore = function(info, infoItem, itemIndex, depthIndex, isHorizontal) {
                        var index = isHorizontal ? depthIndex : itemIndex;
                        while (!info[index]) {
                            info.push([])
                        }
                        if (isHorizontal) {
                            info[index].push(infoItem)
                        } else {
                            info[index].unshift(infoItem)
                        }
                    };
                    var itemInfo = createInfoItem(options.headerItem, breadth, options.isHorizontal, options.isTree);
                    addInfoItemCore(info, itemInfo, options.index, options.depth, options.isHorizontal);
                    if (!options.headerItem.children || 0 === options.headerItem.children.length) {
                        return options.lastIndex + 1
                    }
                    return options.lastIndex
                };
                var isItemSorted = function(items, sortBySummaryPath) {
                    var path;
                    var item = items[0];
                    var stringValuesUsed = (0, _type.isString)(sortBySummaryPath[0]);
                    var headerItem = item.dataIndex >= 0 ? items[1] : item;
                    if (stringValuesUsed && sortBySummaryPath[0].indexOf("&[") !== -1 && headerItem.key || !headerItem.key) {
                        path = (0, _uiPivot_grid.createPath)(items)
                    } else {
                        path = _iterator2.default.map(items, function(item) {
                            return item.dataIndex >= 0 ? item.value : item.text
                        }).reverse()
                    }
                    if (item.type === GRAND_TOTAL_TYPE) {
                        path = path.slice(1)
                    }
                    return path.join("/") === sortBySummaryPath.join("/")
                };
                var getViewHeaderItems = function(headerItems, headerDescriptions, cellDescriptions, depthSize, options) {
                    var cellDescriptionsCount = cellDescriptions.length;
                    var viewHeaderItems = createViewHeaderItems(headerItems, headerDescriptions);
                    var dataFields = options.dataFields;
                    var d = new _deferred.Deferred;
                    (0, _deferred.when)(viewHeaderItems).done(function(viewHeaderItems) {
                        options.notifyProgress(.5);
                        if (options.showGrandTotals) {
                            viewHeaderItems[!options.showTotalsPrior ? "push" : "unshift"]({
                                type: GRAND_TOTAL_TYPE,
                                isEmpty: options.isEmptyGrandTotal
                            })
                        }
                        var hideTotals = false === options.showTotals || dataFields.length > 0 && dataFields.length === options.hiddenTotals.length;
                        var hideData = dataFields.length > 0 && options.hiddenValues.length === dataFields.length;
                        if (hideData && hideTotals) {
                            depthSize = 1
                        }
                        if (!hideTotals || "tree" === options.layout) {
                            addAdditionalTotalHeaderItems(viewHeaderItems, headerDescriptions, options.showTotalsPrior, "tree" === options.layout)
                        }(0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(viewHeaderItems, function(items) {
                            var item = items[0];
                            if (!item.children || 0 === item.children.length) {
                                item.depthSize = depthSize - items.length + 1
                            }
                        })).done(function() {
                            if (cellDescriptionsCount > 1) {
                                addMetricHeaderItems(viewHeaderItems, cellDescriptions, options)
                            }!options.showEmpty && removeHiddenItems(viewHeaderItems);
                            options.notifyProgress(.75);
                            (0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(viewHeaderItems, function(items) {
                                var item = items[0];
                                var isMetric = item.isMetric;
                                var field = headerDescriptions[items.length - 1] || {};
                                if (item.type === DATA_TYPE && !isMetric) {
                                    item.width = field.width
                                }
                                if (true === hideData && item.type === DATA_TYPE) {
                                    var parentChildren = (items[1] ? items[1].children : viewHeaderItems) || [];
                                    parentChildren.splice((0, _array.inArray)(item, parentChildren), 1);
                                    return
                                }
                                if (isMetric) {
                                    item.wordWrapEnabled = cellDescriptions[item.dataIndex].wordWrapEnabled
                                } else {
                                    item.wordWrapEnabled = field.wordWrapEnabled
                                }
                                item.isLast = !item.children || !item.children.length;
                                if (item.isLast) {
                                    _iterator2.default.each(options.sortBySummaryPaths, function(index, sortBySummaryPath) {
                                        if (!(0, _type.isDefined)(item.dataIndex)) {
                                            sortBySummaryPath = sortBySummaryPath.slice(0);
                                            sortBySummaryPath.pop()
                                        }
                                        if (isItemSorted(items, sortBySummaryPath)) {
                                            item.sorted = true;
                                            return false
                                        }
                                    })
                                }
                                item.text = getHeaderItemText(item, field, options)
                            })).done(function() {
                                if (!viewHeaderItems.length) {
                                    viewHeaderItems.push({})
                                }
                                options.notifyProgress(1);
                                d.resolve(viewHeaderItems)
                            })
                        })
                    });
                    return d
                };

                function createHeaderItem(childrenStack, depth, index) {
                    var parent = childrenStack[depth] = childrenStack[depth] || [];
                    var node = parent[index] = {};
                    if (childrenStack[depth + 1]) {
                        node.children = childrenStack[depth + 1];
                        for (var i = depth + 1; i < childrenStack.length; i++) {
                            childrenStack[i] = void 0
                        }
                        childrenStack.length = depth + 1
                    }
                    return node
                }

                function createViewHeaderItems(headerItems, headerDescriptions) {
                    var headerDescriptionsCount = headerDescriptions && headerDescriptions.length || 0;
                    var childrenStack = [];
                    var d = new _deferred.Deferred;
                    var headerItem;
                    (0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(headerItems, function(items, index) {
                        var item = items[0];
                        var path = (0, _uiPivot_grid.createPath)(items);
                        headerItem = createHeaderItem(childrenStack, path.length, index);
                        headerItem.type = DATA_TYPE;
                        headerItem.value = item.value;
                        headerItem.path = path;
                        headerItem.text = item.text;
                        headerItem.index = item.index;
                        headerItem.displayText = item.displayText;
                        headerItem.key = item.key;
                        headerItem.isEmpty = item.isEmpty;
                        if (path.length < headerDescriptionsCount && (!item.children || 0 !== item.children.length)) {
                            headerItem.expanded = !!item.children
                        }
                    })).done(function() {
                        d.resolve(createHeaderItem(childrenStack, 0, 0).children || [])
                    });
                    return d
                }

                function addMetricHeaderItems(headerItems, cellDescriptions, options) {
                    (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
                        var item = items[0];
                        var i;
                        if (!item.children || 0 === item.children.length) {
                            item.children = [];
                            for (i = 0; i < cellDescriptions.length; i++) {
                                var isGrandTotal = item.type === GRAND_TOTAL_TYPE;
                                var isTotal = item.type === TOTAL_TYPE;
                                var isValue = item.type === DATA_TYPE;
                                var columnIsHidden = false === cellDescriptions[i].visible || isGrandTotal && (0, _array.inArray)(i, options.hiddenGrandTotals) !== -1 || isTotal && (0, _array.inArray)(i, options.hiddenTotals) !== -1 || isValue && (0, _array.inArray)(i, options.hiddenValues) !== -1;
                                if (columnIsHidden) {
                                    continue
                                }
                                item.children.push({
                                    caption: cellDescriptions[i].caption,
                                    path: item.path,
                                    type: item.type,
                                    value: i,
                                    index: item.index,
                                    dataIndex: i,
                                    isMetric: true,
                                    isEmpty: item.isEmpty && item.isEmpty[i]
                                })
                            }
                        }
                    })
                }

                function addAdditionalTotalHeaderItems(headerItems, headerDescriptions, showTotalsPrior, isTree) {
                    showTotalsPrior = showTotalsPrior || isTree;
                    (0, _uiPivot_grid.foreachTree)(headerItems, function(items, index) {
                        var item = items[0];
                        var parentChildren = (items[1] ? items[1].children : headerItems) || [];
                        var dataField = headerDescriptions[items.length - 1];
                        if (item.type === DATA_TYPE && item.expanded && (false !== dataField.showTotals || isTree)) {
                            index !== -1 && parentChildren.splice(showTotalsPrior ? index : index + 1, 0, (0, _extend2.extend)({}, item, {
                                children: null,
                                type: TOTAL_TYPE,
                                expanded: showTotalsPrior ? true : null,
                                isAdditionalTotal: true
                            }));
                            if (showTotalsPrior) {
                                item.expanded = null
                            }
                        }
                    })
                }
                var removeEmptyParent = function removeEmptyParent(items, index) {
                    var parent = items[index + 1];
                    if (!items[index].children.length && parent && parent.children) {
                        parent.children.splice((0, _array.inArray)(items[index], parent.children), 1);
                        removeEmptyParent(items, index + 1)
                    }
                };

                function removeHiddenItems(headerItems) {
                    (0, _uiPivot_grid.foreachTree)([{
                        children: headerItems
                    }], function(items, index) {
                        var item = items[0];
                        var parentChildren = (items[1] ? items[1].children : headerItems) || [];
                        var isEmpty = item.isEmpty;
                        if (isEmpty && isEmpty.length) {
                            isEmpty = item.isEmpty.filter(function(isEmpty) {
                                return isEmpty
                            }).length === isEmpty.length
                        }
                        if (item && !item.children && isEmpty) {
                            parentChildren.splice(index, 1);
                            removeEmptyParent(items, 1)
                        }
                    })
                }
                var fillHeaderInfo = function(info, viewHeaderItems, depthSize, isHorizontal, isTree) {
                    var lastIndex = 0;
                    var index;
                    var depth;
                    var indexesByDepth = [0];
                    (0, _uiPivot_grid.foreachTree)(viewHeaderItems, function(items) {
                        var headerItem = items[0];
                        depth = headerItem.isMetric ? depthSize : items.length - 1;
                        while (indexesByDepth.length - 1 < depth) {
                            indexesByDepth.push(indexesByDepth[indexesByDepth.length - 1])
                        }
                        index = indexesByDepth[depth] || 0;
                        lastIndex = addInfoItem(info, {
                            headerItem: headerItem,
                            index: index,
                            lastIndex: lastIndex,
                            depth: depth,
                            isHorizontal: isHorizontal,
                            isTree: isTree
                        });
                        indexesByDepth.length = depth;
                        indexesByDepth.push(lastIndex)
                    })
                };
                return function(headerItems, headerDescriptions, cellDescriptions, isHorizontal, options) {
                    var info = [];
                    var depthSize = getHeaderItemsDepth(headerItems) || 1;
                    var d = new _deferred.Deferred;
                    getViewHeaderItems(headerItems, headerDescriptions, cellDescriptions, depthSize, options).done(function(viewHeaderItems) {
                        fillHeaderInfo(info, viewHeaderItems, depthSize, isHorizontal, "tree" === options.layout);
                        options.notifyProgress(1);
                        d.resolve(info)
                    });
                    return d
                }
            }();

            function createSortPaths(headerFields, dataFields) {
                var sortBySummaryPaths = [];
                _iterator2.default.each(headerFields, function(index, headerField) {
                    var fieldIndex = _uiPivot_grid2.default.findField(dataFields, headerField.sortBySummaryField);
                    if (fieldIndex >= 0) {
                        sortBySummaryPaths.push((headerField.sortBySummaryPath || []).concat([fieldIndex]))
                    }
                });
                return sortBySummaryPaths
            }

            function foreachRowInfo(rowsInfo, callback) {
                var columnOffset = 0;
                var columnOffsetResetIndexes = [];
                for (var i = 0; i < rowsInfo.length; i++) {
                    for (var j = 0; j < rowsInfo[i].length; j++) {
                        var rowSpanOffset = (rowsInfo[i][j].rowspan || 1) - 1;
                        var visibleIndex = i + rowSpanOffset;
                        if (columnOffsetResetIndexes[i]) {
                            columnOffset -= columnOffsetResetIndexes[i];
                            columnOffsetResetIndexes[i] = 0
                        }
                        if (false === callback(rowsInfo[i][j], visibleIndex, i, j, columnOffset)) {
                            break
                        }
                        columnOffsetResetIndexes[i + (rowsInfo[i][j].rowspan || 1)] = (columnOffsetResetIndexes[i + (rowsInfo[i][j].rowspan || 1)] || 0) + 1;
                        columnOffset++
                    }
                }
            }

            function createCellsInfo(rowsInfo, columnsInfo, data, dataFields, dataFieldArea, errorText) {
                var info = [];
                var dataFieldAreaInRows = "row" === dataFieldArea;
                var dataSourceCells = data.values;
                dataSourceCells.length && foreachRowInfo(rowsInfo, function(rowInfo, rowIndex) {
                    var row = info[rowIndex] = [];
                    var dataRow = dataSourceCells[rowInfo.dataSourceIndex >= 0 ? rowInfo.dataSourceIndex : data.grandTotalRowIndex] || [];
                    rowInfo.isLast && _uiGrid_core4.default.foreachColumnInfo(columnsInfo, function(columnInfo, columnIndex) {
                        var dataIndex = (dataFieldAreaInRows ? rowInfo.dataIndex : columnInfo.dataIndex) || 0;
                        var dataField = dataFields[dataIndex];
                        if (columnInfo.isLast && dataField) {
                            var cell = dataRow[columnInfo.dataSourceIndex >= 0 ? columnInfo.dataSourceIndex : data.grandTotalColumnIndex];
                            if (!Array.isArray(cell)) {
                                cell = [cell]
                            }
                            var cellValue = cell[dataIndex];
                            row[columnIndex] = {
                                text: formatCellValue(cellValue, dataField, errorText),
                                value: cellValue,
                                format: dataField.format,
                                dataType: dataField.dataType,
                                columnType: columnInfo.type,
                                rowType: rowInfo.type,
                                rowPath: rowInfo.path || [],
                                columnPath: columnInfo.path || [],
                                dataIndex: dataIndex
                            };
                            if (dataField.width) {
                                row[columnIndex].width = dataField.width
                            }
                        }
                    })
                });
                return info
            }

            function getHeaderIndexedItems(headerItems, options) {
                var visibleIndex = 0;
                var indexedItems = [];
                (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
                    var headerItem = items[0];
                    var path = (0, _uiPivot_grid.createPath)(items);
                    if (headerItem.children && false === options.showTotals) {
                        return
                    }
                    var indexedItem = (0, _extend2.extend)(true, {}, headerItem, {
                        visibleIndex: visibleIndex++,
                        path: path
                    });
                    if ((0, _type.isDefined)(indexedItem.index)) {
                        indexedItems[indexedItem.index] = indexedItem
                    } else {
                        indexedItems.push(indexedItem)
                    }
                });
                return indexedItems
            }

            function createScrollController(dataController, component, dataAdapter) {
                if (component && "virtual" === component.option("scrolling.mode")) {
                    return new _uiGrid_core2.default.VirtualScrollController(component, (0, _extend2.extend)({
                        hasKnownLastPage: function() {
                            return true
                        },
                        pageCount: function() {
                            return math.ceil(this.totalItemsCount() / this.pageSize())
                        },
                        updateLoading: function() {},
                        itemsCount: function() {
                            if (this.pageIndex() < this.pageCount() - 1) {
                                return this.pageSize()
                            } else {
                                return this.totalItemsCount() % this.pageSize()
                            }
                        },
                        items: function() {
                            return []
                        },
                        viewportItems: function() {
                            return []
                        },
                        onChanged: function() {},
                        isLoading: function() {
                            return dataController.isLoading()
                        },
                        changingDuration: function() {
                            var dataSource = dataController._dataSource;
                            if (dataSource.paginate()) {
                                return CHANGING_DURATION_IF_PAGINATE
                            }
                            return dataController._changingDuration || 0
                        }
                    }, dataAdapter))
                }
            }

            function getHiddenTotals(dataFields) {
                var result = [];
                _iterator2.default.each(dataFields, function(index, field) {
                    if (false === field.showTotals) {
                        result.push(index)
                    }
                });
                return result
            }

            function getHiddenValues(dataFields) {
                var result = [];
                dataFields.forEach(function(field, index) {
                    if (void 0 === field.showValues && false === field.showTotals || false === field.showValues) {
                        result.push(index)
                    }
                });
                return result
            }

            function getHiddenGrandTotalsTotals(dataFields, columnFields) {
                var result = [];
                _iterator2.default.each(dataFields, function(index, field) {
                    if (false === field.showGrandTotals) {
                        result.push(index)
                    }
                });
                if (0 === columnFields.length && result.length === dataFields.length) {
                    result = []
                }
                return result
            }
            var members = {
                ctor: function(options) {
                    var that = this;
                    var virtualScrollControllerChanged = that._fireChanged.bind(that);
                    options = that._options = options || {};
                    that.dataSourceChanged = (0, _callbacks2.default)();
                    that._dataSource = that._createDataSource(options);
                    that._rowsScrollController = createScrollController(that, options.component, {
                        totalItemsCount: function() {
                            return that.totalRowCount()
                        },
                        pageIndex: function(index) {
                            return that.rowPageIndex(index)
                        },
                        pageSize: function() {
                            return that.rowPageSize()
                        },
                        load: function() {
                            if (that._rowsScrollController.pageIndex() >= this.pageCount()) {
                                that._rowsScrollController.pageIndex(this.pageCount() - 1)
                            }
                            return that._rowsScrollController.handleDataChanged(function() {
                                if (that._dataSource.paginate()) {
                                    that._dataSource.load()
                                } else {
                                    virtualScrollControllerChanged.apply(this, arguments)
                                }
                            })
                        }
                    });
                    that._columnsScrollController = createScrollController(that, options.component, {
                        totalItemsCount: function() {
                            return that.totalColumnCount()
                        },
                        pageIndex: function(index) {
                            return that.columnPageIndex(index)
                        },
                        pageSize: function() {
                            return that.columnPageSize()
                        },
                        load: function() {
                            if (that._columnsScrollController.pageIndex() >= this.pageCount()) {
                                that._columnsScrollController.pageIndex(this.pageCount() - 1)
                            }
                            return that._columnsScrollController.handleDataChanged(function() {
                                if (that._dataSource.paginate()) {
                                    that._dataSource.load()
                                } else {
                                    virtualScrollControllerChanged.apply(this, arguments)
                                }
                            })
                        }
                    });
                    that._stateStoringController = new _uiGrid_core6.default.StateStoringController(options.component).init();
                    that._columnsInfo = [];
                    that._rowsInfo = [];
                    that._cellsInfo = [];
                    that.expandValueChanging = (0, _callbacks2.default)();
                    that.loadingChanged = (0, _callbacks2.default)();
                    that.progressChanged = (0, _callbacks2.default)();
                    that.scrollChanged = (0, _callbacks2.default)();
                    that.load();
                    that._update();
                    that.changed = (0, _callbacks2.default)()
                },
                _fireChanged: function() {
                    var that = this;
                    var startChanging = new Date;
                    that.changed && !that._lockChanged && that.changed.fire();
                    that._changingDuration = new Date - startChanging
                },
                _correctSkipsTakes: function(rowIndex, rowSkip, rowSpan, levels, skips, takes) {
                    var endIndex = rowSpan ? rowIndex + rowSpan - 1 : rowIndex;
                    skips[levels.length] = skips[levels.length] || 0;
                    takes[levels.length] = takes[levels.length] || 0;
                    if (endIndex < rowSkip) {
                        skips[levels.length]++
                    } else {
                        takes[levels.length]++
                    }
                },
                _calculatePagingForRowExpandedPaths: function(options, skips, takes, rowExpandedSkips, rowExpandedTakes) {
                    var rows = this._rowsInfo;
                    var rowCount = Math.min(options.rowSkip + options.rowTake, rows.length);
                    var rowExpandedPaths = options.rowExpandedPaths;
                    var levels = [];
                    var expandedPathIndexes = {};
                    var i;
                    var j;
                    var path;
                    rowExpandedPaths.forEach(function(path, index) {
                        expandedPathIndexes[path] = index
                    });
                    for (i = 0; i < rowCount; i++) {
                        takes.length = skips.length = levels.length + 1;
                        for (j = 0; j < rows[i].length; j++) {
                            var cell = rows[i][j];
                            if ("D" === cell.type) {
                                this._correctSkipsTakes(i, options.rowSkip, cell.rowspan, levels, skips, takes);
                                path = cell.path || path;
                                var expandIndex = path && path.length > 1 ? expandedPathIndexes[path.slice(0, -1)] : -1;
                                if (expandIndex >= 0) {
                                    rowExpandedSkips[expandIndex] = skips[levels.length] || 0;
                                    rowExpandedTakes[expandIndex] = takes[levels.length] || 0
                                }
                                if (cell.rowspan) {
                                    levels.push(cell.rowspan)
                                }
                            }
                        }
                        levels = levels.map(function(level) {
                            return level - 1
                        }).filter(function(level) {
                            return level > 0
                        })
                    }
                },
                _calculatePagingForColumnExpandedPaths: function(options, skips, takes, expandedSkips, expandedTakes) {
                    var skipByPath = {};
                    var takeByPath = {};
                    _uiGrid_core4.default.foreachColumnInfo(this._columnsInfo, function(columnInfo, columnIndex) {
                        if ("D" === columnInfo.type && columnInfo.path && void 0 === columnInfo.dataIndex) {
                            var colspan = columnInfo.colspan || 1;
                            var path = columnInfo.path.slice(0, -1).toString();
                            skipByPath[path] = skipByPath[path] || 0;
                            takeByPath[path] = takeByPath[path] || 0;
                            if (columnIndex + colspan <= options.columnSkip) {
                                skipByPath[path]++
                            } else {
                                if (columnIndex < options.columnSkip + options.columnTake) {
                                    takeByPath[path]++
                                }
                            }
                        }
                    });
                    skips[0] = skipByPath[[]];
                    takes[0] = takeByPath[[]];
                    options.columnExpandedPaths.forEach(function(path, index) {
                        var skip = skipByPath[path];
                        var take = takeByPath[path];
                        if (void 0 !== skip) {
                            expandedSkips[index] = skip
                        }
                        if (void 0 !== take) {
                            expandedTakes[index] = take
                        }
                    })
                },
                _processPagingForExpandedPaths: function(options, area, storeLoadOptions, reload) {
                    var expandedPaths = options[area + "ExpandedPaths"];
                    var expandedSkips = expandedPaths.map(function() {
                        return 0
                    });
                    var expandedTakes = expandedPaths.map(function() {
                        return reload ? options.pageSize : 0
                    });
                    var skips = [];
                    var takes = [];
                    if (!reload) {
                        if ("row" === area) {
                            this._calculatePagingForRowExpandedPaths(options, skips, takes, expandedSkips, expandedTakes)
                        } else {
                            this._calculatePagingForColumnExpandedPaths(options, skips, takes, expandedSkips, expandedTakes)
                        }
                    }
                    this._savePagingForExpandedPaths(options, area, storeLoadOptions, skips[0], takes[0], expandedSkips, expandedTakes)
                },
                _savePagingForExpandedPaths: function(options, area, storeLoadOptions, skip, take, expandedSkips, expandedTakes) {
                    var expandedPaths = options[area + "ExpandedPaths"];
                    options[area + "ExpandedPaths"] = [];
                    options[area + "Skip"] = void 0 !== skip ? skip : options[area + "Skip"];
                    options[area + "Take"] = void 0 !== take ? take : options[area + "Take"];
                    for (var i = 0; i < expandedPaths.length; i++) {
                        if (expandedTakes[i]) {
                            var _extend;
                            var isOppositeArea = options.area && options.area !== area;
                            storeLoadOptions.push((0, _extend2.extend)({
                                area: area,
                                headerName: area + "s"
                            }, options, (_extend = {}, _defineProperty(_extend, area + "Skip", expandedSkips[i]), _defineProperty(_extend, area + "Take", expandedTakes[i]), _defineProperty(_extend, isOppositeArea ? "oppositePath" : "path", expandedPaths[i]), _extend)))
                        }
                    }
                },
                _handleCustomizeStoreLoadOptions: function(storeLoadOptions, reload) {
                    var _this = this;
                    var options = storeLoadOptions[0];
                    var rowsScrollController = this._rowsScrollController;
                    if (this._dataSource.paginate() && rowsScrollController) {
                        var rowPageSize = rowsScrollController._dataSource.pageSize();
                        if ("rows" === options.headerName) {
                            options.rowSkip = 0;
                            options.rowTake = rowPageSize;
                            options.rowExpandedPaths = []
                        } else {
                            options.rowSkip = rowsScrollController.beginPageIndex() * rowPageSize;
                            options.rowTake = (rowsScrollController.endPageIndex() - rowsScrollController.beginPageIndex() + 1) * rowPageSize;
                            this._processPagingForExpandedPaths(options, "row", storeLoadOptions, reload)
                        }
                    }
                    var columnsScrollController = this._columnsScrollController;
                    if (this._dataSource.paginate() && columnsScrollController) {
                        var columnPageSize = columnsScrollController._dataSource.pageSize();
                        storeLoadOptions.forEach(function(options, index) {
                            if ("columns" === options.headerName) {
                                options.columnSkip = 0;
                                options.columnTake = columnPageSize;
                                options.columnExpandedPaths = []
                            } else {
                                options.columnSkip = columnsScrollController.beginPageIndex() * columnPageSize;
                                options.columnTake = (columnsScrollController.endPageIndex() - columnsScrollController.beginPageIndex() + 1) * columnPageSize;
                                _this._processPagingForExpandedPaths(options, "column", storeLoadOptions, reload)
                            }
                        })
                    }
                },
                load: function() {
                    var that = this;
                    var stateStoringController = this._stateStoringController;
                    if (stateStoringController.isEnabled() && !stateStoringController.isLoaded()) {
                        stateStoringController.load().always(function(state) {
                            if (state) {
                                that._dataSource.state(state)
                            } else {
                                that._dataSource.load()
                            }
                        })
                    } else {
                        that._dataSource.load()
                    }
                },
                calculateVirtualContentParams: function(contentParams) {
                    var that = this;
                    var rowsScrollController = that._rowsScrollController;
                    var columnsScrollController = that._columnsScrollController;
                    if (rowsScrollController && columnsScrollController) {
                        rowsScrollController.viewportItemSize(contentParams.virtualRowHeight);
                        rowsScrollController.viewportSize(contentParams.viewportHeight / rowsScrollController.viewportItemSize());
                        rowsScrollController.setContentSize(contentParams.itemHeights);
                        columnsScrollController.viewportItemSize(contentParams.virtualColumnWidth);
                        columnsScrollController.viewportSize(contentParams.viewportWidth / columnsScrollController.viewportItemSize());
                        columnsScrollController.setContentSize(contentParams.itemWidths);
                        _common2.default.deferUpdate(function() {
                            columnsScrollController.loadIfNeed();
                            rowsScrollController.loadIfNeed()
                        });
                        that.scrollChanged.fire({
                            left: columnsScrollController.getViewportPosition(),
                            top: rowsScrollController.getViewportPosition()
                        });
                        return {
                            contentTop: rowsScrollController.getContentOffset(),
                            contentLeft: columnsScrollController.getContentOffset(),
                            width: columnsScrollController.getVirtualContentSize(),
                            height: rowsScrollController.getVirtualContentSize()
                        }
                    }
                },
                setViewportPosition: function(left, top) {
                    this._rowsScrollController.setViewportPosition(top || 0);
                    this._columnsScrollController.setViewportPosition(left || 0)
                },
                subscribeToWindowScrollEvents: function($element) {
                    this._rowsScrollController && this._rowsScrollController.subscribeToWindowScrollEvents($element)
                },
                updateWindowScrollPosition: function(position) {
                    this._rowsScrollController && this._rowsScrollController.scrollTo(position)
                },
                updateViewOptions: function(options) {
                    (0, _extend2.extend)(this._options, options);
                    this._update()
                },
                _handleExpandValueChanging: function(e) {
                    this.expandValueChanging.fire(e)
                },
                _handleLoadingChanged: function(isLoading) {
                    this.loadingChanged.fire(isLoading)
                },
                _handleProgressChanged: function(progress) {
                    this.progressChanged.fire(progress)
                },
                _handleFieldsPrepared: function(e) {
                    this._options.onFieldsPrepared && this._options.onFieldsPrepared(e)
                },
                _createDataSource: function(options) {
                    var that = this;
                    var dataSourceOptions = options.dataSource;
                    var dataSource;
                    that._isSharedDataSource = dataSourceOptions instanceof _data_source2.default;
                    if (that._isSharedDataSource) {
                        dataSource = dataSourceOptions
                    } else {
                        dataSource = new _data_source2.default(dataSourceOptions)
                    }
                    that._expandValueChangingHandler = that._handleExpandValueChanging.bind(that);
                    that._loadingChangedHandler = that._handleLoadingChanged.bind(that);
                    that._fieldsPreparedHandler = that._handleFieldsPrepared.bind(that);
                    that._customizeStoreLoadOptionsHandler = that._handleCustomizeStoreLoadOptions.bind(that);
                    that._changedHandler = function() {
                        that._update();
                        that.dataSourceChanged.fire()
                    };
                    that._progressChangedHandler = function(progress) {
                        that._handleProgressChanged(.8 * progress)
                    };
                    dataSource.on("changed", that._changedHandler);
                    dataSource.on("expandValueChanging", that._expandValueChangingHandler);
                    dataSource.on("loadingChanged", that._loadingChangedHandler);
                    dataSource.on("progressChanged", that._progressChangedHandler);
                    dataSource.on("fieldsPrepared", that._fieldsPreparedHandler);
                    dataSource.on("customizeStoreLoadOptions", that._customizeStoreLoadOptionsHandler);
                    return dataSource
                },
                getDataSource: function() {
                    return this._dataSource
                },
                isLoading: function() {
                    return this._dataSource.isLoading()
                },
                beginLoading: function() {
                    this._dataSource.beginLoading()
                },
                endLoading: function() {
                    this._dataSource.endLoading()
                },
                _update: function() {
                    var that = this;
                    var dataSource = that._dataSource;
                    var options = that._options;
                    var columnFields = dataSource.getAreaFields("column");
                    var rowFields = dataSource.getAreaFields("row");
                    var dataFields = dataSource.getAreaFields("data");
                    var dataFieldsForRows = "row" === options.dataFieldArea ? dataFields : [];
                    var dataFieldsForColumns = "row" !== options.dataFieldArea ? dataFields : [];
                    var data = dataSource.getData();
                    var hiddenTotals = getHiddenTotals(dataFields);
                    var hiddenValues = getHiddenValues(dataFields);
                    var hiddenGrandTotals = getHiddenGrandTotalsTotals(dataFields, columnFields);
                    var grandTotalsAreHiddenForNotAllDataFields = dataFields.length > 0 ? hiddenGrandTotals.length !== dataFields.length : true;
                    var rowOptions = {
                        isEmptyGrandTotal: data.isEmptyGrandTotalRow,
                        texts: options.texts || {},
                        hiddenTotals: hiddenTotals,
                        hiddenValues: hiddenValues,
                        hiddenGrandTotals: [],
                        showTotals: options.showRowTotals,
                        showGrandTotals: false !== options.showRowGrandTotals && grandTotalsAreHiddenForNotAllDataFields,
                        sortBySummaryPaths: createSortPaths(columnFields, dataFields),
                        showTotalsPrior: "rows" === options.showTotalsPrior || "both" === options.showTotalsPrior,
                        showEmpty: !options.hideEmptySummaryCells,
                        layout: options.rowHeaderLayout,
                        fields: rowFields,
                        dataFields: dataFields,
                        progress: 0
                    };
                    var columnOptions = {
                        isEmptyGrandTotal: data.isEmptyGrandTotalColumn,
                        texts: options.texts || {},
                        hiddenTotals: hiddenTotals,
                        hiddenValues: hiddenValues,
                        hiddenGrandTotals: hiddenGrandTotals,
                        showTotals: options.showColumnTotals,
                        showTotalsPrior: "columns" === options.showTotalsPrior || "both" === options.showTotalsPrior,
                        showGrandTotals: false !== options.showColumnGrandTotals && grandTotalsAreHiddenForNotAllDataFields,
                        sortBySummaryPaths: createSortPaths(rowFields, dataFields),
                        showEmpty: !options.hideEmptySummaryCells,
                        fields: columnFields,
                        dataFields: dataFields,
                        progress: 0
                    };
                    var notifyProgress = function(progress) {
                        this.progress = progress;
                        that._handleProgressChanged(.8 + .1 * rowOptions.progress + .1 * columnOptions.progress)
                    };
                    rowOptions.notifyProgress = notifyProgress;
                    columnOptions.notifyProgress = notifyProgress;
                    if (!(0, _type.isDefined)(data.grandTotalRowIndex)) {
                        data.grandTotalRowIndex = getHeaderIndexedItems(data.rows, rowOptions).length
                    }
                    if (!(0, _type.isDefined)(data.grandTotalColumnIndex)) {
                        data.grandTotalColumnIndex = getHeaderIndexedItems(data.columns, columnOptions).length
                    }
                    dataSource._changeLoadingCount(1);
                    (0, _deferred.when)(createHeaderInfo(data.columns, columnFields, dataFieldsForColumns, true, columnOptions), createHeaderInfo(data.rows, rowFields, dataFieldsForRows, false, rowOptions)).always(function() {
                        dataSource._changeLoadingCount(-1)
                    }).done(function(columnsInfo, rowsInfo) {
                        that._columnsInfo = columnsInfo;
                        that._rowsInfo = rowsInfo;
                        if (that._rowsScrollController && that._columnsScrollController && that.changed && !that._dataSource.paginate()) {
                            that._rowsScrollController.reset();
                            that._columnsScrollController.reset();
                            that._lockChanged = true;
                            that._rowsScrollController.load();
                            that._columnsScrollController.load();
                            that._lockChanged = false
                        }
                    }).done(function() {
                        that._fireChanged();
                        if (that._stateStoringController.isEnabled() && !that._dataSource.isLoading()) {
                            that._stateStoringController.state(that._dataSource.state());
                            that._stateStoringController.save()
                        }
                    })
                },
                getRowsInfo: function(getAllData) {
                    var that = this;
                    var rowsInfo = that._rowsInfo;
                    var scrollController = that._rowsScrollController;
                    var rowspan;
                    var i;
                    if (scrollController && !getAllData) {
                        var startIndex = scrollController.beginPageIndex() * that.rowPageSize();
                        var endIndex = scrollController.endPageIndex() * that.rowPageSize() + that.rowPageSize();
                        var newRowsInfo = [];
                        var maxDepth = 1;
                        foreachRowInfo(rowsInfo, function(rowInfo, visibleIndex, rowIndex, _, columnIndex) {
                            var isVisible = visibleIndex >= startIndex && rowIndex < endIndex;
                            var index = rowIndex < startIndex ? 0 : rowIndex - startIndex;
                            var cell = rowInfo;
                            if (isVisible) {
                                newRowsInfo[index] = newRowsInfo[index] || [];
                                rowspan = rowIndex < startIndex ? rowInfo.rowspan - (startIndex - rowIndex) || 1 : rowInfo.rowspan;
                                if (startIndex + index + rowspan > endIndex) {
                                    rowspan = endIndex - (index + startIndex) || 1
                                }
                                if (rowspan !== rowInfo.rowspan) {
                                    cell = (0, _extend2.extend)({}, cell, {
                                        rowspan: rowspan
                                    })
                                }
                                newRowsInfo[index].push(cell);
                                maxDepth = math.max(maxDepth, columnIndex + 1)
                            } else {
                                if (i > endIndex) {
                                    return false
                                }
                            }
                        });
                        foreachRowInfo(newRowsInfo, function(rowInfo, visibleIndex, rowIndex, columnIndex, realColumnIndex) {
                            var colspan = rowInfo.colspan || 1;
                            if (realColumnIndex + colspan > maxDepth) {
                                newRowsInfo[rowIndex][columnIndex] = (0, _extend2.extend)({}, rowInfo, {
                                    colspan: maxDepth - realColumnIndex || 1
                                })
                            }
                        });
                        return newRowsInfo
                    }
                    return rowsInfo
                },
                getColumnsInfo: function(getAllData) {
                    var that = this;
                    var info = that._columnsInfo;
                    var scrollController = that._columnsScrollController;
                    if (scrollController && !getAllData) {
                        var startIndex = scrollController.beginPageIndex() * that.columnPageSize();
                        var endIndex = scrollController.endPageIndex() * that.columnPageSize() + that.columnPageSize();
                        info = _uiGrid_core4.default.createColumnsInfo(info, startIndex, endIndex)
                    }
                    return info
                },
                totalRowCount: function() {
                    return this._rowsInfo.length
                },
                rowPageIndex: function(index) {
                    if (void 0 !== index) {
                        this._rowPageIndex = index
                    }
                    return this._rowPageIndex || 0
                },
                totalColumnCount: function() {
                    var count = 0;
                    if (this._columnsInfo && this._columnsInfo.length) {
                        for (var i = 0; i < this._columnsInfo[0].length; i++) {
                            count += this._columnsInfo[0][i].colspan || 1
                        }
                    }
                    return count
                },
                rowPageSize: function(size) {
                    if (void 0 !== size) {
                        this._rowPageSize = size
                    }
                    return this._rowPageSize || 20
                },
                columnPageSize: function(size) {
                    if (void 0 !== size) {
                        this._columnPageSize = size
                    }
                    return this._columnPageSize || 20
                },
                columnPageIndex: function(index) {
                    if (void 0 !== index) {
                        this._columnPageIndex = index
                    }
                    return this._columnPageIndex || 0
                },
                getCellsInfo: function(getAllData) {
                    var rowsInfo = this.getRowsInfo(getAllData);
                    var columnsInfo = this.getColumnsInfo(getAllData);
                    var data = this._dataSource.getData();
                    var texts = this._options.texts || {};
                    return createCellsInfo(rowsInfo, columnsInfo, data, this._dataSource.getAreaFields("data"), this._options.dataFieldArea, texts.dataNotAvailable);
                },
                dispose: function() {
                    var that = this;
                    if (that._isSharedDataSource) {
                        that._dataSource.off("changed", that._changedHandler);
                        that._dataSource.off("expandValueChanging", that._expandValueChangingHandler);
                        that._dataSource.off("loadingChanged", that._loadingChangedHandler);
                        that._dataSource.off("progressChanged", that._progressChangedHandler);
                        that._dataSource.off("fieldsPrepared", that._fieldsPreparedHandler);
                        that._dataSource.off("customizeStoreLoadOptions", that._customizeStoreLoadOptionsHandler)
                    } else {
                        that._dataSource.dispose()
                    }
                    that._columnsScrollController && that._columnsScrollController.dispose();
                    that._rowsScrollController && that._rowsScrollController.dispose();
                    that._stateStoringController.dispose();
                    that.expandValueChanging.empty();
                    that.changed.empty();
                    that.loadingChanged.empty();
                    that.progressChanged.empty();
                    that.scrollChanged.empty();
                    that.dataSourceChanged.empty()
                }
            };
            proxyMethod(members, "applyPartialDataSource");
            proxyMethod(members, "collapseHeaderItem");
            proxyMethod(members, "expandHeaderItem");
            proxyMethod(members, "getData");
            proxyMethod(members, "isEmpty");
            return members
        }())
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/local_store.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _utils = __webpack_require__( /*! ../../data/utils */ 42);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _custom_store = __webpack_require__( /*! ../../data/custom_store */ 118);
        var _custom_store2 = _interopRequireDefault(_custom_store);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _array_store = __webpack_require__( /*! ../../data/array_store */ 70);
        var _array_store2 = _interopRequireDefault(_array_store);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PATH_DELIMETER = "/./";
        exports.LocalStore = _class2.default.inherit(function() {
            var DATE_INTERVAL_SELECTORS = {
                year: function(date) {
                    return date && date.getFullYear()
                },
                quarter: function(date) {
                    return date && Math.floor(date.getMonth() / 3) + 1
                },
                month: function(date) {
                    return date && date.getMonth() + 1
                },
                day: function(date) {
                    return date && date.getDate()
                },
                dayOfWeek: function(date) {
                    return date && date.getDay()
                }
            };

            function getDataSelector(dataField) {
                return dataField.indexOf(".") !== -1 ? (0, _data.compileGetter)(dataField) : function(data) {
                    return data[dataField]
                }
            }

            function getDateValue(dataSelector) {
                return function(data) {
                    var value = dataSelector(data);
                    if (value && !(value instanceof Date)) {
                        value = (0, _date_serialization.deserializeDate)(value)
                    }
                    return value
                }
            }

            function prepareFields(fields) {
                (0, _iterator.each)(fields || [], function(_, field) {
                    var fieldSelector;
                    var intervalSelector;
                    var dataField = field.dataField;
                    var groupInterval;
                    var levels = field.levels;
                    var dataSelector;
                    if (!field.selector) {
                        if (!dataField) {
                            dataSelector = function(data) {
                                return data
                            }
                        } else {
                            dataSelector = getDataSelector(dataField)
                        }
                        if (levels) {
                            prepareFields(levels)
                        }
                        if ("date" === field.dataType) {
                            intervalSelector = DATE_INTERVAL_SELECTORS[field.groupInterval];
                            var valueSelector = getDateValue(dataSelector);
                            fieldSelector = function(data) {
                                var value = valueSelector(data);
                                return intervalSelector ? intervalSelector(value) : value
                            }
                        } else {
                            if ("number" === field.dataType) {
                                groupInterval = (0, _type.isNumeric)(field.groupInterval) && field.groupInterval > 0 && field.groupInterval;
                                fieldSelector = function(data) {
                                    var value = dataSelector(data);
                                    if ((0, _type.isString)(value)) {
                                        value = Number(value)
                                    }
                                    return groupInterval ? Math.floor(value / groupInterval) * groupInterval : value
                                }
                            } else {
                                fieldSelector = dataSelector
                            }
                        }(0, _uiPivot_grid.setDefaultFieldValueFormatting)(field);
                        (0, _uiPivot_grid.setFieldProperty)(field, "selector", fieldSelector)
                    }
                })
            }
            var addHierarchyItem = function(value, hierarchyItems, pathHash, childrenHash) {
                var hierarchyItem = childrenHash[pathHash];
                if (!hierarchyItem) {
                    hierarchyItem = {
                        value: value,
                        index: childrenHash.length++
                    };
                    childrenHash[pathHash] = hierarchyItem;
                    hierarchyItems.push(hierarchyItem)
                }
                return hierarchyItem
            };

            function fillHierarchyItemIndexesCore(indexes, options, children, expandIndex, pathHash) {
                var dimension = options.dimensions[expandIndex];
                var expandedPathsHash = options.expandedPathsHash;
                var dimensionValue;
                var hierarchyItem;
                if (dimension) {
                    dimensionValue = dimension.selector(options.data);
                    pathHash = void 0 !== pathHash ? pathHash + PATH_DELIMETER + dimensionValue : dimensionValue + "";
                    hierarchyItem = addHierarchyItem(dimensionValue, children, pathHash, options.childrenHash);
                    indexes.push(hierarchyItem.index);
                    if (expandedPathsHash && expandedPathsHash[pathHash] || dimension.expanded) {
                        if (!hierarchyItem.children) {
                            hierarchyItem.children = []
                        }
                        fillHierarchyItemIndexesCore(indexes, options, hierarchyItem.children, expandIndex + 1, pathHash)
                    }
                }
            }

            function generateHierarchyItems(data, loadOptions, headers, headerName) {
                var result = [0];
                var expandIndex = loadOptions.headerName === headerName ? loadOptions.path.length : 0;
                var expandedPaths = "rows" === headerName ? loadOptions.rowExpandedPaths : loadOptions.columnExpandedPaths;
                var options = {
                    data: data,
                    childrenHash: headers[headerName + "Hash"],
                    dimensions: loadOptions[headerName],
                    expandedPathsHash: loadOptions.headerName !== headerName && expandedPaths && expandedPaths.hash
                };
                fillHierarchyItemIndexesCore(result, options, headers[headerName], expandIndex);
                return result
            }

            function generateAggregationCells(data, cells, headers, options) {
                var cellSet = [];
                var x;
                var y;
                var rowIndex;
                var columnIndex;
                var rowIndexes = generateHierarchyItems(data, options, headers, "rows");
                var columnIndexes = generateHierarchyItems(data, options, headers, "columns");
                for (y = 0; y < rowIndexes.length; y++) {
                    rowIndex = rowIndexes[y];
                    cells[rowIndex] = cells[rowIndex] || [];
                    for (x = 0; x < columnIndexes.length; x++) {
                        columnIndex = columnIndexes[x];
                        cellSet.push(cells[rowIndex][columnIndex] = cells[rowIndex][columnIndex] || [])
                    }
                }
                return cellSet
            }

            function fillHashExpandedPath(expandedPaths) {
                if (expandedPaths) {
                    var hash = expandedPaths.hash = {};
                    expandedPaths.forEach(function(path) {
                        var pathValue = path.map(function(value) {
                            return value + ""
                        }).join(PATH_DELIMETER);
                        hash[pathValue] = true
                    })
                }
            }

            function prepareLoadOption(options) {
                options.rows = options.rows || [];
                options.columns = options.columns || [];
                options.filters = options.filters || [];
                fillHashExpandedPath(options.columnExpandedPaths);
                fillHashExpandedPath(options.rowExpandedPaths);
                prepareFields(options.columns);
                prepareFields(options.rows);
                prepareFields(options.values);
                prepareFields(options.filters)
            }

            function getAggregator(field) {
                if ("custom" === field.summaryType) {
                    field.calculateCustomSummary = field.calculateCustomSummary || _common.noop;
                    return {
                        seed: function() {
                            var options = {
                                summaryProcess: "start",
                                totalValue: void 0
                            };
                            field.calculateCustomSummary(options);
                            return options
                        },
                        step: function(options, value) {
                            options.summaryProcess = "calculate";
                            options.value = value;
                            field.calculateCustomSummary(options);
                            return options
                        },
                        finalize: function(options) {
                            options.summaryProcess = "finalize";
                            delete options.value;
                            field.calculateCustomSummary(options);
                            return options.totalValue
                        }
                    }
                }
                return _utils.aggregators[field.summaryType] || _utils.aggregators.count
            }

            function aggregationStep(measures, aggregationCells, data) {
                for (var aggregatorIndex = 0; aggregatorIndex < measures.length; aggregatorIndex++) {
                    var cellField = measures[aggregatorIndex];
                    var cellValue = cellField.selector(data);
                    var aggregator = getAggregator(cellField);
                    var isAggregatorSeedFunction = "function" === typeof aggregator.seed;
                    for (var cellSetIndex = 0; cellSetIndex < aggregationCells.length; cellSetIndex++) {
                        var cell = aggregationCells[cellSetIndex];
                        if (cell.length <= aggregatorIndex) {
                            cell[aggregatorIndex] = isAggregatorSeedFunction ? aggregator.seed() : aggregator.seed
                        }
                        if (void 0 === cell[aggregatorIndex]) {
                            cell[aggregatorIndex] = cellValue
                        } else {
                            if ((0, _type.isDefined)(cellValue)) {
                                cell[aggregatorIndex] = aggregator.step(cell[aggregatorIndex], cellValue)
                            }
                        }
                    }
                }
            }

            function aggregationFinalize(measures, cells) {
                (0, _iterator.each)(measures, function(aggregatorIndex, cellField) {
                    var aggregator = getAggregator(cellField);
                    if (aggregator.finalize) {
                        (0, _iterator.each)(cells, function(_, row) {
                            (0, _iterator.each)(row, function(_, cell) {
                                if (cell && void 0 !== cell[aggregatorIndex]) {
                                    cell[aggregatorIndex] = aggregator.finalize(cell[aggregatorIndex])
                                }
                            })
                        })
                    }
                })
            }

            function areValuesEqual(filterValue, fieldValue) {
                var valueOfFilter = filterValue && filterValue.valueOf();
                var valueOfField = fieldValue && fieldValue.valueOf();
                if (Array.isArray(filterValue)) {
                    fieldValue = fieldValue || [];
                    for (var i = 0; i < filterValue.length; i++) {
                        valueOfFilter = filterValue[i] && filterValue[i].valueOf();
                        valueOfField = fieldValue[i] && fieldValue[i].valueOf();
                        if (valueOfFilter !== valueOfField) {
                            return false
                        }
                    }
                    return true
                } else {
                    return valueOfFilter === valueOfField
                }
            }

            function getGroupValue(levels, data) {
                var value = [];
                (0, _iterator.each)(levels, function(_, field) {
                    value.push(field.selector(data))
                });
                return value
            }

            function createDimensionFilters(dimension) {
                var filters = [];
                (0, _iterator.each)(dimension, function(_, field) {
                    var filterValues = field.filterValues || [];
                    var groupName = field.groupName;
                    if (groupName && (0, _type.isNumeric)(field.groupIndex)) {
                        return
                    }
                    var filter = function(dataItem) {
                        var value = field.levels ? getGroupValue(field.levels, dataItem) : field.selector(dataItem);
                        var result = false;
                        for (var i = 0; i < filterValues.length; i++) {
                            if (areValuesEqual(filterValues[i], value)) {
                                result = true;
                                break
                            }
                        }
                        return "exclude" === field.filterType ? !result : result
                    };
                    filterValues.length && filters.push(filter)
                });
                return filters
            }

            function createFilter(options) {
                var filters = createDimensionFilters(options.rows).concat(createDimensionFilters(options.columns)).concat(createDimensionFilters(options.filters));
                var expandedDimensions = options[options.headerName];
                var path = options.path;
                if (expandedDimensions) {
                    filters.push(function(dataItem) {
                        var expandValue;
                        for (var i = 0; i < path.length; i++) {
                            expandValue = expandedDimensions[i].selector(dataItem);
                            if ((0, _data.toComparable)(expandValue, true) !== (0, _data.toComparable)(path[i], true)) {
                                return false
                            }
                        }
                        return true
                    })
                }
                return function(dataItem) {
                    for (var i = 0; i < filters.length; i++) {
                        if (!filters[i](dataItem)) {
                            return false
                        }
                    }
                    return true
                }
            }

            function loadCore(items, options, notifyProgress) {
                var headers = {
                    columns: [],
                    rows: [],
                    columnsHash: {
                        length: 1
                    },
                    rowsHash: {
                        length: 1
                    }
                };
                var values = [];
                var aggregationCells;
                var data;
                var d = new _deferred.Deferred;
                var i = 0;
                var filter = createFilter(options);

                function processData() {
                    var t = new Date;
                    var startIndex = i;
                    for (; i < items.length; i++) {
                        if (i > startIndex && i % 1e4 === 0) {
                            if (new Date - t >= 300) {
                                notifyProgress(i / items.length);
                                setTimeout(processData, 0);
                                return
                            }
                        }
                        data = items[i];
                        if (filter(data)) {
                            aggregationCells = generateAggregationCells(data, values, headers, options);
                            aggregationStep(options.values, aggregationCells, data)
                        }
                    }
                    aggregationFinalize(options.values, values);
                    notifyProgress(1);
                    d.resolve({
                        rows: headers.rows,
                        columns: headers.columns,
                        values: values,
                        grandTotalRowIndex: 0,
                        grandTotalColumnIndex: 0
                    })
                }
                processData();
                return d
            }

            function filterDataSource(dataSource, fieldSelectors) {
                var filter = dataSource.filter();
                if (dataSource.store() instanceof _custom_store2.default && filter) {
                    filter = processFilter(filter, fieldSelectors);
                    return (0, _query2.default)(dataSource.items()).filter(filter).toArray()
                }
                return dataSource.items()
            }

            function loadDataSource(dataSource, fieldSelectors, reload) {
                var d = new _deferred.Deferred;
                var customizeStoreLoadOptionsHandler = function(options) {
                    if (dataSource.store() instanceof _array_store2.default) {
                        options.storeLoadOptions.filter = processFilter(options.storeLoadOptions.filter, fieldSelectors)
                    }
                };
                dataSource.on("customizeStoreLoadOptions", customizeStoreLoadOptionsHandler);
                if (!dataSource.isLoaded() || reload) {
                    var loadDeferred = reload ? dataSource.load() : dataSource.reload();
                    (0, _deferred.when)(loadDeferred).done(function() {
                        loadDataSource(dataSource, fieldSelectors).done(function() {
                            d.resolve(filterDataSource(dataSource, fieldSelectors))
                        }).fail(d.reject)
                    }).fail(d.reject)
                } else {
                    d.resolve(filterDataSource(dataSource, fieldSelectors))
                }
                return d.always(function() {
                    dataSource.off("customizeStoreLoadOptions", customizeStoreLoadOptionsHandler)
                })
            }

            function fillSelectorsByFields(selectors, fields) {
                fields.forEach(function(field) {
                    if (field.dataField && "date" === field.dataType) {
                        var valueSelector = getDateValue(getDataSelector(field.dataField));
                        selectors[field.dataField] = function(data) {
                            return valueSelector(data)
                        }
                    }
                })
            }

            function getFieldSelectors(options) {
                var selectors = {};
                if (Array.isArray(options)) {
                    fillSelectorsByFields(selectors, options)
                } else {
                    if (options) {
                        ["rows", "columns", "filters"].forEach(function(area) {
                            options[area] && fillSelectorsByFields(selectors, options[area])
                        })
                    }
                }
                return selectors
            }

            function processFilter(filter, fieldSelectors) {
                if (!Array.isArray(filter)) {
                    return filter
                }
                filter = filter.slice(0);
                if ((0, _type.isString)(filter[0]) && (filter[1] instanceof Date || filter[2] instanceof Date)) {
                    filter[0] = fieldSelectors[filter[0]]
                }
                for (var i = 0; i < filter.length; i++) {
                    filter[i] = processFilter(filter[i], fieldSelectors)
                }
                return filter
            }
            return {
                ctor: function(options) {
                    this._progressChanged = options.onProgressChanged || _common.noop;
                    this._dataSource = new _data_source.DataSource(options);
                    this._dataSource.paginate(false)
                },
                getFields: function(fields) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var d = new _deferred.Deferred;
                    loadDataSource(dataSource, getFieldSelectors(fields)).done(function(data) {
                        d.resolve((0, _uiPivot_grid.discoverObjectFields)(data, fields))
                    }).fail(d.reject);
                    return d
                },
                key: function() {
                    return this._dataSource.key()
                },
                load: function(options) {
                    var that = this;
                    var dataSource = that._dataSource;
                    var d = new _deferred.Deferred;
                    prepareLoadOption(options);
                    loadDataSource(dataSource, getFieldSelectors(options), options.reload).done(function(data) {
                        (0, _deferred.when)(loadCore(data, options, that._progressChanged)).done(d.resolve)
                    }).fail(d.reject);
                    return d
                },
                filter: function() {
                    var dataSource = this._dataSource;
                    return dataSource.filter.apply(dataSource, arguments)
                },
                supportPaging: function() {
                    return false
                },
                getDrillDownItems: function(loadOptions, params) {
                    loadOptions = loadOptions || {};
                    params = params || {};
                    prepareLoadOption(loadOptions);
                    var drillDownItems = [];
                    var items = this._dataSource.items();
                    var item;
                    var maxRowCount = params.maxRowCount;
                    var customColumns = params.customColumns;
                    var filter = createFilter(loadOptions);
                    var pathFilter = createFilter({
                        rows: (0, _uiPivot_grid.getFiltersByPath)(loadOptions.rows, params.rowPath),
                        columns: (0, _uiPivot_grid.getFiltersByPath)(loadOptions.columns, params.columnPath),
                        filters: []
                    });
                    for (var i = 0; i < items.length; i++) {
                        if (pathFilter(items[i]) && filter(items[i])) {
                            if (customColumns) {
                                item = {};
                                for (var j = 0; j < customColumns.length; j++) {
                                    item[customColumns[j]] = items[i][customColumns[j]]
                                }
                            } else {
                                item = items[i]
                            }
                            drillDownItems.push(item)
                        }
                        if (maxRowCount > 0 && drillDownItems.length === maxRowCount) {
                            break
                        }
                    }
                    return drillDownItems
                }
            }
        }()).include(_uiPivot_grid.storeDrillDownMixin)
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/remote_store.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

        function createGroupingOptions(dimensionOptions, useSortOrder) {
            var groupingOptions = [];
            (0, _iterator.each)(dimensionOptions, function(index, dimensionOption) {
                groupingOptions.push({
                    selector: dimensionOption.dataField,
                    groupInterval: dimensionOption.groupInterval,
                    desc: useSortOrder && "desc" === dimensionOption.sortOrder,
                    isExpanded: index < dimensionOptions.length - 1
                })
            });
            return groupingOptions
        }

        function getFieldFilterSelector(field) {
            var selector = field.dataField;
            var groupInterval = field.groupInterval;
            if ("date" === field.dataType && "string" === typeof groupInterval) {
                if ("quarter" === groupInterval.toLowerCase()) {
                    groupInterval = "Month"
                }
                selector = selector + "." + (0, _uiPivot_grid.capitalizeFirstLetter)(groupInterval)
            }
            return selector
        }

        function getIntervalFilterExpression(selector, numericInterval, numericValue, isExcludedFilterType) {
            var startFilterValue = [selector, isExcludedFilterType ? "<" : ">=", numericValue];
            var endFilterValue = [selector, isExcludedFilterType ? ">=" : "<", numericValue + numericInterval];
            return [startFilterValue, isExcludedFilterType ? "or" : "and", endFilterValue]
        }

        function getFilterExpressionForFilterValue(field, filterValue) {
            var selector = getFieldFilterSelector(field);
            var isExcludedFilterType = "exclude" === field.filterType;
            var expression = [selector, isExcludedFilterType ? "<>" : "=", filterValue];
            if ((0, _type.isDefined)(field.groupInterval)) {
                if ("string" === typeof field.groupInterval && "quarter" === field.groupInterval.toLowerCase()) {
                    expression = getIntervalFilterExpression(selector, 3, 3 * (filterValue - 1) + 1, isExcludedFilterType)
                } else {
                    if ("number" === typeof field.groupInterval && "date" !== field.dataType) {
                        expression = getIntervalFilterExpression(selector, field.groupInterval, filterValue, isExcludedFilterType)
                    }
                }
            }
            return expression
        }

        function createFieldFilterExpressions(field, operation) {
            var fieldFilterExpressions = [];
            if (field.searchValue) {
                return [field.dataField, "contains", field.searchValue]
            }
            if ("exclude" === field.filterType) {
                operation = operation || "and"
            } else {
                operation = operation || "or"
            }(0, _iterator.each)(field.filterValues, function(index, filterValue) {
                var currentExpression = [];
                if (Array.isArray(filterValue)) {
                    var parseLevelsRecursive = field.levels && field.levels.length;
                    if (parseLevelsRecursive) {
                        currentExpression = createFieldFilterExpressions({
                            filterValues: filterValue,
                            filterType: field.filterType,
                            levels: field.levels
                        }, "and")
                    }
                } else {
                    var currentField = field.levels ? field.levels[index] : field;
                    currentExpression = getFilterExpressionForFilterValue(currentField, filterValue)
                }
                if (!currentExpression.length) {
                    return
                }
                if (fieldFilterExpressions.length) {
                    fieldFilterExpressions.push(operation)
                }
                fieldFilterExpressions.push(currentExpression)
            });
            return fieldFilterExpressions
        }

        function createFilterExpressions(fields) {
            var filterExpressions = [];
            (0, _iterator.each)(fields, function(_, field) {
                var fieldExpressions = createFieldFilterExpressions(field);
                if (!fieldExpressions.length) {
                    return []
                }
                if (filterExpressions.length) {
                    filterExpressions.push("and")
                }
                filterExpressions.push(fieldExpressions)
            });
            if (1 === filterExpressions.length) {
                filterExpressions = filterExpressions[0]
            }
            return filterExpressions
        }

        function mergeFilters(filter1, filter2) {
            var mergedFilter;
            var notEmpty = function(filter) {
                return filter && filter.length
            };
            if (notEmpty(filter1) && notEmpty(filter2)) {
                mergedFilter = [filter1, "and", filter2]
            } else {
                mergedFilter = notEmpty(filter1) ? filter1 : filter2
            }
            return mergedFilter
        }

        function createLoadOptions(options, externalFilterExpr, hasRows) {
            var filterExpressions = createFilterExpressions(options.filters);
            var groupingOptions = createGroupingOptions(options.rows, options.rowTake).concat(createGroupingOptions(options.columns, options.columnTake));
            var loadOptions = {
                groupSummary: [],
                totalSummary: [],
                group: groupingOptions.length ? groupingOptions : void 0,
                take: groupingOptions.length ? void 0 : 1
            };
            if (options.rows.length && options.rowTake) {
                loadOptions.skip = options.rowSkip;
                loadOptions.take = options.rowTake;
                loadOptions.requireGroupCount = true
            } else {
                if (options.columns.length && options.columnTake && !hasRows) {
                    loadOptions.skip = options.columnSkip;
                    loadOptions.take = options.columnTake;
                    loadOptions.requireGroupCount = true
                }
            }
            if (externalFilterExpr) {
                filterExpressions = mergeFilters(filterExpressions, externalFilterExpr)
            }
            if (filterExpressions.length) {
                loadOptions.filter = filterExpressions
            }(0, _iterator.each)(options.values, function(_, value) {
                var summaryOption = {
                    selector: value.dataField,
                    summaryType: value.summaryType || "count"
                };
                loadOptions.groupSummary.push(summaryOption);
                options.includeTotalSummary && loadOptions.totalSummary.push(summaryOption)
            });
            return loadOptions
        }

        function forEachGroup(data, callback, level) {
            data = data || [];
            level = level || 0;
            for (var i = 0; i < data.length; i++) {
                var group = data[i];
                callback(group, level);
                if (group && group.items && group.items.length) {
                    forEachGroup(group.items, callback, level + 1)
                }
            }
        }

        function setValue(valuesArray, value, rowIndex, columnIndex, dataIndex) {
            valuesArray[rowIndex] = valuesArray[rowIndex] || [];
            valuesArray[rowIndex][columnIndex] = valuesArray[rowIndex][columnIndex] || [];
            if (!(0, _type.isDefined)(valuesArray[rowIndex][columnIndex][dataIndex])) {
                valuesArray[rowIndex][columnIndex][dataIndex] = value
            }
        }

        function parseValue(value, field) {
            if (field && "number" === field.dataType && (0, _type.isString)(value)) {
                return Number(value)
            }
            if (field && "date" === field.dataType && !field.groupInterval && !(value instanceof Date)) {
                return (0, _date_serialization.deserializeDate)(value)
            }
            return value
        }

        function parseResult(data, total, descriptions, result) {
            var rowPath = [];
            var columnPath = [];
            var rowHash = result.rowHash;
            var columnHash = result.columnHash;
            if (total && total.summary) {
                (0, _iterator.each)(total.summary, function(index, summary) {
                    setValue(result.values, summary, result.grandTotalRowIndex, result.grandTotalColumnIndex, index)
                })
            }
            if (total && total.groupCount >= 0) {
                var skip = descriptions.rows.length ? descriptions.rowSkip : descriptions.columnSkip;
                data = _toConsumableArray(Array(skip)).concat(data);
                data.length = total.groupCount
            }

            function getItem(dataItem, dimensionName, path, level, field) {
                var dimensionHash = result[dimensionName + "Hash"];
                var parentItem;
                var parentItemChildren;
                var item;
                var pathValue = path.slice(0, level + 1).join("/");
                var parentPathValue;
                if (void 0 !== dimensionHash[pathValue]) {
                    item = dimensionHash[pathValue]
                } else {
                    item = {
                        value: parseValue(dataItem.key, field),
                        index: result[dimensionName + "Index"]++
                    };
                    parentPathValue = path.slice(0, level).join("/");
                    if (level > 0 && void 0 !== dimensionHash[parentPathValue]) {
                        parentItem = dimensionHash[parentPathValue];
                        parentItemChildren = parentItem.children = parentItem.children || []
                    } else {
                        parentItemChildren = result[dimensionName + "s"]
                    }
                    parentItemChildren.push(item);
                    dimensionHash[pathValue] = item
                }
                return item
            }
            forEachGroup(data, function(item, level) {
                var rowLevel = level >= descriptions.rows.length ? descriptions.rows.length : level;
                var columnLevel = level >= descriptions.rows.length ? level - descriptions.rows.length : 0;
                var columnItem;
                var rowItem;
                if (level >= descriptions.rows.length && columnLevel >= descriptions.columns.length) {
                    return
                }
                if (level < descriptions.rows.length) {
                    columnPath = []
                }
                if (level >= descriptions.rows.length) {
                    if (item) {
                        columnPath[columnLevel] = item.key + "";
                        columnItem = getItem(item, "column", columnPath, columnLevel, descriptions.columns[columnLevel]);
                        rowItem = rowHash[rowPath.slice(0, rowLevel + 1).join("/")]
                    } else {
                        result.columns.push({})
                    }
                } else {
                    if (item) {
                        rowPath[rowLevel] = item.key + "";
                        rowItem = getItem(item, "row", rowPath, rowLevel, descriptions.rows[rowLevel]);
                        columnItem = columnHash[columnPath.slice(0, columnLevel + 1).join("/")]
                    } else {
                        result.rows.push({})
                    }
                }
                var currentRowIndex = rowItem && rowItem.index || result.grandTotalRowIndex;
                var currentColumnIndex = columnItem && columnItem.index || result.grandTotalColumnIndex;
                (0, _iterator.each)(item && item.summary || [], function(i, summary) {
                    setValue(result.values, summary, currentRowIndex, currentColumnIndex, i)
                })
            });
            return result
        }

        function getFiltersForDimension(fields) {
            return (fields || []).filter(function(f) {
                return f.filterValues && f.filterValues.length || f.searchValue
            })
        }

        function getExpandedIndex(options, axis) {
            if (options.headerName) {
                if (axis === options.headerName) {
                    return options.path.length
                } else {
                    if (options.oppositePath) {
                        return options.oppositePath.length
                    }
                }
            }
            return 0
        }

        function getFiltersForExpandedDimension(options) {
            return (0, _uiPivot_grid.getFiltersByPath)(options[options.headerName], options.path).concat((0, _uiPivot_grid.getFiltersByPath)(options["rows" === options.headerName ? "columns" : "rows"], options.oppositePath || []))
        }

        function getExpandedPathSliceFilter(options, dimensionName, level, firstCollapsedFieldIndex) {
            var result = [];
            var startSliceIndex = level > firstCollapsedFieldIndex ? 0 : firstCollapsedFieldIndex;
            var fields = options.headerName !== dimensionName ? options[dimensionName].slice(startSliceIndex, level) : [];
            var paths = "rows" === dimensionName ? options.rowExpandedPaths : options.columnExpandedPaths;
            (0, _iterator.each)(fields, function(index, field) {
                var filterValues = [];
                (0, _iterator.each)(paths, function(_, path) {
                    path = path.slice(startSliceIndex, level);
                    if (index < path.length) {
                        filterValues.push(path[index])
                    }
                });
                if (filterValues.length) {
                    result.push((0, _extend.extend)({}, field, {
                        filterType: "include",
                        filterValues: filterValues
                    }))
                }
            });
            return result
        }

        function getGrandTotalRequest(options, dimensionName, expandedIndex, expandedLevel, commonFilters, firstCollapsedFieldIndex) {
            var expandedPaths = ("columns" === dimensionName ? options.columnExpandedPaths : options.rowExpandedPaths) || [];
            var oppositeDimensionName = "columns" === dimensionName ? "rows" : "columns";
            var fields = options[dimensionName];
            var result = [];
            var newOptions;
            if (expandedPaths.length) {
                for (var i = expandedIndex; i < expandedLevel + 1; i++) {
                    newOptions = {
                        filters: commonFilters.concat(getExpandedPathSliceFilter(options, dimensionName, i, firstCollapsedFieldIndex))
                    };
                    newOptions[dimensionName] = fields.slice(expandedIndex, i + 1);
                    newOptions[oppositeDimensionName] = [];
                    result.push((0, _extend.extend)({}, options, newOptions))
                }
            } else {
                newOptions = {
                    filters: commonFilters
                };
                newOptions[dimensionName] = fields.slice(expandedIndex, expandedLevel + 1);
                newOptions[oppositeDimensionName] = [];
                result.push((0, _extend.extend)({}, options, newOptions))
            }
            result[0].includeTotalSummary = true;
            return result
        }

        function getFirstCollapsedIndex(fields) {
            var firstCollapsedIndex = 0;
            (0, _iterator.each)(fields, function(index, field) {
                if (!field.expanded) {
                    firstCollapsedIndex = index;
                    return false
                }
            });
            return firstCollapsedIndex
        }

        function getRequestsData(options) {
            var rowExpandedLevel = (0, _uiPivot_grid.getExpandedLevel)(options, "rows");
            var columnExpandedLevel = (0, _uiPivot_grid.getExpandedLevel)(options, "columns");
            var filters = options.filters || [];
            var columnExpandedIndex = getExpandedIndex(options, "columns");
            var firstCollapsedColumnIndex = getFirstCollapsedIndex(options.columns);
            var firstCollapsedRowIndex = getFirstCollapsedIndex(options.rows);
            var rowExpandedIndex = getExpandedIndex(options, "rows");
            var data = [];
            filters = filters.concat(getFiltersForDimension(options.rows)).concat(getFiltersForDimension(options.columns)).concat(getFiltersForExpandedDimension(options));
            var columnTotalsOptions = getGrandTotalRequest(options, "columns", columnExpandedIndex, columnExpandedLevel, filters, firstCollapsedColumnIndex);
            if (options.rows.length && options.columns.length) {
                if ("rows" !== options.headerName) {
                    data = data.concat(columnTotalsOptions)
                }
                for (var i = rowExpandedIndex; i < rowExpandedLevel + 1; i++) {
                    var rows = options.rows.slice(rowExpandedIndex, i + 1);
                    var rowFilterByExpandedPaths = getExpandedPathSliceFilter(options, "rows", i, firstCollapsedRowIndex);
                    for (var j = columnExpandedIndex; j < columnExpandedLevel + 1; j++) {
                        var preparedOptions = (0, _extend.extend)({}, options, {
                            columns: options.columns.slice(columnExpandedIndex, j + 1),
                            rows: rows,
                            filters: filters.concat(getExpandedPathSliceFilter(options, "columns", j, firstCollapsedColumnIndex)).concat(rowFilterByExpandedPaths)
                        });
                        data.push(preparedOptions)
                    }
                }
            } else {
                data = options.columns.length ? columnTotalsOptions : getGrandTotalRequest(options, "rows", rowExpandedIndex, rowExpandedLevel, filters, firstCollapsedRowIndex)
            }
            return data
        }

        function prepareFields(fields) {
            (0, _iterator.each)(fields || [], function(_, field) {
                var levels = field.levels;
                if (levels) {
                    prepareFields(levels)
                }(0, _uiPivot_grid.setDefaultFieldValueFormatting)(field)
            })
        }
        module.exports = _class2.default.inherit(function() {
            return {
                ctor: function(options) {
                    this._dataSource = new _data_source.DataSource(options);
                    this._store = this._dataSource.store()
                },
                getFields: function(fields) {
                    var d = new _deferred.Deferred;
                    this._store.load({
                        skip: 0,
                        take: 20
                    }).done(function(data) {
                        d.resolve((0, _uiPivot_grid.discoverObjectFields)(data, fields))
                    }).fail(d.reject);
                    return d
                },
                key: function() {
                    return this._store.key()
                },
                load: function(options) {
                    var that = this;
                    var d = new _deferred.Deferred;
                    var result = {
                        rows: [],
                        columns: [],
                        values: [
                            [
                                []
                            ]
                        ],
                        grandTotalRowIndex: 0,
                        grandTotalColumnIndex: 0,
                        rowHash: {},
                        columnHash: {},
                        rowIndex: 1,
                        columnIndex: 1
                    };
                    var requestsData = getRequestsData(options);
                    var deferreds = [];
                    prepareFields(options.rows);
                    prepareFields(options.columns);
                    prepareFields(options.filters);
                    (0, _iterator.each)(requestsData, function(_, dataItem) {
                        deferreds.push(that._store.load(createLoadOptions(dataItem, that.filter(), options.rows.length)))
                    });
                    _deferred.when.apply(null, deferreds).done(function() {
                        var args = deferreds.length > 1 ? arguments : [arguments];
                        (0, _iterator.each)(args, function(index, argument) {
                            parseResult(argument[0], argument[1], requestsData[index], result)
                        });
                        d.resolve({
                            rows: result.rows,
                            columns: result.columns,
                            values: result.values,
                            grandTotalRowIndex: result.grandTotalRowIndex,
                            grandTotalColumnIndex: result.grandTotalColumnIndex
                        })
                    }).fail(d.reject);
                    return d
                },
                filter: function() {
                    return this._dataSource.filter.apply(this._dataSource, arguments)
                },
                supportPaging: function() {
                    return false
                },
                createDrillDownDataSource: function(loadOptions, params) {
                    loadOptions = loadOptions || {};
                    params = params || {};
                    var store = this._store;
                    var filters = (0, _uiPivot_grid.getFiltersByPath)(loadOptions.rows, params.rowPath).concat((0, _uiPivot_grid.getFiltersByPath)(loadOptions.columns, params.columnPath)).concat(getFiltersForDimension(loadOptions.rows)).concat(loadOptions.filters || []).concat(getFiltersForDimension(loadOptions.columns));
                    var filterExp = createFilterExpressions(filters);
                    return new _data_source.DataSource({
                        load: function(loadOptions) {
                            return store.load((0, _extend.extend)({}, loadOptions, {
                                filter: mergeFilters(filterExp, loadOptions.filter),
                                select: params.customColumns
                            }))
                        }
                    })
                }
            }
        }());
        module.exports.__forEachGroup = forEachGroup
    },
    /*!***********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.summary_display_modes.js ***!
      \***********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var COLUMN = "column";
        var ROW = "row";
        var NULL = null;
        var calculatePercentValue = function(value, totalValue) {
            var result = value / totalValue;
            if (!(0, _type.isDefined)(value) || isNaN(result)) {
                result = NULL
            }
            return result
        };
        var _percentOfGrandTotal = function(e, dimension) {
            return calculatePercentValue(e.value(), e.grandTotal(dimension).value())
        };
        var percentOfParent = function(e, dimension) {
            var parent = e.parent(dimension);
            var parentValue = parent ? parent.value() : e.value();
            return calculatePercentValue(e.value(), parentValue)
        };
        var createAbsoluteVariationExp = function(allowCrossGroup) {
            return function(e) {
                var prevCell = e.prev(COLUMN, allowCrossGroup);
                var prevValue = prevCell && prevCell.value();
                if ((0, _type.isDefined)(prevValue) && (0, _type.isDefined)(e.value())) {
                    return e.value() - prevValue
                }
                return NULL
            }
        };
        var createPercentVariationExp = function(allowCrossGroup) {
            var absoluteExp = createAbsoluteVariationExp(allowCrossGroup);
            return function(e) {
                var absVar = absoluteExp(e);
                var prevCell = e.prev(COLUMN, allowCrossGroup);
                var prevValue = prevCell && prevCell.value();
                return absVar !== NULL && prevValue ? absVar / prevValue : NULL
            }
        };
        var summaryDictionary = {
            percentOfColumnTotal: function(e) {
                return percentOfParent(e, ROW)
            },
            percentOfRowTotal: function(e) {
                return percentOfParent(e, COLUMN)
            },
            percentOfColumnGrandTotal: function(e) {
                return _percentOfGrandTotal(e, ROW)
            },
            percentOfRowGrandTotal: function(e) {
                return _percentOfGrandTotal(e, COLUMN)
            },
            percentOfGrandTotal: function(e) {
                return _percentOfGrandTotal(e)
            }
        };
        var getPrevCellCrossGroup = function getPrevCellCrossGroup(cell, direction) {
            if (!cell || !cell.parent(direction)) {
                return
            }
            var prevCell = cell.prev(direction);
            if (!prevCell) {
                prevCell = getPrevCellCrossGroup(cell.parent(direction), direction)
            }
            return prevCell
        };
        var createRunningTotalExpr = function(field) {
            if (!field.runningTotal) {
                return
            }
            var direction = field.runningTotal === COLUMN ? ROW : COLUMN;
            return function(e) {
                var prevCell = field.allowCrossGroupCalculation ? getPrevCellCrossGroup(e, direction) : e.prev(direction, false);
                var value = e.value(true);
                var prevValue = prevCell && prevCell.value(true);
                if ((0, _type.isDefined)(prevValue) && (0, _type.isDefined)(value)) {
                    value = prevValue + value
                } else {
                    if ((0, _type.isDefined)(prevValue)) {
                        value = prevValue
                    }
                }
                return value
            }
        };

        function createCache() {
            return {
                fields: {},
                positions: {}
            }
        }

        function getFieldPos(descriptions, field, cache) {
            var fieldParams = {
                index: -1
            };
            if (!(0, _type.isObject)(field)) {
                if (cache.fields[field]) {
                    field = cache[field]
                } else {
                    var allFields = descriptions.columns.concat(descriptions.rows).concat(descriptions.values);
                    var fieldIndex = (0, _uiPivot_grid.findField)(allFields, field);
                    field = cache[field] = allFields[fieldIndex]
                }
            }
            if (field) {
                var area = field.area || "data";
                fieldParams = cache.positions[field.index] = cache.positions[field.index] || {
                    area: area,
                    index: (0, _array.inArray)(field, descriptions["data" === area ? "values" : area + "s"])
                }
            }
            return fieldParams
        }

        function getPathFieldName(dimension) {
            return dimension === ROW ? "_rowPath" : "_columnPath"
        }
        var SummaryCell = function(columnPath, rowPath, data, descriptions, fieldIndex, fieldsCache) {
            this._columnPath = columnPath;
            this._rowPath = rowPath;
            this._fieldIndex = fieldIndex;
            this._fieldsCache = fieldsCache || createCache();
            this._data = data;
            this._descriptions = descriptions;
            var cell = data.values && data.values[rowPath[0].index] && data.values[rowPath[0].index][columnPath[0].index];
            if (cell) {
                cell.originalCell = cell.originalCell || cell.slice();
                cell.postProcessedFlags = cell.postProcessedFlags || [];
                this._cell = cell
            }
        };
        SummaryCell.prototype = (0, _extend.extend)(SummaryCell.prototype, {
            _getPath: function(dimension) {
                return this[getPathFieldName(dimension)]
            },
            _getDimension: function(dimension) {
                dimension = dimension === ROW ? "rows" : "columns";
                return this._descriptions[dimension]
            },
            _createCell: function(config) {
                var that = this;
                return new SummaryCell(config._columnPath || that._columnPath, config._rowPath || that._rowPath, that._data, that._descriptions, that._fieldIndex)
            },
            parent: function(direction) {
                var path = this._getPath(direction).slice();
                var config = {};
                path.shift();
                if (path.length) {
                    config[getPathFieldName(direction)] = path;
                    return this._createCell(config)
                }
                return NULL
            },
            children: function(direction) {
                var path = this._getPath(direction).slice();
                var item = path[0];
                var result = [];
                var cellConfig = {};
                if (item.children) {
                    for (var i = 0; i < item.children.length; i++) {
                        cellConfig[getPathFieldName(direction)] = [item.children[i]].concat(path.slice());
                        result.push(this._createCell(cellConfig))
                    }
                }
                return result
            },
            grandTotal: function(direction) {
                var config = {};
                var rowPath = this._rowPath;
                var columnPath = this._columnPath;
                var dimensionPath = this._getPath(direction);
                var pathFieldName = getPathFieldName(direction);
                if (!direction) {
                    config._rowPath = [rowPath[rowPath.length - 1]];
                    config._columnPath = [columnPath[columnPath.length - 1]]
                } else {
                    config[pathFieldName] = [dimensionPath[dimensionPath.length - 1]]
                }
                return this._createCell(config)
            },
            next: function(direction, allowCrossGroup) {
                var currentPath = this._getPath(direction);
                var item = currentPath[0];
                var parent = this.parent(direction);
                var siblings;
                if (parent) {
                    var index = (0, _array.inArray)(item, currentPath[1].children);
                    siblings = parent.children(direction);
                    if (siblings[index + 1]) {
                        return siblings[index + 1]
                    }
                }
                if (allowCrossGroup && parent) {
                    do {
                        parent = parent.next(direction, allowCrossGroup);
                        siblings = parent ? parent.children(direction) : []
                    } while (parent && !siblings.length);
                    return siblings[0] || NULL
                }
                return NULL
            },
            prev: function(direction, allowCrossGroup) {
                var currentPath = this._getPath(direction);
                var item = currentPath[0];
                var parent = this.parent(direction);
                var siblings;
                if (parent) {
                    var index = (0, _array.inArray)(item, currentPath[1].children);
                    siblings = parent.children(direction);
                    if (siblings[index - 1]) {
                        return siblings[index - 1]
                    }
                }
                if (allowCrossGroup && parent) {
                    do {
                        parent = parent.prev(direction, allowCrossGroup);
                        siblings = parent ? parent.children(direction) : []
                    } while (parent && !siblings.length);
                    return siblings[siblings.length - 1] || NULL
                }
                return NULL
            },
            cell: function() {
                return this._cell
            },
            field: function field(area) {
                if ("data" === area) {
                    return this._descriptions.values[this._fieldIndex]
                }
                var path = this._getPath(area);
                var descriptions = this._getDimension(area);
                var field = descriptions[path.length - 2];
                return field || NULL
            },
            child: function(direction, fieldValue) {
                var children = this.children(direction);
                for (var i = 0; i < children.length; i++) {
                    var childLevelField = childLevelField || children[i].field(direction);
                    if (children[i].value(childLevelField) === fieldValue) {
                        return children[i]
                    }
                }
                return NULL
            },
            slice: function(field, value) {
                var that = this;
                var config = {};
                var fieldPos = getFieldPos(this._descriptions, field, this._fieldsCache);
                var area = fieldPos.area;
                var fieldIndex = fieldPos.index;
                var sliceCell = NULL;
                var newPath = [];
                if (area === ROW || area === COLUMN) {
                    var path = this._getPath(area).slice();
                    var level = fieldIndex !== -1 && path.length - 2 - fieldIndex;
                    if (path[level]) {
                        newPath[path.length - 1] = path[path.length - 1];
                        for (var i = level; i >= 0; i--) {
                            if (path[i + 1]) {
                                var childItems = path[i + 1].children || [];
                                var currentValue = i === level ? value : path[i].value;
                                path[i] = void 0;
                                for (var childIndex = 0; childIndex < childItems.length; childIndex++) {
                                    if (childItems[childIndex].value === currentValue) {
                                        path[i] = childItems[childIndex];
                                        break
                                    }
                                }
                            }
                            if (void 0 === path[i]) {
                                return sliceCell
                            }
                        }
                        config[getPathFieldName(area)] = path;
                        sliceCell = that._createCell(config)
                    }
                }
                return sliceCell
            },
            value: function(arg1, arg2) {
                var cell = this._cell;
                var fieldIndex = this._fieldIndex;
                var fistArgIsBoolean = true === arg1 || false === arg1;
                var field = !fistArgIsBoolean ? arg1 : NULL;
                var needCalculatedValue = fistArgIsBoolean && arg1 || arg2;
                if ((0, _type.isDefined)(field)) {
                    var fieldPos = getFieldPos(this._descriptions, field, this._fieldsCache);
                    fieldIndex = fieldPos.index;
                    if ("data" !== fieldPos.area) {
                        var path = this._getPath(fieldPos.area);
                        var level = fieldIndex !== -1 && path.length - 2 - fieldIndex;
                        return path[level] && path[level].value
                    }
                }
                if (cell && cell.originalCell) {
                    return needCalculatedValue ? cell[fieldIndex] : cell.originalCell[fieldIndex]
                }
                return NULL
            },
            isPostProcessed: function(field) {
                var fieldIndex = this._fieldIndex;
                if ((0, _type.isDefined)(field)) {
                    var fieldPos = getFieldPos(this._descriptions, field, this._fieldsCache);
                    fieldIndex = fieldPos.index;
                    if ("data" !== fieldPos.area) {
                        return false
                    }
                }
                return !!(this._cell && this._cell.postProcessedFlags[fieldIndex])
            }
        });

        function getExpression(field) {
            var summaryDisplayMode = field.summaryDisplayMode;
            var crossGroupCalculation = field.allowCrossGroupCalculation;
            var expression = NULL;
            if ((0, _type.isFunction)(field.calculateSummaryValue)) {
                expression = field.calculateSummaryValue
            } else {
                if (summaryDisplayMode) {
                    if ("absoluteVariation" === summaryDisplayMode) {
                        expression = createAbsoluteVariationExp(crossGroupCalculation)
                    } else {
                        if ("percentVariation" === summaryDisplayMode) {
                            expression = createPercentVariationExp(crossGroupCalculation)
                        } else {
                            expression = summaryDictionary[summaryDisplayMode]
                        }
                    }
                    if (expression && !field.format && summaryDisplayMode.indexOf("percent") !== -1) {
                        (0, _uiPivot_grid.setFieldProperty)(field, "format", "percent")
                    }
                }
            }
            return expression
        }

        function processDataCell(data, rowIndex, columnIndex, isRunningTotalCalculation) {
            var values = data.values[rowIndex][columnIndex] = data.values[rowIndex][columnIndex] || [];
            var originalCell = values.originalCell;
            if (!originalCell) {
                return
            }
            if (values.allowResetting || !isRunningTotalCalculation) {
                data.values[rowIndex][columnIndex] = originalCell.slice()
            }
            data.values[rowIndex][columnIndex].allowResetting = isRunningTotalCalculation
        }
        exports.applyDisplaySummaryMode = function(descriptions, data) {
            var expressions = [];
            var columnElements = [{
                index: data.grandTotalColumnIndex,
                children: data.columns
            }];
            var rowElements = [{
                index: data.grandTotalRowIndex,
                children: data.rows
            }];
            var valueFields = descriptions.values;
            var fieldsCache = createCache();
            data.values = data.values || [];
            (0, _uiPivot_grid.foreachTree)(rowElements, function(rowPath) {
                var rowItem = rowPath[0];
                rowItem.isEmpty = [];
                data.values[rowItem.index] = data.values[rowItem.index] || [];
                (0, _uiPivot_grid.foreachTree)(columnElements, function(columnPath) {
                    var columnItem = columnPath[0];
                    var isEmptyCell;
                    columnItem.isEmpty = columnItem.isEmpty || [];
                    processDataCell(data, rowItem.index, columnItem.index, false);
                    for (var i = 0; i < valueFields.length; i++) {
                        var field = valueFields[i];
                        var expression = expressions[i] = void 0 === expressions[i] ? getExpression(field) : expressions[i];
                        isEmptyCell = false;
                        if (expression) {
                            var expressionArg = new SummaryCell(columnPath, rowPath, data, descriptions, i, fieldsCache);
                            var cell = expressionArg.cell();
                            var value = cell[i] = expression(expressionArg);
                            cell.postProcessedFlags[i] = true;
                            isEmptyCell = null === value || void 0 === value
                        }
                        if (void 0 === columnItem.isEmpty[i]) {
                            columnItem.isEmpty[i] = true
                        }
                        if (void 0 === rowItem.isEmpty[i]) {
                            rowItem.isEmpty[i] = true
                        }
                        if (!isEmptyCell) {
                            rowItem.isEmpty[i] = columnItem.isEmpty[i] = false
                        }
                    }
                }, false)
            }, false);
            data.isEmptyGrandTotalRow = rowElements[0].isEmpty;
            data.isEmptyGrandTotalColumn = columnElements[0].isEmpty
        };
        exports.applyRunningTotal = function(descriptions, data) {
            var expressions = [];
            var columnElements = [{
                index: data.grandTotalColumnIndex,
                children: data.columns
            }];
            var rowElements = [{
                index: data.grandTotalRowIndex,
                children: data.rows
            }];
            var valueFields = descriptions.values;
            var fieldsCache = createCache();
            data.values = data.values || [];
            (0, _uiPivot_grid.foreachTree)(rowElements, function(rowPath) {
                var rowItem = rowPath[0];
                data.values[rowItem.index] = data.values[rowItem.index] || [];
                (0, _uiPivot_grid.foreachTree)(columnElements, function(columnPath) {
                    var columnItem = columnPath[0];
                    processDataCell(data, rowItem.index, columnItem.index, true);
                    for (var i = 0; i < valueFields.length; i++) {
                        var field = valueFields[i];
                        var expression = expressions[i] = void 0 === expressions[i] ? createRunningTotalExpr(field) : expressions[i];
                        if (expression) {
                            var expressionArg = new SummaryCell(columnPath, rowPath, data, descriptions, i, fieldsCache);
                            var cell = expressionArg.cell();
                            cell[i] = expression(expressionArg);
                            cell.postProcessedFlags[i] = true
                        }
                    }
                }, false)
            }, false)
        };
        exports.createMockSummaryCell = function(descriptions, fields, indices) {
            var summaryCell = new SummaryCell([], [], {}, descriptions, 0);
            summaryCell.value = function(fieldId) {
                if ((0, _type.isDefined)(fieldId)) {
                    var index = (0, _uiPivot_grid.findField)(fields, fieldId);
                    var field = fields[index];
                    if (!indices[index] && field && !(0, _type.isDefined)(field.area)) {
                        descriptions.values.push(field);
                        indices[index] = true
                    }
                }
            };
            summaryCell.grandTotal = function() {
                return this
            };
            summaryCell.children = function() {
                return []
            };
            return summaryCell
        };
        exports.Cell = SummaryCell;
        exports.summaryDictionary = summaryDictionary;
        exports.getExpression = getExpression
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.data_area.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.area_item */ 248);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PIVOTGRID_AREA_CLASS = "dx-pivotgrid-area";
        var PIVOTGRID_AREA_DATA_CLASS = "dx-pivotgrid-area-data";
        var PIVOTGRID_TOTAL_CLASS = "dx-total";
        var PIVOTGRID_GRAND_TOTAL_CLASS = "dx-grandtotal";
        var PIVOTGRID_ROW_TOTAL_CLASS = "dx-row-total";
        exports.DataArea = _uiPivot_grid.AreaItem.inherit({
            _getAreaName: function() {
                return "data"
            },
            _createGroupElement: function() {
                return (0, _renderer2.default)("<div>").addClass(PIVOTGRID_AREA_CLASS).addClass(PIVOTGRID_AREA_DATA_CLASS)
            },
            _applyCustomStyles: function(options) {
                var cell = options.cell;
                var classArray = options.classArray;
                if ("T" === cell.rowType || "T" === cell.columnType) {
                    classArray.push(PIVOTGRID_TOTAL_CLASS)
                }
                if ("GT" === cell.rowType || "GT" === cell.columnType) {
                    classArray.push(PIVOTGRID_GRAND_TOTAL_CLASS)
                }
                if ("T" === cell.rowType || "GT" === cell.rowType) {
                    classArray.push(PIVOTGRID_ROW_TOTAL_CLASS)
                }
                if (options.rowIndex === options.rowsCount - 1) {
                    options.cssArray.push("border-bottom: 0px")
                }
                this.callBase(options)
            },
            _moveFakeTable: function(scrollPos) {
                this._moveFakeTableHorizontally(scrollPos.x);
                this._moveFakeTableTop(scrollPos.y);
                this.callBase()
            },
            processScroll: function(useNativeScrolling, horizontalScroll, verticalScroll) {
                var direction = "both";
                if (horizontalScroll && !verticalScroll) {
                    direction = "horizontal"
                } else {
                    if (!horizontalScroll && verticalScroll) {
                        direction = "vertical"
                    }
                }
                this._groupElement.css("borderTopWidth", 0).dxScrollable({
                    useNative: !!useNativeScrolling,
                    useSimulatedScrollbar: !useNativeScrolling,
                    direction: direction,
                    bounceEnabled: false,
                    updateManually: true
                })
            },
            reset: function() {
                this.callBase();
                if (this._virtualContent) {
                    this._virtualContent.parent().css("height", "auto")
                }
            },
            setVirtualContentParams: function(params) {
                this.callBase(params);
                this._virtualContent.parent().css("height", params.height);
                this._setTableCss({
                    top: params.top,
                    left: params.left
                })
            }
        })
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.headers_area.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.area_item */ 248);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PIVOTGRID_AREA_CLASS = "dx-pivotgrid-area";
        var PIVOTGRID_AREA_COLUMN_CLASS = "dx-pivotgrid-horizontal-headers";
        var PIVOTGRID_AREA_ROW_CLASS = "dx-pivotgrid-vertical-headers";
        var PIVOTGRID_TOTAL_CLASS = "dx-total";
        var PIVOTGRID_GRAND_TOTAL_CLASS = "dx-grandtotal";
        var PIVOTGRID_ROW_TOTAL_CLASS = "dx-row-total";
        var PIVOTGRID_EXPANDED_CLASS = "dx-pivotgrid-expanded";
        var PIVOTGRID_COLLAPSED_CLASS = "dx-pivotgrid-collapsed";
        var PIVOTGRID_LAST_CELL_CLASS = "dx-last-cell";
        var PIVOTGRID_VERTICAL_SCROLL_CLASS = "dx-vertical-scroll";
        var PIVOTGRID_EXPAND_BORDER = "dx-expand-border";

        function getCellPath(tableElement, cell) {
            if (cell) {
                var data = tableElement.data().data;
                var rowIndex = cell.parentNode.rowIndex;
                var cellIndex = cell.cellIndex;
                return data[rowIndex] && data[rowIndex][cellIndex] && data[rowIndex][cellIndex].path
            }
        }
        exports.HorizontalHeadersArea = _uiPivot_grid.AreaItem.inherit({
            _getAreaName: function() {
                return "column"
            },
            _getAreaClassName: function() {
                return PIVOTGRID_AREA_COLUMN_CLASS
            },
            _createGroupElement: function() {
                return (0, _renderer2.default)("<div>").addClass(this._getAreaClassName()).addClass(PIVOTGRID_AREA_CLASS)
            },
            _applyCustomStyles: function(options) {
                var cssArray = options.cssArray;
                var cell = options.cell;
                var rowsCount = options.rowsCount;
                var classArray = options.classArray;
                if (options.cellIndex === options.cellsCount - 1) {
                    cssArray.push((options.rtlEnabled ? "border-left:" : "border-right:") + "0px")
                }
                if (cell.rowspan === rowsCount - options.rowIndex || options.rowIndex + 1 === rowsCount) {
                    cssArray.push("border-bottom-width:0px")
                }
                if ("T" === cell.type || "GT" === cell.type) {
                    classArray.push(PIVOTGRID_ROW_TOTAL_CLASS)
                }
                if ("T" === options.cell.type) {
                    classArray.push(PIVOTGRID_TOTAL_CLASS)
                }
                if ("GT" === options.cell.type) {
                    classArray.push(PIVOTGRID_GRAND_TOTAL_CLASS)
                }
                if ((0, _type.isDefined)(cell.expanded)) {
                    classArray.push(cell.expanded ? PIVOTGRID_EXPANDED_CLASS : PIVOTGRID_COLLAPSED_CLASS)
                }
                this.callBase(options)
            },
            _getMainElementMarkup: function() {
                return "<thead class='" + this._getAreaClassName() + "'>"
            },
            _getCloseMainElementMarkup: function() {
                return "</thead>"
            },
            setVirtualContentParams: function(params) {
                this.callBase(params);
                this._setTableCss({
                    left: params.left,
                    top: 0
                });
                this._virtualContentWidth = params.width
            },
            hasScroll: function() {
                var tableWidth = this._virtualContent ? this._virtualContentWidth : this._tableWidth;
                if (this._groupWidth && tableWidth) {
                    return tableWidth - this._groupWidth >= 1
                }
                return false
            },
            processScroll: function() {
                if (!this._getScrollable()) {
                    this._groupElement.dxScrollable({
                        useNative: false,
                        useSimulatedScrollbar: false,
                        showScrollbar: false,
                        bounceEnabled: false,
                        direction: "horizontal",
                        updateManually: true
                    })
                }
            },
            processScrollBarSpacing: function(scrollBarWidth) {
                var that = this;
                var groupAlignment = that.option("rtlEnabled") ? "right" : "left";
                if (that._groupWidth) {
                    that.groupWidth(that._groupWidth - scrollBarWidth)
                }
                if (that._scrollBarWidth) {
                    that._groupElement.next().remove()
                }
                that._groupElement.toggleClass(PIVOTGRID_VERTICAL_SCROLL_CLASS, scrollBarWidth > 0);
                that._groupElement.css("float", groupAlignment).width(that._groupHeight);
                that._scrollBarWidth = scrollBarWidth
            },
            ctor: function(component) {
                this.callBase(component);
                this._scrollBarWidth = 0
            },
            getScrollPath: function(offset) {
                var tableElement = this.tableElement();
                var cell;
                offset -= parseInt(tableElement[0].style.left, 10) || 0;
                (0, _iterator.each)(tableElement.find("td"), function(_, td) {
                    if (1 === td.colSpan && td.offsetLeft <= offset && td.offsetWidth + td.offsetLeft > offset) {
                        cell = td;
                        return false
                    }
                });
                return getCellPath(tableElement, cell)
            },
            _moveFakeTable: function(scrollPos) {
                this._moveFakeTableHorizontally(scrollPos);
                this.callBase()
            }
        });
        exports.VerticalHeadersArea = exports.HorizontalHeadersArea.inherit({
            _getAreaClassName: function() {
                return PIVOTGRID_AREA_ROW_CLASS
            },
            _applyCustomStyles: function(options) {
                this.callBase(options);
                if (options.cellIndex === options.cellsCount - 1) {
                    options.classArray.push(PIVOTGRID_LAST_CELL_CLASS)
                }
                if (options.rowIndex === options.rowsCount - 1) {
                    options.cssArray.push("border-bottom: 0px")
                }
                if (options.cell.isWhiteSpace) {
                    options.classArray.push("dx-white-space-column")
                }
            },
            _getAreaName: function() {
                return "row"
            },
            setVirtualContentParams: function(params) {
                this.callBase(params);
                this._setTableCss({
                    top: params.top,
                    left: 0
                });
                this._virtualContentHeight = params.height
            },
            hasScroll: function() {
                var tableHeight = this._virtualContent ? this._virtualContentHeight : this._tableHeight;
                if (this._groupHeight && tableHeight) {
                    return tableHeight - this._groupHeight >= 1
                }
                return false
            },
            processScroll: function() {
                if (!this._getScrollable()) {
                    this._groupElement.dxScrollable({
                        useNative: false,
                        useSimulatedScrollbar: false,
                        showScrollbar: false,
                        bounceEnabled: false,
                        direction: "vertical",
                        updateManually: true
                    })
                }
            },
            processScrollBarSpacing: function(scrollBarWidth) {
                var that = this;
                if (that._groupHeight) {
                    that.groupHeight(that._groupHeight - scrollBarWidth)
                }
                if (that._scrollBarWidth) {
                    that._groupElement.next().remove()
                }
                if (scrollBarWidth) {
                    that._groupElement.after((0, _renderer2.default)("<div>").width("100%").height(scrollBarWidth - 1))
                }
                that._scrollBarWidth = scrollBarWidth
            },
            getScrollPath: function(offset) {
                var tableElement = this.tableElement();
                var cell;
                offset -= parseInt(tableElement[0].style.top, 10) || 0;
                (0, _iterator.each)(tableElement.find("tr"), function(_, tr) {
                    var td = tr.childNodes[tr.childNodes.length - 1];
                    if (td && 1 === td.rowSpan && td.offsetTop <= offset && td.offsetHeight + td.offsetTop > offset) {
                        cell = td;
                        return false
                    }
                });
                return getCellPath(tableElement, cell)
            },
            _moveFakeTable: function(scrollPos) {
                this._moveFakeTableTop(scrollPos);
                this.callBase()
            },
            _getRowClassNames: function(rowIndex, cell, rowClassNames) {
                if (0 !== rowIndex & cell.expanded && (0, _array.inArray)(PIVOTGRID_EXPAND_BORDER, rowClassNames) === -1) {
                    rowClassNames.push(PIVOTGRID_EXPAND_BORDER)
                }
            },
            _getMainElementMarkup: function() {
                return "<tbody class='" + this._getAreaClassName() + "'>"
            },
            _getCloseMainElementMarkup: function() {
                return "</tbody>"
            },
            updateColspans: function(columnCount) {
                var rows = this.tableElement()[0].rows;
                var columnOffset = 0;
                var columnOffsetResetIndexes = [];
                if (this.getColumnsCount() - columnCount > 0) {
                    return
                }
                for (var i = 0; i < rows.length; i++) {
                    for (var j = 0; j < rows[i].cells.length; j++) {
                        var cell = rows[i].cells[j];
                        var rowSpan = cell.rowSpan;
                        if (columnOffsetResetIndexes[i]) {
                            columnOffset -= columnOffsetResetIndexes[i];
                            columnOffsetResetIndexes[i] = 0
                        }
                        var diff = columnCount - (columnOffset + cell.colSpan);
                        if (j === rows[i].cells.length - 1 && diff > 0) {
                            cell.colSpan = cell.colSpan + diff
                        }
                        columnOffsetResetIndexes[i + rowSpan] = (columnOffsetResetIndexes[i + rowSpan] || 0) + cell.colSpan;
                        columnOffset += cell.colSpan
                    }
                }
            }
        })
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.fields_area.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.area_item */ 248);
        var _uiPivot_grid2 = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        __webpack_require__( /*! ./ui.pivot_grid.field_chooser_base */ 249);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DIV = "<div>";
        var AREA_DRAG_CLASS = "dx-pivotgrid-drag-action";

        function renderGroupConnector(field, nextField, prevField, $container) {
            if (prevField && prevField.groupName && prevField.groupName === field.groupName) {
                (0, _renderer2.default)(DIV).addClass("dx-group-connector").addClass("dx-group-connector-prev").appendTo($container)
            }
            if (nextField && nextField.groupName && nextField.groupName === field.groupName) {
                (0, _renderer2.default)(DIV).addClass("dx-group-connector").addClass("dx-group-connector-next").appendTo($container)
            }
        }
        exports.FieldsArea = _uiPivot_grid.AreaItem.inherit({
            ctor: function(component, area) {
                this.callBase(component);
                this._area = area
            },
            _getAreaName: function() {
                return "fields"
            },
            _createGroupElement: function() {
                return (0, _renderer2.default)(DIV).addClass("dx-pivotgrid-fields-area").addClass("dx-area-fields").addClass(AREA_DRAG_CLASS).attr("group", this._area)
            },
            isVisible: function() {
                return !!this.option("fieldPanel.visible") && this.option("fieldPanel.show" + (0, _uiPivot_grid2.capitalizeFirstLetter)(this._area) + "Fields")
            },
            _renderButton: function(element) {
                var that = this;
                var container = (0, _renderer2.default)("<td>").appendTo((0, _renderer2.default)("<tr>").appendTo(element));
                var button = that.component._createComponent((0, _renderer2.default)(DIV).appendTo(container), _button2.default, {
                    text: "Fields",
                    icon: "menu",
                    width: "auto",
                    onClick: function() {
                        var popup = that.tableElement().find(".dx-fields-area-popup").dxPopup("instance");
                        if (!popup.option("visible")) {
                            popup.show()
                        }
                    }
                });
                button.$element().addClass("dx-pivotgrid-fields-area-hamburger")
            },
            _getPopupOptions: function(row, button) {
                return {
                    contentTemplate: function() {
                        return (0, _renderer2.default)("<table>").addClass("dx-area-field-container").append((0, _renderer2.default)("<thead>").addClass("dx-pivotgrid-fields-area-head").append(row))
                    },
                    height: "auto",
                    width: "auto",
                    position: {
                        at: "left",
                        my: "left",
                        of: button
                    },
                    dragEnabled: false,
                    animation: {
                        show: {
                            type: "pop",
                            duration: 200
                        }
                    },
                    shading: false,
                    showTitle: false,
                    closeOnOutsideClick: true,
                    container: button.parent()
                }
            },
            _renderPopup: function(tableElement, row) {
                var that = this;
                var button = tableElement.find(".dx-button");
                var popupOptions = that._getPopupOptions(row, button);
                var FieldChooserBase = that.component.$element().dxPivotGridFieldChooserBase("instance");
                if (that._rowPopup) {
                    that._rowPopup.$element().remove()
                }
                that._rowPopup = that.component._createComponent((0, _renderer2.default)(DIV).appendTo(tableElement), _popup2.default, popupOptions);
                that._rowPopup.$element().addClass("dx-fields-area-popup");
                that._rowPopup.content().addClass("dx-pivotgrid-fields-container");
                that._rowPopup.content().parent().attr("group", "row");
                FieldChooserBase.subscribeToEvents(that._rowPopup.content());
                FieldChooserBase.renderSortable(that._rowPopup.content())
            },
            _shouldCreateButton: function() {
                return false
            },
            _renderTableContent: function(tableElement, data) {
                var that = this;
                var groupElement = this.groupElement();
                var isVisible = this.isVisible();
                var fieldChooserBase = that.component.$element().dxPivotGridFieldChooserBase("instance");
                var head = (0, _renderer2.default)("<thead>").addClass("dx-pivotgrid-fields-area-head").appendTo(tableElement);
                var area = that._area;
                var row = (0, _renderer2.default)("<tr>");
                groupElement.toggleClass("dx-hidden", !isVisible);
                tableElement.addClass("dx-area-field-container");
                if (!isVisible) {
                    return
                }(0, _iterator.each)(data, function(index, field) {
                    if (field.area === area && false !== field.visible) {
                        var td = (0, _renderer2.default)("<td>").append(fieldChooserBase.renderField(field, "row" === field.area));
                        var indicators = td.find(".dx-column-indicators");
                        if (indicators.length && that._shouldCreateButton()) {
                            indicators.insertAfter(indicators.next())
                        }
                        td.appendTo(row);
                        renderGroupConnector(field, data[index + 1], data[index - 1], td)
                    }
                });
                if (!row.children().length) {
                    (0, _renderer2.default)("<td>").append((0, _renderer2.default)(DIV).addClass("dx-empty-area-text").text(this.option("fieldPanel.texts." + area + "FieldArea"))).appendTo(row)
                }
                if (that._shouldCreateButton()) {
                    that._renderButton(head);
                    that._renderPopup(tableElement, row)
                } else {
                    head.append(row)
                }
            },
            reset: function() {
                this.callBase();
                this.groupElement().css("marginTop", 0)
            },
            _renderVirtualContent: _common.noop
        })
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.sortable.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _dom_component = __webpack_require__( /*! ../../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _drag = __webpack_require__( /*! ../../events/drag */ 69);
        var _drag2 = _interopRequireDefault(_drag);
        var _swatch_container = __webpack_require__( /*! ../widget/swatch_container */ 157);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SORTABLE_NAMESPACE = "dxSortable";
        var SORTABLE_CLASS = "dx-sortable-old";
        var SCROLL_STEP = 2;
        var START_SCROLL_OFFSET = 20;
        var SCROLL_TIMEOUT = 10;

        function elementHasPoint(element, x, y) {
            var $item = (0, _renderer2.default)(element);
            var offset = $item.offset();
            if (x >= offset.left && x <= offset.left + $item.outerWidth(true)) {
                if (y >= offset.top && y <= offset.top + $item.outerHeight(true)) {
                    return true
                }
            }
        }

        function checkHorizontalPosition(position, itemOffset, rtl) {
            if ((0, _type.isDefined)(itemOffset.posHorizontal)) {
                return rtl ? position > itemOffset.posHorizontal : position < itemOffset.posHorizontal
            } else {
                return true
            }
        }

        function getIndex($items, $item) {
            var index = -1;
            var itemElement = $item.get(0);
            (0, _iterator.each)($items, function(elementIndex, element) {
                var $element = (0, _renderer2.default)(element);
                if (!($element.attr("item-group") && $element.attr("item-group") === $items.eq(elementIndex - 1).attr("item-group"))) {
                    index++
                }
                if (element === itemElement) {
                    return false
                }
            });
            return index === $items.length ? -1 : index
        }

        function getTargetGroup(e, $groups) {
            var result;
            (0, _iterator.each)($groups, function() {
                if (elementHasPoint(this, e.pageX, e.pageY)) {
                    result = (0, _renderer2.default)(this)
                }
            });
            return result
        }

        function getItemsOffset($elements, isVertical, $itemsContainer) {
            var result = [];
            var $item = [];
            for (var i = 0; i < $elements.length; i += $item.length) {
                $item = $elements.eq(i);
                if ($item.attr("item-group")) {
                    $item = $itemsContainer.find("[item-group='" + $item.attr("item-group") + "']")
                }
                if ($item.is(":visible")) {
                    var offset = {
                        item: $item,
                        index: result.length,
                        posHorizontal: isVertical ? void 0 : ($item.last().outerWidth(true) + $item.last().offset().left + $item.offset().left) / 2
                    };
                    if (isVertical) {
                        offset.posVertical = ($item.last().offset().top + $item.offset().top + $item.last().outerHeight(true)) / 2
                    } else {
                        offset.posVertical = $item.last().outerHeight(true) + $item.last().offset().top
                    }
                    result.push(offset)
                }
            }
            return result
        }

        function getScrollWrapper(scrollable) {
            var timeout = null;
            var scrollTop = scrollable.scrollTop();
            var $element = scrollable.$element();
            var top = $element.offset().top;
            var height = $element.height();
            var delta = 0;

            function onScroll(e) {
                scrollTop = e.scrollOffset.top
            }
            scrollable.on("scroll", onScroll);

            function move() {
                stop();
                scrollable.scrollTo(scrollTop += delta);
                timeout = setTimeout(move, SCROLL_TIMEOUT)
            }

            function stop() {
                clearTimeout(timeout)
            }

            function moveIfNeed(event) {
                if (event.pageY <= top + START_SCROLL_OFFSET) {
                    delta = -SCROLL_STEP
                } else {
                    if (event.pageY >= top + height - START_SCROLL_OFFSET) {
                        delta = SCROLL_STEP
                    } else {
                        delta = 0;
                        stop();
                        return
                    }
                }
                move()
            }
            return {
                moveIfNeed: moveIfNeed,
                element: function() {
                    return $element
                },
                dispose: function() {
                    stop();
                    scrollable.off("scroll", onScroll)
                }
            }
        }
        var Sortable = _dom_component2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    onChanged: null,
                    onDragging: null,
                    itemRender: null,
                    groupSelector: null,
                    itemSelector: ".dx-sort-item",
                    itemContainerSelector: ".dx-sortable-old",
                    sourceClass: "dx-drag-source",
                    dragClass: "dx-drag",
                    targetClass: "dx-drag-target",
                    direction: "vertical",
                    allowDragging: true,
                    groupFilter: null,
                    useIndicator: false
                })
            },
            _renderItem: function($sourceItem, target) {
                var itemRender = this.option("itemRender");
                var $item;
                if (itemRender) {
                    $item = itemRender($sourceItem, target)
                } else {
                    $item = $sourceItem.clone();
                    $item.css({
                        width: $sourceItem.width(),
                        height: $sourceItem.height()
                    })
                }
                return $item
            },
            _renderIndicator: function($item, isVertical, $targetGroup, isLast) {
                var height = $item.outerHeight(true);
                var width = $item.outerWidth(true);
                var top = $item.offset().top - $targetGroup.offset().top;
                var left = $item.offset().left - $targetGroup.offset().left;
                this._indicator.css({
                    position: "absolute",
                    top: isLast && isVertical ? top + height : top,
                    left: isLast && !isVertical ? left + width : left
                }).toggleClass("dx-position-indicator-horizontal", !isVertical).toggleClass("dx-position-indicator-vertical", !!isVertical).toggleClass("dx-position-indicator-last", !!isLast).height("").width("").appendTo($targetGroup);
                isVertical ? this._indicator.width(width) : this._indicator.height(height)
            },
            _renderDraggable: function($sourceItem) {
                this._$draggable && this._$draggable.remove();
                this._$draggable = this._renderItem($sourceItem, "drag").addClass(this.option("dragClass")).appendTo((0, _swatch_container.getSwatchContainer)($sourceItem)).css({
                    zIndex: 1e6,
                    position: "absolute"
                })
            },
            _detachEventHandlers: function() {
                var dragEventsString = [_drag2.default.move, _drag2.default.start, _drag2.default.end, _drag2.default.enter, _drag2.default.leave, _drag2.default.drop].join(" ");
                _events_engine2.default.off(this._getEventListener(), (0, _utils.addNamespace)(dragEventsString, SORTABLE_NAMESPACE))
            },
            _getItemOffset: function(isVertical, itemsOffset, e) {
                for (var i = 0; i < itemsOffset.length; i++) {
                    var shouldInsert = void 0;
                    var sameLine = e.pageY < itemsOffset[i].posVertical;
                    if (isVertical) {
                        shouldInsert = sameLine
                    } else {
                        if (sameLine) {
                            shouldInsert = checkHorizontalPosition(e.pageX, itemsOffset[i], this.option("rtlEnabled"));
                            if (!shouldInsert && itemsOffset[i + 1] && itemsOffset[i + 1].posVertical > itemsOffset[i].posVertical) {
                                shouldInsert = true
                            }
                        }
                    }
                    if (shouldInsert) {
                        return itemsOffset[i]
                    }
                }
            },
            _getEventListener: function() {
                var groupSelector = this.option("groupSelector");
                var element = this.$element();
                return groupSelector ? element.find(groupSelector) : element
            },
            _attachEventHandlers: function() {
                var that = this;
                var itemSelector = that.option("itemSelector");
                var itemContainerSelector = that.option("itemContainerSelector");
                var groupSelector = that.option("groupSelector");
                var sourceClass = that.option("sourceClass");
                var targetClass = that.option("targetClass");
                var onDragging = that.option("onDragging");
                var groupFilter = that.option("groupFilter");
                var $sourceItem;
                var sourceIndex;
                var $targetItem;
                var $targetGroup;
                var startPositions;
                var sourceGroup;
                var element = that.$element();
                var $groups;
                var scrollWrapper = null;
                var targetIndex = -1;
                var setStartPositions = function() {
                    startPositions = [];
                    (0, _iterator.each)($sourceItem, function(_, item) {
                        startPositions.push((0, _renderer2.default)(item).offset())
                    })
                };
                var createGroups = function() {
                    if (!groupSelector) {
                        return element
                    } else {
                        return groupFilter ? (0, _renderer2.default)(groupSelector).filter(groupFilter) : element.find(groupSelector)
                    }
                };
                var disposeScrollWrapper = function() {
                    scrollWrapper && scrollWrapper.dispose();
                    scrollWrapper = null
                };
                var invokeOnDraggingEvent = function() {
                    var draggingArgs = {
                        sourceGroup: sourceGroup,
                        sourceIndex: sourceIndex,
                        sourceElement: $sourceItem,
                        targetGroup: $targetGroup.attr("group"),
                        targetIndex: $targetGroup.find(itemSelector).index($targetItem)
                    };
                    onDragging && onDragging(draggingArgs);
                    if (draggingArgs.cancel) {
                        $targetGroup = void 0
                    }
                };
                that._detachEventHandlers();
                if (that.option("allowDragging")) {
                    var $eventListener = that._getEventListener();
                    _events_engine2.default.on($eventListener, (0, _utils.addNamespace)(_drag2.default.start, SORTABLE_NAMESPACE), itemSelector, function(e) {
                        $sourceItem = (0, _renderer2.default)(e.currentTarget);
                        var $sourceGroup = $sourceItem.closest(groupSelector);
                        sourceGroup = $sourceGroup.attr("group");
                        sourceIndex = getIndex((groupSelector ? $sourceGroup : element).find(itemSelector), $sourceItem);
                        if ($sourceItem.attr("item-group")) {
                            $sourceItem = $sourceGroup.find("[item-group='" + $sourceItem.attr("item-group") + "']")
                        }
                        that._renderDraggable($sourceItem);
                        $targetItem = that._renderItem($sourceItem, "target").addClass(targetClass);
                        $sourceItem.addClass(sourceClass);
                        setStartPositions();
                        $groups = createGroups();
                        that._indicator = (0, _renderer2.default)("<div>").addClass("dx-position-indicator")
                    });
                    _events_engine2.default.on($eventListener, (0, _utils.addNamespace)(_drag2.default.move, SORTABLE_NAMESPACE), function(e) {
                        var $item;
                        var $lastItem;
                        var $prevItem;
                        if (!$sourceItem) {
                            return
                        }
                        targetIndex = -1;
                        that._indicator.detach();
                        (0, _iterator.each)(that._$draggable, function(index, draggableElement) {
                            (0, _renderer2.default)(draggableElement).css({
                                top: startPositions[index].top + e.offset.y,
                                left: startPositions[index].left + e.offset.x
                            })
                        });
                        $targetGroup && $targetGroup.removeClass(targetClass);
                        $targetGroup = getTargetGroup(e, $groups);
                        $targetGroup && invokeOnDraggingEvent();
                        if ($targetGroup && scrollWrapper && $targetGroup.get(0) !== scrollWrapper.element().get(0)) {
                            disposeScrollWrapper()
                        }
                        scrollWrapper && scrollWrapper.moveIfNeed(e);
                        if (!$targetGroup) {
                            $targetItem.detach();
                            return
                        }
                        if (!scrollWrapper && $targetGroup.attr("allow-scrolling")) {
                            scrollWrapper = getScrollWrapper($targetGroup.dxScrollable("instance"))
                        }
                        $targetGroup.addClass(targetClass);
                        var $itemContainer = $targetGroup.find(itemContainerSelector);
                        var $items = $itemContainer.find(itemSelector);
                        var targetSortable = $targetGroup.closest("." + SORTABLE_CLASS).data("dxSortableOld");
                        var useIndicator = targetSortable.option("useIndicator");
                        var isVertical = "vertical" === (targetSortable || that).option("direction");
                        var itemsOffset = getItemsOffset($items, isVertical, $itemContainer);
                        var itemOffset = that._getItemOffset(isVertical, itemsOffset, e);
                        if (itemOffset) {
                            $item = itemOffset.item;
                            $prevItem = itemsOffset[itemOffset.index - 1] && itemsOffset[itemOffset.index - 1].item;
                            if ($item.hasClass(sourceClass) || $prevItem && $prevItem.hasClass(sourceClass) && $prevItem.is(":visible")) {
                                $targetItem.detach();
                                return
                            }
                            targetIndex = itemOffset.index;
                            if (!useIndicator) {
                                $targetItem.insertBefore($item);
                                return
                            }
                            var isAnotherGroup = $targetGroup.attr("group") !== sourceGroup;
                            var isSameIndex = targetIndex === sourceIndex;
                            var isNextIndex = targetIndex === sourceIndex + 1;
                            if (isAnotherGroup) {
                                that._renderIndicator($item, isVertical, $targetGroup, that.option("rtlEnabled") && !isVertical);
                                return
                            }
                            if (!isSameIndex && !isNextIndex) {
                                that._renderIndicator($item, isVertical, $targetGroup, that.option("rtlEnabled") && !isVertical)
                            }
                        } else {
                            $lastItem = $items.last();
                            if ($lastItem.is(":visible") && $lastItem.hasClass(sourceClass)) {
                                return
                            }
                            if ($itemContainer.length) {
                                targetIndex = itemsOffset.length ? itemsOffset[itemsOffset.length - 1].index + 1 : 0
                            }
                            if (useIndicator) {
                                $items.length && that._renderIndicator($lastItem, isVertical, $targetGroup, !that.option("rtlEnabled") || isVertical)
                            } else {
                                $targetItem.appendTo($itemContainer)
                            }
                        }
                    });
                    _events_engine2.default.on($eventListener, (0, _utils.addNamespace)(_drag2.default.end, SORTABLE_NAMESPACE), function() {
                        disposeScrollWrapper();
                        if (!$sourceItem) {
                            return
                        }
                        var onChanged = that.option("onChanged");
                        var changedArgs = {
                            sourceIndex: sourceIndex,
                            sourceElement: $sourceItem,
                            sourceGroup: sourceGroup,
                            targetIndex: targetIndex,
                            removeSourceElement: true,
                            removeTargetElement: false,
                            removeSourceClass: true
                        };
                        if ($targetGroup) {
                            $targetGroup.removeClass(targetClass);
                            changedArgs.targetGroup = $targetGroup.attr("group");
                            if (sourceGroup !== changedArgs.targetGroup || targetIndex > -1) {
                                onChanged && onChanged(changedArgs);
                                changedArgs.removeSourceElement && $sourceItem.remove()
                            }
                        }
                        that._indicator.detach();
                        changedArgs.removeSourceClass && $sourceItem.removeClass(sourceClass);
                        $sourceItem = null;
                        that._$draggable.remove();
                        that._$draggable = null;
                        changedArgs.removeTargetElement && $targetItem.remove();
                        $targetItem.removeClass(targetClass);
                        $targetItem = null
                    })
                }
            },
            _init: function() {
                this.callBase();
                this._attachEventHandlers()
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(SORTABLE_CLASS)
            },
            _dispose: function() {
                var that = this;
                that.callBase.apply(that, arguments);
                that._$draggable && that._$draggable.detach();
                that._indicator && that._indicator.detach()
            },
            _optionChanged: function(args) {
                var that = this;
                switch (args.name) {
                    case "onDragging":
                    case "onChanged":
                    case "itemRender":
                    case "groupSelector":
                    case "itemSelector":
                    case "itemContainerSelector":
                    case "sourceClass":
                    case "targetClass":
                    case "dragClass":
                    case "allowDragging":
                    case "groupFilter":
                    case "useIndicator":
                        that._attachEventHandlers();
                        break;
                    case "direction":
                        break;
                    default:
                        that.callBase(args)
                }
            },
            _useTemplates: function() {
                return false
            }
        });
        Sortable.prototype.__SCROLL_STEP = SCROLL_STEP;
        (0, _component_registrator2.default)("dxSortableOld", Sortable);
        module.exports = Sortable
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.export.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _class = __webpack_require__( /*! ../../core/class */ 16);
        var _class2 = _interopRequireDefault(_class);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _format_helper = __webpack_require__( /*! ../../format_helper */ 63);
        var _number = __webpack_require__( /*! ../../localization/number */ 49);
        var _exporter = __webpack_require__( /*! ../../exporter */ 179);
        var _exporter2 = _interopRequireDefault(_exporter);
        var _uiGrid_core = __webpack_require__( /*! ../grid_core/ui.grid_core.export_mixin */ 390);
        var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_DATA_TYPE = "string";
        var COLUMN_HEADER_STYLE_ID = 0;
        var ROW_HEADER_STYLE_ID = 1;
        var DATA_STYLE_OFFSET = 2;
        var DEFAUL_COLUMN_WIDTH = 100;
        exports.ExportMixin = (0, _extend.extend)({}, _uiGrid_core2.default, {
            exportToExcel: function() {
                var that = this;
                _exporter2.default.export(that.getDataProvider(), {
                    fileName: that.option("export.fileName"),
                    proxyUrl: that.option("export.proxyUrl"),
                    format: "EXCEL",
                    rtlEnabled: that.option("rtlEnabled"),
                    ignoreErrors: that.option("export.ignoreExcelErrors"),
                    exportingAction: that._actions.onExporting,
                    exportedAction: that._actions.onExported,
                    fileSavingAction: that._actions.onFileSaving
                }, _exporter.excel.getData)
            },
            _getLength: function(items) {
                var i;
                var itemCount = items[0].length;
                var cellCount = 0;
                for (i = 0; i < itemCount; i++) {
                    cellCount += items[0][i].colspan || 1
                }
                return cellCount
            },
            _correctCellsInfoItemLengths: function(cellsInfo, expectedLength) {
                for (var i = 0; i < cellsInfo.length; i++) {
                    while (cellsInfo[i].length < expectedLength) {
                        cellsInfo[i].push({})
                    }
                }
                return cellsInfo
            },
            _calculateCellInfoItemLength: function(columnsRow) {
                var result = 0;
                for (var columnIndex = 0; columnIndex < columnsRow.length; columnIndex++) {
                    result += (0, _type.isDefined)(columnsRow[columnIndex].colspan) ? columnsRow[columnIndex].colspan : 1
                }
                return result
            },
            _getAllItems: function(columnsInfo, rowsInfoItems, cellsInfo) {
                var cellIndex;
                var rowIndex;
                var correctedCellsInfo = cellsInfo;
                var rowsLength = this._getLength(rowsInfoItems);
                var headerRowsCount = columnsInfo.length;
                if (columnsInfo.length > 0 && columnsInfo[0].length > 0 && cellsInfo.length > 0 && 0 === cellsInfo[0].length) {
                    var cellInfoItemLength = this._calculateCellInfoItemLength(columnsInfo[0]);
                    if (cellInfoItemLength > 0) {
                        correctedCellsInfo = this._correctCellsInfoItemLengths(cellsInfo, cellInfoItemLength)
                    }
                }
                var sourceItems = columnsInfo.concat(correctedCellsInfo);
                for (rowIndex = 0; rowIndex < rowsInfoItems.length; rowIndex++) {
                    for (cellIndex = rowsInfoItems[rowIndex].length - 1; cellIndex >= 0; cellIndex--) {
                        if (!(0, _type.isDefined)(sourceItems[rowIndex + headerRowsCount])) {
                            sourceItems[rowIndex + headerRowsCount] = []
                        }
                        sourceItems[rowIndex + headerRowsCount].splice(0, 0, (0, _extend.extend)({}, rowsInfoItems[rowIndex][cellIndex]))
                    }
                }
                sourceItems[0].splice(0, 0, (0, _extend.extend)({}, this._getEmptyCell(), {
                    alignment: this._options.rtlEnabled ? "right" : "left",
                    colspan: rowsLength,
                    rowspan: headerRowsCount
                }));
                return this._prepareItems(sourceItems)
            },
            getDataProvider: function() {
                var that = this;
                var dataController = this._dataController;
                var items = new _deferred.Deferred;
                dataController.beginLoading();
                setTimeout(function() {
                    var columnsInfo = (0, _extend.extend)(true, [], dataController.getColumnsInfo(true));
                    var rowsInfoItems = (0, _extend.extend)(true, [], dataController.getRowsInfo(true));
                    var cellsInfo = dataController.getCellsInfo(true);
                    items.resolve(that._getAllItems(columnsInfo, rowsInfoItems, cellsInfo));
                    dataController.endLoading()
                });
                return new exports.DataProvider({
                    items: items,
                    rtlEnabled: this.option("rtlEnabled"),
                    dataFields: this.getDataSource().getAreaFields("data"),
                    customizeExcelCell: this.option("export.customizeExcelCell")
                })
            }
        });

        function getCellDataType(field) {
            if (field && field.customizeText) {
                return "string"
            }
            if (field.dataType) {
                return field.dataType
            }
            if (field.format) {
                if (1 === (0, _number.parse)((0, _format_helper.format)(1, field.format))) {
                    return "number"
                }
                if ((0, _format_helper.format)(new Date, field.format)) {
                    return "date"
                }
            }
            return DEFAULT_DATA_TYPE
        }
        exports.DataProvider = _class2.default.inherit({
            ctor: function(options) {
                this._options = options;
                this._styles = []
            },
            ready: function() {
                var that = this;
                var options = that._options;
                var dataFields = options.dataFields;
                return (0, _deferred.when)(options.items).done(function(items) {
                    var headerSize = items[0][0].rowspan;
                    var columns = items[headerSize - 1];
                    var dataItemStyle = {
                        alignment: options.rtlEnabled ? "left" : "right"
                    };
                    that._styles = [{
                        alignment: "center",
                        dataType: "string"
                    }, {
                        alignment: options.rtlEnabled ? "right" : "left",
                        dataType: "string"
                    }];
                    if (dataFields.length) {
                        dataFields.forEach(function(dataField) {
                            that._styles.push((0, _extend.extend)({}, dataItemStyle, {
                                format: dataField.format,
                                dataType: getCellDataType(dataField)
                            }))
                        })
                    } else {
                        that._styles.push(dataItemStyle)
                    }(0, _iterator.each)(columns, function(columnIndex, column) {
                        column.width = DEFAUL_COLUMN_WIDTH
                    });
                    options.columns = columns;
                    options.items = items
                })
            },
            getColumns: function() {
                return this._options.columns
            },
            getRowsCount: function() {
                return this._options.items.length
            },
            getGroupLevel: function() {
                return 0
            },
            getCellMerging: function(rowIndex, cellIndex) {
                var items = this._options.items;
                var item = items[rowIndex] && items[rowIndex][cellIndex];
                return item ? {
                    colspan: item.colspan - 1,
                    rowspan: item.rowspan - 1
                } : {
                    colspan: 0,
                    rowspan: 0
                }
            },
            getFrozenArea: function() {
                var items = this._options.items;
                return {
                    x: items[0][0].colspan,
                    y: items[0][0].rowspan
                }
            },
            getCellType: function(rowIndex, cellIndex) {
                var style = this._styles[this.getStyleId(rowIndex, cellIndex)];
                return style && style.dataType || "string"
            },
            getCellData: function(rowIndex, cellIndex) {
                var result = {};
                var items = this._options.items;
                var item = items[rowIndex] && items[rowIndex][cellIndex] || {};
                if ("string" === this.getCellType(rowIndex, cellIndex)) {
                    result.value = item.text
                } else {
                    result.value = item.value
                }
                return result
            },
            getStyles: function() {
                return this._styles
            },
            getStyleId: function(rowIndex, cellIndex) {
                var items = this._options.items;
                var columnHeaderSize = items[0][0].rowspan;
                var rowHeaderSize = items[0][0].colspan;
                var item = items[rowIndex] && items[rowIndex][cellIndex] || {};
                if (0 === cellIndex && 0 === rowIndex) {
                    return COLUMN_HEADER_STYLE_ID
                } else {
                    if (cellIndex >= rowHeaderSize && rowIndex < columnHeaderSize) {
                        return COLUMN_HEADER_STYLE_ID
                    } else {
                        if (rowIndex >= columnHeaderSize && cellIndex < rowHeaderSize) {
                            return ROW_HEADER_STYLE_ID
                        }
                    }
                }
                return DATA_STYLE_OFFSET + (item.dataIndex || 0)
            },
            hasCustomizeExcelCell: function() {
                return (0, _type.isDefined)(this._options.customizeExcelCell)
            },
            customizeExcelCell: function(e) {
                if (this._options.customizeExcelCell) {
                    this._options.customizeExcelCell(e)
                }
            }
        })
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/ui.pivot_grid.chart_integration.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiPivot_grid = __webpack_require__( /*! ./ui.pivot_grid.utils */ 81);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FORMAT_DICTIONARY = {
            number: "numeric",
            date: "datetime"
        };
        var UNBIND_KEY = "dxPivotGridUnbinding";

        function getFormattedValue(path, fields) {
            var value = [];
            var lastFieldIndex = fields.length - 1;
            (0, _iterator.each)(path, function(i, item) {
                value.push(item.text || (0, _uiPivot_grid.formatValue)(item.value, fields[lastFieldIndex - i]))
            });
            return value.reverse()
        }

        function getExpandedLevel(node) {
            var level = 0;
            (0, _uiPivot_grid.foreachTree)(node, function(members) {
                level = Math.max(level, members.length - 1)
            });
            return level
        }

        function processDataCell(processCellArgs, processCell) {
            var chartDataItem = processCellArgs.chartDataItem;
            var processedCell = processCell && processCell(processCellArgs);
            if (processedCell) {
                chartDataItem = (0, _extend.extend)({}, chartDataItem, processedCell.chartDataItem);
                processedCell = (0, _extend.extend)({}, processCellArgs, processedCell, {
                    chartDataItem: chartDataItem
                });
                return processedCell
            }
            return processCellArgs
        }

        function createChartDataSource(pivotGridDataSource, mapOptions, axisDictionary) {
            var data = pivotGridDataSource.getData();
            var dataSource = [];
            var dataFields = pivotGridDataSource.getAreaFields("data");
            var rowFields = pivotGridDataSource.getAreaFields("row");
            var columnFields = pivotGridDataSource.getAreaFields("column");
            var columnElements = [{
                index: data.grandTotalColumnIndex,
                children: data.columns
            }];
            var rowElements = [{
                index: data.grandTotalRowIndex,
                children: data.rows
            }];
            var rowLevel = getExpandedLevel(rowElements);
            var columnLevel = getExpandedLevel(columnElements);
            var measureIndex;
            var dataField;
            var rowMemberIndex;
            var rowVisibility;
            var rowPathFormatted;
            var rowPath;
            var columnMemberIndex;
            var columnVisibility;
            var columnPath;
            var columnPathFormatted;

            function createDataItem() {
                var dataCell = (data.values[rowMemberIndex] || [])[columnMemberIndex] || [];
                var value = dataCell[measureIndex];
                var axis;
                var processCellArgs = {
                    rowPath: rowPath,
                    maxRowLevel: rowLevel,
                    rowPathFormatted: rowPathFormatted,
                    rowFields: rowFields,
                    columnPathFormatted: columnPathFormatted,
                    maxColumnLevel: columnLevel,
                    columnPath: columnPath,
                    columnFields: columnFields,
                    dataFields: dataFields,
                    dataIndex: measureIndex,
                    dataValues: dataCell,
                    visible: columnVisibility && rowVisibility
                };
                var seriesName = (mapOptions.inverted ? columnPathFormatted : rowPathFormatted).join(" - ");
                var argument = (mapOptions.inverted ? rowPathFormatted : columnPathFormatted).join("/");
                if (dataFields.length > 1) {
                    if ("args" === mapOptions.putDataFieldsInto || "both" === mapOptions.putDataFieldsInto) {
                        argument += " | " + dataField.caption
                    }
                    if ("args" !== mapOptions.putDataFieldsInto) {
                        seriesName += " | " + dataField.caption;
                        if ("singleAxis" !== mapOptions.dataFieldsDisplayMode) {
                            axis = dataField.caption
                        }
                    }
                }
                processCellArgs.chartDataItem = {
                    val: void 0 === value ? null : value,
                    series: seriesName,
                    arg: argument
                };
                processCellArgs = processDataCell(processCellArgs, mapOptions.processCell);
                if (processCellArgs.visible) {
                    axisDictionary[processCellArgs.chartDataItem.series] = axisDictionary[processCellArgs.chartDataItem.series] || axis;
                    dataSource.push(processCellArgs.chartDataItem)
                }
            }

            function foreachRowColumn(callBack) {
                (0, _uiPivot_grid.foreachTree)(rowElements, function(rowMembers) {
                    rowMemberIndex = rowMembers[0].index;
                    rowMembers = rowMembers.slice(0, rowMembers.length - 1);
                    rowVisibility = rowLevel === rowMembers.length;
                    rowPath = (0, _uiPivot_grid.createPath)(rowMembers);
                    rowPathFormatted = getFormattedValue(rowMembers, rowFields);
                    if (0 === rowPath.length) {
                        rowPathFormatted = [mapOptions.grandTotalText]
                    }(0, _uiPivot_grid.foreachTree)(columnElements, function(columnMembers) {
                        columnMemberIndex = columnMembers[0].index;
                        columnMembers = columnMembers.slice(0, columnMembers.length - 1);
                        columnVisibility = columnLevel === columnMembers.length;
                        columnPath = (0, _uiPivot_grid.createPath)(columnMembers);
                        columnPathFormatted = getFormattedValue(columnMembers, columnFields);
                        if (0 === columnPath.length) {
                            columnPathFormatted = [mapOptions.grandTotalText]
                        }
                        callBack()
                    })
                })
            }

            function foreachDataField(callback) {
                (0, _iterator.each)(dataFields, function(index, field) {
                    dataField = field;
                    measureIndex = index;
                    callback()
                })
            }
            if (false === mapOptions.alternateDataFields) {
                foreachDataField(function() {
                    foreachRowColumn(createDataItem)
                })
            } else {
                foreachRowColumn(function() {
                    foreachDataField(createDataItem)
                })
            }
            return dataSource
        }

        function createValueAxisOptions(dataSource, options) {
            var dataFields = dataSource.getAreaFields("data");
            if ("args" !== options.putDataFieldsInto && "singleAxis" !== options.dataFieldsDisplayMode || 1 === dataFields.length) {
                var valueAxisSettings = [];
                (0, _iterator.each)(dataFields, function(_, dataField) {
                    var valueAxisOptions = {
                        name: dataField.caption,
                        title: dataField.caption,
                        valueType: FORMAT_DICTIONARY[dataField.dataType] || dataField.dataType,
                        label: {
                            format: dataField.format
                        }
                    };
                    if (dataField.customizeText) {
                        valueAxisOptions.label.customizeText = function(formatObject) {
                            return dataField.customizeText.call(dataField, formatObject)
                        }
                    }
                    if ("splitPanes" === options.dataFieldsDisplayMode) {
                        valueAxisOptions.pane = dataField.caption
                    }
                    valueAxisSettings.push(valueAxisOptions)
                });
                return valueAxisSettings
            }
            return [{}]
        }

        function createPanesOptions(dataSource, options) {
            var panes = [];
            var dataFields = dataSource.getAreaFields("data");
            if (dataFields.length > 1 && "splitPanes" === options.dataFieldsDisplayMode && "args" !== options.putDataFieldsInto) {
                (0, _iterator.each)(dataFields, function(_, dataField) {
                    panes.push({
                        name: dataField.caption
                    })
                })
            }
            if (!panes.length) {
                panes.push({})
            }
            return panes
        }

        function createChartOptions(dataSource, options) {
            var _customizeSeries = options.customizeSeries;
            var customizeChart = options.customizeChart;
            var chartOptions = {
                valueAxis: createValueAxisOptions(dataSource, options),
                panes: createPanesOptions(dataSource, options)
            };
            var axisDictionary = {};
            if (customizeChart) {
                chartOptions = (0, _extend.extend)(true, {}, chartOptions, customizeChart(chartOptions))
            }
            chartOptions.dataSource = createChartDataSource(dataSource, options, axisDictionary);
            chartOptions.seriesTemplate = {
                nameField: "series",
                customizeSeries: function(seriesName) {
                    var seriesOptions = {};
                    if ("splitPanes" === options.dataFieldsDisplayMode) {
                        seriesOptions.pane = axisDictionary[seriesName]
                    } else {
                        if ("singleAxis" !== options.dataFieldsDisplayMode) {
                            seriesOptions.axis = axisDictionary[seriesName]
                        }
                    }
                    if (_customizeSeries) {
                        seriesOptions = (0, _extend.extend)(seriesOptions, _customizeSeries(seriesName, seriesOptions))
                    }
                    return seriesOptions
                }
            };
            return chartOptions
        }

        function getChartInstance(chartElement) {
            if (!chartElement) {
                return false
            }
            if (chartElement.NAME) {
                return "dxChart" === chartElement.NAME && chartElement
            }
            var element = (0, _renderer2.default)(chartElement);
            return element.data("dxChart") && element.dxChart("instance")
        }

        function removeBinding(chart) {
            var unbind = chart.$element().data(UNBIND_KEY);
            unbind && unbind()
        }
        module.exports = {
            bindChart: function(chart, integrationOptions) {
                integrationOptions = (0, _extend.extend)({}, integrationOptions);
                var that = this;
                var updateChart = function() {
                    integrationOptions.grandTotalText = that.option("texts.grandTotal");
                    var chartOptions = createChartOptions(that.getDataSource(), integrationOptions);
                    chart.option(chartOptions)
                };
                chart = getChartInstance(chart);
                if (!chart) {
                    return null
                }
                removeBinding(chart);
                that.on("changed", updateChart);
                updateChart();
                var disposeBinding = function() {
                    chart.$element().removeData(UNBIND_KEY);
                    that.off("changed", updateChart)
                };
                chart.on("disposing", disposeBinding);
                this.on("disposing", disposeBinding);
                chart.$element().data(UNBIND_KEY, disposeBinding);
                return disposeBinding
            }
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid_field_chooser.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./pivot_grid/ui.pivot_grid.field_chooser */ 396)
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot_grid/xmla_store.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _xmla_store = __webpack_require__( /*! ./xmla_store/xmla_store */ 395);
        module.exports = _xmla_store.XmlaStore
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./scheduler/ui.scheduler */ 722)
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 27);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _dialog = __webpack_require__( /*! ../dialog */ 223);
        var _dialog2 = _interopRequireDefault(_dialog);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _date_serialization2 = _interopRequireDefault(_date_serialization);
        var _date3 = __webpack_require__( /*! ../../localization/date */ 35);
        var _date4 = _interopRequireDefault(_date3);
        var _ui3 = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui4 = _interopRequireDefault(_ui3);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.subscribes */ 723);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _desktopTooltipStrategy = __webpack_require__( /*! ./tooltip_strategies/desktopTooltipStrategy */ 725);
        var _mobileTooltipStrategy = __webpack_require__( /*! ./tooltip_strategies/mobileTooltipStrategy */ 726);
        var _appointmentPopup = __webpack_require__( /*! ./appointmentPopup */ 727);
        var _appointmentPopup2 = _interopRequireDefault(_appointmentPopup);
        var _uiScheduler3 = __webpack_require__( /*! ./ui.scheduler.header */ 731);
        var _uiScheduler4 = _interopRequireDefault(_uiScheduler3);
        var _uiScheduler5 = __webpack_require__( /*! ./workspaces/ui.scheduler.work_space_day */ 733);
        var _uiScheduler6 = _interopRequireDefault(_uiScheduler5);
        var _uiScheduler7 = __webpack_require__( /*! ./workspaces/ui.scheduler.work_space_week */ 403);
        var _uiScheduler8 = _interopRequireDefault(_uiScheduler7);
        var _uiScheduler9 = __webpack_require__( /*! ./workspaces/ui.scheduler.work_space_work_week */ 738);
        var _uiScheduler10 = _interopRequireDefault(_uiScheduler9);
        var _uiScheduler11 = __webpack_require__( /*! ./workspaces/ui.scheduler.work_space_month */ 739);
        var _uiScheduler12 = _interopRequireDefault(_uiScheduler11);
        var _uiScheduler13 = __webpack_require__( /*! ./workspaces/ui.scheduler.timeline_day */ 740);
        var _uiScheduler14 = _interopRequireDefault(_uiScheduler13);
        var _uiScheduler15 = __webpack_require__( /*! ./workspaces/ui.scheduler.timeline_week */ 405);
        var _uiScheduler16 = _interopRequireDefault(_uiScheduler15);
        var _uiScheduler17 = __webpack_require__( /*! ./workspaces/ui.scheduler.timeline_work_week */ 742);
        var _uiScheduler18 = _interopRequireDefault(_uiScheduler17);
        var _uiScheduler19 = __webpack_require__( /*! ./workspaces/ui.scheduler.timeline_month */ 743);
        var _uiScheduler20 = _interopRequireDefault(_uiScheduler19);
        var _uiScheduler21 = __webpack_require__( /*! ./workspaces/ui.scheduler.agenda */ 744);
        var _uiScheduler22 = _interopRequireDefault(_uiScheduler21);
        var _uiScheduler23 = __webpack_require__( /*! ./ui.scheduler.resource_manager */ 745);
        var _uiScheduler24 = _interopRequireDefault(_uiScheduler23);
        var _uiScheduler25 = __webpack_require__( /*! ./ui.scheduler.appointment_model */ 746);
        var _uiScheduler26 = _interopRequireDefault(_uiScheduler25);
        var _uiScheduler27 = __webpack_require__( /*! ./ui.scheduler.appointments */ 747);
        var _uiScheduler28 = _interopRequireDefault(_uiScheduler27);
        var _uiSchedulerAppointments = __webpack_require__( /*! ./ui.scheduler.appointments.layout_manager */ 749);
        var _uiSchedulerAppointments2 = _interopRequireDefault(_uiSchedulerAppointments);
        var _compactAppointmentsHelper = __webpack_require__( /*! ./compactAppointmentsHelper */ 754);
        var _data_helper = __webpack_require__( /*! ../../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);
        var _ui5 = __webpack_require__( /*! ./ui.loading */ 399);
        var _ui6 = _interopRequireDefault(_ui5);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _deferred2 = _interopRequireDefault(_deferred);
        var _empty_template = __webpack_require__( /*! ../../core/templates/empty_template */ 87);
        var _bindable_template = __webpack_require__( /*! ../../core/templates/bindable_template */ 59);
        var _themes = __webpack_require__( /*! ../themes */ 32);
        var _themes2 = _interopRequireDefault(_themes);
        var _browser = __webpack_require__( /*! ../../core/utils/browser */ 26);
        var _browser2 = _interopRequireDefault(_browser);
        var _support = __webpack_require__( /*! ../../core/utils/support */ 46);
        var _utils3 = __webpack_require__( /*! ./utils.timeZone */ 148);
        var _utils4 = _interopRequireDefault(_utils3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }
        var when = _deferred2.default.when;
        var Deferred = _deferred2.default.Deferred;
        var toMs = _date2.default.dateToMilliseconds;
        var MINUTES_IN_HOUR = 60;
        var WIDGET_CLASS = "dx-scheduler";
        var WIDGET_SMALL_CLASS = "".concat(WIDGET_CLASS, "-small");
        var WIDGET_ADAPTIVE_CLASS = "".concat(WIDGET_CLASS, "-adaptive");
        var WIDGET_WIN_NO_TOUCH_CLASS = "".concat(WIDGET_CLASS, "-win-no-touch");
        var WIDGET_READONLY_CLASS = "".concat(WIDGET_CLASS, "-readonly");
        var WIDGET_SMALL_WIDTH = 400;
        var FULL_DATE_FORMAT = "yyyyMMddTHHmmss";
        var UTC_FULL_DATE_FORMAT = FULL_DATE_FORMAT + "Z";
        var VIEWS_CONFIG = {
            day: {
                workSpace: _uiScheduler6.default,
                renderingStrategy: "vertical"
            },
            week: {
                workSpace: _uiScheduler8.default,
                renderingStrategy: "vertical"
            },
            workWeek: {
                workSpace: _uiScheduler10.default,
                renderingStrategy: "vertical"
            },
            month: {
                workSpace: _uiScheduler12.default,
                renderingStrategy: "horizontalMonth"
            },
            timelineDay: {
                workSpace: _uiScheduler14.default,
                renderingStrategy: "horizontal"
            },
            timelineWeek: {
                workSpace: _uiScheduler16.default,
                renderingStrategy: "horizontal"
            },
            timelineWorkWeek: {
                workSpace: _uiScheduler18.default,
                renderingStrategy: "horizontal"
            },
            timelineMonth: {
                workSpace: _uiScheduler20.default,
                renderingStrategy: "horizontalMonthLine"
            },
            agenda: {
                workSpace: _uiScheduler22.default,
                renderingStrategy: "agenda"
            }
        };
        var Scheduler = _ui4.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    views: ["day", "week"],
                    currentView: "day",
                    currentDate: _date2.default.trimTime(new Date),
                    min: void 0,
                    max: void 0,
                    dateSerializationFormat: void 0,
                    firstDayOfWeek: void 0,
                    groups: [],
                    resources: [],
                    dataSource: null,
                    customizeDateNavigatorText: void 0,
                    appointmentTemplate: "item",
                    dropDownAppointmentTemplate: "dropDownAppointment",
                    appointmentCollectorTemplate: "appointmentCollector",
                    dataCellTemplate: null,
                    timeCellTemplate: null,
                    resourceCellTemplate: null,
                    dateCellTemplate: null,
                    startDayHour: 0,
                    endDayHour: 24,
                    editing: {
                        allowAdding: true,
                        allowDeleting: true,
                        allowDragging: true,
                        allowResizing: true,
                        allowUpdating: true,
                        allowTimeZoneEditing: false,
                        allowEditingTimeZones: false
                    },
                    showAllDayPanel: true,
                    showCurrentTimeIndicator: true,
                    shadeUntilCurrentTime: false,
                    indicatorUpdateInterval: 3e5,
                    indicatorTime: void 0,
                    recurrenceEditMode: "dialog",
                    cellDuration: 30,
                    maxAppointmentsPerCell: "auto",
                    selectedCellData: [],
                    groupByDate: false,
                    onAppointmentRendered: null,
                    onAppointmentClick: null,
                    onAppointmentDblClick: null,
                    onAppointmentContextMenu: null,
                    onCellClick: null,
                    onCellContextMenu: null,
                    onAppointmentAdding: null,
                    onAppointmentAdded: null,
                    onAppointmentUpdating: null,
                    onAppointmentUpdated: null,
                    onAppointmentDeleting: null,
                    onAppointmentDeleted: null,
                    onAppointmentFormOpening: null,
                    appointmentTooltipTemplate: "appointmentTooltip",
                    appointmentPopupTemplate: "appointmentPopup",
                    crossScrollingEnabled: false,
                    useDropDownViewSwitcher: false,
                    startDateExpr: "startDate",
                    endDateExpr: "endDate",
                    textExpr: "text",
                    descriptionExpr: "description",
                    allDayExpr: "allDay",
                    recurrenceRuleExpr: "recurrenceRule",
                    recurrenceExceptionExpr: "recurrenceException",
                    remoteFiltering: false,
                    timeZone: "",
                    startDateTimeZoneExpr: "startDateTimeZone",
                    endDateTimeZoneExpr: "endDateTimeZone",
                    noDataText: _message2.default.format("dxCollectionWidget-noDataText"),
                    adaptivityEnabled: false,
                    allowMultipleCellSelection: true,
                    _appointmentTooltipOffset: {
                        x: 0,
                        y: 0
                    },
                    _appointmentTooltipButtonsPosition: "bottom",
                    _appointmentTooltipOpenButtonText: _message2.default.format("dxScheduler-openAppointment"),
                    _dropDownButtonIcon: "overflow",
                    _appointmentCountPerCell: 2,
                    _collectorOffset: 0,
                    _appointmentOffset: 26
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return !_devices2.default.current().generic
                    },
                    options: {
                        useDropDownViewSwitcher: true,
                        editing: {
                            allowDragging: false,
                            allowResizing: false
                        }
                    }
                }, {
                    device: function() {
                        return _themes2.default.isMaterial()
                    },
                    options: {
                        useDropDownViewSwitcher: true,
                        dateCellTemplate: function(data, index, element) {
                            var text = data.text;
                            text.split(" ").forEach(function(text, index) {
                                var span = (0, _renderer2.default)("<span>").text(text).addClass("dx-scheduler-header-panel-cell-date");
                                (0, _renderer2.default)(element).append(span);
                                if (!index) {
                                    (0, _renderer2.default)(element).append(" ")
                                }
                            })
                        },
                        _appointmentTooltipOffset: {
                            x: 0,
                            y: 11
                        },
                        _appointmentTooltipButtonsPosition: "top",
                        _appointmentTooltipOpenButtonText: null,
                        _dropDownButtonIcon: "chevrondown",
                        _appointmentCountPerCell: 1,
                        _collectorOffset: 20,
                        _appointmentOffset: 30
                    }
                }])
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                (0, _extend.extend)(this._deprecatedOptions, {
                    onAppointmentFormCreated: {
                        since: "18.2",
                        alias: "onAppointmentFormOpening"
                    },
                    dropDownAppointmentTemplate: {
                        since: "19.2",
                        message: "appointmentTooltipTemplate"
                    },
                    allowEditingTimeZones: {
                        since: "20.1",
                        alias: "allowTimeZoneEditing"
                    }
                })
            },
            _postponeDataSourceLoading: function(promise) {
                this.postponedOperations.add("_reloadDataSource", this._reloadDataSource.bind(this), promise)
            },
            _postponeResourceLoading: function() {
                var _this = this;
                var whenLoaded = this.postponedOperations.add("_loadResources", function() {
                    return _this._loadResources()
                });
                var resolveCallbacks = new Deferred;
                whenLoaded.done(function(resources) {
                    resolveCallbacks.resolve(resources)
                });
                this._postponeDataSourceLoading(whenLoaded);
                return resolveCallbacks.promise()
            },
            _optionChanged: function(args) {
                var _this2 = this;
                var value = args.value;
                var name = args.name;
                switch (args.name) {
                    case "customizeDateNavigatorText":
                        this._updateOption("header", name, value);
                        break;
                    case "firstDayOfWeek":
                        this._updateOption("workSpace", name, value);
                        this._updateOption("header", name, value);
                        break;
                    case "currentDate":
                        value = this._dateOption(name);
                        value = _date2.default.trimTime(new Date(value));
                        this.option("selectedCellData", []);
                        this._workSpace.option(name, new Date(value));
                        this._header.option(name, new Date(value));
                        this._header.option("displayedDate", this._workSpace._getViewStartByOptions());
                        this._appointments.option("items", []);
                        this._filterAppointmentsByDate();
                        this._postponeDataSourceLoading();
                        break;
                    case "dataSource":
                        this._initDataSource();
                        this._appointmentModel.setDataSource(this._dataSource);
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._filterAppointmentsByDate();
                            _this2._updateOption("workSpace", "showAllDayPanel", _this2.option("showAllDayPanel"))
                        });
                        break;
                    case "min":
                    case "max":
                        value = this._dateOption(name);
                        this._updateOption("header", name, new Date(value));
                        this._updateOption("workSpace", name, new Date(value));
                        break;
                    case "views":
                        this._processCurrentView();
                        if (this._getCurrentViewOptions()) {
                            this.repaint()
                        } else {
                            this._header.option(name, value)
                        }
                        break;
                    case "useDropDownViewSwitcher":
                        this._header.option(name, value);
                        break;
                    case "currentView":
                        this._processCurrentView();
                        this.fire("validateDayHours");
                        this.getLayoutManager().initRenderingStrategy(this._getAppointmentsRenderingStrategy());
                        this._validateCellDuration();
                        this._appointments.option({
                            items: [],
                            allowDrag: this._allowDragging(),
                            allowResize: this._allowResizing(),
                            itemTemplate: this._getAppointmentTemplate("appointmentTemplate")
                        });
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._refreshWorkSpace(resources);
                            _this2._updateHeader();
                            _this2._filterAppointmentsByDate();
                            _this2._appointments.option("allowAllDayResize", "day" !== value)
                        });
                        break;
                    case "appointmentTemplate":
                        this._appointments.option("itemTemplate", value);
                        break;
                    case "dateCellTemplate":
                    case "resourceCellTemplate":
                    case "dataCellTemplate":
                    case "timeCellTemplate":
                        this._updateOption("workSpace", name, value);
                        this.repaint();
                        break;
                    case "groups":
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._refreshWorkSpace(resources);
                            _this2._filterAppointmentsByDate()
                        });
                        break;
                    case "resources":
                        this._resourcesManager.setResources(this.option("resources"));
                        this._appointmentModel.setDataAccessors(this._combineDataAccessors());
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._appointments.option("items", []);
                            _this2._refreshWorkSpace(resources);
                            _this2._filterAppointmentsByDate()
                        });
                        break;
                    case "startDayHour":
                    case "endDayHour":
                        this.fire("validateDayHours");
                        this._appointments.option("items", []);
                        this._updateOption("workSpace", name, value);
                        this._appointments.repaint();
                        this._filterAppointmentsByDate();
                        this._postponeDataSourceLoading();
                        break;
                    case "onAppointmentAdding":
                    case "onAppointmentAdded":
                    case "onAppointmentUpdating":
                    case "onAppointmentUpdated":
                    case "onAppointmentDeleting":
                    case "onAppointmentDeleted":
                    case "onAppointmentFormOpening":
                        this._actions[name] = this._createActionByOption(name);
                        break;
                    case "onAppointmentRendered":
                        this._appointments.option("onItemRendered", this._getAppointmentRenderedAction());
                        break;
                    case "onAppointmentClick":
                        this._appointments.option("onItemClick", this._createActionByOption(name));
                        break;
                    case "onAppointmentDblClick":
                        this._appointments.option(name, this._createActionByOption(name));
                        break;
                    case "onAppointmentContextMenu":
                        this._appointments.option("onItemContextMenu", this._createActionByOption(name));
                        break;
                    case "noDataText":
                    case "allowMultipleCellSelection":
                    case "selectedCellData":
                    case "accessKey":
                    case "onCellClick":
                        this._workSpace.option(name, value);
                        break;
                    case "onCellContextMenu":
                        this._workSpace.option(name, value);
                        break;
                    case "crossScrollingEnabled":
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._appointments.option("items", []);
                            _this2._refreshWorkSpace(resources);
                            if (_this2._readyToRenderAppointments) {
                                _this2._appointments.option("items", _this2._getAppointmentsToRepaint())
                            }
                        });
                        break;
                    case "cellDuration":
                        this._validateCellDuration();
                        this._appointments.option("items", []);
                        if (this._readyToRenderAppointments) {
                            this._updateOption("workSpace", "hoursInterval", value / 60);
                            this._appointments.option("items", this._getAppointmentsToRepaint())
                        }
                        break;
                    case "tabIndex":
                    case "focusStateEnabled":
                        this._updateOption("header", name, value);
                        this._updateOption("workSpace", name, value);
                        this._appointments.option(name, value);
                        this.callBase(args);
                        break;
                    case "width":
                        this._updateOption("header", name, value);
                        if (this.option("crossScrollingEnabled")) {
                            this._updateOption("workSpace", "width", value)
                        }
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "height":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "editing":
                        this._initEditing();
                        var editing = this._editing;
                        this._bringEditingModeToAppointments(editing);
                        this.hideAppointmentTooltip();
                        this._cleanPopup();
                        break;
                    case "showAllDayPanel":
                        this._postponeResourceLoading().done(function(resources) {
                            _this2._filterAppointmentsByDate();
                            _this2._updateOption("workSpace", "allDayExpanded", value);
                            _this2._updateOption("workSpace", name, value)
                        });
                        break;
                    case "showCurrentTimeIndicator":
                    case "indicatorTime":
                    case "indicatorUpdateInterval":
                    case "shadeUntilCurrentTime":
                    case "groupByDate":
                        this._updateOption("workSpace", name, value);
                        this.repaint();
                        break;
                    case "appointmentDragging":
                    case "appointmentTooltipTemplate":
                    case "appointmentPopupTemplate":
                    case "recurrenceEditMode":
                    case "remoteFiltering":
                    case "timeZone":
                    case "dropDownAppointmentTemplate":
                    case "appointmentCollectorTemplate":
                    case "_appointmentTooltipOffset":
                    case "_appointmentTooltipButtonsPosition":
                    case "_appointmentTooltipOpenButtonText":
                    case "_dropDownButtonIcon":
                    case "_appointmentCountPerCell":
                    case "_collectorOffset":
                    case "_appointmentOffset":
                        this.repaint();
                        break;
                    case "dateSerializationFormat":
                        break;
                    case "maxAppointmentsPerCell":
                        break;
                    case "startDateExpr":
                    case "endDateExpr":
                    case "startDateTimeZoneExpr":
                    case "endDateTimeZoneExpr":
                    case "textExpr":
                    case "descriptionExpr":
                    case "allDayExpr":
                    case "recurrenceRuleExpr":
                    case "recurrenceExceptionExpr":
                        this._updateExpression(name, value);
                        this._appointmentModel.setDataAccessors(this._combineDataAccessors());
                        this._initAppointmentTemplate();
                        this.repaint();
                        break;
                    case "adaptivityEnabled":
                        this._toggleAdaptiveClass();
                        this.repaint();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _updateHeader: function() {
                var viewCountConfig = this._getViewCountConfig();
                this._header.option("intervalCount", viewCountConfig.intervalCount);
                this._header.option("displayedDate", this._workSpace._getViewStartByOptions());
                this._header.option("min", this._dateOption("min"));
                this._header.option("max", this._dateOption("max"));
                this._header.option("currentDate", this._dateOption("currentDate"));
                this._header.option("firstDayOfWeek", this._getCurrentViewOption("firstDayOfWeek"));
                this._header.option("currentView", this._currentView)
            },
            _dateOption: function(optionName) {
                var optionValue = this._getCurrentViewOption(optionName);
                return _date_serialization2.default.deserializeDate(optionValue)
            },
            _getSerializationFormat: function(optionName) {
                var value = this._getCurrentViewOption(optionName);
                if ("number" === typeof value) {
                    return "number"
                }
                if (!_type2.default.isString(value)) {
                    return
                }
                return _date_serialization2.default.getDateSerializationFormat(value)
            },
            _bringEditingModeToAppointments: function(editing) {
                var editingConfig = {
                    allowDelete: editing.allowUpdating && editing.allowDeleting
                };
                if (!this._isAgenda()) {
                    editingConfig.allowDrag = editing.allowDragging;
                    editingConfig.allowResize = editing.allowResizing;
                    editingConfig.allowAllDayResize = editing.allowResizing && this._supportAllDayResizing()
                }
                this._appointments.option(editingConfig);
                this.repaint()
            },
            _isAgenda: function() {
                return "agenda" === this._getAppointmentsRenderingStrategy()
            },
            _allowDragging: function() {
                return this._editing.allowDragging && !this._isAgenda()
            },
            _allowResizing: function() {
                return this._editing.allowResizing && !this._isAgenda()
            },
            _allowAllDayResizing: function() {
                return this._editing.allowResizing && this._supportAllDayResizing()
            },
            _supportAllDayResizing: function() {
                return "day" !== this._getCurrentViewType() || this._currentView.intervalCount > 1
            },
            _isAllDayExpanded: function(items) {
                return this.option("showAllDayPanel") && this._appointmentModel.hasAllDayAppointments(items, this._getCurrentViewOption("startDayHour"), this._getCurrentViewOption("endDayHour"))
            },
            _getTimezoneOffsetByOption: function(date) {
                return _utils4.default.calculateTimezoneByValue(this.option("timeZone"), date)
            },
            getCorrectedDatesByDaylightOffsets: function(originalStartDate, dates, appointmentData) {
                var _this3 = this;
                var startDateTimeZone = this.fire("getField", "startDateTimeZone", appointmentData);
                var needCheckTimezoneOffset = _type2.default.isDefined(startDateTimeZone) && _type2.default.isDefined(this._getTimezoneOffsetByOption(originalStartDate));
                var convertedOriginalStartDate = this.fire("convertDateByTimezoneBack", new Date(originalStartDate.getTime()), startDateTimeZone);
                if (needCheckTimezoneOffset) {
                    dates = dates.map(function(date) {
                        var convertedDate = _this3.fire("convertDateByTimezoneBack", new Date(date.getTime()), startDateTimeZone);
                        return _utils4.default.getCorrectedDateByDaylightOffsets(convertedOriginalStartDate, convertedDate, date, _this3.option("timeZone"), startDateTimeZone)
                    })
                }
                return dates
            },
            _filterAppointmentsByDate: function() {
                var dateRange = this._workSpace.getDateRange();
                this._appointmentModel.filterByDate(dateRange[0], dateRange[1], this.option("remoteFiltering"), this.option("dateSerializationFormat"))
            },
            _loadResources: function() {
                var groups = this._getCurrentViewOption("groups");
                var result = new Deferred;
                this._resourcesManager.loadResources(groups).done(function(resources) {
                    this._loadedResources = resources;
                    result.resolve(resources)
                }.bind(this));
                return result.promise()
            },
            _dataSourceLoadedCallback: (0, _callbacks2.default)(),
            _reloadDataSource: function() {
                var result = new Deferred;
                if (this._dataSource) {
                    this._dataSource.load().done(function() {
                        _ui6.default.hide();
                        this._fireContentReadyAction(result)
                    }.bind(this)).fail(function() {
                        _ui6.default.hide();
                        result.reject()
                    });
                    this._dataSource.isLoading() && _ui6.default.show({
                        container: this.$element(),
                        position: {
                            of: this.$element()
                        }
                    })
                } else {
                    this._fireContentReadyAction(result)
                }
                return result.promise()
            },
            _fireContentReadyAction: function(result) {
                this.callBase();
                result && result.resolve()
            },
            _dimensionChanged: function() {
                var filteredItems = this.getFilteredItems();
                this._toggleSmallClass();
                if (!this._isAgenda() && filteredItems && this._isVisible()) {
                    this._workSpace._cleanAllowedPositions();
                    this._workSpace.option("allDayExpanded", this._isAllDayExpanded(filteredItems));
                    this._workSpace._dimensionChanged();
                    var appointments = this._layoutManager.createAppointmentsMap(filteredItems);
                    this._appointments.option("items", appointments)
                }
                this.hideAppointmentTooltip();
                this._appointmentPopup.triggerResize();
                this._appointmentPopup.updatePopupFullScreenMode()
            },
            _clean: function() {
                this._cleanPopup();
                this.callBase()
            },
            _toggleSmallClass: function() {
                var width = (0, _position.getBoundingRect)(this.$element().get(0)).width;
                this.$element().toggleClass(WIDGET_SMALL_CLASS, width < WIDGET_SMALL_WIDTH)
            },
            _toggleAdaptiveClass: function() {
                this.$element().toggleClass(WIDGET_ADAPTIVE_CLASS, this.option("adaptivityEnabled"))
            },
            _visibilityChanged: function(visible) {
                visible && this._dimensionChanged()
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _init: function() {
                this._initExpressions({
                    startDate: this.option("startDateExpr"),
                    endDate: this.option("endDateExpr"),
                    startDateTimeZone: this.option("startDateTimeZoneExpr"),
                    endDateTimeZone: this.option("endDateTimeZoneExpr"),
                    allDay: this.option("allDayExpr"),
                    text: this.option("textExpr"),
                    description: this.option("descriptionExpr"),
                    recurrenceRule: this.option("recurrenceRuleExpr"),
                    recurrenceException: this.option("recurrenceExceptionExpr")
                });
                this.callBase();
                this._initDataSource();
                this._loadedResources = [];
                this.$element().addClass(WIDGET_CLASS).toggleClass(WIDGET_WIN_NO_TOUCH_CLASS, !!(_browser2.default.msie && _support.touch));
                this._initEditing();
                this._resourcesManager = new _uiScheduler24.default(this.option("resources"));
                var combinedDataAccessors = this._combineDataAccessors();
                this._appointmentModel = new _uiScheduler26.default(this._dataSource, combinedDataAccessors, this.getAppointmentDurationInMinutes());
                this._initActions();
                this._compactAppointmentsHelper = new _compactAppointmentsHelper.CompactAppointmentsHelper(this);
                this._asyncTemplatesTimers = [];
                this._subscribes = _uiScheduler2.default
            },
            _initTemplates: function() {
                this._initAppointmentTemplate();
                this._templateManager.addDefaultTemplates({
                    appointmentTooltip: new _empty_template.EmptyTemplate,
                    dropDownAppointment: new _empty_template.EmptyTemplate
                });
                this.callBase()
            },
            _initAppointmentTemplate: function() {
                var _this4 = this;
                var expr = this._dataAccessors.expr;
                var createGetter = function(property) {
                    return _data2.default.compileGetter("appointmentData.".concat(property))
                };
                this._templateManager.addDefaultTemplates(_defineProperty({}, "item", new _bindable_template.BindableTemplate(function($container, data, model) {
                    _this4.getAppointmentsInstance()._renderAppointmentTemplate($container, data, model)
                }, ["html", "text", "startDate", "endDate", "allDay", "description", "recurrenceRule", "recurrenceException", "startDateTimeZone", "endDateTimeZone"], this.option("integrationOptions.watchMethod"), {
                    text: createGetter(expr.textExpr),
                    startDate: createGetter(expr.startDateExpr),
                    endDate: createGetter(expr.endDateExpr),
                    startDateTimeZone: createGetter(expr.startDateTimeZoneExpr),
                    endDateTimeZone: createGetter(expr.endDateTimeZoneExpr),
                    allDay: createGetter(expr.allDayExpr),
                    recurrenceRule: createGetter(expr.recurrenceRuleExpr)
                })))
            },
            _combineDataAccessors: function() {
                var resourcesDataAccessors = this._resourcesManager._dataAccessors;
                var result = (0, _extend.extend)(true, {}, this._dataAccessors);
                (0, _iterator.each)(resourcesDataAccessors, function(type, accessor) {
                    result[type].resources = accessor
                }.bind(this));
                return result
            },
            _renderContent: function() {
                this._renderContentImpl()
            },
            _dataSourceChangedHandler: function(result) {
                if (this._readyToRenderAppointments) {
                    this._workSpaceRecalculation.done(function() {
                        this._filteredItems = this.fire("prerenderFilter");
                        this._workSpace.option("allDayExpanded", this._isAllDayExpanded(this._filteredItems));
                        if (this._isAgenda()) {
                            this.getRenderingStrategyInstance().calculateRows(this._filteredItems, 7, this.option("currentDate"), true)
                        }
                        if (this._filteredItems.length && this._isVisible()) {
                            this._appointments.option("items", this._getAppointmentsToRepaint());
                            this._appointmentModel.cleanModelState()
                        } else {
                            this._appointments.option("items", [])
                        }
                        if (this._isAgenda()) {
                            this._workSpace._renderView();
                            this._dataSourceLoadedCallback.fireWith(this, [result])
                        }
                    }.bind(this))
                }
            },
            _getAppointmentsToRepaint: function() {
                var appointments = this._layoutManager.createAppointmentsMap(this._filteredItems);
                return this._layoutManager.getRepaintedAppointments(appointments, this.getAppointmentsInstance().option("items"))
            },
            _initExpressions: function(fields) {
                var isDateField = function(field) {
                    return "startDate" === field || "endDate" === field
                };
                if (!this._dataAccessors) {
                    this._dataAccessors = {
                        getter: {},
                        setter: {},
                        expr: {}
                    }
                }(0, _iterator.each)(fields, function(name, expr) {
                    if (expr) {
                        var getter = _data2.default.compileGetter(expr);
                        var setter = _data2.default.compileSetter(expr);
                        var dateGetter;
                        var dateSetter;
                        if (isDateField(name)) {
                            var that = this;
                            dateGetter = function() {
                                var value = getter.apply(this, arguments);
                                if ((0, _config2.default)().forceIsoDateParsing) {
                                    if (!that.option("dateSerializationFormat")) {
                                        var format = _date_serialization2.default.getDateSerializationFormat(value);
                                        if (format) {
                                            that.option("dateSerializationFormat", format)
                                        }
                                    }
                                    value = _date_serialization2.default.deserializeDate(value)
                                }
                                return value
                            };
                            dateSetter = function(object, value) {
                                if ((0, _config2.default)().forceIsoDateParsing || that.option("dateSerializationFormat")) {
                                    value = _date_serialization2.default.serializeDate(value, that.option("dateSerializationFormat"))
                                }
                                setter.call(this, object, value)
                            }
                        }
                        this._dataAccessors.getter[name] = dateGetter || getter;
                        this._dataAccessors.setter[name] = dateSetter || setter;
                        this._dataAccessors.expr[name + "Expr"] = expr
                    } else {
                        delete this._dataAccessors.getter[name];
                        delete this._dataAccessors.setter[name];
                        delete this._dataAccessors.expr[name + "Expr"]
                    }
                }.bind(this))
            },
            _updateExpression: function(name, value) {
                var exprObj = {};
                exprObj[name.replace("Expr", "")] = value;
                this._initExpressions(exprObj)
            },
            _initEditing: function() {
                var editing = this.option("editing");
                this._editing = {
                    allowAdding: !!editing,
                    allowUpdating: !!editing,
                    allowDeleting: !!editing,
                    allowResizing: !!editing,
                    allowDragging: !!editing
                };
                if (_type2.default.isObject(editing)) {
                    this._editing = (0, _extend.extend)(this._editing, editing)
                }
                this._editing.allowDragging = this._editing.allowDragging && this._editing.allowUpdating;
                this._editing.allowResizing = this._editing.allowResizing && this._editing.allowUpdating;
                this.$element().toggleClass(WIDGET_READONLY_CLASS, this._isReadOnly())
            },
            _isReadOnly: function() {
                var result = true;
                var editing = this._editing;
                for (var prop in editing) {
                    if (Object.prototype.hasOwnProperty.call(editing, prop)) {
                        result = result && !editing[prop]
                    }
                }
                return result
            },
            _dispose: function() {
                this._appointmentTooltip && this._appointmentTooltip.dispose();
                this.hideAppointmentPopup();
                this.hideAppointmentTooltip();
                this._asyncTemplatesTimers.forEach(clearTimeout);
                this._asyncTemplatesTimers = [];
                this.callBase()
            },
            _initActions: function() {
                this._actions = {
                    onAppointmentAdding: this._createActionByOption("onAppointmentAdding"),
                    onAppointmentAdded: this._createActionByOption("onAppointmentAdded"),
                    onAppointmentUpdating: this._createActionByOption("onAppointmentUpdating"),
                    onAppointmentUpdated: this._createActionByOption("onAppointmentUpdated"),
                    onAppointmentDeleting: this._createActionByOption("onAppointmentDeleting"),
                    onAppointmentDeleted: this._createActionByOption("onAppointmentDeleted"),
                    onAppointmentFormOpening: this._createActionByOption("onAppointmentFormOpening")
                }
            },
            _getAppointmentRenderedAction: function() {
                return this._createActionByOption("onAppointmentRendered", {
                    excludeValidators: ["disabled", "readOnly"]
                })
            },
            _renderFocusTarget: _common.noop,
            _initMarkup: function() {
                this.callBase();
                this.fire("validateDayHours");
                this._validateCellDuration();
                this._processCurrentView();
                this._renderHeader();
                this._layoutManager = new _uiSchedulerAppointments2.default(this, this._getAppointmentsRenderingStrategy());
                this._appointments = this._createComponent("<div>", _uiScheduler28.default, this._appointmentsConfig());
                this._appointments.option("itemTemplate", this._getAppointmentTemplate("appointmentTemplate"));
                this._appointmentTooltip = new(this.option("adaptivityEnabled") ? _mobileTooltipStrategy.MobileTooltipStrategy : _desktopTooltipStrategy.DesktopTooltipStrategy)(this._getAppointmentTooltipOptions());
                this._appointmentPopup = new _appointmentPopup2.default(this);
                if (this._isLoaded()) {
                    this._initMarkupCore(this._loadedResources);
                    this._dataSourceChangedHandler(this._dataSource.items());
                    this._fireContentReadyAction()
                } else {
                    this._loadResources().done(function(resources) {
                        this._initMarkupCore(resources);
                        this._reloadDataSource()
                    }.bind(this))
                }
            },
            _getAppointmentTooltipOptions: function() {
                var _this5 = this;
                var that = this;
                return {
                    createComponent: that._createComponent.bind(that),
                    container: that.$element(),
                    getScrollableContainer: that.getWorkSpaceScrollableContainer.bind(that),
                    addDefaultTemplates: that._templateManager.addDefaultTemplates.bind(that._templateManager),
                    getAppointmentTemplate: that._getAppointmentTemplate.bind(that),
                    showAppointmentPopup: that.showAppointmentPopup.bind(that),
                    getTextAndFormatDate: function(data, currentData, format) {
                        return that.fire("getTextAndFormatDate", data, currentData, format)
                    },
                    checkAndDeleteAppointment: that.checkAndDeleteAppointment.bind(that),
                    isAppointmentInAllDayPanel: that.isAppointmentInAllDayPanel.bind(that),
                    getSingleAppointmentData: function(appointmentData, targetElement) {
                        var $appointment = (0, _renderer2.default)(targetElement);
                        return _this5._getAppointmentData(appointmentData, {
                            data: appointmentData,
                            target: $appointment.get(0),
                            $appointment: $appointment,
                            skipHoursProcessing: true
                        })
                    }
                }
            },
            checkAndDeleteAppointment: function(data, appointmentData) {
                var that = this;
                var startDate = that.fire("getField", "startDate", appointmentData);
                that._checkRecurringAppointment(data, appointmentData, startDate, function() {
                    that.deleteAppointment(data)
                }, true)
            },
            _getExtraAppointmentTooltipOptions: function() {
                return {
                    rtlEnabled: this.option("rtlEnabled"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    editing: this.option("editing"),
                    offset: this.option("_appointmentTooltipOffset")
                }
            },
            isAppointmentInAllDayPanel: function(appointmentData) {
                var workSpace = this._workSpace;
                var itTakesAllDay = this.appointmentTakesAllDay(appointmentData);
                return itTakesAllDay && workSpace.supportAllDayRow() && workSpace.option("showAllDayPanel")
            },
            _initMarkupCore: function(resources) {
                var _this6 = this;
                this._readyToRenderAppointments = _window2.default.hasWindow();
                this._workSpace && this._cleanWorkspace();
                this._renderWorkSpace(resources);
                this._appointments.option({
                    fixedContainer: this._workSpace.getFixedContainer(),
                    allDayContainer: this._workSpace.getAllDayContainer()
                });
                this._waitAsyncTemplate(function() {
                    var _this6$_workSpaceReca;
                    return null === (_this6$_workSpaceReca = _this6._workSpaceRecalculation) || void 0 === _this6$_workSpaceReca ? void 0 : _this6$_workSpaceReca.resolve()
                });
                this._filterAppointmentsByDate()
            },
            _isLoaded: function() {
                return this._isResourcesLoaded() && this._isDataSourceLoaded()
            },
            _isResourcesLoaded: function() {
                return _type2.default.isDefined(this._loadedResources)
            },
            _isDataSourceLoaded: function() {
                return this._dataSource && this._dataSource.isLoaded()
            },
            _render: function() {
                this._toggleSmallClass();
                this._toggleAdaptiveClass();
                this.callBase()
            },
            _renderHeader: function() {
                var $header = (0, _renderer2.default)("<div>").appendTo(this.$element());
                this._header = this._createComponent($header, _uiScheduler4.default, this._headerConfig())
            },
            _headerConfig: function() {
                var currentViewOptions = this._getCurrentViewOptions();
                var countConfig = this._getViewCountConfig();
                var result = (0, _extend.extend)({
                    isAdaptive: this.option("adaptivityEnabled"),
                    firstDayOfWeek: this.option("firstDayOfWeek"),
                    currentView: this._currentView,
                    tabIndex: this.option("tabIndex"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    width: this.option("width"),
                    rtlEnabled: this.option("rtlEnabled"),
                    useDropDownViewSwitcher: this.option("useDropDownViewSwitcher"),
                    _dropDownButtonIcon: this.option("_dropDownButtonIcon"),
                    customizeDateNavigatorText: this.option("customizeDateNavigatorText")
                }, currentViewOptions);
                result.observer = this;
                result.intervalCount = countConfig.intervalCount;
                result.views = this.option("views");
                result.min = new Date(this._dateOption("min"));
                result.max = new Date(this._dateOption("max"));
                result.currentDate = _date2.default.trimTime(new Date(this._dateOption("currentDate")));
                return result
            },
            _appointmentsConfig: function() {
                var that = this;
                var config = {
                    observer: this,
                    onItemRendered: this._getAppointmentRenderedAction(),
                    onItemClick: this._createActionByOption("onAppointmentClick"),
                    onItemContextMenu: this._createActionByOption("onAppointmentContextMenu"),
                    onAppointmentDblClick: this._createActionByOption("onAppointmentDblClick"),
                    tabIndex: this.option("tabIndex"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    allowDrag: this._allowDragging(),
                    allowDelete: this._editing.allowUpdating && this._editing.allowDeleting,
                    allowResize: this._allowResizing(),
                    allowAllDayResize: this._allowAllDayResizing(),
                    rtlEnabled: this.option("rtlEnabled"),
                    currentView: this.option("currentView"),
                    onContentReady: function() {
                        that._workSpace && that._workSpace.option("allDayExpanded", that._isAllDayExpanded(that.getFilteredItems()))
                    }
                };
                return config
            },
            getCollectorOffset: function() {
                if (this._workSpace.needApplyCollectorOffset() && !this.option("adaptivityEnabled")) {
                    return this.option("_collectorOffset")
                } else {
                    return 0
                }
            },
            getAppointmentDurationInMinutes: function() {
                return this._getCurrentViewOption("cellDuration")
            },
            _processCurrentView: function() {
                var views = this.option("views");
                var currentView = this.option("currentView");
                var that = this;
                this._currentView = currentView;
                (0, _iterator.each)(views, function(_, view) {
                    var isViewIsObject = _type2.default.isObject(view);
                    var viewName = isViewIsObject ? view.name : view;
                    var viewType = view.type;
                    if (currentView === viewName || currentView === viewType) {
                        that._currentView = view;
                        return false
                    }
                })
            },
            _validateCellDuration: function() {
                var endDayHour = this._getCurrentViewOption("endDayHour");
                var startDayHour = this._getCurrentViewOption("startDayHour");
                var cellDuration = this._getCurrentViewOption("cellDuration");
                if ((endDayHour - startDayHour) * MINUTES_IN_HOUR % cellDuration !== 0) {
                    _ui2.default.log("W1015")
                }
            },
            _getCurrentViewType: function() {
                return this._currentView.type || this._currentView
            },
            _getAppointmentsRenderingStrategy: function() {
                return VIEWS_CONFIG[this._getCurrentViewType()].renderingStrategy
            },
            _renderWorkSpace: function(groups) {
                this._readyToRenderAppointments && this._toggleSmallClass();
                var $workSpace = (0, _renderer2.default)("<div>").appendTo(this.$element());
                var countConfig = this._getViewCountConfig();
                this._workSpace = this._createComponent($workSpace, VIEWS_CONFIG[this._getCurrentViewType()].workSpace, this._workSpaceConfig(groups, countConfig));
                this._allowDragging() && this._workSpace.initDragBehavior(this);
                this._workSpace.getWorkArea().append(this._appointments.$element());
                this._recalculateWorkspace();
                countConfig.startDate && this._header && this._header.option("currentDate", this._workSpace._getHeaderDate());
                this._appointments.option("_collectorOffset", this.getCollectorOffset())
            },
            _getViewCountConfig: function() {
                var currentView = this.option("currentView");
                var view = this._getViewByName(currentView);
                var viewCount = view && view.intervalCount || 1;
                var startDate = view && view.startDate || null;
                return {
                    intervalCount: viewCount,
                    startDate: startDate
                }
            },
            _getViewByName: function(name) {
                var views = this.option("views");
                for (var i = 0; i < views.length; i++) {
                    if (views[i].name === name || views[i].type === name || views[i] === name) {
                        return views[i]
                    }
                }
            },
            _recalculateWorkspace: function() {
                var _this7 = this;
                this._workSpaceRecalculation = new Deferred;
                this._waitAsyncTemplate(function() {
                    _dom2.default.triggerResizeEvent(_this7._workSpace.$element());
                    _this7._workSpace._refreshDateTimeIndication()
                })
            },
            _workSpaceConfig: function(groups, countConfig) {
                var _this8 = this;
                var currentViewOptions = this._getCurrentViewOptions();
                var result = (0, _extend.extend)({
                    noDataText: this.option("noDataText"),
                    firstDayOfWeek: this.option("firstDayOfWeek"),
                    startDayHour: this.option("startDayHour"),
                    endDayHour: this.option("endDayHour"),
                    tabIndex: this.option("tabIndex"),
                    accessKey: this.option("accessKey"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    cellDuration: this.option("cellDuration"),
                    showAllDayPanel: this.option("showAllDayPanel"),
                    showCurrentTimeIndicator: this.option("showCurrentTimeIndicator"),
                    indicatorTime: this.option("indicatorTime"),
                    indicatorUpdateInterval: this.option("indicatorUpdateInterval"),
                    shadeUntilCurrentTime: this.option("shadeUntilCurrentTime"),
                    allDayExpanded: this._appointments.option("items"),
                    crossScrollingEnabled: this.option("crossScrollingEnabled"),
                    dataCellTemplate: this.option("dataCellTemplate"),
                    timeCellTemplate: this.option("timeCellTemplate"),
                    resourceCellTemplate: this.option("resourceCellTemplate"),
                    dateCellTemplate: this.option("dateCellTemplate"),
                    allowMultipleCellSelection: this.option("allowMultipleCellSelection"),
                    selectedCellData: this.option("selectedCellData"),
                    onSelectionChanged: function(args) {
                        _this8.option("selectedCellData", args.selectedCellData)
                    },
                    groupByDate: this._getCurrentViewOption("groupByDate")
                }, currentViewOptions);
                result.observer = this;
                result.intervalCount = countConfig.intervalCount;
                result.startDate = countConfig.startDate;
                result.groups = groups;
                result.onCellClick = this._createActionByOption("onCellClick");
                result.onCellContextMenu = this._createActionByOption("onCellContextMenu");
                result.min = new Date(this._dateOption("min"));
                result.max = new Date(this._dateOption("max"));
                result.currentDate = _date2.default.trimTime(new Date(this._dateOption("currentDate")));
                result.hoursInterval = result.cellDuration / 60;
                result.allDayExpanded = this._isAllDayExpanded(this.getFilteredItems());
                result.dataCellTemplate = result.dataCellTemplate ? this._getTemplate(result.dataCellTemplate) : null;
                result.timeCellTemplate = result.timeCellTemplate ? this._getTemplate(result.timeCellTemplate) : null;
                result.resourceCellTemplate = result.resourceCellTemplate ? this._getTemplate(result.resourceCellTemplate) : null;
                result.dateCellTemplate = result.dateCellTemplate ? this._getTemplate(result.dateCellTemplate) : null;
                return result
            },
            _waitAsyncTemplate: function(callback) {
                if (this._options.silent("templatesRenderAsynchronously")) {
                    var timer = setTimeout(function() {
                        callback();
                        clearTimeout(timer)
                    });
                    this._asyncTemplatesTimers.push(timer)
                } else {
                    callback()
                }
            },
            _getCurrentViewOptions: function() {
                return this._currentView
            },
            _getCurrentViewOption: function(optionName) {
                var currentViewOptions = this._getCurrentViewOptions();
                if (currentViewOptions && void 0 !== currentViewOptions[optionName]) {
                    return currentViewOptions[optionName]
                }
                return this.option(optionName)
            },
            _getAppointmentTemplate: function(optionName) {
                var currentViewOptions = this._getCurrentViewOptions();
                if (currentViewOptions && currentViewOptions[optionName]) {
                    return this._getTemplate(currentViewOptions[optionName])
                }
                return this._getTemplateByOption(optionName)
            },
            _updateOption: function(viewName, optionName, value) {
                var currentViewOptions = this._getCurrentViewOptions();
                if (!currentViewOptions || !_type2.default.isDefined(currentViewOptions[optionName])) {
                    this["_" + viewName].option(optionName, value)
                }
            },
            _refreshWorkSpace: function(groups) {
                var _this9 = this;
                this._cleanWorkspace();
                delete this._workSpace;
                this._renderWorkSpace(groups);
                if (this._readyToRenderAppointments) {
                    this._appointments.option({
                        fixedContainer: this._workSpace.getFixedContainer(),
                        allDayContainer: this._workSpace.getAllDayContainer()
                    });
                    this._waitAsyncTemplate(function() {
                        return _this9._workSpaceRecalculation.resolve()
                    })
                }
            },
            _cleanWorkspace: function() {
                this._appointments.$element().detach();
                this._workSpace._dispose();
                this._workSpace.$element().remove();
                this.option("selectedCellData", [])
            },
            getWorkSpaceScrollable: function() {
                return this._workSpace.getScrollable()
            },
            getWorkSpaceScrollableScrollTop: function(allDay) {
                return this._workSpace.getGroupedScrollableScrollTop(allDay)
            },
            getWorkSpaceScrollableScrollLeft: function() {
                return this._workSpace.getScrollableScrollLeft()
            },
            getWorkSpaceScrollableContainer: function() {
                return this._workSpace.getScrollableContainer()
            },
            getWorkSpaceAllDayHeight: function() {
                return this._workSpace.getAllDayHeight()
            },
            getWorkSpaceAllDayOffset: function() {
                return this._workSpace.getAllDayOffset()
            },
            getWorkSpaceHeaderPanelHeight: function() {
                return this._workSpace.getHeaderPanelHeight()
            },
            getWorkSpaceDateTableOffset: function() {
                return !this.option("crossScrollingEnabled") || this.option("rtlEnabled") ? this._workSpace.getWorkSpaceLeftOffset() : 0
            },
            getWorkSpace: function() {
                return this._workSpace
            },
            getAppointmentModel: function() {
                return this._appointmentModel
            },
            getHeader: function() {
                return this._header
            },
            getMaxAppointmentsPerCell: function() {
                return this._getCurrentViewOption("maxAppointmentsPerCell")
            },
            _cleanPopup: function() {
                this._appointmentPopup && this._appointmentPopup.dispose()
            },
            _convertDatesByTimezoneBack: function(applyAppointmentTimezone, sourceAppointmentData, targetAppointmentData) {
                targetAppointmentData = targetAppointmentData || sourceAppointmentData;
                var processedStartDate = this.fire("convertDateByTimezoneBack", this.fire("getField", "startDate", sourceAppointmentData), applyAppointmentTimezone && this.fire("getField", "startDateTimeZone", sourceAppointmentData));
                var processedEndDate = this.fire("convertDateByTimezoneBack", this.fire("getField", "endDate", sourceAppointmentData), applyAppointmentTimezone && this.fire("getField", "endDateTimeZone", sourceAppointmentData));
                this.fire("setField", "startDate", targetAppointmentData, processedStartDate);
                this.fire("setField", "endDate", targetAppointmentData, processedEndDate)
            },
            _checkRecurringAppointment: function(targetAppointment, singleAppointment, exceptionDate, callback, isDeleted, isPopupEditing, dragEvent) {
                delete this._updatedRecAppointment;
                var recurrenceRule = this.fire("getField", "recurrenceRule", targetAppointment);
                if (!_utils2.default.getRecurrenceRule(recurrenceRule).isValid || !this._editing.allowUpdating) {
                    callback();
                    return
                }
                var editMode = this.option("recurrenceEditMode");
                switch (editMode) {
                    case "series":
                        callback();
                        break;
                    case "occurrence":
                        this._singleAppointmentChangesHandler(targetAppointment, singleAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent);
                        break;
                    default:
                        if (dragEvent) {
                            dragEvent.cancel = new Deferred
                        }
                        this._showRecurrenceChangeConfirm(isDeleted).done(function(result) {
                            result && callback();
                            !result && this._singleAppointmentChangesHandler(targetAppointment, singleAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent)
                        }.bind(this)).fail(function() {
                            this._appointments.moveAppointmentBack(dragEvent)
                        }.bind(this))
                }
            },
            _singleAppointmentChangesHandler: function(targetAppointment, singleAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent) {
                exceptionDate = new Date(exceptionDate);

                function processAppointmentDates(appointment, commonTimezoneOffset) {
                    var startDate = this.fire("getField", "startDate", appointment);
                    var processedStartDate = this.fire("convertDateByTimezoneBack", startDate, this.fire("getField", "startDateTimeZone", appointment));
                    var endDate = this.fire("getField", "endDate", appointment);
                    var processedEndDate = this.fire("convertDateByTimezoneBack", endDate, this.fire("getField", "endDateTimeZone", appointment));
                    if ("number" === typeof commonTimezoneOffset && !isNaN(commonTimezoneOffset)) {
                        var startDateClientTzOffset = -(this._subscribes.getClientTimezoneOffset(startDate) / toMs("hour"));
                        var endDateClientTzOffset = -(this._subscribes.getClientTimezoneOffset(endDate) / toMs("hour"));
                        var processedStartDateInUTC = processedStartDate.getTime() - startDateClientTzOffset * toMs("hour");
                        var processedEndDateInUTC = processedEndDate.getTime() - endDateClientTzOffset * toMs("hour");
                        processedStartDate = new Date(processedStartDateInUTC + commonTimezoneOffset * toMs("hour"));
                        processedEndDate = new Date(processedEndDateInUTC + commonTimezoneOffset * toMs("hour"))
                    }
                    this.fire("setField", "startDate", appointment, processedStartDate);
                    this.fire("setField", "endDate", appointment, processedEndDate)
                }
                this.fire("setField", "recurrenceRule", singleAppointment, "");
                this.fire("setField", "recurrenceException", singleAppointment, "");
                if (!isDeleted && !isPopupEditing) {
                    processAppointmentDates.call(this, singleAppointment, this._getTimezoneOffsetByOption());
                    this.addAppointment(singleAppointment)
                }
                var recurrenceException = this._makeDateAsRecurrenceException(exceptionDate, targetAppointment);
                var updatedAppointment = (0, _extend.extend)({}, targetAppointment);
                this.fire("setField", "recurrenceException", updatedAppointment, recurrenceException);
                if (isPopupEditing) {
                    this._updatedRecAppointment = updatedAppointment;
                    this._showAppointmentPopup(singleAppointment, true, false);
                    this._editAppointmentData = targetAppointment
                } else {
                    this._updateAppointment(targetAppointment, updatedAppointment, function() {
                        this._appointments.moveAppointmentBack(dragEvent)
                    }, dragEvent)
                }
            },
            _makeDateAsRecurrenceException: function(exceptionDate, targetAppointment) {
                var startDate = this._getStartDate(targetAppointment, true);
                var startDateTimeZone = this.fire("getField", "startDateTimeZone", targetAppointment);
                var exceptionByDate = this._getRecurrenceExceptionDate(exceptionDate, startDate, startDateTimeZone);
                var recurrenceException = this.fire("getField", "recurrenceException", targetAppointment);
                return recurrenceException ? recurrenceException + "," + exceptionByDate : exceptionByDate
            },
            _getRecurrenceExceptionDate: function(exceptionStartDate, targetStartDate, startDateTimeZone) {
                exceptionStartDate = this.fire("convertDateByTimezoneBack", exceptionStartDate, startDateTimeZone);
                var appointmentStartDate = this.fire("convertDateByTimezoneBack", targetStartDate, startDateTimeZone);
                exceptionStartDate.setHours(appointmentStartDate.getHours(), appointmentStartDate.getMinutes(), appointmentStartDate.getSeconds(), appointmentStartDate.getMilliseconds());
                var timezoneDiff = targetStartDate.getTimezoneOffset() - exceptionStartDate.getTimezoneOffset();
                exceptionStartDate = new Date(exceptionStartDate.getTime() + timezoneDiff * toMs("minute"));
                return _date_serialization2.default.serializeDate(exceptionStartDate, UTC_FULL_DATE_FORMAT)
            },
            _showRecurrenceChangeConfirm: function(isDeleted) {
                var message = _message2.default.format(isDeleted ? "dxScheduler-confirmRecurrenceDeleteMessage" : "dxScheduler-confirmRecurrenceEditMessage");
                var seriesText = _message2.default.format(isDeleted ? "dxScheduler-confirmRecurrenceDeleteSeries" : "dxScheduler-confirmRecurrenceEditSeries");
                var occurrenceText = _message2.default.format(isDeleted ? "dxScheduler-confirmRecurrenceDeleteOccurrence" : "dxScheduler-confirmRecurrenceEditOccurrence");
                return _dialog2.default.custom({
                    messageHtml: message,
                    showCloseButton: true,
                    showTitle: true,
                    buttons: [{
                        text: seriesText,
                        onClick: function() {
                            return true
                        }
                    }, {
                        text: occurrenceText,
                        onClick: function() {
                            return false
                        }
                    }]
                }).show()
            },
            _getUpdatedData: function(options) {
                var target = options.data || options;
                var cellData = this.getTargetCellData();
                var targetAllDay = this.fire("getField", "allDay", target);
                var targetStartDate = new Date(this.fire("getField", "startDate", target));
                var targetEndDate = new Date(this.fire("getField", "endDate", target));
                var date = cellData.date || targetStartDate;
                var duration = targetEndDate.getTime() - targetStartDate.getTime();
                if (this._workSpace.keepOriginalHours() && !isNaN(targetStartDate.getTime())) {
                    var diff = targetStartDate.getTime() - _date2.default.trimTime(targetStartDate).getTime();
                    date = new Date(_date2.default.trimTime(date).getTime() + diff)
                }
                var updatedData = {};
                var allDay = cellData.allDay;
                this.fire("setField", "allDay", updatedData, allDay);
                this.fire("setField", "startDate", updatedData, date);
                var endDate = new Date(date.getTime() + duration);
                if (this.appointmentTakesAllDay(target) && !updatedData.allDay && this._workSpace.supportAllDayRow()) {
                    endDate = this._workSpace.calculateEndDate(date)
                }
                if (targetAllDay && !this._workSpace.supportAllDayRow() && !this._workSpace.keepOriginalHours()) {
                    var dateCopy = new Date(date);
                    dateCopy.setHours(0);
                    endDate = new Date(dateCopy.getTime() + duration);
                    if (0 !== endDate.getHours()) {
                        endDate.setHours(this._getCurrentViewOption("endDayHour"))
                    }
                }
                endDate = new Date(endDate.getTime() - _utils4.default.getTimezoneOffsetChangeInMs(targetStartDate, targetEndDate, date, endDate));
                this.fire("setField", "endDate", updatedData, endDate);
                this._resourcesManager.setResourcesToItem(updatedData, cellData.groups);
                return updatedData
            },
            _getCoordinates: function(initialDates, dates, appointmentResources, allDay) {
                var result = [];
                for (var i = 0; i < dates.length; i++) {
                    var currentCoords = this._workSpace.getCoordinatesByDateInGroup(dates[i], appointmentResources, allDay);
                    for (var j = 0; j < currentCoords.length; j++) {
                        (0, _extend.extend)(currentCoords[j], {
                            startDate: dates[i],
                            initialStartDate: initialDates[i]
                        })
                    }
                    result = result.concat(currentCoords)
                }
                return result
            },
            _isAppointmentRecurrence: function(appointmentData) {
                var recurrenceRule = this.fire("getField", "recurrenceRule", appointmentData);
                return recurrenceRule && _utils2.default.getRecurrenceRule(recurrenceRule).isValid
            },
            _getAppointmentData: function(appointmentData, options) {
                options = options || {};
                var $appointment = options.$appointment;
                var updatedData = options.skipDateCalculation ? {} : this._getUpdatedData(options);
                var resultAppointmentData = (0, _extend.extend)({}, appointmentData, updatedData);
                var allDay = this.fire("getField", "allDay", appointmentData);
                var isAllDay = this._workSpace.supportAllDayRow() && allDay;
                var startDate = new Date(this.fire("getField", "startDate", resultAppointmentData));
                var endDate = new Date(this.fire("getField", "endDate", resultAppointmentData));
                var appointmentDuration = endDate.getTime() - startDate.getTime();
                var updatedStartDate = startDate;
                var appointmentStartDate;
                var appointmentEndDate;
                if (_type2.default.isDefined($appointment)) {
                    var apptDataCalculator = this.getRenderingStrategyInstance().getAppointmentDataCalculator();
                    if (_type2.default.isFunction(apptDataCalculator) && this._isAppointmentRecurrence(appointmentData)) {
                        updatedStartDate = apptDataCalculator($appointment, startDate).startDate
                    } else {
                        if (options.isAppointmentResized) {
                            var coordinates = _translator2.default.locate($appointment);
                            updatedStartDate = new Date(this._workSpace.getCellDataByCoordinates(coordinates, isAllDay).startDate)
                        } else {
                            var settings = $appointment.data("dxAppointmentSettings");
                            appointmentStartDate = settings && settings.originalAppointmentStartDate;
                            appointmentEndDate = settings && settings.originalAppointmentEndDate;
                            if (this._isAppointmentRecurrence(appointmentData)) {
                                appointmentStartDate = settings && settings.startDate;
                                appointmentEndDate = settings && settings.endDate
                            }
                            if (appointmentStartDate) {
                                updatedStartDate = appointmentStartDate
                            }
                        }
                    }
                }
                this.fire("setField", "startDate", resultAppointmentData, updatedStartDate);
                this.fire("setField", "endDate", resultAppointmentData, appointmentEndDate || new Date(updatedStartDate.getTime() + appointmentDuration));
                if (!options.skipHoursProcessing && !options.isAppointmentResized) {
                    this._convertDatesByTimezoneBack(false, resultAppointmentData)
                }
                return resultAppointmentData
            },
            subscribe: function(subject, action) {
                this._subscribes[subject] = _uiScheduler2.default[subject] = action
            },
            fire: function(subject) {
                var callback = this._subscribes[subject];
                var args = Array.prototype.slice.call(arguments);
                if (!_type2.default.isFunction(callback)) {
                    throw _ui2.default.Error("E1031", subject)
                }
                return callback.apply(this, args.slice(1))
            },
            getTargetCellData: function() {
                return this._workSpace.getDataByDroppableCell()
            },
            _updateAppointment: function(target, appointment, onUpdatePrevented, dragEvent) {
                var updatingOptions = {
                    newData: appointment,
                    oldData: (0, _extend.extend)({}, target),
                    cancel: false
                };
                var performFailAction = function(err) {
                    if (_type2.default.isFunction(onUpdatePrevented)) {
                        onUpdatePrevented.call(this)
                    }
                    if (err && "Error" === err.name) {
                        throw err
                    }
                }.bind(this);
                this._actions.onAppointmentUpdating(updatingOptions);
                if (dragEvent && !_type2.default.isDeferred(dragEvent.cancel)) {
                    dragEvent.cancel = new Deferred
                }
                return this._processActionResult(updatingOptions, function(canceled) {
                    var deferred = new Deferred;
                    if (!canceled) {
                        this._expandAllDayPanel(appointment);
                        try {
                            deferred = this._appointmentModel.update(target, appointment).done(function() {
                                dragEvent && dragEvent.cancel.resolve(false)
                            }).always(function(e) {
                                this._executeActionWhenOperationIsCompleted(this._actions.onAppointmentUpdated, appointment, e)
                            }.bind(this)).fail(function() {
                                performFailAction()
                            })
                        } catch (err) {
                            performFailAction(err)
                        }
                    } else {
                        performFailAction()
                    }
                    return deferred.promise()
                })
            },
            _processActionResult: function(actionOptions, callback) {
                var _this10 = this;
                var deferred = new Deferred;
                var resolveCallback = function(callbackResult) {
                    when(_deferred2.default.fromPromise(callbackResult)).always(deferred.resolve)
                };
                if (_type2.default.isPromise(actionOptions.cancel)) {
                    when(_deferred2.default.fromPromise(actionOptions.cancel)).always(function(cancel) {
                        if (!_type2.default.isDefined(cancel)) {
                            cancel = "rejected" === actionOptions.cancel.state()
                        }
                        resolveCallback(callback.call(_this10, cancel))
                    })
                } else {
                    resolveCallback(callback.call(this, actionOptions.cancel))
                }
                return deferred.promise()
            },
            _expandAllDayPanel: function(appointment) {
                if (!this._isAllDayExpanded(this.getFilteredItems()) && this.appointmentTakesAllDay(appointment)) {
                    this._workSpace.option("allDayExpanded", true)
                }
            },
            _executeActionWhenOperationIsCompleted: function(action, appointment, e) {
                var options = {
                    appointmentData: appointment
                };
                var isError = e && "Error" === e.name;
                if (isError) {
                    options.error = e
                } else {
                    this._appointmentPopup.isVisible() && this._appointmentPopup.hide()
                }
                action(options);
                this._fireContentReadyAction()
            },
            _showAppointmentPopup: function(data, visibleButtons, isProcessTimeZone) {
                this._appointmentPopup.show(data, visibleButtons, isProcessTimeZone)
            },
            getAppointmentPopup: function() {
                return this._appointmentPopup.getPopup()
            },
            getAppointmentDetailsForm: function() {
                return this._appointmentPopup._appointmentForm
            },
            getUpdatedAppointment: function() {
                return this._appointmentModel.getUpdatedAppointment()
            },
            getUpdatedAppointmentKeys: function() {
                return this._appointmentModel.getUpdatedAppointmentKeys()
            },
            getAppointmentsInstance: function() {
                return this._appointments
            },
            getResourceManager: function() {
                return this._resourcesManager
            },
            getLayoutManager: function() {
                return this._layoutManager
            },
            getRenderingStrategyInstance: function() {
                return this._layoutManager.getRenderingStrategyInstance()
            },
            getFilteredItems: function() {
                return this._filteredItems
            },
            getActions: function() {
                return this._actions
            },
            appointmentTakesAllDay: function(appointment) {
                return this._appointmentModel.appointmentTakesAllDay(appointment, this._getCurrentViewOption("startDayHour"), this._getCurrentViewOption("endDayHour"))
            },
            _getStartDate: function(appointment, skipNormalize) {
                var startDate = this.fire("getField", "startDate", appointment);
                var startDateTimeZone = this.fire("getField", "startDateTimeZone", appointment);
                startDate = this.fire("convertDateByTimezone", _date2.default.makeDate(startDate), startDateTimeZone);
                return !skipNormalize ? this.fire("updateAppointmentStartDate", {
                    startDate: startDate,
                    appointment: appointment
                }) : startDate
            },
            _getEndDate: function(appointment, skipNormalize) {
                var endDate = new Date(this.fire("getField", "endDate", appointment));
                var startDate = new Date(this.fire("getField", "startDate", appointment));
                var isSameDate = _date2.default.sameDate(startDate, endDate);
                if (endDate) {
                    var endDateTimeZone = this.fire("getField", "endDateTimeZone", appointment);
                    endDate = this.fire("convertDateByTimezone", _date2.default.makeDate(endDate), endDateTimeZone);
                    return !skipNormalize ? this.fire("updateAppointmentEndDate", {
                        endDate: endDate,
                        isSameDate: isSameDate
                    }) : endDate
                }
                return endDate
            },
            _getRecurrenceException: function(appointmentData) {
                var recurrenceException = this.fire("getField", "recurrenceException", appointmentData);
                if (recurrenceException) {
                    var startDate = this.fire("getField", "startDate", appointmentData);
                    var exceptions = recurrenceException.split(",");
                    var startDateTimeZone = this.fire("getField", "startDateTimeZone", appointmentData);
                    for (var i = 0; i < exceptions.length; i++) {
                        exceptions[i] = this._convertRecurrenceException(exceptions[i], startDate, startDateTimeZone)
                    }
                    recurrenceException = exceptions.join()
                }
                return recurrenceException
            },
            _convertRecurrenceException: function(exceptionString, startDate, startDateTimeZone) {
                exceptionString = exceptionString.replace(/\s/g, "");
                var exceptionDate = _date_serialization2.default.deserializeDate(exceptionString);
                var convertedStartDate = this.fire("convertDateByTimezone", startDate, startDateTimeZone);
                var convertedExceptionDate = this.fire("convertDateByTimezone", exceptionDate, startDateTimeZone);
                convertedExceptionDate = _utils4.default.correctRecurrenceExceptionByTimezone(convertedExceptionDate, convertedStartDate, this.option("timeZone"), startDateTimeZone);
                exceptionString = _date_serialization2.default.serializeDate(convertedExceptionDate, FULL_DATE_FORMAT);
                return exceptionString
            },
            dayHasAppointment: function(day, appointment, trimTime) {
                var startDate = new Date(this.fire("getField", "startDate", appointment));
                var endDate = new Date(this.fire("getField", "endDate", appointment));
                var startDateTimeZone = this.fire("getField", "startDateTimeZone", appointment);
                var endDateTimeZone = this.fire("getField", "endDateTimeZone", appointment);
                startDate = this.fire("convertDateByTimezone", startDate, startDateTimeZone);
                endDate = this.fire("convertDateByTimezone", endDate, endDateTimeZone);
                if (day.getTime() === endDate.getTime()) {
                    return startDate.getTime() === endDate.getTime()
                }
                if (trimTime) {
                    day = _date2.default.trimTime(day);
                    startDate = _date2.default.trimTime(startDate);
                    endDate = _date2.default.trimTime(endDate)
                }
                var dayTimeStamp = day.getTime();
                var startDateTimeStamp = startDate.getTime();
                var endDateTimeStamp = endDate.getTime();
                return (0, _array.inArray)(dayTimeStamp, [startDateTimeStamp, endDateTimeStamp]) > -1 || startDateTimeStamp < dayTimeStamp && endDateTimeStamp > dayTimeStamp
            },
            setTargetedAppointmentResources: function(targetedAppointment, appointmentElement, appointmentIndex) {
                var groups = this._getCurrentViewOption("groups");
                if (groups && groups.length) {
                    var resourcesSetter = this._resourcesManager._dataAccessors.setter;
                    var workSpace = this._workSpace;
                    var getGroups;
                    var setResourceCallback;
                    if (this._isAgenda()) {
                        getGroups = function() {
                            var apptSettings = this.getLayoutManager()._positionMap[appointmentIndex];
                            return workSpace._getCellGroups(apptSettings[0].groupIndex)
                        };
                        setResourceCallback = function(_, group) {
                            resourcesSetter[group.name](targetedAppointment, group.id)
                        }
                    } else {
                        getGroups = function() {
                            var setting = (0, _renderer2.default)(appointmentElement).data("dxAppointmentSettings") || {};
                            return workSpace.getCellDataByCoordinates({
                                left: setting.left,
                                top: setting.top
                            }).groups
                        };
                        setResourceCallback = function(field, value) {
                            resourcesSetter[field](targetedAppointment, value)
                        }
                    }(0, _iterator.each)(getGroups.call(this), setResourceCallback)
                }
            },
            getStartViewDate: function() {
                return this._workSpace.getStartViewDate()
            },
            getEndViewDate: function() {
                return this._workSpace.getEndViewDate()
            },
            showAppointmentPopup: function(appointmentData, createNewAppointment, currentAppointmentData) {
                var singleAppointment = currentAppointmentData || this._getAppointmentData(appointmentData, {
                    skipDateCalculation: true
                });
                var startDate = this.fire("getField", "startDate", currentAppointmentData || appointmentData);
                this._checkRecurringAppointment(appointmentData, singleAppointment, startDate, function() {
                    if (createNewAppointment || _type2.default.isEmptyObject(appointmentData)) {
                        delete this._editAppointmentData;
                        this._editing.allowAdding && this._showAppointmentPopup(appointmentData, true, true)
                    } else {
                        this._editAppointmentData = appointmentData;
                        this._showAppointmentPopup(appointmentData, this._editing.allowUpdating, true)
                    }
                }.bind(this), false, true)
            },
            hideAppointmentPopup: function(saveChanges) {
                if (this._appointmentPopup && this._appointmentPopup.isVisible()) {
                    saveChanges && this._appointmentPopup.saveChanges();
                    this._appointmentPopup.hide()
                }
            },
            showAppointmentTooltip: function(appointmentData, target, currentAppointmentData) {
                if (appointmentData) {
                    this.showAppointmentTooltipCore(target, [{
                        color: this._appointments._tryGetAppointmentColor(target),
                        data: appointmentData,
                        currentData: currentAppointmentData
                    }])
                }
            },
            showAppointmentTooltipCore: function(target, data, options) {
                if (this._appointmentTooltip.isAlreadyShown(target)) {
                    this.hideAppointmentTooltip()
                } else {
                    this._appointmentTooltip.show(target, data, (0, _extend.extend)(this._getExtraAppointmentTooltipOptions(), options))
                }
            },
            hideAppointmentTooltip: function() {
                this._appointmentTooltip && this._appointmentTooltip.hide()
            },
            scrollToTime: function(hours, minutes, date) {
                this._workSpace.scrollToTime(hours, minutes, date)
            },
            addAppointment: function(appointment) {
                var _this11 = this;
                var text = this.fire("getField", "text", appointment);
                if (!text) {
                    this.fire("setField", "text", appointment, "")
                }
                this._convertDatesByTimezoneBack(true, appointment);
                var addingOptions = {
                    appointmentData: appointment,
                    cancel: false
                };
                this._actions.onAppointmentAdding(addingOptions);
                return this._processActionResult(addingOptions, function(canceled) {
                    if (canceled) {
                        return (new Deferred).resolve()
                    }
                    _this11._expandAllDayPanel(appointment);
                    return _this11._appointmentModel.add(appointment, {
                        value: _this11._getTimezoneOffsetByOption(),
                        clientOffset: _this11.fire("getClientTimezoneOffset")
                    }).always(function(e) {
                        return _this11._executeActionWhenOperationIsCompleted(_this11._actions.onAppointmentAdded, appointment, e)
                    })
                })
            },
            updateAppointment: function(target, appointment) {
                return this._updateAppointment(target, appointment)
            },
            deleteAppointment: function(appointment) {
                var deletingOptions = {
                    appointmentData: appointment,
                    cancel: false
                };
                this._actions.onAppointmentDeleting(deletingOptions);
                this._processActionResult(deletingOptions, function(canceled) {
                    if (!canceled) {
                        this._appointmentModel.remove(appointment).always(function(e) {
                            this._executeActionWhenOperationIsCompleted(this._actions.onAppointmentDeleted, appointment, e)
                        }.bind(this))
                    }
                })
            },
            focus: function() {
                if (this._editAppointmentData) {
                    this._appointments.focus()
                } else {
                    this._workSpace.focus()
                }
            },
            getFirstDayOfWeek: function() {
                return _type2.default.isDefined(this.option("firstDayOfWeek")) ? this.option("firstDayOfWeek") : _date4.default.firstDayOfWeekIndex()
            }
        }).include(_data_helper2.default);
        (0, _component_registrator2.default)("dxScheduler", Scheduler);
        module.exports = Scheduler
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.subscribes.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiScheduler = __webpack_require__( /*! ./timezones/ui.scheduler.timezones */ 397);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _date3 = __webpack_require__( /*! ../../localization/date */ 35);
        var _date4 = _interopRequireDefault(_date3);
        var _utils3 = __webpack_require__( /*! ./utils.timeZone */ 148);
        var _utils4 = _interopRequireDefault(_utils3);
        var _constants = __webpack_require__( /*! ./constants */ 171);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MINUTES_IN_HOUR = 60;
        var toMs = _date2.default.dateToMilliseconds;
        var subscribes = {
            isCurrentViewAgenda: function() {
                return "agenda" === this.option("currentView")
            },
            currentViewUpdated: function(currentView) {
                this.option("currentView", currentView)
            },
            currentDateUpdated: function(date) {
                this.option("currentDate", date)
            },
            setCellDataCacheAlias: function(appointment, geometry) {
                this._workSpace.setCellDataCacheAlias(appointment, geometry)
            },
            needCoordinates: function(options) {
                var _this = this;
                var appointmentData = options.appointmentData;
                var startDate = options.startDate;
                var endDate = this._getEndDate(appointmentData);
                var recurrenceRule = this.fire("getField", "recurrenceRule", appointmentData);
                var recurrenceException = this._getRecurrenceException(appointmentData);
                var dateRange = this._workSpace.getDateRange();
                var allDay = this.appointmentTakesAllDay(appointmentData);
                var startViewDate = this.appointmentTakesAllDay(appointmentData) ? _date2.default.trimTime(new Date(dateRange[0])) : dateRange[0];
                var originalStartDate = options.originalStartDate || startDate;
                var renderingStrategy = this.getLayoutManager().getRenderingStrategyInstance();
                var firstDayOfWeek = this.getFirstDayOfWeek();
                var recurrenceOptions = {
                    rule: recurrenceRule,
                    exception: recurrenceException,
                    start: originalStartDate,
                    end: endDate,
                    min: startViewDate,
                    max: dateRange[1],
                    firstDayOfWeek: firstDayOfWeek
                };
                var dates = _utils2.default.getDatesByRecurrence(recurrenceOptions);
                var initialDates;
                if (!dates.length) {
                    dates.push(startDate);
                    initialDates = dates
                } else {
                    dates = this.getCorrectedDatesByDaylightOffsets(originalStartDate, dates, appointmentData);
                    initialDates = dates;
                    dates = dates.map(function(date) {
                        return _date2.default.roundDateByStartDayHour(date, _this._getCurrentViewOption("startDayHour"))
                    })
                }
                if (renderingStrategy.needSeparateAppointment(allDay)) {
                    var datesLength = dates.length;
                    var longParts = [];
                    var resultDates = [];
                    var _loop = function(i) {
                        var endDateOfPart = renderingStrategy.endDate(appointmentData, {
                            startDate: dates[i]
                        }, !!recurrenceRule);
                        longParts = _date2.default.getDatesOfInterval(dates[i], endDateOfPart, {
                            milliseconds: _this.getWorkSpace().getIntervalDuration(allDay)
                        });
                        var maxDate = new Date(dateRange[1]);
                        resultDates = resultDates.concat(longParts.filter(function(el) {
                            return new Date(el) < maxDate
                        }))
                    };
                    for (var i = 0; i < datesLength; i++) {
                        _loop(i)
                    }
                    dates = resultDates
                }
                var itemResources = this._resourcesManager.getResourcesFromItem(appointmentData);
                allDay = this.appointmentTakesAllDay(appointmentData) && this._workSpace.supportAllDayRow();
                return this._getCoordinates(initialDates, dates, itemResources, allDay)
            },
            isGroupedByDate: function() {
                return this.getWorkSpace().isGroupedByDate()
            },
            showAppointmentTooltip: function(options) {
                var appointmentData = options.data;
                var targetedData = this.fire("getTargetedAppointmentData", appointmentData, (0, _renderer2.default)(options.target));
                this.showAppointmentTooltip(appointmentData, options.target, targetedData)
            },
            hideAppointmentTooltip: function() {
                this.hideAppointmentTooltip()
            },
            showAddAppointmentPopup: function(appointmentData) {
                var processedData = {};
                (0, _iterator.each)(["startDate", "endDate", "allDay"], function(_, field) {
                    if (void 0 !== appointmentData[field]) {
                        this.fire("setField", field, processedData, appointmentData[field]);
                        delete appointmentData[field]
                    }
                }.bind(this));
                this.showAppointmentPopup((0, _extend.extend)(processedData, appointmentData), true)
            },
            showEditAppointmentPopup: function(options) {
                var appointmentData = options.data;
                options.$appointment = (0, _renderer2.default)(options.target);
                options.skipHoursProcessing = true;
                var targetedData = this._getAppointmentData(appointmentData, options);
                var startDate = this.fire("getField", "startDate", targetedData);
                this.showAppointmentPopup(appointmentData, false, targetedData, startDate)
            },
            updateAppointmentAfterResize: function(options) {
                var targetAppointment = options.target;
                options.isAppointmentResized = true;
                var targetedData = this._getAppointmentData(targetAppointment, options);
                var startDate = this.fire("getField", "startDate", targetedData);
                var updatedData = (0, _extend.extend)(true, {}, options.data);
                this._convertDatesByTimezoneBack(true, updatedData);
                this._checkRecurringAppointment(targetAppointment, targetedData, startDate, function() {
                    this._updateAppointment(targetAppointment, updatedData, function() {
                        this._appointments.moveAppointmentBack()
                    })
                }.bind(this))
            },
            getUpdatedData: function(options) {
                return this._getUpdatedData({
                    data: options.data
                })
            },
            updateAppointmentAfterDrag: function(options) {
                var target = options.data;
                var updatedData = this._getUpdatedData(options);
                var newCellIndex = this._workSpace.getDroppableCellIndex();
                var oldCellIndex = this._workSpace.getCellIndexByCoordinates(options.coordinates);
                var becomeAllDay = this.fire("getField", "allDay", updatedData);
                var wasAllDay = this.fire("getField", "allDay", target);
                var dragEvent = options.event;
                var appointment = (0, _extend.extend)({}, target, updatedData);
                var movedToAllDay = this._workSpace.supportAllDayRow() && becomeAllDay;
                var cellData = this._workSpace.getCellDataByCoordinates(options.coordinates, movedToAllDay);
                var movedBetweenAllDayAndSimple = this._workSpace.supportAllDayRow() && (wasAllDay && !becomeAllDay || !wasAllDay && becomeAllDay);
                if (newCellIndex !== oldCellIndex || movedBetweenAllDayAndSimple) {
                    this._checkRecurringAppointment(target, appointment, cellData.startDate, function() {
                        this._convertDatesByTimezoneBack(true, updatedData, appointment);
                        this._updateAppointment(target, appointment, function() {
                            this._appointments.moveAppointmentBack(dragEvent)
                        }, dragEvent)
                    }.bind(this), void 0, void 0, dragEvent)
                } else {
                    this._appointments.moveAppointmentBack(dragEvent)
                }
            },
            deleteAppointment: function(options) {
                options.$appointment = (0, _renderer2.default)(options.target);
                var appointmentData = options.data;
                var targetedData = this._getAppointmentData(appointmentData, options);
                this.checkAndDeleteAppointment(appointmentData, targetedData)
            },
            getAppointmentColor: function(options) {
                var resourcesManager = this._resourcesManager;
                var resourceForPainting = resourcesManager.getResourceForPainting(this._getCurrentViewOption("groups"));
                var response = (new _deferred.Deferred).resolve().promise();
                if (resourceForPainting) {
                    var field = resourcesManager.getField(resourceForPainting);
                    var groupIndex = options.groupIndex;
                    var groups = this._workSpace._getCellGroups(groupIndex);
                    var resourceValues = _array2.default.wrapToArray(resourcesManager.getDataAccessors(field, "getter")(options.itemData));
                    var groupId = resourceValues.length ? resourceValues[0] : void 0;
                    for (var i = 0; i < groups.length; i++) {
                        if (groups[i].name === field) {
                            groupId = groups[i].id;
                            break
                        }
                    }
                    response = resourcesManager.getResourceColor(field, groupId)
                }
                return response
            },
            getHeaderHeight: function() {
                return this._header._$element && parseInt(this._header._$element.outerHeight(), 10)
            },
            getResourcesFromItem: function(itemData) {
                return this._resourcesManager.getResourcesFromItem(itemData)
            },
            getBoundOffset: function() {
                return {
                    top: -this.getWorkSpaceAllDayHeight()
                }
            },
            appointmentTakesSeveralDays: function(appointment) {
                return this._appointmentModel.appointmentTakesSeveralDays(appointment)
            },
            getTextAndFormatDate: function(data, currentData, format) {
                var fields = ["startDate", "endDate", "startDateTimeZone", "endDateTimeZone", "allDay", "text"];
                var appointmentFields = this.fire("_getAppointmentFields", (0, _extend.extend)({}, data, currentData), fields);
                var startDate = appointmentFields.startDate;
                var endDate = appointmentFields.endDate;
                var formatType = format || this.fire("_getTypeFormat", startDate, endDate, appointmentFields.allDay);
                return {
                    text: this.fire("_createAppointmentTitle", appointmentFields),
                    formatDate: this.fire("_formatDates", startDate, endDate, formatType)
                }
            },
            _getAppointmentFields: function(data, arrayOfFields) {
                var _this2 = this;
                return arrayOfFields.reduce(function(accumulator, field) {
                    accumulator[field] = _this2.fire("getField", field, data);
                    return accumulator
                }, {})
            },
            _getTypeFormat: function(startDate, endDate, isAllDay) {
                if (isAllDay) {
                    return "DATE"
                }
                if ("month" !== this.option("currentView") && _date2.default.sameDate(startDate, endDate)) {
                    return "TIME"
                }
                return "DATETIME"
            },
            _createAppointmentTitle: function(data) {
                if (_type2.default.isPlainObject(data)) {
                    return data.text
                }
                return String(data)
            },
            _formatDates: function(startDate, endDate, formatType) {
                var dateFormat = "monthandday";
                var timeFormat = "shorttime";
                var isSameDate = startDate.getDate() === endDate.getDate();
                var isDurationLessThanDay = endDate.getTime() - startDate.getTime() <= toMs("day");
                switch (formatType) {
                    case "DATETIME":
                        return [_date4.default.format(startDate, dateFormat), " ", _date4.default.format(startDate, timeFormat), " - ", isSameDate ? "" : _date4.default.format(endDate, dateFormat) + " ", _date4.default.format(endDate, timeFormat)].join("");
                    case "TIME":
                        return "".concat(_date4.default.format(startDate, timeFormat), " - ").concat(_date4.default.format(endDate, timeFormat));
                    case "DATE":
                        return "".concat(_date4.default.format(startDate, dateFormat)).concat(isDurationLessThanDay || isSameDate ? "" : " - " + _date4.default.format(endDate, dateFormat))
                }
            },
            getResizableAppointmentArea: function(options) {
                var allDay = options.allDay;
                var groups = this._getCurrentViewOption("groups");
                if (groups && groups.length) {
                    if (allDay || this.getLayoutManager().getRenderingStrategyInstance()._needHorizontalGroupBounds()) {
                        var horizontalGroupBounds = this._workSpace.getGroupBounds(options.coordinates);
                        return {
                            left: horizontalGroupBounds.left,
                            right: horizontalGroupBounds.right,
                            top: 0,
                            bottom: 0
                        }
                    }
                    if (this.getLayoutManager().getRenderingStrategyInstance()._needVerticalGroupBounds(allDay) && this._workSpace._isVerticalGroupedWorkSpace()) {
                        var verticalGroupBounds = this._workSpace.getGroupBounds(options.coordinates);
                        return {
                            left: 0,
                            right: 0,
                            top: verticalGroupBounds.top,
                            bottom: verticalGroupBounds.bottom
                        }
                    }
                }
            },
            needRecalculateResizableArea: function() {
                return this.getWorkSpace().needRecalculateResizableArea()
            },
            getAppointmentGeometry: function(settings) {
                return this.getLayoutManager().getRenderingStrategyInstance().getAppointmentGeometry(settings)
            },
            isAllDay: function(appointmentData) {
                return this.getLayoutManager().getRenderingStrategyInstance().isAllDay(appointmentData)
            },
            getDeltaTime: function(e, initialSize, itemData) {
                return this.getLayoutManager().getRenderingStrategyInstance().getDeltaTime(e, initialSize, itemData)
            },
            getDropDownAppointmentWidth: function(isAllDay) {
                return this.getLayoutManager().getRenderingStrategyInstance().getDropDownAppointmentWidth(this._getViewCountConfig().intervalCount, isAllDay)
            },
            getDropDownAppointmentHeight: function() {
                return this.getLayoutManager().getRenderingStrategyInstance().getDropDownAppointmentHeight()
            },
            getStartDate: function(appointmentData, skipNormalize) {
                return this._getStartDate(appointmentData, skipNormalize)
            },
            getCellWidth: function() {
                return this._cellWidth
            },
            getCellHeight: function() {
                return this._cellHeight
            },
            getResizableStep: function() {
                var cellWidth = this._cellWidth;
                var workSpace = this.getWorkSpace();
                if (workSpace.isGroupedByDate()) {
                    return workSpace._getGroupCount() * cellWidth
                }
                return cellWidth
            },
            getEndDate: function(appointmentData, skipNormalize) {
                return this._getEndDate(appointmentData, skipNormalize)
            },
            getRenderingStrategy: function() {
                return this._getAppointmentsRenderingStrategy()
            },
            getMaxAppointmentCountPerCellByType: function(isAllDay) {
                return this.getRenderingStrategyInstance()._getMaxAppointmentCountPerCellByType(isAllDay)
            },
            needCorrectAppointmentDates: function() {
                return this.getRenderingStrategyInstance().needCorrectAppointmentDates()
            },
            getRenderingStrategyDirection: function() {
                return this.getRenderingStrategyInstance().getDirection()
            },
            getWorkSpaceDateTableOffset: function() {
                return this.getWorkSpaceDateTableOffset()
            },
            getFullWeekAppointmentWidth: function(options) {
                var groupIndex = options.groupIndex;
                return this._workSpace.getGroupWidth(groupIndex)
            },
            getMaxAppointmentWidth: function(options) {
                var workSpace = this._workSpace;
                return workSpace.getCellCountToLastViewDate(options.date) * workSpace.getCellWidth()
            },
            updateAppointmentStartDate: function(options) {
                var appointment = options.appointment;
                var firstViewDate = this._workSpace.getStartViewDate();
                var startDate = new Date(options.startDate);
                var startDayHour = this._getCurrentViewOption("startDayHour");
                var updatedStartDate;
                if (this.appointmentTakesAllDay(appointment)) {
                    updatedStartDate = _date2.default.normalizeDate(startDate, firstViewDate)
                } else {
                    if (startDate < firstViewDate) {
                        startDate = firstViewDate
                    }
                    updatedStartDate = _date2.default.normalizeDate(options.startDate, new Date(startDate))
                }
                return _date2.default.roundDateByStartDayHour(updatedStartDate, startDayHour)
            },
            updateAppointmentEndDate: function(options) {
                var endDate = options.endDate;
                var endDayHour = this._getCurrentViewOption("endDayHour");
                var startDayHour = this._getCurrentViewOption("startDayHour");
                var updatedEndDate = endDate;
                if (endDate.getHours() >= endDayHour) {
                    updatedEndDate.setHours(endDayHour, 0, 0, 0)
                } else {
                    if (!options.isSameDate && startDayHour > 0 && 60 * endDate.getHours() + endDate.getMinutes() < 60 * startDayHour) {
                        updatedEndDate = new Date(updatedEndDate.getTime() - toMs("day"));
                        updatedEndDate.setHours(endDayHour, 0, 0, 0)
                    }
                }
                return updatedEndDate
            },
            renderCompactAppointments: function(options) {
                this._compactAppointmentsHelper.render(options)
            },
            clearCompactAppointments: function() {
                this._compactAppointmentsHelper.clear()
            },
            supportCompactDropDownAppointments: function() {
                return this._workSpace._supportCompactDropDownAppointments()
            },
            isApplyCompactAppointmentOffset: function() {
                return this._workSpace._isApplyCompactAppointmentOffset()
            },
            getGroupCount: function() {
                return this._workSpace._getGroupCount()
            },
            mapAppointmentFields: function(config) {
                var targetedData = this.fire("getTargetedAppointmentData", config.itemData, config.itemElement, true);
                return {
                    appointmentData: config.itemData,
                    appointmentElement: config.itemElement,
                    targetedAppointmentData: targetedData
                }
            },
            getOffsetByAllDayPanel: function(groupIndex) {
                return this._workSpace._getOffsetByAllDayPanel(groupIndex)
            },
            getGroupTop: function(groupIndex) {
                return this._workSpace._getGroupTop(groupIndex)
            },
            updateResizableArea: function() {
                var $allResizableElements = this.$element().find(".dx-scheduler-appointment.dx-resizable");
                var horizontalResizables = (0, _common.grep)($allResizableElements, function(el) {
                    var $el = (0, _renderer2.default)(el);
                    var resizableInst = $el.dxResizable("instance");
                    var area = resizableInst.option("area");
                    return (0, _array.inArray)(resizableInst.option("handles"), ["right left", "left right"]) > -1 && _type2.default.isPlainObject(area)
                });
                (0, _iterator.each)(horizontalResizables, function(_, el) {
                    var $el = (0, _renderer2.default)(el);
                    var position = _translator2.default.locate($el);
                    var appointmentData = this._appointments._getItemData($el);
                    var area = this._appointments._calculateResizableArea({
                        left: position.left
                    }, appointmentData);
                    $el.dxResizable("instance").option("area", area)
                }.bind(this))
            },
            getField: function(field, obj) {
                if (!_type2.default.isDefined(this._dataAccessors.getter[field])) {
                    return
                }
                return this._dataAccessors.getter[field](obj)
            },
            setField: function(field, obj, value) {
                if (!_type2.default.isDefined(this._dataAccessors.setter[field])) {
                    return
                }
                var splitExprStr = this.option(field + "Expr").split(".");
                var rootField = splitExprStr[0];
                if (void 0 === obj[rootField] && splitExprStr.length > 1) {
                    var emptyChain = function(arr) {
                        var result = {};
                        var tmp = result;
                        var arrLength = arr.length - 1;
                        for (var i = 1; i < arrLength; i++) {
                            tmp = tmp[arr[i]] = {}
                        }
                        return result
                    }(splitExprStr);
                    obj[rootField] = emptyChain
                }
                this._dataAccessors.setter[field](obj, value);
                return obj
            },
            prerenderFilter: function() {
                var dateRange = this.getWorkSpace().getDateRange();
                var resources = this._resourcesManager.getResourcesData();
                var allDay;
                if (!this.option("showAllDayPanel") && this._workSpace.supportAllDayRow()) {
                    allDay = false
                }
                return this._appointmentModel.filterLoadedAppointments({
                    startDayHour: this._getCurrentViewOption("startDayHour"),
                    endDayHour: this._getCurrentViewOption("endDayHour"),
                    min: dateRange[0],
                    max: dateRange[1],
                    resources: resources,
                    allDay: allDay,
                    firstDayOfWeek: this.getFirstDayOfWeek(),
                    recurrenceException: this._getRecurrenceException.bind(this)
                }, this._subscribes.convertDateByTimezone.bind(this))
            },
            dayHasAppointment: function(day, appointment, trimTime) {
                return this.dayHasAppointment(day, appointment, trimTime)
            },
            createResourcesTree: function() {
                return this._resourcesManager.createResourcesTree(this._loadedResources)
            },
            getResourceTreeLeaves: function(tree, appointmentResources) {
                return this._resourcesManager.getResourceTreeLeaves(tree, appointmentResources)
            },
            createReducedResourcesTree: function() {
                var tree = this._resourcesManager.createResourcesTree(this._loadedResources);
                return this._resourcesManager.reduceResourcesTree(tree, this.getFilteredItems())
            },
            groupAppointmentsByResources: function(appointments) {
                var result = {
                    0: appointments
                };
                var groups = this._getCurrentViewOption("groups");
                if (groups && groups.length && this._resourcesManager.getResourcesData().length) {
                    result = this._resourcesManager.groupAppointmentsByResources(appointments, this._loadedResources)
                }
                var totalResourceCount = 0;
                (0, _iterator.each)(this._loadedResources, function(i, resource) {
                    if (!i) {
                        totalResourceCount = resource.items.length
                    } else {
                        totalResourceCount *= resource.items.length
                    }
                });
                for (var j = 0; j < totalResourceCount; j++) {
                    var index = j.toString();
                    if (result[index]) {
                        continue
                    }
                    result[index] = []
                }
                return result
            },
            getAgendaRows: function(options) {
                var renderingStrategy = this._layoutManager.getRenderingStrategyInstance();
                var calculateRows = renderingStrategy.calculateRows.bind(renderingStrategy);
                var d = new _deferred.Deferred;

                function rowsCalculated(appointments) {
                    var result = calculateRows(appointments, options.agendaDuration, options.currentDate);
                    this._dataSourceLoadedCallback.remove(rowsCalculated);
                    d.resolve(result)
                }
                this._dataSourceLoadedCallback.add(rowsCalculated);
                return d.promise()
            },
            getAgendaVerticalStepHeight: function() {
                return this.getWorkSpace().getAgendaVerticalStepHeight()
            },
            getAgendaDuration: function() {
                return this._getCurrentViewOption("agendaDuration")
            },
            getStartViewDate: function() {
                return this.getStartViewDate()
            },
            getEndViewDate: function() {
                return this.getEndViewDate()
            },
            getMaxAppointmentsPerCell: function() {
                return this.getMaxAppointmentsPerCell()
            },
            forceMaxAppointmentPerCell: function() {
                return this.forceMaxAppointmentPerCell()
            },
            onAgendaReady: function(rows) {
                var $appts = this.getAppointmentsInstance()._itemElements();
                var total = 0;
                var applyClass = function(_, count) {
                    var index = count + total - 1;
                    $appts.eq(index).addClass(_constants.AGENDA_LAST_IN_DATE_APPOINTMENT_CLASS);
                    total += count
                };
                for (var i = 0; i < rows.length; i++) {
                    (0, _iterator.each)(rows[i], applyClass)
                }
            },
            getTimezone: function() {
                return this._getTimezoneOffsetByOption()
            },
            getClientTimezoneOffset: function(date) {
                date = date || new Date;
                return _uiScheduler2.default.getClientTimezoneOffset(date)
            },
            convertDateByTimezone: function(date, appointmentTimezone) {
                date = new Date(date);
                var tzOffsets = this._subscribes.getComplexOffsets(this, date, appointmentTimezone);
                date = this._subscribes.translateDateToAppointmentTimeZone(date, tzOffsets);
                date = this._subscribes.translateDateToCommonTimeZone(date, tzOffsets);
                return date
            },
            convertDateByTimezoneBack: function(date, appointmentTimezone) {
                date = new Date(date);
                var tzOffsets = this._subscribes.getComplexOffsets(this, date, appointmentTimezone);
                date = this._subscribes.translateDateToAppointmentTimeZone(date, tzOffsets, true);
                date = this._subscribes.translateDateToCommonTimeZone(date, tzOffsets, true);
                return date
            },
            translateDateToAppointmentTimeZone: function(date, offsets, back) {
                var operation = back ? -1 : 1;
                var dateInUTC = date.getTime() - operation * offsets.client * toMs("hour");
                return new Date(dateInUTC + operation * offsets.appointment * toMs("hour"))
            },
            translateDateToCommonTimeZone: function(date, offsets, back) {
                var operation = back ? -1 : 1;
                if ("number" === typeof offsets.common) {
                    var offset = offsets.common - offsets.appointment;
                    var hoursOffset = (offset < 0 ? -1 : 1) * Math.floor(Math.abs(offset));
                    var minutesOffset = offset % 1;
                    date.setHours(date.getHours() + operation * hoursOffset);
                    date.setMinutes(date.getMinutes() + operation * minutesOffset * MINUTES_IN_HOUR)
                }
                return date
            },
            getComplexOffsets: function(scheduler, date, appointmentTimezone) {
                var clientTimezoneOffset = -this.getClientTimezoneOffset(date) / toMs("hour");
                var commonTimezoneOffset = scheduler._getTimezoneOffsetByOption(date);
                var appointmentTimezoneOffset = _utils4.default.calculateTimezoneByValue(appointmentTimezone, date);
                if ("number" !== typeof appointmentTimezoneOffset) {
                    appointmentTimezoneOffset = clientTimezoneOffset
                }
                return {
                    client: clientTimezoneOffset,
                    common: commonTimezoneOffset,
                    appointment: appointmentTimezoneOffset
                }
            },
            getTimezonesDisplayName: function() {
                return _uiScheduler2.default.getTimezonesDisplayName()
            },
            getTimezoneDisplayNameById: function(id) {
                return _uiScheduler2.default.getTimezoneDisplayNameById(id)
            },
            getSimilarTimezones: function(id) {
                return _uiScheduler2.default.getSimilarTimezones(id)
            },
            getTimezonesIdsByDisplayName: function(displayName) {
                return _uiScheduler2.default.getTimezonesIdsByDisplayName(displayName)
            },
            getTargetedAppointmentData: function(appointmentData, appointmentElement, needConvertByTimezones) {
                var $appointmentElement = (0, _renderer2.default)(appointmentElement);
                var appointmentIndex = $appointmentElement.data(this._appointments._itemIndexKey());
                var targetedData = this._getAppointmentData(appointmentData, {
                    skipDateCalculation: true,
                    $appointment: $appointmentElement,
                    skipHoursProcessing: needConvertByTimezones ? false : true
                });
                var result = {};
                (0, _extend.extend)(true, result, appointmentData, targetedData);
                appointmentElement && this.setTargetedAppointmentResources(result, appointmentElement, appointmentIndex);
                return result
            },
            getAppointmentDurationInMs: function(options) {
                var startDate = options.startDate;
                var endDate = options.endDate;
                var allDay = options.allDay;
                var appointmentDuration = endDate.getTime() - startDate.getTime();
                var dayDuration = toMs("day");
                var visibleDayDuration = this._workSpace.getVisibleDayDuration();
                var result = 0;
                if (allDay) {
                    var ceilQuantityOfDays = Math.ceil(appointmentDuration / dayDuration);
                    result = ceilQuantityOfDays * visibleDayDuration
                } else {
                    var isDifferentDates = !_utils4.default.isSameAppointmentDates(startDate, endDate);
                    var floorQuantityOfDays = Math.floor(appointmentDuration / dayDuration);
                    var tailDuration;
                    if (isDifferentDates) {
                        var startDateEndHour = new Date(new Date(startDate).setHours(this.option("endDayHour"), 0, 0));
                        var hiddenDayDuration = dayDuration - visibleDayDuration - (startDate.getTime() > startDateEndHour.getTime() ? startDate.getTime() - startDateEndHour.getTime() : 0);
                        tailDuration = appointmentDuration - (floorQuantityOfDays ? floorQuantityOfDays * dayDuration : hiddenDayDuration);
                        var startDayTime = this.option("startDayHour") * toMs("hour");
                        var endPartDuration = endDate - _date2.default.trimTime(endDate);
                        if (endPartDuration < startDayTime) {
                            if (floorQuantityOfDays) {
                                tailDuration -= hiddenDayDuration
                            }
                            tailDuration += startDayTime - endPartDuration
                        }
                    } else {
                        tailDuration = appointmentDuration % dayDuration
                    }
                    if (tailDuration > visibleDayDuration) {
                        tailDuration = visibleDayDuration
                    }
                    result = floorQuantityOfDays * visibleDayDuration + tailDuration || toMs("minute")
                }
                return result
            },
            fixWrongEndDate: function(appointment, startDate, endDate) {
                return this._appointmentModel.fixWrongEndDate(appointment, startDate, endDate)
            },
            getEndDayHour: function() {
                return this._workSpace.option("endDayHour") || this.option("endDayHour")
            },
            getStartDayHour: function() {
                return this._workSpace.option("startDayHour") || this.option("startDayHour")
            },
            isAdaptive: function() {
                return this.option("adaptivityEnabled")
            },
            moveBack: function() {
                var dragBehavior = this.getWorkSpace().dragBehavior;
                dragBehavior && dragBehavior.moveBack()
            },
            validateDayHours: function() {
                var endDayHour = this._getCurrentViewOption("endDayHour");
                var startDayHour = this._getCurrentViewOption("startDayHour");
                if (startDayHour >= endDayHour) {
                    throw _ui2.default.Error("E1058")
                }
            },
            removeDroppableCellClass: function() {
                this._workSpace.removeDroppableCellClass()
            }
        };
        module.exports = subscribes
    },
    /*!************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/timezones/ui.scheduler.timezones_data.js ***!
      \************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var displayNames = ["(UTC) Monrovia, Reykjavik", "(UTC+03:00) Nairobi", "(UTC+02:00) Harare, Pretoria", "(UTC+01:00) West Central Africa", "(UTC+02:00) Athens, Bucharest", "(UTC+03:00) Kuwait, Riyadh", "(UTC+07:00) Bangkok, Hanoi, Jakarta", "(UTC+04:00) Abu Dhabi, Muscat", "(UTC+12:00) Auckland, Wellington", "(UTC-03:00) City of Buenos Aires", "(UTC-05:00) Bogota, Lima, Quito, Rio Branco", "(UTC-08:00) Pacific Time (US & Canada)", "(UTC-05:00) Indiana (East)", "(UTC-06:00) Central Time (US & Canada)", "(UTC-05:00) Eastern Time (US & Canada)", "(UTC-07:00) Mountain Time (US & Canada)", "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan", "(UTC+05:00) Ashgabat, Tashkent", "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi", "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "(UTC+06:00) Dhaka", "(UTC+06:00) Astana", "(UTC+05:45) Kathmandu", "(UTC+02:00) Jerusalem", "(UTC+08:00) Kuala Lumpur, Singapore", "(UTC+08:00) Ulaanbaatar", "(UTC) Dublin, Edinburgh, Lisbon, London", "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", "(UTC+10:00) Canberra, Melbourne, Sydney", "(UTC+09:30) Darwin", "(UTC+10:00) Brisbane", "(UTC+09:30) Adelaide", "(UTC+10:00) Hobart", "(UTC+08:00) Perth", "(UTC-02:00) Coordinated Universal Time-02", "(UTC-03:00) Brasilia", "(UTC-04:00) Atlantic Time (Canada)", "(UTC-06:00) Saskatchewan", "(UTC-03:30) Newfoundland", "(UTC-03:00) Santiago", "(UTC+02:00) Cairo", "UTC", "(UTC+03:30) Tehran", "(UTC+09:00) Osaka, Sapporo, Tokyo", "(UTC+12:00) Coordinated Universal Time+12", "(UTC+02:00) Tripoli", "(UTC-07:00) Chihuahua, La Paz, Mazatlan", "(UTC-06:00) Guadalajara, Mexico City, Monterrey", "(UTC+11:00) Solomon Is., New Caledonia", "(UTC-11:00) Coordinated Universal Time-11", "(UTC+10:00) Guam, Port Moresby", "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb", "(UTC+08:00) Taipei", "(UTC+09:00) Seoul", "(UTC+02:00) Istanbul", "(UTC-09:00) Alaska", "(UTC-07:00) Arizona", "(UTC-10:00) Hawaii", "(UTC+03:00) Moscow, St. Petersburg, Volgograd", "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", "(UTC) Casablanca", "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris", "(UTC+01:00) Windhoek", "(UTC-03:00) Cayenne, Fortaleza", "(UTC-04:00) Asuncion", "(UTC-03:00) Salvador", "(UTC-06:00) Central America", "(UTC-04:00) Cuiaba", "(UTC-04:30) Caracas", "(UTC-03:00) Greenland", "(UTC-03:00) Montevideo", "(UTC-08:00) Baja California", "(UTC-01:00) Azores", "(UTC+02:00) Amman", "(UTC+10:00) Magadan", "(UTC+03:00) Baghdad", "(UTC+04:00) Baku", "(UTC+02:00) Beirut", "(UTC+09:00) Yakutsk", "(UTC+05:30) Sri Jayawardenepura", "(UTC+02:00) Damascus", "(UTC+08:00) Irkutsk", "(UTC+04:30) Kabul", "(UTC+05:00) Islamabad, Karachi", "(UTC+07:00) Krasnoyarsk", "(UTC+06:00) Novosibirsk", "(UTC+06:30) Yangon (Rangoon)", "(UTC+10:00) Vladivostok", "(UTC+04:00) Tbilisi", "(UTC+05:00) Ekaterinburg", "(UTC+04:00) Yerevan", "(UTC-01:00) Cabo Verde Is.", "(UTC-12:00) International Date Line West", "(UTC+13:00) Nuku'alofa", "(UTC+14:00) Kiritimati Island", "(UTC+02:00) Kaliningrad", "(UTC+04:00) Port Louis", "(UTC+13:00) Samoa", "(UTC+12:00) Fiji", "(UTC+8:45) Eucla", "(UTC+10:30) Lord Howe Island"];
        var timezones = [{
            id: "Africa/Bamako",
            title: "Bamako",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Banjul",
            title: "Banjul",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Conakry",
            title: "Conakry",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Dakar",
            title: "Dakar",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Freetown",
            title: "Freetown",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Lome",
            title: "Lome",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Nouakchott",
            title: "Nouakchott",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Ouagadougou",
            title: "Ouagadougou",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Sao_Tome",
            title: "Sao Tome",
            winIndex: 0,
            link: 185
        }, {
            id: "Atlantic/St_Helena",
            title: "St Helena",
            winIndex: 0,
            link: 185
        }, {
            id: "Africa/Addis_Ababa",
            title: "Addis Ababa",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Asmara",
            title: "Asmara",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Dar_es_Salaam",
            title: "Dar es Salaam",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Djibouti",
            title: "Djibouti",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Kampala",
            title: "Kampala",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Mogadishu",
            title: "Mogadishu",
            winIndex: 1,
            link: 198
        }, {
            id: "Indian/Antananarivo",
            title: "Antananarivo",
            winIndex: 1,
            link: 198
        }, {
            id: "Indian/Comoro",
            title: "Comoro",
            winIndex: 1,
            link: 198
        }, {
            id: "Indian/Mayotte",
            title: "Mayotte",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Blantyre",
            title: "Blantyre",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Bujumbura",
            title: "Bujumbura",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Gaborone",
            title: "Gaborone",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Harare",
            title: "Harare",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Kigali",
            title: "Kigali",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Lubumbashi",
            title: "Lubumbashi",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Lusaka",
            title: "Lusaka",
            winIndex: 2,
            link: 196
        }, {
            id: "Africa/Bangui",
            title: "Bangui",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Brazzaville",
            title: "Brazzaville",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Douala",
            title: "Douala",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Kinshasa",
            title: "Kinshasa",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Libreville",
            title: "Libreville",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Luanda",
            title: "Luanda",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Malabo",
            title: "Malabo",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Niamey",
            title: "Niamey",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Porto-Novo",
            title: "Porto-Novo",
            winIndex: 3,
            link: 195
        }, {
            id: "Africa/Maseru",
            title: "Maseru",
            winIndex: 2,
            link: 193
        }, {
            id: "Africa/Mbabane",
            title: "Mbabane",
            winIndex: 2,
            link: 193
        }, {
            id: "Africa/Juba",
            title: "Juba",
            winIndex: 1,
            link: 194
        }, {
            id: "Europe/Nicosia",
            title: "Nicosia",
            winIndex: 4,
            link: 381
        }, {
            id: "Asia/Bahrain",
            title: "Bahrain",
            winIndex: 5,
            link: 388
        }, {
            id: "Asia/Aden",
            title: "Aden",
            winIndex: 5,
            link: 391
        }, {
            id: "Asia/Kuwait",
            title: "Kuwait",
            winIndex: 5,
            link: 391
        }, {
            id: "Asia/Phnom_Penh",
            title: "Phnom Penh",
            winIndex: 6,
            link: 349
        }, {
            id: "Asia/Vientiane",
            title: "Vientiane",
            winIndex: 6,
            link: 349
        }, {
            id: "Asia/Muscat",
            title: "Muscat",
            winIndex: 7,
            link: 359
        }, {
            id: "Antarctica/McMurdo",
            title: "McMurdo",
            winIndex: 8,
            link: 511
        }, {
            id: "Africa/Asmera",
            title: "Asmera",
            winIndex: 1,
            link: 198
        }, {
            id: "Africa/Timbuktu",
            title: "Timbuktu",
            winIndex: 0,
            link: 185
        }, {
            id: "America/Buenos_Aires",
            title: "Buenos Aires",
            winIndex: 9,
            link: 206
        }, {
            id: "America/Catamarca",
            title: "Catamarca",
            winIndex: 9,
            link: 207
        }, {
            id: "America/Coral_Harbour",
            title: "Coral Harbour",
            winIndex: 10,
            link: 219
        }, {
            id: "America/Cordoba",
            title: "Cordoba",
            winIndex: 9,
            link: 208
        }, {
            id: "America/Ensenada",
            title: "Ensenada",
            winIndex: 11,
            link: 325
        }, {
            id: "America/Indianapolis",
            title: "Indianapolis",
            winIndex: 12
        }, {
            id: "America/Jujuy",
            title: "Jujuy",
            winIndex: 9,
            link: 209
        }, {
            id: "America/Knox_IN",
            title: "Knox IN",
            winIndex: 13,
            link: 261
        }, {
            id: "America/Louisville",
            title: "Louisville",
            winIndex: 14,
            link: 272
        }, {
            id: "America/Mendoza",
            title: "Mendoza",
            winIndex: 9,
            link: 211
        }, {
            id: "America/Porto_Acre",
            title: "Porto Acre",
            winIndex: 10,
            link: 312
        }, {
            id: "America/Shiprock",
            title: "Shiprock",
            winIndex: 15,
            link: 244
        }, {
            id: "America/Virgin",
            title: "Virgin",
            winIndex: 16,
            link: 303
        }, {
            id: "Antarctica/South_Pole",
            title: "South Pole",
            winIndex: 8,
            link: 511
        }, {
            id: "Asia/Ashkhabad",
            title: "Ashkhabad",
            winIndex: 17,
            link: 346
        }, {
            id: "Asia/Calcutta",
            title: "Calcutta",
            winIndex: 18,
            link: 373
        }, {
            id: "Asia/Chongqing",
            title: "Chongqing",
            winIndex: 19,
            link: 395
        }, {
            id: "Asia/Chungking",
            title: "Chungking",
            winIndex: 19,
            link: 395
        }, {
            id: "Asia/Dacca",
            title: "Dacca",
            winIndex: 20,
            link: 357
        }, {
            id: "Asia/Harbin",
            title: "Harbin",
            winIndex: 19,
            link: 395
        }, {
            id: "Asia/Kashgar",
            title: "Kashgar",
            winIndex: 21,
            link: 405
        }, {
            id: "Asia/Katmandu",
            title: "Katmandu",
            winIndex: 22,
            link: 371
        }, {
            id: "Asia/Macao",
            title: "Macao",
            winIndex: 19,
            link: 377
        }, {
            id: "Asia/Saigon",
            title: "Saigon",
            winIndex: 6,
            link: 361
        }, {
            id: "Asia/Tel_Aviv",
            title: "Tel Aviv",
            winIndex: 23,
            link: 367
        }, {
            id: "Asia/Thimbu",
            title: "Thimbu",
            winIndex: 20,
            link: 402
        }, {
            id: "Asia/Ujung_Pandang",
            title: "Ujung Pandang",
            winIndex: 24,
            link: 379
        }, {
            id: "Asia/Ulan_Bator",
            title: "Ulan Bator",
            winIndex: 25,
            link: 404
        }, {
            id: "Atlantic/Faeroe",
            title: "Faeroe",
            winIndex: 26,
            link: 415
        }, {
            id: "Atlantic/Jan_Mayen",
            title: "Jan Mayen",
            winIndex: 27,
            link: 483
        }, {
            id: "Australia/ACT",
            title: "ACT",
            winIndex: 28,
            link: 429
        }, {
            id: "Australia/Canberra",
            title: "Canberra",
            winIndex: 28,
            link: 429
        }, {
            id: "Australia/NSW",
            title: "NSW",
            winIndex: 28,
            link: 429
        }, {
            id: "Australia/North",
            title: "North",
            winIndex: 29,
            link: 424
        }, {
            id: "Australia/Queensland",
            title: "Queensland",
            winIndex: 30,
            link: 421
        }, {
            id: "Australia/South",
            title: "South",
            winIndex: 31,
            link: 420
        }, {
            id: "Australia/Tasmania",
            title: "Tasmania",
            winIndex: 32,
            link: 425
        }, {
            id: "Australia/Victoria",
            title: "Victoria",
            winIndex: 28,
            link: 427
        }, {
            id: "Australia/West",
            title: "West",
            winIndex: 33,
            link: 428
        }, {
            id: "Australia/Yancowinna",
            title: "Yancowinna",
            winIndex: 31,
            link: 422
        }, {
            id: "Brazil/Acre",
            title: "Acre",
            winIndex: 10,
            link: 312
        }, {
            id: "Brazil/DeNoronha",
            title: "DeNoronha",
            winIndex: 34,
            link: 294
        }, {
            id: "Brazil/East",
            title: "East",
            winIndex: 35,
            link: 317
        }, {
            id: "Brazil/West",
            title: "West",
            winIndex: 16,
            link: 279
        }, {
            id: "Canada/Atlantic",
            title: "Atlantic",
            winIndex: 36,
            link: 257
        }, {
            id: "Canada/Central",
            title: "Central",
            winIndex: 13,
            link: 329
        }, {
            id: "Canada/East-Saskatchewan",
            title: "East-Saskatchewan",
            winIndex: 37,
            link: 310
        }, {
            id: "Canada/Eastern",
            title: "Eastern",
            winIndex: 14,
            link: 326
        }, {
            id: "Canada/Mountain",
            title: "Mountain",
            winIndex: 15,
            link: 246
        }, {
            id: "Canada/Newfoundland",
            title: "Newfoundland",
            winIndex: 38,
            link: 320
        }, {
            id: "Canada/Pacific",
            title: "Pacific",
            winIndex: 11,
            link: 327
        }, {
            id: "Canada/Saskatchewan",
            title: "Saskatchewan",
            winIndex: 37,
            link: 310
        }, {
            id: "Canada/Yukon",
            title: "Yukon",
            winIndex: 11,
            link: 328
        }, {
            id: "Chile/Continental",
            title: "Continental",
            winIndex: 39,
            link: 315
        }, {
            id: "Cuba",
            title: "Cuba",
            winIndex: 14,
            link: 258
        }, {
            id: "Egypt",
            title: "Egypt",
            winIndex: 40,
            link: 189
        }, {
            id: "Eire",
            title: "Eire",
            winIndex: 26,
            link: 469
        }, {
            id: "Europe/Belfast",
            title: "Belfast",
            winIndex: 26,
            link: 476
        }, {
            id: "Europe/Tiraspol",
            title: "Tiraspol",
            winIndex: 4,
            link: 467
        }, {
            id: "GB",
            title: "GB",
            winIndex: 26,
            link: 476
        }, {
            id: "GB-Eire",
            title: "GB-Eire",
            winIndex: 26,
            link: 476
        }, {
            id: "GMT+0",
            title: "GMT+0",
            winIndex: 41,
            link: 150
        }, {
            id: "GMT-0",
            title: "GMT-0",
            winIndex: 41,
            link: 150
        }, {
            id: "GMT0",
            title: "GMT0",
            winIndex: 41,
            link: 150
        }, {
            id: "Greenwich",
            title: "Greenwich",
            winIndex: 41,
            link: 150
        }, {
            id: "Hongkong",
            title: "Hongkong",
            winIndex: 19,
            link: 362
        }, {
            id: "Iceland",
            title: "Iceland",
            winIndex: 0,
            link: 417
        }, {
            id: "Iran",
            title: "Iran",
            winIndex: 42,
            link: 401
        }, {
            id: "Israel",
            title: "Israel",
            winIndex: 23,
            link: 367
        }, {
            id: "Jamaica",
            title: "Jamaica",
            winIndex: 10,
            link: 270
        }, {
            id: "Japan",
            title: "Japan",
            winIndex: 43,
            link: 403
        }, {
            id: "Kwajalein",
            title: "Kwajalein",
            winIndex: 44,
            link: 524
        }, {
            id: "Libya",
            title: "Libya",
            winIndex: 45,
            link: 200
        }, {
            id: "Mexico/BajaNorte",
            title: "BajaNorte",
            winIndex: 11,
            link: 325
        }, {
            id: "Mexico/BajaSur",
            title: "BajaSur",
            winIndex: 46,
            link: 282
        }, {
            id: "Mexico/General",
            title: "General",
            winIndex: 47,
            link: 285
        }, {
            id: "NZ",
            title: "NZ",
            winIndex: 8,
            link: 511
        }, {
            id: "Navajo",
            title: "Navajo",
            winIndex: 15,
            link: 244
        }, {
            id: "PRC",
            title: "PRC",
            winIndex: 19,
            link: 395
        }, {
            id: "Pacific/Ponape",
            title: "Ponape",
            winIndex: 48,
            link: 532
        }, {
            id: "Pacific/Samoa",
            title: "Samoa",
            winIndex: 49,
            link: 530
        }, {
            id: "Pacific/Truk",
            title: "Truk",
            winIndex: 50,
            link: 512
        }, {
            id: "Poland",
            title: "Poland",
            winIndex: 51,
            link: 498
        }, {
            id: "Portugal",
            title: "Portugal",
            winIndex: 26,
            link: 475
        }, {
            id: "ROC",
            title: "ROC",
            winIndex: 52,
            link: 398
        }, {
            id: "ROK",
            title: "ROK",
            winIndex: 53,
            link: 394
        }, {
            id: "Singapore",
            title: "Singapore",
            winIndex: 24,
            link: 396
        }, {
            id: "Turkey",
            title: "Turkey",
            winIndex: 54,
            link: 472
        }, {
            id: "US/Alaska",
            title: "Alaska",
            winIndex: 55,
            link: 203
        }, {
            id: "US/Arizona",
            title: "Arizona",
            winIndex: 56,
            link: 302
        }, {
            id: "US/Central",
            title: "Central",
            winIndex: 13,
            link: 235
        }, {
            id: "US/Eastern",
            title: "Eastern",
            winIndex: 14,
            link: 291
        }, {
            id: "US/Hawaii",
            title: "Hawaii",
            winIndex: 57,
            link: 521
        }, {
            id: "US/Indiana-Starke",
            title: "Indiana-Starke",
            winIndex: 13,
            link: 261
        }, {
            id: "US/Michigan",
            title: "Michigan",
            winIndex: 14,
            link: 245
        }, {
            id: "US/Mountain",
            title: "Mountain",
            winIndex: 15,
            link: 244
        }, {
            id: "US/Pacific",
            title: "Pacific",
            winIndex: 11,
            link: 276
        }, {
            id: "US/Samoa",
            title: "Samoa",
            winIndex: 49,
            link: 530
        }, {
            id: "W-SU",
            title: "W-SU",
            winIndex: 58,
            link: 482
        }, {
            id: "GMT",
            title: "GMT",
            winIndex: 41,
            link: 150
        }, {
            id: "Etc/Greenwich",
            title: "Greenwich",
            winIndex: 41,
            link: 150
        }, {
            id: "Etc/GMT-0",
            title: "GMT-0",
            winIndex: 41,
            link: 150
        }, {
            id: "Etc/GMT+0",
            title: "GMT+0",
            winIndex: 41,
            offsets: [0],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT0",
            title: "GMT0",
            winIndex: 41,
            link: 150
        }, {
            id: "Europe/Jersey",
            title: "Jersey",
            winIndex: 26,
            link: 476
        }, {
            id: "Europe/Guernsey",
            title: "Guernsey",
            winIndex: 26,
            link: 476
        }, {
            id: "Europe/Isle_of_Man",
            title: "Isle of Man",
            winIndex: 26,
            link: 476
        }, {
            id: "Europe/Mariehamn",
            title: "Mariehamn",
            winIndex: 59,
            link: 471
        }, {
            id: "Europe/Busingen",
            title: "Busingen",
            winIndex: 27,
            link: 500
        }, {
            id: "Europe/Vatican",
            title: "Vatican",
            winIndex: 27,
            link: 487
        }, {
            id: "Europe/San_Marino",
            title: "San Marino",
            winIndex: 27,
            link: 487
        }, {
            id: "Europe/Vaduz",
            title: "Vaduz",
            winIndex: 27,
            link: 500
        }, {
            id: "Arctic/Longyearbyen",
            title: "Longyearbyen",
            winIndex: 27,
            link: 483
        }, {
            id: "Europe/Ljubljana",
            title: "Ljubljana",
            winIndex: 60,
            link: 462
        }, {
            id: "Europe/Podgorica",
            title: "Podgorica",
            winIndex: 60,
            link: 462
        }, {
            id: "Europe/Sarajevo",
            title: "Sarajevo",
            winIndex: 60,
            link: 462
        }, {
            id: "Europe/Skopje",
            title: "Skopje",
            winIndex: 60,
            link: 462
        }, {
            id: "Europe/Zagreb",
            title: "Zagreb",
            winIndex: 60,
            link: 462
        }, {
            id: "Europe/Bratislava",
            title: "Bratislava",
            winIndex: 60,
            link: 485
        }, {
            id: "Asia/Istanbul",
            title: "Istanbul",
            winIndex: 54,
            link: 472
        }, {
            id: "Pacific/Johnston",
            title: "Johnston",
            winIndex: 57,
            link: 521
        }, {
            id: "US/Pacific-New",
            title: "Pacific-New",
            winIndex: 11,
            link: 276
        }, {
            id: "America/Aruba",
            title: "Aruba",
            winIndex: 16,
            link: 240
        }, {
            id: "America/Lower_Princes",
            title: "Lower Princes",
            winIndex: 16,
            link: 240
        }, {
            id: "America/Kralendijk",
            title: "Kralendijk",
            winIndex: 16,
            link: 240
        }, {
            id: "America/Anguilla",
            title: "Anguilla",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Dominica",
            title: "Dominica",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Grenada",
            title: "Grenada",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Guadeloupe",
            title: "Guadeloupe",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Marigot",
            title: "Marigot",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Montserrat",
            title: "Montserrat",
            winIndex: 16,
            link: 303
        }, {
            id: "America/St_Barthelemy",
            title: "St Barthelemy",
            winIndex: 16,
            link: 303
        }, {
            id: "America/St_Kitts",
            title: "St Kitts",
            winIndex: 16,
            link: 303
        }, {
            id: "America/St_Lucia",
            title: "St Lucia",
            winIndex: 16,
            link: 303
        }, {
            id: "America/St_Thomas",
            title: "St Thomas",
            winIndex: 16,
            link: 303
        }, {
            id: "America/St_Vincent",
            title: "St Vincent",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Tortola",
            title: "Tortola",
            winIndex: 16,
            link: 303
        }, {
            id: "Africa/Abidjan",
            title: "Abidjan",
            winIndex: 0,
            offsets: [-.2688888888888889, 0],
            offsetIndices: "01",
            untils: "-u9rgl4|Infinity"
        }, {
            id: "Africa/Accra",
            title: "Accra",
            winIndex: 0,
            offsets: [-.014444444444444446, 0, .3333333333333333],
            offsetIndices: "012121212121212121212121212121212121212121212121",
            untils: "-r507yk|1e3pak|681qo|cjvlc|681qo|cjvlc|681qo|cjvlc|681qo|clq9c|681qo|cjvlc|681qo|cjvlc|681qo|cjvlc|681qo|clq9c|681qo|cjvlc|681qo|cjvlc|681qo|cjvlc|681qo|clq9c|681qo|cjvlc|681qo|cjvlc|681qo|cjvlc|681qo|clq9c|681qo|cjvlc|681qo|cjvlc|681qo|cjvlc|681qo|clq9c|681qo|cjvlc|681qo|cjvlc|681qo|Infinity"
        }, {
            id: "Africa/Algiers",
            title: "Algiers",
            winIndex: 3,
            offsets: [.15583333333333332, 0, 1, 2],
            offsetIndices: "0121212121212121232321212122321212",
            untils: "-uozn3l|2qx1nl|5luo0|8y800|a4tc0|7vc00|auqo0|7idc0|b7pc0|6sg00|cyo00|7ayo0|53c00|9idxc0|3i040|51mw0|253uk0|9o2k0|92040|8l3s0|jutc0|4uy840|3rdzw0|46xc00|7x6o0|2xco40|8n180|7x9g0|9d440|kiqg0|9d440|9q2s0|9cyk0|Infinity"
        }, {
            id: "Africa/Bissau",
            title: "Bissau",
            winIndex: 0,
            offsets: [-1.038888888888889, -1, 0],
            offsetIndices: "012",
            untils: "-u9reg4|wvoyk4|Infinity"
        }, {
            id: "Africa/Cairo",
            title: "Cairo",
            winIndex: 40,
            offsets: [2, 3],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-fdls80|40d80|a31g0|7x3w0|a4w40|aqyk0|80ys0|b07w0|7tk40|b07w0|8jhg0|a8fw0|60go40|7el80|awo40|7v980|awqw0|7tk40|b07w0|7tk40|ayd80|7tk40|ayd80|7tk40|ayd80|7tk40|b07w0|7tk40|ayd80|7tk40|ayd80|7ves0|awik0|7ves0|ayd80|7ves0|awik0|7ves0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|awik0|7ves0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|awik0|7ves0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|awik0|7ves0|f9x80|3i040|eluk0|462s0|ayd80|7ves0|awik0|7ves0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|b5rw0|7m5g0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|awik0|7ves0|awik0|7ves0|aqvs0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7k580|b5xg0|6u7w0|bvus0|6h980|c8tg0|64ak0|cyqs0|5anw0|1jms0|12t80|1w22s0|25p80|1sw40|2vmk0|Infinity"
        }, {
            id: "Africa/Casablanca",
            title: "Casablanca",
            winIndex: 61,
            offsets: [-.5055555555555555, 0, 1],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-tblt9g|di7nxg|3huk0|51k40|2znuk0|2dp9g0|776k0|8nt2s0|657w0|3ifxg0|3jp80|va040|4qak0|e1ms0|7pp80|cnms0|3afw0|2xi840|xqqk0|bp56s0|4qak0|e1ms0|45x80|d2g40|51ek0|c8tg0|64ak0|e1sc0|47uo0|1leo0|23xc0|asw00|3lmo0|1qyo0|40g00|7x6o0|4mo00|1stc0|4deo0|7x6o0|3ylc0|1stc0|51hc0|7x6o0|3lmo0|1stc0|5reo0|7k800|2vpc0|25s00|64dc0|7k800|2iqo0|1stc0|6uao0|7x6o0|1stc0|1stc0|779c0|7x6o0|12w00|1stc0|7x6o0|7x6o0|pxc0|1stc0|8n400|9q000|902o0|902o0|9q000|8n400|a2yo0|8a5c0|afxc0|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|afxc0|8a5c0|9q000|Infinity"
        }, {
            id: "Africa/Ceuta",
            title: "Ceuta",
            winIndex: 62,
            offsets: [0, 1, 2],
            offsetIndices: "010101010101010101010121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-qyiys0|7x3w0|2vt440|8so00|st1c0|8n400|9q000|902o0|a2yo0|902o0|k69g40|657w0|3ifxg0|3jp80|va040|4qak0|e1ms0|7pp80|cnms0|3afw0|2xi840|129us0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Africa/El_Aaiun",
            title: "El Aaiun",
            winIndex: 61,
            offsets: [-.88, -1, 0, 1],
            offsetIndices: "01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-isdxk0|m2g0c0|vek0|4qak0|e1ms0|7pp80|cnms0|3afw0|fke5g0|4qak0|e1ms0|45x80|d2g40|51ek0|c8tg0|64ak0|e1sc0|47uo0|1leo0|23xc0|asw00|3lmo0|1qyo0|40g00|7x6o0|4mo00|1stc0|4deo0|7x6o0|3ylc0|1stc0|51hc0|7x6o0|3lmo0|1stc0|5reo0|7k800|2vpc0|25s00|64dc0|7k800|2iqo0|1stc0|6uao0|7x6o0|1stc0|1stc0|779c0|7x6o0|12w00|1stc0|7x6o0|7x6o0|pxc0|1stc0|8n400|9q000|902o0|902o0|9q000|8n400|a2yo0|8a5c0|afxc0|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|afxc0|8a5c0|9q000|Infinity"
        }, {
            id: "Africa/Johannesburg",
            title: "Johannesburg",
            winIndex: 2,
            offsets: [1.5, 2, 3],
            offsetIndices: "012121",
            untils: "-yvtdi0|kn7o60|9cyk0|9d440|9cyk0|Infinity"
        }, {
            id: "Africa/Khartoum",
            title: "Khartoum",
            winIndex: 1,
            offsets: [2.1688888888888886, 2, 3],
            offsetIndices: "01212121212121212121212121212121212",
            untils: "-kcrsow|kixv4w|8l6k0|a4w40|8n180|a6qs0|8n180|a31g0|8ovw0|a16s0|8qqk0|9zc40|8sl80|9xhg0|8wak0|9ts40|8y580|a4w40|8n180|a31g0|8ovw0|a16s0|8sl80|9xhg0|8ufw0|9vms0|8wak0|9ts40|8y580|a4w40|8ovw0|a16s0|8qqk0|7frw40|Infinity"
        }, {
            id: "Africa/Lagos",
            title: "Lagos",
            winIndex: 3,
            offsets: [.22666666666666666, 1],
            offsetIndices: "01",
            untils: "-q9qbao|Infinity"
        }, {
            id: "Africa/Maputo",
            title: "Maputo",
            winIndex: 2,
            offsets: [2.1722222222222225, 2],
            offsetIndices: "01",
            untils: "-yvtfd8|Infinity"
        }, {
            id: "Africa/Monrovia",
            title: "Monrovia",
            winIndex: 0,
            offsets: [-.7188888888888889, -.7416666666666667, 0],
            offsetIndices: "012",
            untils: "-qj6zc4|rqyyqa|Infinity"
        }, {
            id: "Africa/Nairobi",
            title: "Nairobi",
            winIndex: 1,
            offsets: [2.454444444444445, 3, 2.5, 2.75],
            offsetIndices: "01231",
            untils: "-lnsetg|s8mhg|57v020|afrrb0|Infinity"
        }, {
            id: "Africa/Ndjamena",
            title: "Ndjamena",
            winIndex: 3,
            offsets: [1.0033333333333334, 1, 2],
            offsetIndices: "0121",
            untils: "-u9rk4c|zdk5cc|7iak0|Infinity"
        }, {
            id: "Africa/Tripoli",
            title: "Tripoli",
            winIndex: 45,
            offsets: [.8788888888888889, 1, 2],
            offsetIndices: "012121212121212121212121212122122",
            untils: "-q3gfrw|gl6ajw|422c0|xado0|4bbo0|wrpg0|4s580|1kdpg0|c05bw0|4mqs0|9et80|9d440|9et80|9eys0|9et80|9mdg0|95jw0|9io40|9cyk0|99es0|9et80|9eys0|9et80|9d440|9et80|b2840|3cf3w0|9kis0|9et80|7vqyw0|75eo0|asw00|Infinity"
        }, {
            id: "Africa/Tunis",
            title: "Tunis",
            winIndex: 3,
            offsets: [.15583333333333332, 1, 2],
            offsetIndices: "0121212121212121212121212121212121",
            untils: "-uozn3l|enxevl|b5uo0|53c00|u8w00|7x9g0|c8w80|7k800|z3w0|ew40|8bx80|9d440|9nx00|925o0|8l100|gi3440|7k800|b9k00|7vc00|51mw00|5ytc0|9d1c0|9d1c0|b9k00|7thc0|7m0tc0|7tk40|93us0|b5uo0|7k800|b5uo0|7x6o0|asw00|Infinity"
        }, {
            id: "Africa/Windhoek",
            title: "Windhoek",
            winIndex: 63,
            offsets: [1.5, 2, 3, 1],
            offsetIndices: "012113131313131313131313131313131313131313131313131313131313131313131313131313131313131313131",
            untils: "-yvtdi0|kn7o60|9cyk0|oj2nw0|23tmo0|7xf00|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7x9g0|ast80|7x9g0|Infinity"
        }, {
            id: "America/Anchorage",
            title: "Anchorage",
            winIndex: 55,
            offsets: [-10, -9, -8],
            offsetIndices: "011001010101010101010101010101010111212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-ek1qo0|1tyx80|2e400|b7yik0|12y080|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|1l940|7rs80|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Antigua",
            title: "Antigua",
            winIndex: 16,
            link: 303
        }, {
            id: "America/Araguaina",
            title: "Araguaina",
            winIndex: 64,
            offsets: [-3.2133333333333334, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212121212121",
            untils: "-t85j2o|99k8mo|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|2yl440|64ak0|c8tg0|6u7w0|bxpg0|7iak0|biw40|6u7w0|biw40|7k580|biw40|6u7w0|c8tg0|6h980|dbpg0|5ed80|51udg0|64ak0|Infinity"
        }, {
            id: "America/Argentina/Buenos_Aires",
            title: "Buenos Aires",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323232323232223232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvus0|6u7w0|bvus0|776k0|3fidg0|7thc0|430lc0|3yik0|b5xg0|7k580|Infinity"
        }, {
            id: "America/Argentina/Catamarca",
            title: "Catamarca",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323232313232221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvxk0|6u540|bvus0|776k0|3fidg0|7thc0|27s800|z9g0|1u93w0|3yik0|Infinity"
        }, {
            id: "America/Argentina/Cordoba",
            title: "Cordoba",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323232313232223232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvxk0|6u540|bvus0|776k0|3fidg0|7thc0|430lc0|3yik0|b5xg0|7k580|Infinity"
        }, {
            id: "America/Argentina/Jujuy",
            title: "Jujuy",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212123232312132322232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|c8w80|776k0|ag040|7k2g0|bvus0|776k0|3fidg0|7thc0|430lc0|3yik0|Infinity"
        }, {
            id: "America/Argentina/La_Rioja",
            title: "La Rioja",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212123232323123232221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6qik0|3g880|8jbw0|6u7w0|bvus0|776k0|3fidg0|7thc0|27s800|z9g0|1u93w0|3yik0|Infinity"
        }, {
            id: "America/Argentina/Mendoza",
            title: "Mendoza",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323231212132221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bktk0|71mk0|bqas0|73h80|bvus0|773s0|3fidg0|7thc0|27bk00|6hes0|1p7mk0|3yik0|Infinity"
        }, {
            id: "America/Argentina/Rio_Gallegos",
            title: "Rio Gallegos",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323232323232221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvus0|6u7w0|bvus0|776k0|3fidg0|7thc0|27s800|z9g0|1u93w0|3yik0|Infinity"
        }, {
            id: "America/Argentina/Salta",
            title: "Salta",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212123232323132322232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvxk0|6u540|bvus0|776k0|3fidg0|7thc0|430lc0|3yik0|Infinity"
        }, {
            id: "America/Argentina/San_Juan",
            title: "San Juan",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212123232323123232221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6qik0|3g880|8jbw0|6u7w0|bvus0|776k0|3fidg0|7thc0|27qdc0|2txg0|1sgak0|3yik0|Infinity"
        }, {
            id: "America/Argentina/San_Luis",
            title: "San Luis",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212123232312122212321212",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|7pp80|b2aw0|71mk0|4qg40|4conw0|7thc0|27qdc0|2txg0|1sgak0|14nw0|2gys0|b5xg0|7k580|b5xg0|Infinity"
        }, {
            id: "America/Argentina/Tucuman",
            title: "Tucuman",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "012121212121212121212121212121212121212121232323231323222123232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvxk0|6u540|bvus0|776k0|3fidg0|7thc0|27s800|mas0|1um2k0|3yik0|b5xg0|7k580|Infinity"
        }, {
            id: "America/Argentina/Ushuaia",
            title: "Ushuaia",
            winIndex: 9,
            offsets: [-4.28, -4, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212323232323232221232",
            untils: "-px7ys0|5iv8k0|67zw0|a4w40|73h80|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|cls40|66580|cls40|66580|cls40|66580|cls40|67zw0|6a040|hy7w0|6a040|xovw0|3uys0|18nbw0|b0dg0|8ve2k0|3uys0|3yik0|bqas0|71mk0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|7m2qs0|4tzw0|biw40|776k0|bvus0|6u7w0|bvus0|6u7w0|bvus0|776k0|3fidg0|7thc0|27oio0|12ys0|1u93w0|3yik0|Infinity"
        }, {
            id: "America/Asuncion",
            title: "Asuncion",
            winIndex: 65,
            offsets: [-3.844444444444444, -4, -3],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-jy93zk|ldwofk|s4vw0|s6w40|7tek0|b0dg0|7rjw0|b0dg0|7rjw0|b0dg0|9cyk0|9eys0|9et80|9eys0|9cyk0|9eys0|9cyk0|9eys0|9cyk0|9eys0|9et80|9eys0|9cyk0|9eys0|9cyk0|9eys0|9cyk0|9eys0|9et80|9eys0|9cyk0|ahus0|8a2k0|9eys0|9cyk0|9o840|7k580|b7s40|93p80|9gtg0|7nuk0|b42s0|7lzw0|b5xg0|7tek0|b9ms0|776k0|biw40|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|9cyk0|7kas0|b5rw0|7x9g0|ast80|a31g0|7k580|b5xg0|7k580|b5xg0|7k580|biw40|776k0|biw40|776k0|biw40|8zzw0|905g0|9px80|905g0|9px80|9d440|8n180|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|a31g0|8n180|a31g0|8n180|a31g0|Infinity"
        }, {
            id: "America/Atikokan",
            title: "Atikokan",
            winIndex: 10,
            offsets: [-6, -5],
            offsetIndices: "0101111",
            untils: "-qzov40|a2vw0|bfxjw0|pmdk0|1tz8c0|2dsw0|Infinity"
        }, {
            id: "America/Bahia",
            title: "Bahia",
            winIndex: 66,
            offsets: [-2.5677777777777777, -3, -2],
            offsetIndices: "01212121212121212121212121212121212121212121212121212121212121",
            untils: "-t85kv8|99kaf8|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|cyqs0|64ak0|cls40|5rbw0|dbpg0|51ek0|dbpg0|6h980|c8tg0|6h980|c8tg0|64ak0|c8tg0|6u7w0|bxpg0|7iak0|biw40|6u7w0|biw40|7k580|biw40|6u7w0|c8tg0|6h980|dbpg0|5ed80|4irc40|6u7w0|Infinity"
        }, {
            id: "America/Bahia_Banderas",
            title: "Bahia Banderas",
            winIndex: 47,
            offsets: [-7.016666666666667, -7, -6, -8, -5],
            offsetIndices: "0121212131212121212121212121212121212142424242424242424242424242424242424242424242424242424242",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|591h80|3ie2s0|axvpg0|dpgw40|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|asqg0|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Barbados",
            title: "Barbados",
            winIndex: 16,
            offsets: [-3.974722222222222, -4, -3],
            offsetIndices: "00121212121",
            untils: "-o0aiaj|46b400|npv1mj|5rbw0|a31g0|8n180|a31g0|8n180|ag040|84ik0|Infinity"
        }, {
            id: "America/Belem",
            title: "Belem",
            winIndex: 64,
            offsets: [-3.232222222222222, -3, -2],
            offsetIndices: "012121212121212121212121212121",
            untils: "-t85j0s|99k8ks|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|Infinity"
        }, {
            id: "America/Belize",
            title: "Belize",
            winIndex: 67,
            offsets: [-5.88, -6, -5.5, -5],
            offsetIndices: "01212121212121212121212121212121212121212121212121213131",
            untils: "-u52ic0|3edkc0|6ham0|c8s20|6u9a0|bvte0|6u9a0|bvte0|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|bvte0|6u9a0|bvte0|6u9a0|bvte0|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|bvte0|6u9a0|bvte0|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|bvte0|6u9a0|bvte0|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|bvte0|6u9a0|g2t2q0|3e580|4mcys0|2vmk0|Infinity"
        }, {
            id: "America/Blanc-Sablon",
            title: "Blanc-Sablon",
            winIndex: 16,
            offsets: [-4, -3],
            offsetIndices: "010110",
            untils: "-qzp0o0|a2vw0|c5jxg0|1tzdw0|2dnc0|Infinity"
        }, {
            id: "America/Boa_Vista",
            title: "Boa Vista",
            winIndex: 16,
            offsets: [-4.044444444444444, -4, -3],
            offsetIndices: "0121212121212121212121212121212121",
            untils: "-t85grk|99k93k|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|62xk40|7k580|biw40|cvw0|Infinity"
        }, {
            id: "America/Bogota",
            title: "Bogota",
            winIndex: 10,
            offsets: [-4.937777777777778, -5, -4],
            offsetIndices: "0121",
            untils: "-srdoy8|14f1hi8|ha580|Infinity"
        }, {
            id: "America/Boise",
            title: "Boise",
            winIndex: 15,
            offsets: [-8, -7, -6],
            offsetIndices: "0101012212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0emw0|ast80|7x9g0|ast80|1um840|9s7jw0|1tz5k0|2dvo0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|51k40|doik0|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Cambridge_Bay",
            title: "Cambridge Bay",
            winIndex: 15,
            offsets: [0, -7, -6, -5],
            offsetIndices: "0122131212121212121212121212121212121212121212233221212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-q3gdc0|bjeec0|1tz5k0|2dvo0|a7n3w0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x6o0|ast80|ct40|7kj40|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Campo_Grande",
            title: "Campo Grande",
            winIndex: 68,
            offsets: [-3.641111111111111, -4, -3],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-t85hvw|99ka7w|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|cyqs0|64ak0|cls40|5rbw0|dbpg0|51ek0|dbpg0|6h980|c8tg0|6h980|c8tg0|64ak0|c8tg0|6u7w0|bxpg0|7iak0|biw40|6u7w0|biw40|7k580|biw40|6u7w0|c8tg0|6h980|dbpg0|5ed80|cls40|64ak0|dfes0|5nmk0|c8tg0|6h980|dbpg0|5rbw0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|c8tg0|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|Infinity"
        }, {
            id: "America/Cancun",
            title: "Cancun",
            winIndex: 47,
            offsets: [-5.7844444444444445, -6, -5, -4],
            offsetIndices: "0123232321212121212121212121212121212121212",
            untils: "-p1u7c0|vauo00|7ggw40|afuk0|8a840|afuk0|8a840|64ak0|4bms0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|51k40|Infinity"
        }, {
            id: "America/Caracas",
            title: "Caracas",
            winIndex: 69,
            offsets: [-4.461111111111111, -4.5, -4],
            offsetIndices: "01212",
            untils: "-u7lcxw|rlo83w|meoxm0|4dps00|Infinity"
        }, {
            id: "America/Cayenne",
            title: "Cayenne",
            winIndex: 64,
            offsets: [-3.488888888888889, -4, -3],
            offsetIndices: "012",
            untils: "-uj7yb4|tcw6r4|Infinity"
        }, {
            id: "America/Cayman",
            title: "Cayman",
            winIndex: 10,
            link: 299
        }, {
            id: "America/Chicago",
            title: "Chicago",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "01010101010101010101010101010101010101010101010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0esg0|ast80|7x9g0|ast80|bvus0|776k0|7kas0|b5rw0|9d440|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|7x9g0|dbjw0|8a840|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|6w840|1tz8c0|2dsw0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Chihuahua",
            title: "Chihuahua",
            winIndex: 46,
            offsets: [-7.072222222222222, -7, -6, -5],
            offsetIndices: "0121212323221212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|xes2s0|afuk0|8a840|afuk0|8aaw0|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Costa_Rica",
            title: "Costa Rica",
            winIndex: 67,
            offsets: [-5.60361111111111, -6, -5],
            offsetIndices: "0121212121",
            untils: "-pjw8fn|ubtl3n|51ek0|doo40|51ek0|5jso40|8drw0|acas0|2xh80|Infinity"
        }, {
            id: "America/Creston",
            title: "Creston",
            winIndex: 56,
            offsets: [-7, -8],
            offsetIndices: "010",
            untils: "-rshz80|vbus0|Infinity"
        }, {
            id: "America/Cuiaba",
            title: "Cuiaba",
            winIndex: 68,
            offsets: [-3.738888888888889, -4, -3],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-t85hm4|99k9y4|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|cyqs0|64ak0|cls40|5rbw0|dbpg0|51ek0|dbpg0|6h980|c8tg0|6h980|c8tg0|64ak0|c8tg0|6u7w0|bxpg0|7iak0|biw40|6u7w0|biw40|7k580|biw40|6u7w0|c8tg0|6h980|dbpg0|5ed80|w5hg0|5nmk0|c8tg0|6h980|dbpg0|5rbw0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|c8tg0|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|Infinity"
        }, {
            id: "America/Curacao",
            title: "Curacao",
            winIndex: 16,
            offsets: [-4.59638888888889, -4.5, -4],
            offsetIndices: "012",
            untils: "-u7lckd|rlo7qd|Infinity"
        }, {
            id: "America/Danmarkshavn",
            title: "Danmarkshavn",
            winIndex: 41,
            offsets: [-1.2444444444444445, -3, -2, 0],
            offsetIndices: "01212121212121212121212121212121213",
            untils: "-rvusjk|x8nx3k|8zrk0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|53hk0|Infinity"
        }, {
            id: "America/Dawson",
            title: "Dawson",
            winIndex: 11,
            offsets: [-9, -8, -7],
            offsetIndices: "0101011020121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-qzoms0|a2vw0|asys0|882c0|bmiwc0|1tz000|2e180|a7n3w0|9q000|465k00|3e2is0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Dawson_Creek",
            title: "Dawson Creek",
            winIndex: 56,
            offsets: [-8, -7],
            offsetIndices: "0101101010101010101010101010101010101010101010101010101011",
            untils: "-qzopk0|a2vw0|c5jxg0|1tz2s0|2dyg0|tj1g0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|69uk0|Infinity"
        }, {
            id: "America/Denver",
            title: "Denver",
            winIndex: 15,
            offsets: [-7, -6],
            offsetIndices: "01010101011010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0epo0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|2vmk0|ataw40|1tz5k0|2dvo0|a7n9g0|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Detroit",
            title: "Detroit",
            winIndex: 14,
            offsets: [-5.536388888888889, -6, -5, -4],
            offsetIndices: "01233232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-xx8dyd|5eraud|dyeyk0|1tzb40|2dq40|1c9440|7x3w0|9rlhg0|71mk0|2vcg40|9cyk0|3lpg0|f4d80|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Edmonton",
            title: "Edmonton",
            winIndex: 15,
            offsets: [-7.564444444444445, -7, -6],
            offsetIndices: "01212121212121221212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-x1yazk|629ink|a2vw0|8n6s0|29ek0|h6lg0|9px80|905g0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|9l0g40|1tz5k0|2dvo0|tj1g0|7x3w0|a80840|9cyk0|s36s0|9cyk0|1b6840|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Eirunepe",
            title: "Eirunepe",
            winIndex: 10,
            offsets: [-4.657777777777778, -5, -4],
            offsetIndices: "0121212121212121212121212121212121",
            untils: "-t85f28|99ka68|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|2yy2s0|6h980|7hg2s0|2t2t80|Infinity"
        }, {
            id: "America/El_Salvador",
            title: "El Salvador",
            winIndex: 67,
            offsets: [-5.946666666666667, -6, -5],
            offsetIndices: "012121",
            untils: "-pkm4tc|ymao5c|7k580|b5xg0|7k580|Infinity"
        }, {
            id: "America/Fortaleza",
            title: "Fortaleza",
            winIndex: 64,
            offsets: [-2.566666666666667, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121",
            untils: "-t85kvc|99kafc|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|514g40|7k580|biw40|puk0|id6s0|6h980|Infinity"
        }, {
            id: "America/Glace_Bay",
            title: "Glace Bay",
            winIndex: 36,
            offsets: [-3.996666666666667, -4, -3],
            offsetIndices: "012122121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-z94kwc|89fk8c|a2vw0|c5jxg0|1tzdw0|2dnc0|3y8g40|7x3w0|9pa5g0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Godthab",
            title: "Godthab",
            winIndex: 70,
            offsets: [-3.448888888888889, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-rvumf4|x8nqz4|8zrk0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "America/Goose_Bay",
            title: "Goose Bay",
            winIndex: 36,
            offsets: [-3.5144444444444445, -2.5144444444444445, -3.5, -2.5, -4, -3, -2],
            offsetIndices: "010232323232323233232323232323232323232323232323232323232324545454545454545454545454545454545454545454546454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454",
            untils: "-qzp20k|a2vw0|8kjbw0|kzjyk|7k580|b5xg0|7k580|b5xg0|7k580|biw40|776k0|biw40|7k580|b5xg0|7k580|b5xg0|1pb260|2dly0|biw40|7k580|b5xg0|7k580|b5xg0|7k580|b5xg0|7k580|biw40|7k580|ag040|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|6y2s0|22420|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a2lo|afuk0|8a840|asqg0|7xc80|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8tec|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Grand_Turk",
            title: "Grand Turk",
            winIndex: 16,
            offsets: [-5.119722222222222, -5, -4],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212122",
            untils: "-u85og1|z3brw1|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Guatemala",
            title: "Guatemala",
            winIndex: 67,
            offsets: [-6.0344444444444445, -6, -5],
            offsetIndices: "0121212121",
            untils: "-qqqskk|ss0akk|4ofw0|4tidg0|6djw0|3wwas0|8n180|7n5ms0|7x3w0|Infinity"
        }, {
            id: "America/Guayaquil",
            title: "Guayaquil",
            winIndex: 10,
            offsets: [-5.233333333333333, -5],
            offsetIndices: "01",
            untils: "-kcr84o|Infinity"
        }, {
            id: "America/Guyana",
            title: "Guyana",
            winIndex: 16,
            offsets: [-3.8777777777777778, -3.75, -3, -4],
            offsetIndices: "01123",
            untils: "-smcak8|qqnjn8|4sh9c0|81rf90|Infinity"
        }, {
            id: "America/Halifax",
            title: "Halifax",
            winIndex: 36,
            offsets: [-4.24, -4, -3],
            offsetIndices: "0121212121212121212121212121212121212121212121212122121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-z94k80|777go0|9et80|st9o0|a2vw0|ssyk0|5rbw0|cv1g0|69uk0|c6ys0|6kyk0|ci2s0|67zw0|ci2s0|6w2k0|bu040|7lzw0|bu040|66580|bu040|7lzw0|bu040|64ak0|cls40|5v180|cv1g0|6j3w0|c6ys0|79180|b42s0|7lzw0|b42s0|7yyk0|bu040|64ak0|dbpg0|66580|cls40|5ed80|bu040|7lzw0|b42s0|7lzw0|cjxg0|66580|bh1g0|7lzw0|b42s0|7lzw0|6uj00|1tzdw0|2dnc0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|tw040|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|tw040|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|1cm2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Havana",
            title: "Havana",
            winIndex: 14,
            offsets: [-5.493333333333334, -5, -4],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-n7762o|1icfyo|69uk0|62s040|4ofw0|e1ms0|51ek0|e1ms0|4ofw0|1fhs40|4ofw0|e1ms0|4ofw0|9s9k40|67zw0|cedg0|6h980|9o840|7yyk0|b5xg0|7k580|bvus0|9cyk0|9d440|9cyk0|9d440|9px80|9d440|8a2k0|ag040|8bx80|ae5g0|8drw0|acas0|9cyk0|9d440|9px80|905g0|9px80|9q2s0|7x3w0|8a840|ast80|7x9g0|ast80|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|8a2k0|ag040|8a2k0|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|905g0|a2vw0|905g0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|8n400|asw00|7x6o0|b5uo0|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|7x6o0|1cm000|6uao0|bvs00|779c0|bitc0|6uao0|bvs00|779c0|bvs00|779c0|c8qo0|779c0|b5uo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|Infinity"
        }, {
            id: "America/Hermosillo",
            title: "Hermosillo",
            winIndex: 56,
            offsets: [-7.397777777777778, -7, -6, -8],
            offsetIndices: "0121212131212121",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|591h80|3ie2s0|axvpg0|dpgw40|afuk0|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Indiana/Indianapolis",
            title: "Indianapolis",
            winIndex: 12
        }, {
            id: "America/Indiana/Knox",
            title: "Knox",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "0101011010101010101010101010101010101010101010101010101010101010101010101010101010101010111010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|tj1g0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|7x3w0|asys0|7x3w0|asys0|9cyk0|9d440|9px80|9d440|9cyk0|9d440|s3180|1twas0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|7j5400|asw00|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Marengo",
            title: "Marengo",
            winIndex: 12,
            offsets: [-6, -5, -4],
            offsetIndices: "0101011010101010101010101212121212111212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|2wsas0|7x3w0|1c9440|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|465h80|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4g00|64dc0|clmk0|fvt9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Petersburg",
            title: "Petersburg",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "01010110101010101010101010101010101010101010101010111011212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|501ek0|7kas0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|sfzw0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|eu02o0|asw00|6udg0|c8nw0|6hc00|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Tell_City",
            title: "Tell City",
            winIndex: 13,
            offsets: [-6, -5, -4],
            offsetIndices: "01010110101010101010101010101010121211010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|asys0|7x3w0|3fidg0|7x3w0|asys0|7x3w0|b5rw0|7kas0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|7k580|b5xg0|9cyk0|9d440|9cyk0|9d440|2lz980|9cyk0|9d440|9cyk0|ihslg0|asw00|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Vevay",
            title: "Vevay",
            winIndex: 12,
            offsets: [-6, -5, -4],
            offsetIndices: "010101101212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|4gyis0|7txx80|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|hfzhg0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Vincennes",
            title: "Vincennes",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "01010110101010101010101010101010121211011212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|asys0|7x3w0|3fidg0|7x3w0|asys0|7x3w0|b5rw0|7kas0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|7k580|b5xg0|9cyk0|9d440|9cyk0|9d440|2lz980|9cyk0|9d440|9cyk0|ihslg0|asw00|6udg0|c8nw0|6hc00|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Indiana/Winamac",
            title: "Winamac",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "01010110101010101010101010101010101010121211021212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|465h80|9cyk0|9d440|9cyk0|ihslg0|asw00|6udg0|c8l40|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Inuvik",
            title: "Inuvik",
            winIndex: 15,
            offsets: [0, -8, -6, -7],
            offsetIndices: "0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323",
            untils: "-8ve5c0|6fce80|9q000|71i2w0|ipzw0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Iqaluit",
            title: "Iqaluit",
            winIndex: 14,
            offsets: [0, -4, -5, -3, -6],
            offsetIndices: "01123212121212121212121212121212121212121212142212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-eb6ao0|1l3h80|2dq40|a7n3w0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7xc80|ast80|7x6o0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Jamaica",
            title: "Jamaica",
            winIndex: 10,
            offsets: [-5.119722222222222, -5, -4],
            offsetIndices: "0121212121212121212121",
            untils: "-u85og1|wbl181|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|Infinity"
        }, {
            id: "America/Juneau",
            title: "Juneau",
            winIndex: 55,
            offsets: [-8, -7, -9],
            offsetIndices: "01101010101010101010101010001010122020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202",
            untils: "-ek1w80|1tz2s0|2dyg0|cawis0|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9d1c0|9d1c0|9cyk0|9d440|9px80|905g0|9px80|1leo0|7rs80|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Kentucky/Louisville",
            title: "Louisville",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "0101010101101010101010101010101010101121212121212111212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|sg5g0|6bp80|a98o40|7x3w0|6w840|1tz8c0|2dsw0|4s580|7tk40|gxc40|1s3bw0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|4bh80|3j3xc0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4g00|64dc0|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Kentucky/Monticello",
            title: "Monticello",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "0101011010101010101010101010101010101010101010101010101010101010101010101121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|bs6g40|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x6o0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/La_Paz",
            title: "La Paz",
            winIndex: 16,
            offsets: [-4.543333333333334, -3.5433333333333334, -4],
            offsetIndices: "012",
            untils: "-jxzspo|84ik0|Infinity"
        }, {
            id: "America/Lima",
            title: "Lima",
            winIndex: 10,
            offsets: [-5.1433333333333335, -5, -4],
            offsetIndices: "0121212121212121",
            untils: "-w25lpo|fcxjlo|4ml80|93us0|9cyk0|9d440|9cyk0|nw16s0|4ml80|e5c40|4ml80|1fr1g0|4ml80|1yiys0|4ml80|Infinity"
        }, {
            id: "America/Los_Angeles",
            title: "Los Angeles",
            winIndex: 11,
            offsets: [-8, -7],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0emw0|ast80|7x9g0|ast80|bmtus0|1tz2s0|2dyg0|1a3c40|f2ik0|owdg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Maceio",
            title: "Maceio",
            winIndex: 64,
            offsets: [-2.381111111111111, -3, -2],
            offsetIndices: "012121212121212121212121212121212121212121",
            untils: "-t85ldw|99kaxw|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|2yl440|64ak0|1wf1g0|7k580|biw40|puk0|id6s0|6h980|Infinity"
        }, {
            id: "America/Managua",
            title: "Managua",
            winIndex: 67,
            offsets: [-5.753333333333333, -6, -5],
            offsetIndices: "0121212121212121",
            untils: "-ijh6oo|ka1i0o|xqqk0|24p6s0|53980|dmtg0|53980|60itw0|dq240|53es0|235h80|4beis0|8zzw0|at4c0|7x140|Infinity"
        }, {
            id: "America/Manaus",
            title: "Manaus",
            winIndex: 16,
            offsets: [-4.001111111111111, -4, -3],
            offsetIndices: "01212121212121212121212121212121",
            untils: "-t85gvw|99k97w|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|2yy2s0|6h980|Infinity"
        }, {
            id: "America/Martinique",
            title: "Martinique",
            winIndex: 16,
            offsets: [-4.072222222222222, -4, -3],
            offsetIndices: "0121",
            untils: "-umcvcs|zz5x4s|8zzw0|Infinity"
        }, {
            id: "America/Matamoros",
            title: "Matamoros",
            winIndex: 13,
            offsets: [-6.666666666666667, -6, -5],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u7c0|ykt480|ast80|3vppg0|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|77c40|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Mazatlan",
            title: "Mazatlan",
            winIndex: 46,
            offsets: [-7.094444444444445, -7, -6, -8],
            offsetIndices: "0121212131212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|591h80|3ie2s0|axvpg0|dpgw40|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Menominee",
            title: "Menominee",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "01010110101011010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|asys0|7x3w0|a7n9g0|9px80|1at9g0|2396k0|9d1c0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Merida",
            title: "Merida",
            winIndex: 47,
            offsets: [-5.974444444444444, -6, -5],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u7c0|vauo00|hoyk0|6ys0c0|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Mexico_City",
            title: "Mexico City",
            winIndex: 47,
            offsets: [-6.61, -7, -6, -5],
            offsetIndices: "012121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|3knek0|776k0|rf440|5t6k0|1evk40|71mk0|30p1g0|8n180|nufxo0|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Moncton",
            title: "Moncton",
            winIndex: 36,
            offsets: [-5, -4, -3],
            offsetIndices: "012121212121212121212122121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-z94i40|89fhg0|a2vw0|7mqqo0|4ofw0|e1ms0|4ofw0|e1ms0|4ofw0|e1ms0|4ofw0|e1ms0|4ofw0|e1ms0|4ofw0|dmtg0|64ak0|cao40|6fek0|bkqs0|7iak0|6y5k0|1tzdw0|2dnc0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|s36s0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a2lo|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6uiyc|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Monterrey",
            title: "Monterrey",
            winIndex: 47,
            offsets: [-6.687777777777778, -6, -5],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u7c0|ykt480|ast80|3vppg0|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|Infinity"
        }, {
            id: "America/Montevideo",
            title: "Montevideo",
            winIndex: 71,
            offsets: [-3.7455555555555553, -3.5, -3, -2, -2.5],
            offsetIndices: "012121212121212121212121213232323232324242423243232323232323232323232323232323232323232",
            untils: "-px809g|1s8xzg|9czy0|9exe0|9czy0|9exe0|9czy0|3ydyq0|7x5a0|asxe0|7x5a0|asxe0|7x5a0|b5w20|7k6m0|b5w20|7k6m0|b5w20|7k6m0|b5w20|7x5a0|asxe0|7x5a0|6do20|7vam0|humq0|4mju0|8g9s40|8zzw0|38qs0|2inw0|2nf9g0|8zzw0|9q2s0|aunw0|7ves0|awik0|ar440|9pym0|91yq0|9pym0|91yq0|9pym0|q6mq0|5t6k0|tfc40|erfy0|xdta0|m2is0|62fw0|s6w40|ayd80|3z5s40|4ofw0|dzs40|4ofw0|bvus0|6h980|bvus0|6u7w0|c8tg0|6h980|bvus0|6u7w0|614qs0|9q2s0|a31g0|7x3w0|ag040|8a2k0|asys0|7x3w0|asys0|7x3w0|asys0|8a2k0|ag040|8a2k0|ag040|8a2k0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|Infinity"
        }, {
            id: "America/Montreal",
            title: "Montreal",
            winIndex: 14,
            link: 326
        }, {
            id: "America/Nassau",
            title: "Nassau",
            winIndex: 14,
            offsets: [-5.158333333333333, -5, -4],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-u6m4c6|r7u7s6|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/New_York",
            title: "New York",
            winIndex: 14,
            offsets: [-5, -4],
            offsetIndices: "01010101010101010101010101010101010101010101010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0ev80|ast80|7x9g0|ast80|7x9g0|b5rw0|905g0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|6w840|1tzb40|2dq40|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Nipigon",
            title: "Nipigon",
            winIndex: 14,
            offsets: [-5, -4],
            offsetIndices: "010111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-qzoxw0|a2vw0|bfxjw0|pmdk0|1tzb40|2dq40|ewvus0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Nome",
            title: "Nome",
            winIndex: 55,
            offsets: [-11, -10, -9, -8],
            offsetIndices: "011001010101010101010101010101010122323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-ek1nw0|1tyug0|2e6s0|b7yik0|12y080|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|1l6c0|7rs80|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Noronha",
            title: "Noronha",
            winIndex: 34,
            offsets: [-2.161111111111111, -2, -1],
            offsetIndices: "0121212121212121212121212121212121212121",
            untils: "-t85lzw|99k8rw|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|514g40|7k580|biw40|cvw0|iq5g0|6h980|Infinity"
        }, {
            id: "America/North_Dakota/Beulah",
            title: "Beulah",
            winIndex: 13,
            offsets: [-7, -6, -5],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011212121212121212121212121212121212121212121212121212121",
            untils: "-r0epo0|ast80|7x9g0|ast80|bmtus0|1tz5k0|2dvo0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hc00|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/North_Dakota/Center",
            title: "Center",
            winIndex: 13,
            offsets: [-7, -6, -5],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101011212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0epo0|ast80|7x9g0|ast80|bmtus0|1tz5k0|2dvo0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a5c0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/North_Dakota/New_Salem",
            title: "New Salem",
            winIndex: 13,
            offsets: [-7, -6, -5],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r0epo0|ast80|7x9g0|ast80|bmtus0|1tz5k0|2dvo0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a5c0|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Ojinaga",
            title: "Ojinaga",
            winIndex: 15,
            offsets: [-6.961111111111111, -7, -6, -5],
            offsetIndices: "0121212323221212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p1u4k0|2u7jw0|1sgdc0|8n400|7thc0|9eys0|xes2s0|afuk0|8a840|afuk0|8aaw0|afuk0|8a840|ast80|7x9g0|ast80|9q2s0|7k580|9q2s0|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|77c40|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Panama",
            title: "Panama",
            winIndex: 10,
            offsets: [-5.326666666666667, -5],
            offsetIndices: "01",
            untils: "-w757vc|Infinity"
        }, {
            id: "America/Pangnirtung",
            title: "Pangnirtung",
            winIndex: 14,
            offsets: [0, -4, -3, -2, -5, -6],
            offsetIndices: "012213121212121212121212121212121212114141414154414141414141414141414141414141414141414141414141414141414141414141414141414",
            untils: "-pkmlc0|b0ke00|1tzdw0|2dnc0|a7n3w0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|asw00|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7xc80|ast80|7x6o0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Paramaribo",
            title: "Paramaribo",
            winIndex: 64,
            offsets: [-3.6777777777777776, -3.6811111111111114, -3.6766666666666667, -3.5, -3],
            offsetIndices: "012334",
            untils: "-usj4g8|cixc0c|5lydbk|fq7bic|4mkao0|Infinity"
        }, {
            id: "America/Phoenix",
            title: "Phoenix",
            winIndex: 56,
            offsets: [-7, -6],
            offsetIndices: "01010101010",
            untils: "-r0epo0|ast80|7x9g0|ast80|bmtus0|zjedo|4olg0|9et80|bs6lmc|9cyk0|Infinity"
        }, {
            id: "America/Port_of_Spain",
            title: "Port of Spain",
            winIndex: 16,
            offsets: [-4.101111111111111, -4],
            offsetIndices: "01",
            untils: "-u6m79w|Infinity"
        }, {
            id: "America/Port-au-Prince",
            title: "Port-au-Prince",
            winIndex: 14,
            offsets: [-4.816666666666666, -5, -4],
            offsetIndices: "01212121212121212121212121212121212121212121",
            untils: "-rmk9ac|ylcf6c|8zzw0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8aaw0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|3vpjw0|ast80|7x9g0|ast80|2stv00|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Porto_Velho",
            title: "Porto Velho",
            winIndex: 16,
            offsets: [-4.26, -4, -3],
            offsetIndices: "012121212121212121212121212121",
            untils: "-t85g60|99k8i0|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|Infinity"
        }, {
            id: "America/Puerto_Rico",
            title: "Puerto Rico",
            winIndex: 16,
            offsets: [-4, -3],
            offsetIndices: "0110",
            untils: "-efsnk0|1ppu40|2dnc0|Infinity"
        }, {
            id: "America/Rainy_River",
            title: "Rainy River",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "010111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-qzov40|a2vw0|bfxjw0|pmdk0|1tz8c0|2dsw0|ewvus0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Rankin_Inlet",
            title: "Rankin Inlet",
            winIndex: 13,
            offsets: [0, -6, -4, -5],
            offsetIndices: "012131313131313131313131313131313131313131313331313131313131313131313131313131313131313131313131313131313131313131313131",
            untils: "-6s8lc0|4c6oo0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Recife",
            title: "Recife",
            winIndex: 64,
            offsets: [-2.3266666666666667, -3, -2],
            offsetIndices: "0121212121212121212121212121212121212121",
            untils: "-t85ljc|99kb3c|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|514g40|7k580|biw40|cvw0|iq5g0|6h980|Infinity"
        }, {
            id: "America/Regina",
            title: "Regina",
            winIndex: 37,
            offsets: [-6.9766666666666675, -7, -6],
            offsetIndices: "012121212121212121212121221212121212121212121212121212",
            untils: "-xkq9yc|6l1hmc|a2vw0|60enw0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|1b6840|9cyk0|9d440|8zzw0|9q2s0|9cyk0|9q2s0|9cyk0|9d440|9cyk0|66gc0|1tz5k0|2dvo0|a31g0|9cyk0|a31g0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|tj1g0|9cyk0|9d440|Infinity"
        }, {
            id: "America/Resolute",
            title: "Resolute",
            winIndex: 13,
            offsets: [0, -6, -4, -5],
            offsetIndices: "012131313131313131313131313131313131313131313331313131313331313131313131313131313131313131313131313131313131313131313131",
            untils: "-bnp9c0|97nco0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Rio_Branco",
            title: "Rio Branco",
            winIndex: 10,
            offsets: [-4.52, -5, -4],
            offsetIndices: "01212121212121212121212121212121",
            untils: "-t85fg0|99kak0|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|amves0|2t2t80|Infinity"
        }, {
            id: "America/Santa_Isabel",
            title: "Santa Isabel",
            winIndex: 72,
            link: 325
        }, {
            id: "America/Santarem",
            title: "Santarem",
            winIndex: 64,
            offsets: [-3.646666666666667, -4, -3],
            offsetIndices: "0121212121212121212121212121212",
            untils: "-t85hvc|99ka7c|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5mf440|49mk0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|amves0|Infinity"
        }, {
            id: "America/Santiago",
            title: "Santiago",
            winIndex: 39,
            offsets: [-4.712777777777777, -5, -4, -3],
            offsetIndices: "010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323",
            untils: "-vauawq|3dlssq|157b7a|f4e0q|49hzba|aye0q|7ves0|awik0|7ves0|awik0|7ves0|awik0|7ves0|ayd80|7ves0|534ik0|351g0|229zw0|2gt80|awo40|2mg00|b73400|7k580|c8tg0|6h980|a31g0|7x3w0|asys0|7x3w0|b5xg0|7k580|ag040|8a2k0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7k580|b5xg0|9cyk0|9d440|7x3w0|asys0|7x3w0|b5xg0|7k580|9q2s0|8zzw0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|8n180|a31g0|7x3w0|a31g0|9px80|9q2s0|7x3w0|b5xg0|7k580|b5xg0|7k580|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|8n180|a31g0|7x3w0|asys0|8zzw0|9q2s0|ast80|5eis0|cyl80|6hes0|c8nw0|6udg0|bvp80|6udg0|vonw0|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|Infinity"
        }, {
            id: "America/Santo_Domingo",
            title: "Santo Domingo",
            winIndex: 16,
            offsets: [-4.666666666666667, -5, -4, -4.5],
            offsetIndices: "01213131313131212",
            untils: "-j6hz1c|hiw29c|67zw0|1dy840|62ha0|cnle0|4h2m0|elyq0|47ta0|ei9e0|4bim0|eek20|4dda0|ecpe0|dkmtg0|1stc0|Infinity"
        }, {
            id: "America/Sao_Paulo",
            title: "Sao Paulo",
            winIndex: 35,
            offsets: [-3.1077777777777778, -3, -2],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-t85jd8|99k8x8|9a9c0|9io40|99980|8p65g0|6zuo0|bs2o0|67zw0|cjxg0|69uk0|cjxg0|4ml80|5k02s0|6onw0|haas0|316k0|cls40|4ml80|cls40|66580|cls40|67zw0|981s40|6u7w0|biw40|5rbw0|d0lg0|5ed80|cyqs0|5ed80|dbpg0|64ak0|cyqs0|64ak0|cls40|5rbw0|dbpg0|51ek0|dbpg0|6h980|c8tg0|6h980|c8tg0|64ak0|c8tg0|6u7w0|bxpg0|7iak0|biw40|6u7w0|biw40|7k580|biw40|6u7w0|c8tg0|6h980|dbpg0|5ed80|cls40|64ak0|dfes0|5nmk0|c8tg0|6h980|dbpg0|5rbw0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|c8tg0|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|cls40|64ak0|cls40|64ak0|cls40|64ak0|cls40|6h980|c8tg0|6u7w0|bvus0|6h980|cls40|64ak0|cls40|6h980|c8tg0|Infinity"
        }, {
            id: "America/Scoresbysund",
            title: "Scoresbysund",
            winIndex: 73,
            offsets: [-1.4644444444444444, -2, -1, 0],
            offsetIndices: "0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-rvurxk|x8ntpk|902o0|9cvs0|9cyk0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "America/Sitka",
            title: "Sitka",
            winIndex: 55,
            offsets: [-8, -7, -9],
            offsetIndices: "01101010101010101010101010101010122020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202",
            untils: "-ek1w80|1tz2s0|2dyg0|cawis0|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|1leo0|7rs80|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/St_Johns",
            title: "St Johns",
            winIndex: 38,
            offsets: [-3.5144444444444445, -2.5144444444444445, -3.5, -2.5, -1.5],
            offsetIndices: "01010101010101010101010101010101010102323232323232323323232323232323232323232323232323232323232323232323232323232323232323232323232323232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-ris3ck|8bx80|ar440|a2vw0|9tjs0|53980|dkys0|9cyk0|9d440|9cyk0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|9cyk0|9d440|9cyk0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|9cyk0|9q2s0|8zzw0|9q2s0|8zzw0|7tmw0|1wfuk|8zzw0|a3480|7k580|b5xg0|7k580|b5xg0|7k580|biw40|776k0|biw40|7k580|b5xg0|7k580|b5xg0|1pb260|2dly0|biw40|7k580|b5xg0|7k580|b5xg0|7k580|b5xg0|7k580|biw40|7k580|ag040|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a2lo|afuk0|8a840|asqg0|7xc80|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8tec|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Swift_Current",
            title: "Swift Current",
            winIndex: 37,
            offsets: [-7.188888888888888, -7, -6],
            offsetIndices: "012122121212121212121212",
            untils: "-xkq9d4|6l1h14|a2vw0|c5jxg0|1tz5k0|2dvo0|asys0|8n180|a31g0|7x3w0|asys0|7x3w0|asys0|7x3w0|3yles0|9cyk0|s36s0|9cyk0|9d440|7x3w0|b5xg0|7k580|5j4lg0|Infinity"
        }, {
            id: "America/Tegucigalpa",
            title: "Tegucigalpa",
            winIndex: 67,
            offsets: [-5.814444444444445, -6, -5],
            offsetIndices: "01212121",
            untils: "-pfzh6k|yho0ik|7k580|b5xg0|7k580|96x1g0|4qak0|Infinity"
        }, {
            id: "America/Thule",
            title: "Thule",
            winIndex: 36,
            offsets: [-4.585555555555556, -4, -3],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-rvuj9g|12yzilg|9cyk0|9d440|9cyk0|9q2s0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Thunder_Bay",
            title: "Thunder Bay",
            winIndex: 14,
            offsets: [-6, -5, -4],
            offsetIndices: "0122121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-vbavc0|gr8qs0|1tzb40|2dq40|ctmlg0|9cyk0|9d440|9px80|9d440|9cyk0|s36s0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Tijuana",
            title: "Tijuana",
            winIndex: 11,
            offsets: [-7.801111111111111, -7, -8],
            offsetIndices: "012121211212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-p1u1s0|11jrw0|1sns00|1sgdc0|71s40|9cyk0|5iidg0|1q6700|4lfk0|190g40|eluk0|2r4r00|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|84qys0|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|77c40|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Toronto",
            title: "Toronto",
            winIndex: 14,
            offsets: [-5, -4],
            offsetIndices: "01010101010101010101010101010101010101010101011101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-qzoxw0|a2vw0|7yx60|aqzy0|9q8c0|7jzo0|bw0c0|6bp80|cedg0|6h980|c8tg0|6h980|bvus0|776k0|biw40|776k0|biw40|776k0|biw40|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|xjeo0|1tzb40|2dq40|asys0|7x3w0|ast80|7x3w0|asys0|7x3w0|asys0|b5rw0|7xf00|ast80|7x9g0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Vancouver",
            title: "Vancouver",
            winIndex: 11,
            offsets: [-8, -7],
            offsetIndices: "0101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-qzopk0|a2vw0|c5jxg0|1tz2s0|2dyg0|asys0|8n180|a31g0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Whitehorse",
            title: "Whitehorse",
            winIndex: 11,
            offsets: [-9, -8, -7],
            offsetIndices: "0101011020121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-qzoms0|a2vw0|asys0|882c0|bmiwc0|1tz000|2e180|a7n3w0|9q000|tiyo0|6qp440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Winnipeg",
            title: "Winnipeg",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "010101011010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-s0s7c0|7k580|tj700|a2vw0|9ok840|6u7w0|2a5hg0|1tz8c0|2dsw0|biw40|7x3w0|a31g0|7x3w0|asys0|7x3w0|asys0|7x3w0|b7s40|7tek0|autg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|9cyk0|9d440|7x3w0|1cm2s0|7k580|1cm2s0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|902o0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|902o0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|8a5c0|afxc0|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|7x6o0|asw00|7x6o0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Yakutat",
            title: "Yakutat",
            winIndex: 55,
            offsets: [-9, -8],
            offsetIndices: "01101010101010101010101010101010100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-ek1tg0|1tz000|2e180|cawis0|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|1lbw0|7rs80|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "America/Yellowknife",
            title: "Yellowknife",
            winIndex: 15,
            offsets: [0, -7, -6, -5],
            offsetIndices: "012213121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-i9m2o0|3pk3o0|1tz5k0|2dvo0|a7n3w0|9q000|7k85k0|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "Antarctica/Casey",
            title: "Casey",
            winIndex: 33,
            offsets: [0, 8, 11],
            offsetIndices: "012121",
            untils: "-irxc0|lag4o0|73bo0|uz1o0|60l80|Infinity"
        }, {
            id: "Antarctica/Davis",
            title: "Davis",
            winIndex: 6,
            offsets: [0, 7, 5],
            offsetIndices: "01012121",
            untils: "-6rmdc0|42jdw0|27wgs0|l8uss0|7eqs0|unmk0|60qs0|Infinity"
        }, {
            id: "Antarctica/DumontDUrville",
            title: "DumontDUrville",
            winIndex: 50,
            offsets: [0, 10],
            offsetIndices: "0101",
            untils: "-c05eo0|2mks80|2i72g0|Infinity"
        }, {
            id: "Antarctica/Macquarie",
            title: "Macquarie",
            winIndex: 48,
            offsets: [10, 11, 0],
            offsetIndices: "0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101011",
            untils: "-rsj4w0|8zzw0|11wqk0|f4kh40|a6p8g0|9d1c0|asw00|6uao0|bvs00|6uao0|bvs00|779c0|bvs00|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|7x6o0|b5uo0|7k800|b5uo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|bvs00|7k800|bitc0|7k800|bitc0|779c0|bitc0|779c0|bitc0|7x6o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|7x6o0|asw00|a2yo0|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Antarctica/Mawson",
            title: "Mawson",
            winIndex: 17,
            offsets: [0, 6, 5],
            offsetIndices: "012",
            untils: "-8aelc0|t22y80|Infinity"
        }, {
            id: "Antarctica/Palmer",
            title: "Palmer",
            winIndex: 39,
            offsets: [0, -3, -4, -2],
            offsetIndices: "0121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-2lxhc0|31ho0|bqas0|71mk0|bqas0|8ovw0|9d440|9px80|9d440|9cyk0|9d440|28t6k0|51ek0|46b6s0|8c2s0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|7k580|b5xg0|9cyk0|9d440|7x3w0|asys0|7x3w0|b5xg0|7k580|9q2s0|8zzw0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|8n180|a31g0|7x3w0|a31g0|9px80|9q2s0|7x3w0|b5xg0|7k580|b5xg0|7k580|b5xg0|7k580|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7k580|b5xg0|8n180|a31g0|7x3w0|asys0|8zzw0|9q2s0|ast80|5eis0|cyl80|6hes0|c8nw0|6udg0|bvp80|6udg0|vonw0|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|51k40|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|e1h80|4olg0|Infinity"
        }, {
            id: "Antarctica/Rothera",
            title: "Rothera",
            winIndex: 64,
            offsets: [0, -3],
            offsetIndices: "01",
            untils: "3lxs00|Infinity"
        }, {
            id: "Antarctica/Syowa",
            title: "Syowa",
            winIndex: 1,
            offsets: [0, 3],
            offsetIndices: "01",
            untils: "-6qsqo0|Infinity"
        }, {
            id: "Antarctica/Vostok",
            title: "Vostok",
            winIndex: 21,
            offsets: [0, 6],
            offsetIndices: "01",
            untils: "-6aaao0|Infinity"
        }, {
            id: "Asia/Almaty",
            title: "Almaty",
            winIndex: 21,
            offsets: [5.13, 5, 6, 7],
            offsetIndices: "012323232323232323232321232323232323232323232323232",
            untils: "-nu1a90|37a0d0|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|iq5g0|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|Infinity"
        }, {
            id: "Asia/Amman",
            title: "Amman",
            winIndex: 74,
            offsets: [2.395555555555555, 2, 3],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-kcrtbk|m566fk|60l80|awo40|7v980|awo40|7v980|ayis0|9gnw0|9b9g0|7v980|autg0|7v980|3e6840|9et80|9io40|9cyk0|9d440|9cyk0|9d440|9px80|ayis0|7rjw0|ag040|8a2k0|9zc40|8drw0|a31g0|8zzw0|9d440|9cyk0|9d440|8n180|ag040|8a5c0|afxc0|8n400|a2yo0|8n400|a2yo0|8n400|epmo0|4deo0|9o5c0|9ew00|9b6o0|9ew00|9d1c0|9d1c0|9d1c0|asw00|7x6o0|afxc0|8n400|9d1c0|9d1c0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|wel80|51k40|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|Infinity"
        }, {
            id: "Asia/Anadyr",
            title: "Anadyr",
            winIndex: 75,
            offsets: [11.83222222222222, 12, 13, 14, 11],
            offsetIndices: "01232212121212121212121141212121212121212121212121212121212121141",
            untils: "-nu1sv8|379zj8|qi27w0|9et80|9d440|9ew00|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5xg0|7k800|Infinity"
        }, {
            id: "Asia/Aqtau",
            title: "Aqtau",
            winIndex: 17,
            offsets: [3.351111111111111, 4, 5, 6],
            offsetIndices: "012323232323232323232123232312121212121212121212",
            untils: "-nu15b4|379y74|qrh3w0|iruk0|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|iq5g0|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Asia/Aqtobe",
            title: "Aqtobe",
            winIndex: 17,
            offsets: [3.811111111111111, 4, 5, 6],
            offsetIndices: "0123232323232323232321232323232323232323232323232",
            untils: "-nu16l4|379zh4|qi27w0|s6qk0|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|iq5g0|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|Infinity"
        }, {
            id: "Asia/Ashgabat",
            title: "Ashgabat",
            winIndex: 17,
            offsets: [3.8922222222222222, 4, 5, 6],
            offsetIndices: "012323232323232323232322112",
            untils: "-nu16t8|379zp8|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|1fp40|4bpk0|Infinity"
        }, {
            id: "Asia/Baghdad",
            title: "Baghdad",
            winIndex: 76,
            offsets: [2.96, 3, 4],
            offsetIndices: "012121212121212121212121212121212121212121212121212121",
            untils: "-r50g80|xkn3w0|7v980|9b9g0|9gnw0|9eys0|9et80|9d440|9b9g0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9f1k0|9ew00|9ew00|9ew00|9d1c0|9ew00|9d1c0|9ew00|9d1c0|9ew00|9ew00|9ew00|9d1c0|9ew00|9d1c0|9ew00|9d1c0|9ew00|9ew00|9ew00|9d1c0|9ew00|9d1c0|9ew00|9d1c0|9ew00|9ew00|9ew00|9d1c0|9ew00|9d1c0|9ew00|9d1c0|9ew00|Infinity"
        }, {
            id: "Asia/Baku",
            title: "Baku",
            winIndex: 77,
            offsets: [3.3233333333333333, 3, 4, 5],
            offsetIndices: "01232323232323232323232221223232323232323232323232323232323232323232",
            untils: "-nu158c|h4tkwc|ckinw0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|7tbs0|1jsc0|9d1c0|9cq80|1twoo0|asw00|7x3w0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Asia/Bangkok",
            title: "Bangkok",
            winIndex: 6,
            offsets: [6.7011111111111115, 7],
            offsetIndices: "01",
            untils: "-pysda4|Infinity"
        }, {
            id: "Asia/Beirut",
            title: "Beirut",
            winIndex: 78,
            offsets: [2, 3],
            offsetIndices: "010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-pyzew0|aunw0|88dg0|9et80|8yas0|a2vw0|a31g0|7k580|hjqo40|7v980|awo40|7v980|awo40|7v980|ayis0|7v980|awo40|7v980|5lhs40|56yk0|awo40|7v980|awo40|7v980|awo40|7v980|ayis0|7v980|awo40|7v980|autg0|7v980|2wxus0|8n180|a4w40|8n180|a4w40|8n180|a4w40|8n180|bs5g0|71mk0|alk40|86d80|a4w40|8n180|a4w40|8n180|a6qs0|80t80|905g0|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|Infinity"
        }, {
            id: "Asia/Bishkek",
            title: "Bishkek",
            winIndex: 21,
            offsets: [4.973333333333333, 5, 6, 7],
            offsetIndices: "01232323232323232323232212121212121212121212121212122",
            untils: "-nu19tc|379zxc|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|7vc00|bkl80|8n180|a31g0|8n180|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|9db20|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|73aa0|Infinity"
        }, {
            id: "Asia/Brunei",
            title: "Brunei",
            winIndex: 24,
            offsets: [7.661111111111111, 7.5, 8],
            offsetIndices: "012",
            untils: "-mvofy4|3khxs4|Infinity"
        }, {
            id: "Asia/Chita",
            title: "Chita",
            winIndex: 79,
            offsets: [7.564444444444445, 8, 9, 10],
            offsetIndices: "0123232323232323232323221232323232323232323232323232323232323232312",
            untils: "-q4cfog|5hkxgg|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|qnew0|Infinity"
        }, {
            id: "Asia/Choibalsan",
            title: "Choibalsan",
            winIndex: 25,
            offsets: [7.633333333333334, 7, 8, 10, 9],
            offsetIndices: "0123434343434343434343434343434343434343434343424242424242424242424242424242424242424242424242",
            untils: "-xmct7c|11sndrc|2qk2k0|9eqg0|9eys0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|1ckdo0|7x3w0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|s6qk0|3nc0c0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|Infinity"
        }, {
            id: "Asia/Colombo",
            title: "Colombo",
            winIndex: 80,
            offsets: [5.325555555555556, 5.5, 6, 6.5],
            offsetIndices: "01231321",
            untils: "-xehask|isle6k|cajy0|1mp2u0|qetjw0|7x5a0|4xvqq0|Infinity"
        }, {
            id: "Asia/Damascus",
            title: "Damascus",
            winIndex: 81,
            offsets: [2.42, 2, 3],
            offsetIndices: "01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-q3gk20|5k6q0|8n180|a31g0|8n180|a31g0|8n180|a31g0|8zzw0|k4hk40|7yyk0|awo40|7tek0|b0dg0|7v980|awo40|7tek0|alk40|887w0|awo40|7v980|ayis0|7v980|awo40|7v980|awo40|7v980|awo40|7v980|ayis0|7v980|awo40|7v980|awo40|7v980|awo40|7v980|ayis0|7v980|awo40|6bp80|cg840|6bp80|2eh1g0|8zzw0|9ts40|8zzw0|pvk40|c33w0|7cw40|cjrw0|6zxg0|btuk0|7rpg0|9gnw0|9d440|9cyk0|9et80|9et80|9rxg0|91uk0|92040|9et80|9o840|9et80|9d440|9et80|9eys0|9et80|9b9g0|9gnw0|99es0|9iik0|9d440|9et80|9eys0|9et80|9d440|9et80|9d440|9et80|9d440|9et80|9eys0|9et80|9d440|9et80|9d440|8y580|9q2s0|b5rw0|7x9g0|aunw0|7ig40|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|Infinity"
        }, {
            id: "Asia/Dhaka",
            title: "Dhaka",
            winIndex: 20,
            offsets: [5.888888888888888, 6.5, 5.5, 6, 7],
            offsetIndices: "01213343",
            untils: "-eqtpow|bmgyw|5lxg0|4qknw0|a63o20|jyevw0|a1400|Infinity"
        }, {
            id: "Asia/Dili",
            title: "Dili",
            winIndex: 43,
            offsets: [8.372222222222222, 8, 9],
            offsetIndices: "012212",
            untils: "-u9s4l8|fqcu98|1vc2o0|fz3pc0|cpz440|Infinity"
        }, {
            id: "Asia/Dubai",
            title: "Dubai",
            winIndex: 7,
            offsets: [3.6866666666666665, 4],
            offsetIndices: "01",
            untils: "-q3gnko|Infinity"
        }, {
            id: "Asia/Dushanbe",
            title: "Dushanbe",
            winIndex: 17,
            offsets: [4.586666666666667, 5, 6, 7],
            offsetIndices: "0123232323232323232323221",
            untils: "-nu18qo|379yuo|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|8c2s0|Infinity"
        }, {
            id: "Asia/Ho_Chi_Minh",
            title: "Ho Chi Minh",
            winIndex: 6,
            offsets: [7.111111111111112, 7.108333333333333, 7, 8, 9],
            offsetIndices: "0123423232",
            untils: "-x56934|2isioa|gj25iu|15ct80|8so00|tmtk0|4azjw0|2cmao0|8285c0|Infinity"
        }, {
            id: "Asia/Hong_Kong",
            title: "Hong Kong",
            winIndex: 19,
            offsets: [7.611666666666666, 8, 9],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-y0i2h6|j09kn6|9cyk0|4f2e0|1xyfw0|b6760|bkl80|6udg0|df980|6dpg0|9cyk0|7x9g0|ast80|7x9g0|ast80|7x9g0|ast80|8a840|adzw0|8c2s0|ast80|77c40|biqk0|77c40|bvp80|6udg0|bvp80|77c40|biqk0|77c40|biqk0|77c40|biqk0|77c40|bvp80|6udg0|bvp80|6udg0|bvp80|77c40|biqk0|77c40|biqk0|8n6s0|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|3lpg0|f4d80|9d440|9cyk0|9d440|9cyk0|1c9440|8a2k0|Infinity"
        }, {
            id: "Asia/Hovd",
            title: "Hovd",
            winIndex: 6,
            offsets: [6.11, 6, 7, 8],
            offsetIndices: "012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-xmcoz0|11sncb0|2qk2k0|9et80|9eys0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|1ckdo0|7x3w0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|4fio40|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|Infinity"
        }, {
            id: "Asia/Irkutsk",
            title: "Irkutsk",
            winIndex: 82,
            offsets: [6.951388888888888, 7, 8, 9],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-q28gn5|5fh175|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Jakarta",
            title: "Jakarta",
            winIndex: 6,
            offsets: [7.12, 7.333333333333333, 7.5, 9, 8, 7],
            offsetIndices: "01232425",
            untils: "-o0bdpc|4lzxc0|4wdzjc|1tu960|1cx860|11jta0|74uc20|Infinity"
        }, {
            id: "Asia/Jayapura",
            title: "Jayapura",
            winIndex: 43,
            offsets: [9.379999999999999, 9, 9.5],
            offsetIndices: "0121",
            untils: "-jebm20|66bqe0|a37vy0|Infinity"
        }, {
            id: "Asia/Jerusalem",
            title: "Jerusalem",
            winIndex: 23,
            offsets: [2.344444444444444, 2, 3, 4],
            offsetIndices: "01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-r50eig|bp54yg|19f3w0|7rv00|b02c0|7tk40|b07w0|8jhg0|a8lg0|8jhg0|a8ac0|t9s40|56vs0|35700|9b3w0|9gtg0|8jbw0|7tmw0|a6ig0|biyw0|8a5c0|9d1c0|902o0|7x6o0|e1eg0|4ofw0|dzxo0|4q500|doo40|64iw0|auqo0|7i500|8rfms0|51ek0|9q2s0|6u7w0|50rhg0|7x3w0|cls40|5rbw0|bbhg0|7rjw0|asys0|7k580|c8tg0|6h980|ag040|7x3w0|asys0|8a2k0|asys0|8a2k0|ap9g0|80t80|ap9g0|7nuk0|b2840|80t80|9zc40|9iik0|9kis0|93p80|9mdg0|8qqk0|apf00|7x3w0|biw40|8zx40|9io40|8n180|9kis0|9vh80|8ulg0|9px80|9mdg0|8n180|9tuw0|9tmk0|8wg40|9gnw0|99es0|8qqk0|9zc40|9tmk0|8wg40|9gnw0|99es0|8qqk0|acas0|9gnw0|99es0|93p80|9mdg0|awik0|7tk40|awik0|7tk40|awik0|7tk40|b9h80|7glg0|b9h80|7glg0|b9h80|7tk40|awik0|7tk40|awik0|7tk40|b9h80|7glg0|b9h80|7glg0|b9h80|7tk40|awik0|7tk40|awik0|7tk40|awik0|7tk40|b9h80|7glg0|b9h80|7glg0|b9h80|7tk40|awik0|7tk40|awik0|7tk40|b9h80|7glg0|b9h80|7glg0|b9h80|7glg0|b9h80|7tk40|awik0|7tk40|awik0|Infinity"
        }, {
            id: "Asia/Kabul",
            title: "Kabul",
            winIndex: 83,
            offsets: [4, 4.5],
            offsetIndices: "01",
            untils: "-d1pkg0|Infinity"
        }, {
            id: "Asia/Kamchatka",
            title: "Kamchatka",
            winIndex: 75,
            offsets: [10.576666666666666, 11, 12, 13],
            offsetIndices: "01232323232323232323232212323232323232323232323232323232323232212",
            untils: "-olrupo|3z045o|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5xg0|7k800|Infinity"
        }, {
            id: "Asia/Karachi",
            title: "Karachi",
            winIndex: 84,
            offsets: [4.47, 5.5, 6.5, 5, 6],
            offsetIndices: "012133434343",
            untils: "-wvpb30|im3zt0|1mn180|33xpg0|a63o20|g72qo0|9cyk0|2y85g0|7v980|8hms0|aaak0|Infinity"
        }, {
            id: "Asia/Kathmandu",
            title: "Kathmandu",
            winIndex: 22,
            offsets: [5.687777777777778, 5.5, 5.75],
            offsetIndices: "012",
            untils: "-q3gt4s|yg2lus|Infinity"
        }, {
            id: "Asia/Khandyga",
            title: "Khandyga",
            winIndex: 79,
            offsets: [9.036944444444446, 8, 9, 10, 11],
            offsetIndices: "01232323232323232323232212323232323232323232323232343434343434343432",
            untils: "-q4cjrp|5hl1jp|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|3fx40|4h6s0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|8ql00|1mlho0|Infinity"
        }, {
            id: "Asia/Kolkata",
            title: "Kolkata",
            winIndex: 18,
            offsets: [5.888888888888888, 6.5, 5.5],
            offsetIndices: "01212",
            untils: "-eqtpow|bmgyw|5lxg0|1mn180|Infinity"
        }, {
            id: "Asia/Krasnoyarsk",
            title: "Krasnoyarsk",
            winIndex: 85,
            offsets: [6.190555555555556, 6, 7, 8],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-q37l72|5gg8j2|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Kuala_Lumpur",
            title: "Kuala Lumpur",
            winIndex: 24,
            offsets: [6.923611111111112, 7, 7.333333333333333, 7.5, 9, 8],
            offsetIndices: "01223435",
            untils: "-xphpwd|eeb94d|1kbr2o|2yhc00|8n3jc|1v2p60|iy3o60|Infinity"
        }, {
            id: "Asia/Kuching",
            title: "Kuching",
            winIndex: 24,
            offsets: [7.355555555555555, 7.5, 8, 8.333333333333334, 9],
            offsetIndices: "01232323232323232422",
            untils: "-mvof3k|3khwxk|1epvy0|4ohqo|e5a9c|4ohqo|e3flc|4ohqo|e3flc|4ohqo|e3flc|4ohqo|e5a9c|4ohqo|e3flc|4ohqo|3ajlc|1v2qk0|iy3ms0|Infinity"
        }, {
            id: "Asia/Macau",
            title: "Macau",
            winIndex: 19,
            offsets: [7.572222222222222, 8, 9],
            offsetIndices: "0121212121212121212121212121212121212121211",
            untils: "-u9s2d8|pon9v8|bvp80|6udg0|bvp80|6u3q0|bvyy0|77c40|biqk0|772e0|biqk0|8ngi0|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9cue0|9cyk0|9d440|9px80|9d440|9d8a0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9cue0|9cyk0|9d440|9px80|9d440|9cyk0|a04w40|Infinity"
        }, {
            id: "Asia/Magadan",
            title: "Magadan",
            winIndex: 75,
            offsets: [10.053333333333335, 10, 11, 12],
            offsetIndices: "0123232323232323232323221232323232323232323232323232323232323232312",
            untils: "-nu1nxc|37a05c|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|s39k0|Infinity"
        }, {
            id: "Asia/Makassar",
            title: "Makassar",
            winIndex: 24,
            offsets: [7.96, 8, 9],
            offsetIndices: "00121",
            untils: "-q3gzg0|6p5hc0|4u87w0|1w02k0|Infinity"
        }, {
            id: "Asia/Manila",
            title: "Manila",
            winIndex: 24,
            offsets: [8, 9],
            offsetIndices: "010101010",
            untils: "-hb5y80|4qak0|2qidg0|1b2d80|4xf440|442k0|cdqdg0|9et80|Infinity"
        }, {
            id: "Asia/Nicosia",
            title: "Nicosia",
            winIndex: 4,
            offsets: [2.2244444444444444, 2, 3],
            offsetIndices: "01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-p4bq6g|rvhxyg|9cyk0|b42s0|7nuk0|8yas0|8zzw0|9q2s0|9et80|9b9g0|9cyk0|9q2s0|8zzw0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|9cyk0|9d440|9cyk0|9d440|at4c0|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Asia/Novokuznetsk",
            title: "Novokuznetsk",
            winIndex: 86,
            offsets: [5.8133333333333335, 6, 7, 8],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232322122",
            untils: "-nu36tc|37bu5c|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5xg0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Novosibirsk",
            title: "Novosibirsk",
            winIndex: 86,
            offsets: [5.527777777777778, 6, 7, 8],
            offsetIndices: "0123232323232323232323221232321212121212121212121212121212121212121",
            untils: "-q4do0s|5hmbcs|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|2vh00|6hn40|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Omsk",
            title: "Omsk",
            winIndex: 86,
            offsets: [4.891666666666667, 5, 6, 7],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-q5xmx6|5j6d16|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Oral",
            title: "Oral",
            winIndex: 17,
            offsets: [3.4233333333333333, 4, 5, 6],
            offsetIndices: "01232323232323232121212121212121212121212121212",
            untils: "-nu15ic|379yec|qi27w0|s6qk0|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|iq5g0|9d1c0|9q000|9d1c0|9d1c0|5reo0|cyo00|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Asia/Pontianak",
            title: "Pontianak",
            winIndex: 6,
            offsets: [7.288888888888889, 7.5, 9, 8, 7],
            offsetIndices: "001213134",
            untils: "-w6piww|cse2o0|4tnu2w|1wkei0|1cx860|11jta0|74uc20|cixam0|Infinity"
        }, {
            id: "Asia/Pyongyang",
            title: "Pyongyang",
            winIndex: 53,
            offsets: [8.383333333333333, 8.5, 9],
            offsetIndices: "012221",
            untils: "-w895yc|1yh10c|dfsmm0|44cqo0|10ipmo0|Infinity"
        }, {
            id: "Asia/Qatar",
            title: "Qatar",
            winIndex: 5,
            offsets: [3.4355555555555553, 4, 3],
            offsetIndices: "012",
            untils: "-q3gmvk|rctnrk|Infinity"
        }, {
            id: "Asia/Qyzylorda",
            title: "Qyzylorda",
            winIndex: 21,
            offsets: [4.364444444444445, 4, 5, 6],
            offsetIndices: "0123232323232323232323232323232323232323232323",
            untils: "-nu184g|37a10g|qi27w0|s6qk0|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|ohhc0|cyo00|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Asia/Rangoon",
            title: "Rangoon",
            winIndex: 87,
            offsets: [6.411111111111111, 6.5, 9],
            offsetIndices: "0121",
            untils: "-q3gv54|bnjp34|1kh520|Infinity"
        }, {
            id: "Asia/Riyadh",
            title: "Riyadh",
            winIndex: 5,
            offsets: [3.1144444444444446, 3],
            offsetIndices: "01",
            untils: "-bwgbbg|Infinity"
        }, {
            id: "Asia/Sakhalin",
            title: "Sakhalin",
            winIndex: 88,
            offsets: [9.513333333333332, 9, 11, 12, 10],
            offsetIndices: "01123232323232323232323224232323232322424242424242424242424242424242",
            untils: "-xl87rc|gr8pfc|44elc0|ikvh40|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asys0|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|qnc40|Infinity"
        }, {
            id: "Asia/Samarkand",
            title: "Samarkand",
            winIndex: 17,
            offsets: [4.464722222222222, 4, 5, 6],
            offsetIndices: "01233323232323232323232332",
            untils: "-nu18eh|37a1ah|qi27w0|9et80|9d1c0|9ew00|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|7wyc0|1g300|Infinity"
        }, {
            id: "Asia/Seoul",
            title: "Seoul",
            winIndex: 53,
            offsets: [8.464444444444444, 8.5, 9, 9.5, 10],
            offsetIndices: "01222131313131313124242",
            untils: "-w8966g|1yh18g|dfsmm0|454io0|4gadc0|l3aq0|6j3w0|d2g40|6u7w0|b5xg0|776k0|biw40|776k0|biw40|776k0|biw40|776k0|grs40|dfqxi0|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Asia/Shanghai",
            title: "Shanghai",
            winIndex: 19,
            offsets: [8, 9],
            offsetIndices: "01010101010101010",
            untils: "-ffs0w0|66580|8jhg0|a8fw0|n9rc40|6u7w0|asys0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|asys0|7x3w0|asys0|7x3w0|Infinity"
        }, {
            id: "Asia/Singapore",
            title: "Singapore",
            winIndex: 24,
            offsets: [6.923611111111112, 7, 7.333333333333333, 7.5, 9, 8],
            offsetIndices: "012234335",
            untils: "-xphpwd|eeb94d|1kbr2o|2yhc00|8n3jc|1v2p60|ae0xi0|8k2qo0|Infinity"
        }, {
            id: "Asia/Srednekolymsk",
            title: "Srednekolymsk",
            winIndex: 75,
            offsets: [10.247777777777777, 10, 11, 12],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-nu1ogs|37a0os|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Taipei",
            title: "Taipei",
            winIndex: 52,
            offsets: [8, 9],
            offsetIndices: "01010101010101010101010101010101010101010",
            untils: "-gtzfk0|45slc0|c51c0|75bw0|a31g0|aaak0|9d440|7v980|awo40|7v980|awo40|7v980|awo40|7v980|7tk40|clmk0|7rpg0|b07w0|7rpg0|b07w0|7rpg0|9et80|9eys0|9et80|9d440|9et80|9d440|9et80|9d440|9et80|cjxg0|69uk0|ci2s0|69uk0|6its40|9et80|9d440|9et80|1yf9g0|4qak0|Infinity"
        }, {
            id: "Asia/Tashkent",
            title: "Tashkent",
            winIndex: 17,
            offsets: [4.619722222222222, 5, 6, 7],
            offsetIndices: "01232323232323232323232221",
            untils: "-nu18tz|379yxz|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|7x140|1g300|Infinity"
        }, {
            id: "Asia/Tbilisi",
            title: "Tbilisi",
            winIndex: 89,
            offsets: [2.986388888888889, 3, 4, 5],
            offsetIndices: "0123232323232323232323222121212232323232323232323212",
            untils: "-nu14an|h4tjyn|ckinw0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|gig0|8wlo0|9cvs0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d1c0|9cyk0|9q2s0|tivw0|7x9g0|ast80|7x9g0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7x9g0|ast80|7x9g0|ast80|7x9g0|4ofw0|6hn40|7k800|Infinity"
        }, {
            id: "Asia/Tehran",
            title: "Tehran",
            winIndex: 42,
            offsets: [3.428888888888889, 3.5, 4, 5, 4.5],
            offsetIndices: "00123214141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141",
            untils: "-s6m6uw|fnolc0|gm3h4w|777y0|b07w0|3pes0|42c20|9cyk0|9gtg0|9kd80|5ja5g0|7avw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|1av440|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9d440|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|9b9g0|9gnw0|Infinity"
        }, {
            id: "Asia/Thimphu",
            title: "Thimphu",
            winIndex: 20,
            offsets: [5.9766666666666675, 5.5, 6],
            offsetIndices: "012",
            untils: "-bojclo|kxymno|Infinity"
        }, {
            id: "Asia/Tokyo",
            title: "Tokyo",
            winIndex: 43,
            offsets: [9, 10],
            offsetIndices: "0010101010",
            untils: "-gtzic0|5ivew0|6sd80|ahus0|887w0|cao40|6fek0|cao40|6fek0|Infinity"
        }, {
            id: "Asia/Ulaanbaatar",
            title: "Ulaanbaatar",
            winIndex: 25,
            offsets: [7.125555555555556, 7, 8, 9],
            offsetIndices: "012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-xmcrsk|11sncck|2qk2k0|9et80|9eys0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|1ckdo0|7x3w0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|4fio40|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9pro0|9d9o0|9ct00|9d9o0|9ct00|9d9o0|9ct00|Infinity"
        }, {
            id: "Asia/Urumqi",
            title: "Urumqi",
            winIndex: 21,
            offsets: [5.838888888888889, 6],
            offsetIndices: "01",
            untils: "-lx5pjw|Infinity"
        }, {
            id: "Asia/Ust-Nera",
            title: "Ust-Nera",
            winIndex: 88,
            offsets: [9.548333333333334, 8, 9, 12, 11, 10],
            offsetIndices: "0123434343434343434343445434343434343434343434343434343434343434345",
            untils: "-q4cl6u|5hl2yu|qi27w0|9eno0|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|8ql00|1mlho0|Infinity"
        }, {
            id: "Asia/Vladivostok",
            title: "Vladivostok",
            winIndex: 88,
            offsets: [8.791944444444445, 9, 10, 11],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-oligf7|3yqvf7|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Yakutsk",
            title: "Yakutsk",
            winIndex: 79,
            offsets: [8.649444444444445, 8, 9, 10],
            offsetIndices: "012323232323232323232322123232323232323232323232323232323232323232",
            untils: "-q4cioy|5hl0gy|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Yekaterinburg",
            title: "Yekaterinburg",
            winIndex: 90,
            offsets: [4.0425, 3.751388888888889, 4, 5, 6],
            offsetIndices: "0123434343434343434343433234343434343434343434343434343434343434343",
            untils: "-rx5hw9|1kybx4|5pfyv5|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Asia/Yerevan",
            title: "Yerevan",
            winIndex: 91,
            offsets: [2.966666666666667, 3, 4, 5],
            offsetIndices: "0123232323232323232323222121212122323232323232323232323232323232",
            untils: "-nu148o|h4tjwo|ckinw0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|91rs0|bcc0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|sfzw0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|Infinity"
        }, {
            id: "Atlantic/Azores",
            title: "Azores",
            winIndex: 73,
            offsets: [-1.9088888888888889, -2, -1, 0],
            offsetIndices: "01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323233323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-u9rc14|2bug54|6zxg0|66580|bq800|73k00|bodc0|71pc0|bq800|73k00|bq800|71pc0|bq800|1b2g00|9b6o0|saio0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|st1c0|8n400|9d1c0|9d1c0|sg2o0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51hc0|bitc0|9d1c0|9ew00|88ao0|25p80|5reo0|3lpg0|779c0|1sqk0|6uao0|38qs0|6uao0|25p80|6hc00|38qs0|6uao0|25p80|6hc00|38qs0|8a5c0|9d1c0|9d9o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|s3400|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|5qbjo0|9d1c0|9q000|9d1c0|9d1c0|9d440|9cyk0|9d440|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9cyk0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9cyk0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Atlantic/Bermuda",
            title: "Bermuda",
            winIndex: 36,
            offsets: [-4.321666666666667, -4, -3],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-kvj2fu|n4pr3u|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "Atlantic/Canary",
            title: "Canary",
            winIndex: 26,
            offsets: [-1.0266666666666666, -1, 0, 1],
            offsetIndices: "01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-oytbtc|ctvupc|hhq7s0|905g0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Atlantic/Cape_Verde",
            title: "Cape Verde",
            winIndex: 92,
            offsets: [-1.5677777777777777, -2, -1],
            offsetIndices: "01212",
            untils: "-wvoub8|im43v8|1mn180|fpqwc0|Infinity"
        }, {
            id: "Atlantic/Faroe",
            title: "Faroe",
            winIndex: 26,
            offsets: [-.45111111111111113, 0, 1],
            offsetIndices: "01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-wcehew|127keuw|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Atlantic/Madeira",
            title: "Madeira",
            winIndex: 26,
            offsets: [-1.1266666666666665, -1, 0, 1],
            offsetIndices: "01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-u9re7c|2bufjc|6zxg0|66580|bq800|73k00|bodc0|71pc0|bq800|73k00|bq800|71pc0|bq800|1b2g00|9b6o0|saio0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|st1c0|8n400|9d1c0|9d1c0|sg2o0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51hc0|bitc0|9d1c0|9ew00|88ao0|25p80|5reo0|3lpg0|779c0|1sqk0|6uao0|38qs0|6uao0|25p80|6hc00|38qs0|6uao0|25p80|6hc00|38qs0|8a5c0|9d1c0|9d9o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|s3400|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|5qbjo0|9d1c0|9q000|9d1c0|9d1c0|9d440|9cyk0|9d440|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9cyk0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Atlantic/Reykjavik",
            title: "Reykjavik",
            winIndex: 0,
            offsets: [-1.4666666666666666, -1, 0],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212",
            untils: "-wcwx9c|4rpd9c|ci2s0|69uk0|du840|4xp80|du840|p7bw0|4w040|9bdzw0|9d6w0|64g40|cyl80|64dc0|clpc0|6hc00|bvs00|6uao0|bvs00|6uao0|bvs00|6uao0|c8qo0|6hc00|c8qo0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|7x6o0|afxc0|8a5c0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|asw00|8a5c0|Infinity"
        }, {
            id: "Atlantic/South_Georgia",
            title: "South Georgia",
            winIndex: 34,
            offsets: [-2],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Atlantic/Stanley",
            title: "Stanley",
            winIndex: 64,
            offsets: [-3.856666666666667, -4, -3, -2],
            offsetIndices: "0121212121212123232212121212121212121212121212121212121212121212121212",
            untils: "-u63pac|dbvxqc|8zzw0|9q2s0|8zzw0|a31g0|8zzw0|9q2s0|8zzw0|9q2s0|8zzw0|9q2s0|4xp80|l1pus0|7k580|b5rw0|77c40|biqk0|77c40|b5uo0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|biqk0|77c40|biqk0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|biqk0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5rw0|7kas0|b5xg0|77c40|bvp80|6udg0|bvp80|77c40|biqk0|77c40|biqk0|77c40|biqk0|77c40|biqk0|77c40|bvp80|77c40|biqk0|77c40|biqk0|77c40|Infinity"
        }, {
            id: "Australia/Adelaide",
            title: "Adelaide",
            winIndex: 31,
            offsets: [9.5, 10.5],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rnsvoc|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|779c0|b5uo0|7k800|bitc0|7k800|bitc0|779c0|bitc0|779c0|bitc0|6hc00|c8qo0|7k800|b5uo0|6uao0|c8qo0|779c0|bitc0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|8a5c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Australia/Brisbane",
            title: "Brisbane",
            winIndex: 30,
            offsets: [10, 11],
            offsetIndices: "01010101010101010",
            untils: "-rnsx2c|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|97zuo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|Infinity"
        }, {
            id: "Australia/Broken_Hill",
            title: "Broken Hill",
            winIndex: 31,
            offsets: [9.5, 10.5],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rnsvoc|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|8a5c0|asw00|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|779c0|b5uo0|7k800|bitc0|7k800|bitc0|779c0|bitc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|8a5c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Australia/Currie",
            title: "Currie",
            winIndex: 32,
            offsets: [10, 11],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rsj4w0|8zzw0|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|7x6o0|b5uo0|7k800|b5uo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|bvs00|7k800|bitc0|7k800|bitc0|779c0|bitc0|779c0|bitc0|7x6o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|7x6o0|asw00|a2yo0|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Australia/Darwin",
            title: "Darwin",
            winIndex: 29,
            offsets: [9.5, 10.5],
            offsetIndices: "010101010",
            untils: "-rnsvoc|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|Infinity"
        }, {
            id: "Australia/Hobart",
            title: "Hobart",
            winIndex: 32,
            offsets: [10, 11],
            offsetIndices: "010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rsj4w0|8zzw0|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|c9tms0|9d1c0|asw00|6uao0|bvs00|6uao0|bvs00|779c0|bvs00|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|7x6o0|b5uo0|7k800|b5uo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|bvs00|7k800|bitc0|7k800|bitc0|779c0|bitc0|779c0|bitc0|7x6o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|7x6o0|asw00|a2yo0|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Australia/Lindeman",
            title: "Lindeman",
            winIndex: 30,
            offsets: [10, 11],
            offsetIndices: "010101010101010101010",
            untils: "-rnsx2c|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|97zuo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|Infinity"
        }, {
            id: "Australia/Melbourne",
            title: "Melbourne",
            winIndex: 28,
            offsets: [10, 11],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rnsx2c|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|779c0|b5uo0|7k800|b5uo0|7x6o0|bitc0|779c0|bitc0|779c0|bitc0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|7x6o0|asw00|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|8a5c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "Australia/Perth",
            title: "Perth",
            winIndex: 33,
            offsets: [8, 9],
            offsetIndices: "0101010101010101010",
            untils: "-rnsric|49s2c|cxfms0|4h180|9d440|9cyk0|ghf1g0|6hc00|4ir9c0|6hc00|40r400|5eg00|7p9hc0|5reo0|b5uo0|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Australia/Sydney",
            title: "Sydney",
            winIndex: 28,
            offsets: [10, 11],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101",
            untils: "-rnsx2c|49s2c|cxfms0|4h180|9d440|9cyk0|9q2s0|8zzw0|eeiqs0|64dc0|clpc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|8a5c0|asw00|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|779c0|b5uo0|7k800|bitc0|7k800|bitc0|779c0|bitc0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|7x6o0|asw00|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|8a5c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|Infinity"
        }, {
            id: "CST6CDT",
            title: "CST6CDT",
            winIndex: 13,
            offsets: [-6, -5],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0esg0|ast80|7x9g0|ast80|bmtus0|1tz8c0|2dsw0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "EST5EDT",
            title: "EST5EDT",
            winIndex: 14,
            offsets: [-5, -4],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0ev80|ast80|7x9g0|ast80|bmtus0|1tzb40|2dq40|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "Etc/GMT",
            title: "GMT",
            winIndex: 41,
            link: 150
        }, {
            id: "Etc/GMT+1",
            title: "GMT+1",
            winIndex: 92,
            offsets: [-1],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+10",
            title: "GMT+10",
            winIndex: 57,
            offsets: [-10],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+11",
            title: "GMT+11",
            winIndex: 49,
            offsets: [-11],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+12",
            title: "GMT+12",
            winIndex: 93,
            offsets: [-12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+2",
            title: "GMT+2",
            winIndex: 34,
            offsets: [-2],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+3",
            title: "GMT+3",
            winIndex: 64,
            offsets: [-3],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+4",
            title: "GMT+4",
            winIndex: 16,
            offsets: [-4],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+5",
            title: "GMT+5",
            winIndex: 10,
            offsets: [-5],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+6",
            title: "GMT+6",
            winIndex: 67,
            offsets: [-6],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT+7",
            title: "GMT+7",
            winIndex: 56,
            offsets: [-7],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-1",
            title: "GMT-1",
            winIndex: 3,
            offsets: [1],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-10",
            title: "GMT-10",
            winIndex: 50,
            offsets: [10],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-11",
            title: "GMT-11",
            winIndex: 48,
            offsets: [11],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-12",
            title: "GMT-12",
            winIndex: 44,
            offsets: [12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-13",
            title: "GMT-13",
            winIndex: 94,
            offsets: [13],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-14",
            title: "GMT-14",
            winIndex: 95,
            offsets: [14],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-2",
            title: "GMT-2",
            winIndex: 2,
            offsets: [2],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-3",
            title: "GMT-3",
            winIndex: 1,
            offsets: [3],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-4",
            title: "GMT-4",
            winIndex: 7,
            offsets: [4],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-5",
            title: "GMT-5",
            winIndex: 17,
            offsets: [5],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-6",
            title: "GMT-6",
            winIndex: 21,
            offsets: [6],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-7",
            title: "GMT-7",
            winIndex: 6,
            offsets: [7],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-8",
            title: "GMT-8",
            winIndex: 24,
            offsets: [8],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/GMT-9",
            title: "GMT-9",
            winIndex: 43,
            offsets: [9],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/UCT",
            title: "UCT",
            winIndex: 41,
            offsets: [0],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Etc/UTC",
            title: "UTC",
            winIndex: 41,
            offsets: [0],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Europe/Amsterdam",
            title: "Amsterdam",
            winIndex: 27,
            offsets: [.3255555555555556, 1.3255555555555556, 1.3333333333333333, .3333333333333333, 2, 1],
            offsetIndices: "010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545",
            untils: "-s0dvkk|7v980|a51o0|7x6o0|a2yo0|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9b6o0|a2yo0|c51c0|6l1c0|902o0|9q000|ci000|682o0|bgyo0|79400|bitc0|779c0|bmio0|7gio0|bbeo0|7eo00|bd9c0|7ctc0|bf400|7ayo0|bvs00|6uao0|bko00|7idc0|b9k00|7gio0|bbeo0|7eo00|bf400|7ayo0|btxc0|21uc0|4uaz8|bitc0|779c0|bko00|7idc0|bd3s0|1aarpc|7k800|9q000|9d1c0|9d1c0|9d1c0|8l9c0|ggp1c0|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Andorra",
            title: "Andorra",
            winIndex: 27,
            offsets: [0, 1, 2],
            offsetIndices: "012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-c4xmo0|k3ctg0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Athens",
            title: "Athens",
            winIndex: 4,
            offsets: [1.581111111111111, 2, 3, 1],
            offsetIndices: "012121313121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-rvv0cg|8bjasg|2vmk0|4hiw40|16ik0|scog0|7lx40|9o2k0|9eys0|4atzw0|6djw0|bplus0|bq800|71uw0|9d1c0|902o0|91xc0|9o5c0|905g0|9qgo0|9akg0|9iik0|99980|9dcg0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Belgrade",
            title: "Belgrade",
            winIndex: 60,
            offsets: [1, 2],
            offsetIndices: "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-ezayw0|swz00|7k800|9q000|9d1c0|9d1c0|b7pc0|6qlc0|jl1hc0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Berlin",
            title: "Berlin",
            winIndex: 27,
            offsets: [1, 2, 3],
            offsetIndices: "01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-s0e080|7ves0|a4yw0|7x6o0|asw00|7x6o0|b8qdc0|1cm000|7k800|9q000|9d1c0|9d1c0|9d1c0|2o7w0|6bs00|2txg0|7k800|91xc0|9b9g0|1sqk0|2inw0|51k40|a2yo0|8n400|9q000|902o0|fx91c0|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Brussels",
            title: "Brussels",
            winIndex: 62,
            offsets: [0, 1, 2],
            offsetIndices: "0121212101010101010101010101010101010101010101010101212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-ss5uo0|rrx80|7vc00|a4yw0|7x6o0|asw00|7x6o0|2wh40|5omo0|b5uo0|6uao0|cyo00|7ayo0|bko00|7rmo0|a2yo0|a2yo0|8n400|902o0|9q000|9d1c0|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|90b00|a2yo0|8n400|9q000|902o0|a2yo0|8n400|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51hc0|4deo0|1a36k0|7k800|9q000|9d1c0|8l9c0|a4tc0|8l9c0|clpc0|79400|fwu800|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Bucharest",
            title: "Bucharest",
            winIndex: 4,
            offsets: [1.74, 2, 3],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-k29zi0|fj8m0|6w5c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|kp0dc0|6h980|9q000|905g0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9cvs0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9cyk0|9d440|9cyk0|9q2s0|ast80|7xhs0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Budapest",
            title: "Budapest",
            winIndex: 60,
            offsets: [1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-s0e080|7ves0|a4yw0|7x6o0|a31g0|8n180|autg0|bgvw0|b5jeg0|th9k0|7k800|9q000|9d1c0|9d1c0|awd00|9ew00|7q0c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9q000|902o0|a4tc0|9q000|1va2g0|6u7w0|bxpg0|6u7w0|cjxg0|64ak0|cluw0|64g40|br3ek0|905g0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Chisinau",
            title: "Chisinau",
            winIndex: 4,
            offsets: [1.9166666666666667, 1.74, 2, 3, 1, 4],
            offsetIndices: "012323232323232323232424235353535353535353535323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-r2p1bo|70f1to|fj8m0|6w5c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|geqo0|ha580|oc8g0|7k800|9q000|9d1c0|7cl00|j3pbw0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|25p80|7kdk0|9d1c0|9d1c0|9cvs0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|ast80|7xf00|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Copenhagen",
            title: "Copenhagen",
            winIndex: 62,
            offsets: [1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-rzo2w0|75bw0|cbs2w0|1aco80|7k800|9q000|9d1c0|9d1c0|9d1c0|6y000|dbmo0|6bs00|clpc0|51hc0|e1k00|4oio0|giutc0|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Dublin",
            title: "Dublin",
            winIndex: 26,
            offsets: [-.42250000000000004, .5775, 0, 1],
            offsetIndices: "01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-rzcmlr|6uao0|9pytr|8c000|9o5c0|9ruo0|9b6o0|9ew00|9b6o0|auqo0|88ao0|9ew00|8y800|a2yo0|a2yo0|7k800|asw00|8a5c0|asw00|8n400|a2yo0|8n400|9q000|902o0|afxc0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|b5uo0|51hc0|3g8580|8a840|bvp80|8n6s0|a2yo0|7x6o0|asw00|8n400|9q000|902o0|9q000|9d1c0|9q000|902o0|8n400|9q000|902o0|a2yo0|8n400|afxc0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|902o0|902o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|bitc0|5reo0|1xhuo0|779c0|bitc0|779c0|bitc0|779c0|bitc0|779c0|bitc0|7k800|b5uo0|7k800|b5uo0|7k800|bitc0|779c0|bitc0|779c0|bitc0|7x3w0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Gibraltar",
            title: "Gibraltar",
            winIndex: 27,
            offsets: [0, 1, 2],
            offsetIndices: "010101010101010101010101010101010101010101010101012121212121010121010101010101010101012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-rzcns0|6uao0|9q000|8c000|9o5c0|9ruo0|9b6o0|9ew00|9b6o0|auqo0|88ao0|9ew00|8y800|a2yo0|a2yo0|7k800|asw00|8a5c0|asw00|8n400|a2yo0|8n400|9q000|902o0|afxc0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|b5uo0|51hc0|mbmk0|51hc0|c8qo0|6hc00|c8qo0|6uao0|bvs00|8n400|a4tc0|5clc0|4bms0|9q000|902o0|8a5c0|1frw0|64dc0|4bms0|6uao0|bvs00|7x6o0|asw00|8n400|9q000|902o0|9q000|9d1c0|9q000|902o0|8n400|9q000|902o0|a2yo0|8n400|afxc0|8n400|9q000|d0tp80|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Helsinki",
            title: "Helsinki",
            winIndex: 59,
            offsets: [1.6636111111111112, 2, 3],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-peghyd|ax3tqd|9gqo0|k31s80|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Istanbul",
            title: "Istanbul",
            winIndex: 54,
            offsets: [1.948888888888889, 2, 3, 4],
            offsetIndices: "012121212121212121212121212121212121212121212121212121232323232322121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-ux9xew|2wvx6w|7v980|1tjc40|aunw0|88dg0|9et80|8yas0|a2vw0|tzpg0|79180|awo40|7v980|7p25g0|4zjw0|2xms0|f4d80|9vms0|b07w0|19f9g0|9px80|c5440|69uk0|acas0|8n180|a31g0|8n180|9q2s0|8zzw0|a8lg0|8ufw0|a31g0|8ovw0|5mbes0|4dbw0|u3es0|75bw0|2wxus0|7x3w0|asys0|7x3w0|b5xg0|7x3w0|c8w80|7x9g0|7k800|b6080|7jww0|ast80|b9ms0|7tek0|7x9g0|a2vw0|8n6s0|a2vw0|iruk0|8yj40|9rjk0|8lkg0|a4i80|8lkg0|a4i80|f2o40|38l80|t4840|8a5c0|9f4c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9cyk0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7kdk0|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7m2o0|b4000|7k800|b5uo0|7x6o0|asw00|7z1c0|ar1c0|7x6o0|bitc0|779c0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Kaliningrad",
            title: "Kaliningrad",
            winIndex: 96,
            offsets: [1, 2, 3, 4],
            offsetIndices: "0101010101010121232323232323232322121212121212121212121212121212121212121212121",
            untils: "-s0e080|7ves0|a4yw0|7x6o0|asw00|7x6o0|b8qdc0|1cm000|7k800|9q000|9d1c0|9d1c0|4od40|62fw0|9kd80|351g0|ie8nw0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Europe/Kiev",
            title: "Kiev",
            winIndex: 59,
            offsets: [2.0344444444444445, 2, 3, 1, 4],
            offsetIndices: "0121313242424242424242424242121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-nu11ng|37a03g|5vd6k0|kzv40|7k800|9q000|1oyg0|jipzs0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|51ek0|neqw0|9cvs0|9cyk0|9d440|9cyk0|9d440|9cyk0|9dcg0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Lisbon",
            title: "Lisbon",
            winIndex: 26,
            offsets: [-.6125, 0, 1, 2],
            offsetIndices: "012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212121212121212121212121212121212122323232212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-u9rfmr|2bue6r|6zxg0|66580|bq800|73k00|bodc0|71pc0|bq800|73k00|bq800|71pc0|bq800|1b2g00|9b6o0|saio0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|st1c0|8n400|9d1c0|9d1c0|sg2o0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51hc0|bitc0|9d1c0|9ew00|88ao0|25p80|5reo0|3lpg0|779c0|1sqk0|6uao0|38qs0|6uao0|25p80|6hc00|38qs0|6uao0|25p80|6hc00|38qs0|8a5c0|9d1c0|9d9o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|s3400|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|5gyl40|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d440|9cyk0|9d440|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9cyk0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/London",
            title: "London",
            winIndex: 26,
            offsets: [0, 1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-rzcns0|6uao0|9q000|8c000|9o5c0|9ruo0|9b6o0|9ew00|9b6o0|auqo0|88ao0|9ew00|8y800|a2yo0|a2yo0|7k800|asw00|8a5c0|asw00|8n400|a2yo0|8n400|9q000|902o0|afxc0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|902o0|a2yo0|b5uo0|51hc0|mbmk0|51hc0|c8qo0|6hc00|c8qo0|6uao0|bvs00|8n400|a4tc0|5clc0|4bms0|9q000|902o0|8a5c0|1frw0|64dc0|4bms0|6uao0|bvs00|7x6o0|asw00|8n400|9q000|902o0|9q000|9d1c0|9q000|902o0|8n400|9q000|902o0|a2yo0|8n400|afxc0|8n400|9q000|902o0|a2yo0|8n400|a2yo0|8n400|9q000|902o0|902o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|bitc0|5reo0|1xhuo0|779c0|bitc0|779c0|bitc0|779c0|bitc0|779c0|bitc0|7k800|b5uo0|7k800|b5uo0|7k800|bitc0|779c0|bitc0|779c0|bitc0|7x3w0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|8a5c0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Luxembourg",
            title: "Luxembourg",
            winIndex: 27,
            offsets: [.41000000000000003, 1, 2, 0],
            offsetIndices: "0121212131313131313131313131313131313131313131313131212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-y89550|68l290|75hg0|ast80|796s0|at1k0|7x6o0|3lh40|4zmo0|b6300|6u2c0|cytk0|7at40|bktk0|7rh40|a31g0|a2vw0|8n9k0|8zx40|9q2s0|9et80|9b9g0|a2vw0|8n6s0|9px80|905g0|a2vw0|905g0|a2vw0|8ncc0|9q000|902o0|a2yo0|8n400|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51hc0|42ao0|1aeak0|7k800|9q000|9d1c0|8n400|a2yo0|8l9c0|clpc0|79400|fwu800|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Madrid",
            title: "Madrid",
            winIndex: 62,
            offsets: [0, 1, 2],
            offsetIndices: "01010101010101010101010121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-rhcqs0|7x6o0|9tpc0|8y800|9b6o0|9gqo0|2d2yo0|8so00|st1c0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|3zb9c0|6uao0|8so00|9xeo0|a2yo0|902o0|8a5c0|13yt80|69xc0|bq800|8oyo0|a1400|95mo0|9kg00|8n6s0|a2vw0|8oyo0|1ck5c0|7tk40|ct07w0|905g0|a2vw0|8n6s0|8zzw0|9d440|9px80|905g0|9rrw0|9b9g0|9d6w0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Malta",
            title: "Malta",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-ryotg0|66800|9d1c0|9d1c0|8a5c0|asw00|7k800|b5uo0|8n400|9d1c0|aau000|18r9k0|7k800|9q000|9d1c0|9d1c0|9d1c0|8j940|9f1k0|afxc0|89zs0|afxc0|7kdk0|b5uo0|979rs0|6h980|cls40|64ak0|cls40|64ak0|cyqs0|64ak0|cls40|64ak0|c8tg0|6hc00|clpc0|6h980|9b9g0|9d1c0|ahs00|7m2o0|b45k0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|asys0|7x3w0|a4w40|8y580|9q2s0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Minsk",
            title: "Minsk",
            winIndex: 96,
            offsets: [1.8333333333333333, 2, 3, 1, 4],
            offsetIndices: "012131312424242424242424242212121212121212121212121212121212121212122",
            untils: "-nu113c|379zjc|5r1mk0|pbf40|7k800|9q000|9d1c0|4oac0|j6dmk0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|sg2o0|9d440|9cvs0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbx40|Infinity"
        }, {
            id: "Europe/Monaco",
            title: "Monaco",
            winIndex: 27,
            offsets: [.15583333333333332, 0, 1, 2],
            offsetIndices: "01212121212121212121212121212121212121212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-uozn3l|2qx1nl|5luo0|8y800|a4tc0|7vc00|auqo0|7idc0|b7pc0|6sg00|cyo00|7ayo0|bko00|7rmo0|a2yo0|bvs00|6uao0|902o0|9q000|9d1c0|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|9q000|902o0|a2yo0|8n400|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51po0|mdbo0|7x3w0|7x9g0|c8w80|7k800|9q000|9d1c0|9nzs0|922w0|8l9c0|fxlx80|9cyk0|9q5k0|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Moscow",
            title: "Moscow",
            winIndex: 58,
            offsets: [2.504722222222222, 2.5219444444444443, 3.5219444444444443, 4.521944444444444, 4, 3, 5, 2],
            offsetIndices: "012132345464575454545454545454545455754545454545454545454545454545454545454545",
            untils: "-rx5dmh|ipzua|97hc0|7yyk0|5i840|d9p80|1jpk0|2d2k7|s8o00|1qvw0|8fpc0|1jms0|is040|412as0|qi27w0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|5reo0|3ljw0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Europe/Oslo",
            title: "Oslo",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-rzayo0|6qfs0|cgcqo0|15tsc0|7k800|9q000|9d1c0|9d1c0|9d1c0|9d1c0|70q5c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|b5uo0|7k800|7law00|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Paris",
            title: "Paris",
            winIndex: 62,
            offsets: [.15583333333333332, 0, 1, 2],
            offsetIndices: "0121212121212121212121212121212121212121212121212123232332323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-uozn1x|2qx1lx|5luo0|8y800|a4tc0|7vc00|auqo0|7idc0|b7pc0|6sg00|cyo00|7ayo0|bko00|7rmo0|a2yo0|bvs00|6uao0|902o0|9q000|9d1c0|9d1c0|a2yo0|8n400|9q000|902o0|a2yo0|902o0|a2yo0|8n400|9q000|902o0|a2yo0|8n400|9d1c0|9d1c0|902o0|a2yo0|9d1c0|9d1c0|902o0|9q000|a2yo0|8n400|9d1c0|9d1c0|902o0|9q000|a2yo0|b5uo0|51po0|5p8w0|18rcc0|7k800|9q000|9d1c0|7efo0|29k40|922w0|8l9c0|fxlx80|9cyk0|9q5k0|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Prague",
            title: "Prague",
            winIndex: 60,
            offsets: [1, 2],
            offsetIndices: "010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-s0e080|7ves0|a4yw0|7x6o0|asw00|7x6o0|b8qdc0|1cm000|7k800|9q000|9d1c0|8l9c0|afxc0|bitc0|8oyo0|7vc00|a2yo0|8n400|a2yo0|8n400|9o5c0|91xc0|fe6000|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Riga",
            title: "Riga",
            winIndex: 59,
            offsets: [1.6094444444444445, 2.6094444444444442, 2, 3, 1, 4],
            offsetIndices: "010102324242435353535353535353323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-qznlky|7x6o0|a4tc0|2mg00|3myns0|7fhlky|gz180|p5v40|7k800|9q000|9d1c0|9d1c0|k7s0|j14ns0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d440|asw00|7x6o0|asw00|7x6o0|b5uo0|qaao0|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Rome",
            title: "Rome",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-ryotg0|66800|9d1c0|9d1c0|8a5c0|asw00|7k800|b5uo0|8n400|9d1c0|aau000|18r9k0|7k800|9q000|9d1c0|8l3s0|a4yw0|8j940|9f1k0|afxc0|89zs0|afxc0|7kdk0|b5uo0|979rs0|6h980|cls40|64ak0|cls40|64ak0|cyqs0|64ak0|cls40|64ak0|c8tg0|6hc00|clpc0|6h980|cls40|64ak0|c8tg0|6h980|cls40|64dc0|clpc0|64dc0|c8qo0|6hc00|clpc0|6hc00|c8qo0|6hc00|9q5k0|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Samara",
            title: "Samara",
            winIndex: 58,
            offsets: [3.338888888888889, 3, 4, 5],
            offsetIndices: "012232323232323232322121112323232323232323232323232323232323232212",
            untils: "-qcx7pw|5q63dw|2egvw0|o3lc00|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|9d1c0|9d440|12w00|89zs0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5xg0|7k800|Infinity"
        }, {
            id: "Europe/Simferopol",
            title: "Simferopol",
            winIndex: 58,
            offsets: [2.2666666666666666, 2, 3, 1, 4],
            offsetIndices: "012131312424242424242424242121212424242212121212121212121212121212121212142",
            untils: "-nu12ao|37a0qo|5xiyk0|iu340|7k800|9q000|9d1c0|iac0|jajmk0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|eeio0|wrjw0|9cyk0|9d440|9cyk0|9d440|1sqk0|7k580|9d440|9cyk0|9q2s0|at4c0|7x9g0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x3w0|asqg0|Infinity"
        }, {
            id: "Europe/Sofia",
            title: "Sofia",
            winIndex: 59,
            offsets: [2, 1, 3],
            offsetIndices: "01010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020",
            untils: "-e6dzw0|7k800|9q000|9d1c0|9d1c0|9d440|hqq240|9eys0|9o2k0|92040|9o2k0|90880|9pug0|90b00|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9cvs0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|ast80|7xhs0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Stockholm",
            title: "Stockholm",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-rzo2w0|75hg0|x5bew0|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Tallinn",
            title: "Tallinn",
            winIndex: 59,
            offsets: [1.65, 1, 2, 3, 4],
            offsetIndices: "012102321212343434343434343433232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232",
            untils: "-r3exx0|3re10|7x6o0|et6g0|ygov0|a1zgd0|ktx80|l94g0|7k800|9q000|9d1c0|8uac0|j27mk0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asys0|7x6o0|b5uo0|19dc00|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Tirane",
            title: "Tirane",
            winIndex: 60,
            offsets: [1.3222222222222222, 1, 2],
            offsetIndices: "01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-t85vo8|dt2gw8|18pew0|7k800|m800|g7ot40|7rjw0|autg0|7x3w0|ayis0|7x3w0|b5xg0|7k580|b42s0|7lzw0|b42s0|7lzw0|b42s0|7x3w0|ahus0|7x3w0|b5xg0|7x3w0|a4w40|8jbw0|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Uzhgorod",
            title: "Uzhgorod",
            winIndex: 59,
            offsets: [1, 2, 3, 4],
            offsetIndices: "010101023232323232323232320121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-fizzw0|1cm000|7k800|9q000|9d1c0|al900|cnms0|int140|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|eeio0|e1sc0|iprk0|9cyk0|9d440|9cyk0|9d440|9cyk0|9dcg0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Vienna",
            title: "Vienna",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-s0e080|7ves0|a4yw0|7x6o0|asw00|7x6o0|t6000|8a5c0|a7a800|1cm000|7k800|9q000|9d1c0|9d1c0|9d1c0|iio0|ivmo0|902o0|9d1c0|9d1c0|a2yo0|8n400|gfyyg0|8zzw0|9d9o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Vilnius",
            title: "Vilnius",
            winIndex: 59,
            offsets: [1.4, 1.5933333333333333, 1, 2, 3, 4],
            offsetIndices: "012324323234545454545454545443434343434343434332334343434343434343434343434343434343434343434343434343434343434343434343",
            untils: "-rns980|1g224o|e75nc|4kqk0|acbs40|gpp40|pits0|7k800|9q000|9d1c0|65zo0|j4vx80|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x9g0|asw00|7x6o0|b5uo0|1s3eo0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Volgograd",
            title: "Volgograd",
            winIndex: 58,
            offsets: [2.961111111111111, 3, 4, 5],
            offsetIndices: "011223232323232323221212122121212121212121212121212121212121212121",
            untils: "-q3cw84|2qrjw4|2pu800|gdt980|a48yo0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9d1c0|9d1c0|9q000|9d1c0|ipzw0|9d440|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|1vbzw0|Infinity"
        }, {
            id: "Europe/Warsaw",
            title: "Warsaw",
            winIndex: 51,
            offsets: [1.4, 1, 2, 3],
            offsetIndices: "012121223212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-se9yk0|dvyc0|7ves0|a4yw0|7x6o0|asw00|7x6o0|aunw0|7x6o0|1evbs0|9fcwc0|18cao0|7k800|9q000|9d1c0|9gnw0|an980|9kd80|8fs40|922w0|ar1c0|7x6o0|a2yo0|8n400|9q000|902o0|4013w0|64dc0|9d1c0|9d1c0|clpc0|6hc00|9d1c0|9d1c0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|clpc0|64dc0|6j4tc0|902o0|9q000|9d1c0|9d1c0|9d1c0|9q000|902o0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d440|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Zaporozhye",
            title: "Zaporozhye",
            winIndex: 59,
            offsets: [2.3333333333333335, 2, 3, 1, 4],
            offsetIndices: "01213132424242424242424242422121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121",
            untils: "-nu12hc|37a0xc|5u1180|mc0g0|7k800|9q000|12qg0|jjc7s0|9et80|9d440|9et80|9d440|9et80|9eys0|9d6w0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9cvs0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9dcg0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Europe/Zurich",
            title: "Zurich",
            winIndex: 27,
            offsets: [1, 2],
            offsetIndices: "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-eyh6o0|7x6o0|asw00|7x6o0|k2zus0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9d1c0|9q000|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|7x6o0|b5uo0|7k800|b5uo0|7k800|b5uo0|7k800|b5uo0|7x6o0|asw00|7x6o0|asw00|Infinity"
        }, {
            id: "Indian/Chagos",
            title: "Chagos",
            winIndex: 21,
            offsets: [4.827777777777778, 5, 6],
            offsetIndices: "012",
            untils: "-wvpc2s|1ag64us|Infinity"
        }, {
            id: "Indian/Christmas",
            title: "Christmas",
            winIndex: 6,
            offsets: [7],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Indian/Cocos",
            title: "Cocos",
            winIndex: 87,
            offsets: [6.5],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Indian/Kerguelen",
            title: "Kerguelen",
            winIndex: 17,
            offsets: [0, 5],
            offsetIndices: "01",
            untils: "-afrs00|Infinity"
        }, {
            id: "Indian/Mahe",
            title: "Mahe",
            winIndex: 97,
            offsets: [3.6966666666666668, 4],
            offsetIndices: "01",
            untils: "-x6pjlo|Infinity"
        }, {
            id: "Indian/Maldives",
            title: "Maldives",
            winIndex: 17,
            offsets: [4.9, 5],
            offsetIndices: "01",
            untils: "-57x6y0|Infinity"
        }, {
            id: "Indian/Mauritius",
            title: "Mauritius",
            winIndex: 97,
            offsets: [3.8333333333333335, 4, 5],
            offsetIndices: "012121",
            untils: "-wvp9bc|13jnu7c|8bx80|dd0wc0|7x3w0|Infinity"
        }, {
            id: "Indian/Reunion",
            title: "Reunion",
            winIndex: 97,
            offsets: [3.697777777777778, 4],
            offsetIndices: "01",
            untils: "-uks29s|Infinity"
        }, {
            id: "MST7MDT",
            title: "MST7MDT",
            winIndex: 15,
            offsets: [-7, -6],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0epo0|ast80|7x9g0|ast80|bmtus0|1tz5k0|2dvo0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "Pacific/Apia",
            title: "Apia",
            winIndex: 98,
            offsets: [-11.448888888888888, -11.5, -11, -10, 14, 13],
            offsetIndices: "01232345454545454545454545454545454545454545454545454545454",
            untils: "-usiiv4|kcrmt4|vp3la0|9odo0|902o0|4zbk0|4qog0|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|a2yo0|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|Infinity"
        }, {
            id: "Pacific/Auckland",
            title: "Auckland",
            winIndex: 8,
            offsets: [11.5, 12.5, 12, 13],
            offsetIndices: "01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323",
            untils: "-m01p20|64ak0|biw40|7x5a0|asxe0|7x5a0|asxe0|7x5a0|asxe0|8a3y0|afyq0|8a3y0|afyq0|afvy0|7x820|asum0|7x820|asum0|7x820|asum0|7x820|asum0|7x820|b5ta0|7k9e0|b5ta0|7x820|hsl2m0|5reo0|clpc0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6hc00|c8qo0|6uao0|c8qo0|6hc00|b5uo0|8a5c0|afxc0|8a5c0|afxc0|8a5c0|afxc0|8n400|a2yo0|8n400|a2yo0|8n400|a2yo0|8n400|afxc0|8a5c0|afxc0|8a5c0|afxc0|8n400|a2yo0|8n400|a2yo0|8n400|afxc0|8a5c0|afxc0|8a5c0|afxc0|8n400|a2yo0|8n400|a2yo0|8n400|a2yo0|8n400|a2yo0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|a2yo0|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|902o0|9q000|9d1c0|9q000|902o0|9q000|902o0|Infinity"
        }, {
            id: "Pacific/Chuuk",
            title: "Chuuk",
            winIndex: 50,
            offsets: [10],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Efate",
            title: "Efate",
            winIndex: 48,
            offsets: [11.22111111111111, 11, 12],
            offsetIndices: "0121212121212121212121",
            untils: "-u964i4|11f4ba4|9cyk0|awo40|7tek0|9q2s0|8zzw0|9q2s0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9q2s0|64ak0|e1ms0|4ofw0|Infinity"
        }, {
            id: "Pacific/Enderbury",
            title: "Enderbury",
            winIndex: 94,
            offsets: [-12, -11, 13],
            offsetIndices: "012",
            untils: "535io0|7ykl80|Infinity"
        }, {
            id: "Pacific/Fakaofo",
            title: "Fakaofo",
            winIndex: 94,
            offsets: [-11, 13],
            offsetIndices: "01",
            untils: "lx0jw0|Infinity"
        }, {
            id: "Pacific/Fiji",
            title: "Fiji",
            winIndex: 99,
            offsets: [11.928888888888888, 12, 13],
            offsetIndices: "0121212121212121212121212121212121212121212121212121212121212121",
            untils: "-sa2x4w|17bs00w|64dc0|cyo00|5reo0|53a5c0|64dc0|asw00|6uao0|bvs00|4oio0|e1k00|4oio0|eeio0|4bh80|erk40|3ylc0|erhc0|3ylc0|f4g00|3lmo0|f4g00|3ylc0|erhc0|3ylc0|erhc0|3ylc0|erhc0|3ylc0|f4g00|3lmo0|f4g00|3lmo0|f4g00|3ylc0|erhc0|3ylc0|erhc0|3ylc0|erhc0|3ylc0|f4g00|3lmo0|f4g00|3ylc0|erhc0|3ylc0|erhc0|3ylc0|erhc0|3ylc0|f4g00|3lmo0|f4g00|3lmo0|f4g00|3ylc0|erhc0|3ylc0|erhc0|3ylc0|erhc0|3ylc0|Infinity"
        }, {
            id: "Pacific/Funafuti",
            title: "Funafuti",
            winIndex: 44,
            offsets: [12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Galapagos",
            title: "Galapagos",
            winIndex: 67,
            offsets: [-5.973333333333333, -5, -6],
            offsetIndices: "012",
            untils: "-kcr62o|spdryo|Infinity"
        }, {
            id: "Pacific/Guadalcanal",
            title: "Guadalcanal",
            winIndex: 48,
            offsets: [10.663333333333332, 11],
            offsetIndices: "01",
            untils: "-tvowac|Infinity"
        }, {
            id: "Pacific/Guam",
            title: "Guam",
            winIndex: 50,
            offsets: [10],
            offsetIndices: "00",
            untils: "g5z2w0|Infinity"
        }, {
            id: "Pacific/Honolulu",
            title: "Honolulu",
            winIndex: 57,
            offsets: [-10.5, -9.5, -10],
            offsetIndices: "010102",
            untils: "-j50la0|13l00|4jvb00|1wd180|votg0|Infinity"
        }, {
            id: "Pacific/Kiritimati",
            title: "Kiritimati",
            winIndex: 95,
            offsets: [-10.666666666666666, -10, 14],
            offsetIndices: "012",
            untils: "535eyo|7ykm5c|Infinity"
        }, {
            id: "Pacific/Kosrae",
            title: "Kosrae",
            winIndex: 48,
            offsets: [11, 12],
            offsetIndices: "010",
            untils: "-4r7w0|f9l3w0|Infinity"
        }, {
            id: "Pacific/Kwajalein",
            title: "Kwajalein",
            winIndex: 44,
            offsets: [11, -12, 12],
            offsetIndices: "012",
            untils: "-4r7w0|cgtbw0|Infinity"
        }, {
            id: "Pacific/Majuro",
            title: "Majuro",
            winIndex: 44,
            offsets: [11, 12],
            offsetIndices: "01",
            untils: "-4r7w0|Infinity"
        }, {
            id: "Pacific/Midway",
            title: "Midway",
            winIndex: 49,
            link: 530
        }, {
            id: "Pacific/Nauru",
            title: "Nauru",
            winIndex: 44,
            offsets: [11.127777777777776, 11.5, 9, 12],
            offsetIndices: "01213",
            untils: "-pjxiws|b1kxms|19h8a0|i43qe0|Infinity"
        }, {
            id: "Pacific/Niue",
            title: "Niue",
            winIndex: 49,
            offsets: [-11.333333333333334, -11.5, -11],
            offsetIndices: "012",
            untils: "-9wyz6o|ehcj4o|Infinity"
        }, {
            id: "Pacific/Noumea",
            title: "Noumea",
            winIndex: 48,
            offsets: [11.096666666666666, 11, 12],
            offsetIndices: "01212121",
            untils: "-u9645o|ye0ixo|4dbw0|ecqs0|4f6k0|99p700|4oio0|Infinity"
        }, {
            id: "Pacific/Pago_Pago",
            title: "Pago Pago",
            winIndex: 49,
            offsets: [-11.379999999999999, -11],
            offsetIndices: "0111",
            untils: "-usij20|tcsey0|8p4800|Infinity"
        }, {
            id: "Pacific/Palau",
            title: "Palau",
            winIndex: 43,
            offsets: [9],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Pohnpei",
            title: "Pohnpei",
            winIndex: 48,
            offsets: [11],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Port_Moresby",
            title: "Port Moresby",
            winIndex: 50,
            offsets: [10],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Rarotonga",
            title: "Rarotonga",
            winIndex: 57,
            offsets: [-10.5, -9.5, -10],
            offsetIndices: "012121212121212121212121212",
            untils: "4mj960|5rbw0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6ham0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|6ham0|Infinity"
        }, {
            id: "Pacific/Saipan",
            title: "Saipan",
            winIndex: 50,
            link: 520
        }, {
            id: "Pacific/Tahiti",
            title: "Tahiti",
            winIndex: 57,
            offsets: [-9.97111111111111, -10],
            offsetIndices: "01",
            untils: "-tvnayw|Infinity"
        }, {
            id: "Pacific/Tarawa",
            title: "Tarawa",
            winIndex: 44,
            offsets: [12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Tongatapu",
            title: "Tongatapu",
            winIndex: 94,
            offsets: [12.333333333333334, 13, 14],
            offsetIndices: "01212121",
            untils: "-f4vrlc|uo2edc|8fpc0|bvs00|4bh80|eelg0|4bh80|Infinity"
        }, {
            id: "Pacific/Wake",
            title: "Wake",
            winIndex: 44,
            offsets: [12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "Pacific/Wallis",
            title: "Wallis",
            winIndex: 44,
            offsets: [12],
            offsetIndices: "0",
            untils: "Infinity"
        }, {
            id: "PST8PDT",
            title: "PST8PDT",
            winIndex: 11,
            offsets: [-8, -7],
            offsetIndices: "010101101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010",
            untils: "-r0emw0|ast80|7x9g0|ast80|bmtus0|1tz2s0|2dyg0|b9gdg0|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|9d440|9cyk0|9d440|9cyk0|3lpg0|f4d80|64g40|clmk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|9d440|9px80|905g0|9px80|9d440|9cyk0|9d440|9cyk0|9d440|9cyk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|8a840|afuk0|8a840|afuk0|8a840|ast80|7x9g0|ast80|7x9g0|ast80|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6udg0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|6hes0|c8nw0|Infinity"
        }, {
            id: "Australia/Eucla",
            title: "Eucla",
            winIndex: 100,
            offsets: [8.591111111111111, 8.75, 9.75],
            offsetIndices: "01212121212121212121",
            untils: "-12nxx74|b053ls|49s2c|cxfms0|4h180|9d440|9cyk0|ghf1g0|6hc00|4ir9c0|6hc00|40r400|5eg00|7p9hc0|5reo0|b5uo0|7x6o0|asw00|7x6o0|Infinity"
        }, {
            id: "Australia/Lord_Howe",
            title: "Eucla",
            winIndex: 101,
            offsets: [10.605555555555556, 10, 10.5, 11.5, 11],
            offsetIndices: "01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424",
            untils: "-133j6sk|18x8f0k|c8uu0|6u7w0|c8tg0|6h980|c8tg0|6h980|c8tg0|6h980|c8tg0|777y0|b5w20|7k6m0|biuq0|7k6m0|biuq0|777y0|biuq0|6ham0|c8s20|6ham0|c8s20|6ham0|c8s20|6u9a0|c8s20|6ham0|c8s20|6ham0|c8s20|7x5a0|asxe0|7x5a0|asxe0|7x5a0|asxe0|7x5a0|b5w20|7k6m0|7x820|asum0|b5w20|7x5a0|asxe0|7x5a0|asxe0|7x5a0|b5w20|7k6m0|b5w20|7x5a0|asxe0|7k6m0|b5w20|8a3y0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9q1e0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9q1e0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9pym0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9q1e0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9d2q0|9czy0|9q1e0|9czy0|9d2q0|9czy0|9d2q0|Infinity"
        }];
        module.exports = {
            displayNames: displayNames,
            timezones: timezones
        }
    },
    /*!****************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/tooltip_strategies/desktopTooltipStrategy.js ***!
      \****************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.DesktopTooltipStrategy = void 0;
        var _tooltipStrategyBase = __webpack_require__( /*! ./tooltipStrategyBase */ 398);
        var _tooltip = __webpack_require__( /*! ../../tooltip */ 168);
        var _tooltip2 = _interopRequireDefault(_tooltip);
        var _support = __webpack_require__( /*! ../../../core/utils/support */ 46);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var APPOINTMENT_TOOLTIP_WRAPPER_CLASS = "dx-scheduler-appointment-tooltip-wrapper";
        var MAX_TOOLTIP_HEIGHT = 200;
        exports.DesktopTooltipStrategy = function(_TooltipStrategyBase) {
            _inherits(DesktopTooltipStrategy, _TooltipStrategyBase);
            var _super = _createSuper(DesktopTooltipStrategy);

            function DesktopTooltipStrategy(options) {
                var _this;
                _classCallCheck(this, DesktopTooltipStrategy);
                _this = _super.call(this, options);
                _this._skipHidingOnScroll = false;
                return _this
            }
            _createClass(DesktopTooltipStrategy, [{
                key: "_showCore",
                value: function(target, dataList) {
                    _get(_getPrototypeOf(DesktopTooltipStrategy.prototype), "_showCore", this).call(this, target, dataList);
                    this._tooltip.option("position", {
                        my: "bottom",
                        at: "top",
                        boundary: this._getBoundary(dataList),
                        offset: this._extraOptions.offset,
                        collision: "fit flipfit"
                    })
                }
            }, {
                key: "_getBoundary",
                value: function(dataList) {
                    return this._options.isAppointmentInAllDayPanel(dataList[0].data) ? this._options.container : this._options.getScrollableContainer()
                }
            }, {
                key: "_onShown",
                value: function() {
                    _get(_getPrototypeOf(DesktopTooltipStrategy.prototype), "_onShown", this).call(this);
                    if (this._extraOptions.isButtonClick) {
                        this._list.focus();
                        this._list.option("focusedElement", null)
                    }
                }
            }, {
                key: "_createListOption",
                value: function(target, dataList) {
                    var result = _get(_getPrototypeOf(DesktopTooltipStrategy.prototype), "_createListOption", this).call(this, target, dataList);
                    result.showScrollbar = _support.touch ? "always" : "onHover";
                    return result
                }
            }, {
                key: "_createTooltip",
                value: function(target, dataList) {
                    var _this2 = this;
                    var tooltip = this._createTooltipElement(APPOINTMENT_TOOLTIP_WRAPPER_CLASS);
                    return this._options.createComponent(tooltip, _tooltip2.default, {
                        target: target,
                        onShowing: this._onTooltipShowing.bind(this),
                        closeOnTargetScroll: function() {
                            return _this2._skipHidingOnScroll
                        },
                        maxHeight: MAX_TOOLTIP_HEIGHT,
                        rtlEnabled: this._extraOptions.rtlEnabled,
                        onShown: this._onShown.bind(this),
                        contentTemplate: this._getContentTemplate(dataList)
                    })
                }
            }, {
                key: "_onListRender",
                value: function(e) {
                    return this._extraOptions.dragBehavior && this._extraOptions.dragBehavior(e)
                }
            }, {
                key: "dispose",
                value: function() {
                    clearTimeout(this._skipHidingOnScrollTimeId)
                }
            }, {
                key: "_onTooltipShowing",
                value: function() {
                    var _this3 = this;
                    clearTimeout(this._skipHidingOnScrollTimeId);
                    this._skipHidingOnScroll = true;
                    this._skipHidingOnScrollTimeId = setTimeout(function() {
                        _this3._skipHidingOnScroll = false;
                        clearTimeout(_this3._skipHidingOnScrollTimeId)
                    }, 0)
                }
            }]);
            return DesktopTooltipStrategy
        }(_tooltipStrategyBase.TooltipStrategyBase)
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/tooltip_strategies/mobileTooltipStrategy.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.MobileTooltipStrategy = void 0;
        var _overlay = __webpack_require__( /*! ../../overlay */ 58);
        var _overlay2 = _interopRequireDefault(_overlay);
        var _tooltipStrategyBase = __webpack_require__( /*! ./tooltipStrategyBase */ 398);
        var _window = __webpack_require__( /*! ../../../core/utils/window */ 7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var SLIDE_PANEL_CLASS_NAME = "dx-scheduler-overlay-panel";
        var MAX_OVERLAY_HEIGHT = 250;
        var animationConfig = {
            show: {
                type: "slide",
                duration: 300,
                from: {
                    position: {
                        my: "top",
                        at: "bottom",
                        of: (0, _window.getWindow)()
                    }
                },
                to: {
                    position: {
                        my: "center",
                        at: "center",
                        of: (0, _window.getWindow)()
                    }
                }
            },
            hide: {
                type: "slide",
                duration: 300,
                to: {
                    position: {
                        my: "top",
                        at: "bottom",
                        of: (0, _window.getWindow)()
                    }
                },
                from: {
                    position: {
                        my: "center",
                        at: "center",
                        of: (0, _window.getWindow)()
                    }
                }
            }
        };
        var positionConfig = {
            my: "bottom",
            at: "bottom",
            of: (0, _window.getWindow)()
        };
        exports.MobileTooltipStrategy = function(_TooltipStrategyBase) {
            _inherits(MobileTooltipStrategy, _TooltipStrategyBase);
            var _super = _createSuper(MobileTooltipStrategy);

            function MobileTooltipStrategy() {
                _classCallCheck(this, MobileTooltipStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(MobileTooltipStrategy, [{
                key: "_shouldUseTarget",
                value: function() {
                    return false
                }
            }, {
                key: "_onShowing",
                value: function() {
                    this._tooltip.option("height", "auto");
                    var height = this._list.$element().outerHeight();
                    this._tooltip.option("height", height > MAX_OVERLAY_HEIGHT ? MAX_OVERLAY_HEIGHT : "auto")
                }
            }, {
                key: "_createTooltip",
                value: function(target, dataList) {
                    var _this = this;
                    var $overlay = this._createTooltipElement(SLIDE_PANEL_CLASS_NAME);
                    return this._options.createComponent($overlay, _overlay2.default, {
                        shading: false,
                        position: positionConfig,
                        animation: animationConfig,
                        target: this._options.container,
                        container: this._options.container,
                        closeOnOutsideClick: true,
                        width: "100%",
                        height: "auto",
                        onShowing: function() {
                            return _this._onShowing()
                        },
                        onShown: this._onShown.bind(this),
                        contentTemplate: this._getContentTemplate(dataList)
                    })
                }
            }]);
            return MobileTooltipStrategy
        }(_tooltipStrategyBase.TooltipStrategyBase)
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/appointmentPopup.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _window2 = _interopRequireDefault(_window);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.appointment_form */ 728);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _object = __webpack_require__( /*! ../../core/utils/object */ 47);
        var _object2 = _interopRequireDefault(_object);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ./ui.loading */ 399);
        var _ui2 = _interopRequireDefault(_ui);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var toMs = _date2.default.dateToMilliseconds;
        var WIDGET_CLASS = "dx-scheduler";
        var APPOINTMENT_POPUP_CLASS = "".concat(WIDGET_CLASS, "-appointment-popup");
        var APPOINTMENT_POPUP_WIDTH = 485;
        var APPOINTMENT_POPUP_WIDTH_WITH_RECURRENCE = 970;
        var APPOINTMENT_POPUP_FULLSCREEN_WINDOW_WIDTH = 1e3;
        var APPOINTMENT_POPUP_FULLSCREEN_WINDOW_WIDTH_MOBILE = 500;
        var APPOINTMENT_POPUP_WIDTH_MOBILE = 350;
        var TOOLBAR_ITEM_AFTER_LOCATION = "after";
        var TOOLBAR_ITEM_BEFORE_LOCATION = "before";
        var AppointmentPopup = function() {
            function AppointmentPopup(scheduler) {
                _classCallCheck(this, AppointmentPopup);
                this.scheduler = scheduler;
                this._popup = null;
                this._appointmentForm = null;
                this.state = {
                    lastEditData: null,
                    saveChangesLocker: false,
                    appointment: {
                        data: null,
                        processTimeZone: false,
                        isEmptyText: false,
                        isEmptyDescription: false
                    }
                }
            }
            _createClass(AppointmentPopup, [{
                key: "show",
                value: function() {
                    var data = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
                    var showButtons = arguments.length > 1 ? arguments[1] : void 0;
                    var processTimeZone = arguments.length > 2 ? arguments[2] : void 0;
                    this.state.appointment.data = data;
                    this.state.appointment.processTimeZone = processTimeZone;
                    if (!this._popup) {
                        var popupConfig = this._createPopupConfig(showButtons);
                        this._popup = this._createPopup(popupConfig)
                    } else {
                        this._updateForm()
                    }
                    this._popup.show()
                }
            }, {
                key: "hide",
                value: function() {
                    this._popup.hide()
                }
            }, {
                key: "isVisible",
                value: function() {
                    return this._popup ? this._popup.option("visible") : false
                }
            }, {
                key: "getPopup",
                value: function() {
                    return this._popup
                }
            }, {
                key: "dispose",
                value: function() {
                    if (this._$popup) {
                        this._popup.$element().remove();
                        this._$popup = null
                    }
                }
            }, {
                key: "_createPopup",
                value: function(options) {
                    var popupElement = (0, _renderer2.default)("<div>").addClass(APPOINTMENT_POPUP_CLASS).appendTo(this.scheduler.$element());
                    return this.scheduler._createComponent(popupElement, _popup2.default, options)
                }
            }, {
                key: "_createPopupConfig",
                value: function(showButtons) {
                    var _this = this;
                    return {
                        height: "auto",
                        maxHeight: "100%",
                        toolbarItems: showButtons ? this._getPopupToolbarItems() : [],
                        showCloseButton: false,
                        showTitle: false,
                        onHiding: function() {
                            _this.scheduler.focus()
                        },
                        contentTemplate: function() {
                            return _this._createPopupContent()
                        },
                        onShowing: this._onShowing.bind(this),
                        defaultOptionsRules: [{
                            device: function() {
                                return _devices2.default.current().android
                            },
                            options: {
                                showTitle: false
                            }
                        }]
                    }
                }
            }, {
                key: "_onShowing",
                value: function(e) {
                    var _this2 = this;
                    var arg = {
                        form: this._appointmentForm,
                        appointmentData: this.state.appointment.data,
                        cancel: false
                    };
                    this.scheduler._actions.onAppointmentFormOpening(arg);
                    this.scheduler._processActionResult(arg, function(canceled) {
                        if (canceled) {
                            e.cancel = true
                        } else {
                            _this2.updatePopupFullScreenMode()
                        }
                    })
                }
            }, {
                key: "_createPopupContent",
                value: function() {
                    var formElement = (0, _renderer2.default)("<div>");
                    this._appointmentForm = this._createForm(formElement);
                    this._updateForm();
                    return formElement
                }
            }, {
                key: "_createAppointmentFormData",
                value: function(appointmentData) {
                    var result = (0, _extend.extend)(true, {
                        repeat: !!appointmentData.recurrenceRule
                    }, appointmentData);
                    (0, _iterator.each)(this.scheduler._resourcesManager.getResourcesFromItem(result, true) || {}, function(name, value) {
                        return result[name] = value
                    });
                    return result
                }
            }, {
                key: "_createForm",
                value: function(element) {
                    var expr = this.scheduler._dataAccessors.expr;
                    var resources = this.scheduler.option("resources");
                    var allowTimeZoneEditing = this._getAllowTimeZoneEditing();
                    var appointmentData = this.state.appointment.data;
                    var formData = this._createAppointmentFormData(appointmentData);
                    var readOnly = this._isReadOnly(appointmentData);
                    _uiScheduler2.default.prepareAppointmentFormEditors(expr, this.scheduler, this.triggerResize.bind(this), this.changeSize.bind(this), formData, allowTimeZoneEditing, readOnly);
                    if (resources && resources.length) {
                        _uiScheduler2.default.concatResources(this.scheduler._resourcesManager.getEditors())
                    }
                    return _uiScheduler2.default.create(this.scheduler._createComponent.bind(this.scheduler), element, readOnly, formData)
                }
            }, {
                key: "_getAllowTimeZoneEditing",
                value: function() {
                    var scheduler = this.scheduler;
                    return scheduler.option("editing.allowTimeZoneEditing") || scheduler.option("editing.allowEditingTimeZones")
                }
            }, {
                key: "_isReadOnly",
                value: function(data) {
                    if (data && data.disabled) {
                        return true
                    }
                    return this.scheduler._editAppointmentData ? !this.scheduler._editing.allowUpdating : false
                }
            }, {
                key: "_updateForm",
                value: function() {
                    var _this$state$appointme = this.state.appointment,
                        data = _this$state$appointme.data,
                        processTimeZone = _this$state$appointme.processTimeZone;
                    var allDay = this.scheduler.fire("getField", "allDay", data);
                    var startDate = this.scheduler.fire("getField", "startDate", data);
                    var endDate = this.scheduler.fire("getField", "endDate", data);
                    this.state.appointment.isEmptyText = void 0 === data || void 0 === data.text;
                    this.state.appointment.isEmptyDescription = void 0 === data || void 0 === data.description;
                    var formData = (0, _extend.extend)({}, {
                        text: "",
                        description: "",
                        recurrenceRule: ""
                    }, this._createAppointmentFormData(data));
                    if (processTimeZone) {
                        if (startDate) {
                            startDate = this.scheduler.fire("convertDateByTimezone", startDate);
                            this.scheduler.fire("setField", "startDate", formData, startDate)
                        }
                        if (endDate) {
                            endDate = this.scheduler.fire("convertDateByTimezone", endDate);
                            this.scheduler.fire("setField", "endDate", formData, endDate)
                        }
                    }
                    var _this$scheduler$_data = this.scheduler._dataAccessors.expr,
                        startDateExpr = _this$scheduler$_data.startDateExpr,
                        endDateExpr = _this$scheduler$_data.endDateExpr,
                        recurrenceRuleExpr = _this$scheduler$_data.recurrenceRuleExpr;
                    var recurrenceEditorOptions = this._getEditorOptions(recurrenceRuleExpr);
                    var isRecurrence = _uiScheduler2.default.getRecurrenceRule(formData, this.scheduler._dataAccessors.expr);
                    this._setEditorOptions(recurrenceRuleExpr, (0, _extend.extend)({}, recurrenceEditorOptions, {
                        startDate: startDate,
                        visible: !!isRecurrence
                    }));
                    this._appointmentForm.option("readOnly", this._isReadOnly(data));
                    _uiScheduler2.default.updateFormData(this._appointmentForm, formData);
                    _uiScheduler2.default.setEditorsType(this._appointmentForm, startDateExpr, endDateExpr, allDay)
                }
            }, {
                key: "_getEditorOptions",
                value: function(name) {
                    if (!name) {
                        return
                    }
                    var editor = this._appointmentForm.itemOption(name);
                    return editor ? editor.editorOptions : {}
                }
            }, {
                key: "_setEditorOptions",
                value: function(name, options) {
                    if (!name) {
                        return
                    }
                    var editor = this._appointmentForm.itemOption(name);
                    editor && this._appointmentForm.itemOption(name, "editorOptions", options)
                }
            }, {
                key: "_isDeviceMobile",
                value: function() {
                    return "desktop" !== _devices2.default.current().deviceType
                }
            }, {
                key: "_isPopupFullScreenNeeded",
                value: function() {
                    var width = this._tryGetWindowWidth();
                    if (width) {
                        return this._isDeviceMobile() ? width < APPOINTMENT_POPUP_FULLSCREEN_WINDOW_WIDTH_MOBILE : width < APPOINTMENT_POPUP_FULLSCREEN_WINDOW_WIDTH
                    }
                    return false
                }
            }, {
                key: "_tryGetWindowWidth",
                value: function() {
                    if (_window2.default.hasWindow()) {
                        var window = _window2.default.getWindow();
                        return (0, _renderer2.default)(window).width()
                    }
                }
            }, {
                key: "triggerResize",
                value: function() {
                    this._popup && _dom2.default.triggerResizeEvent(this._popup.$element())
                }
            }, {
                key: "_getMaxWidth",
                value: function(isRecurrence) {
                    if (this._isDeviceMobile()) {
                        return APPOINTMENT_POPUP_WIDTH_MOBILE
                    }
                    return isRecurrence ? APPOINTMENT_POPUP_WIDTH_WITH_RECURRENCE : APPOINTMENT_POPUP_WIDTH
                }
            }, {
                key: "changeSize",
                value: function(isRecurrence) {
                    var isFullScreen = this._isPopupFullScreenNeeded();
                    this._popup.option({
                        maxWidth: isFullScreen ? "100%" : this._getMaxWidth(isRecurrence),
                        fullScreen: isFullScreen
                    })
                }
            }, {
                key: "updatePopupFullScreenMode",
                value: function() {
                    if (!this._appointmentForm) {
                        return
                    }
                    var isRecurrence = _uiScheduler2.default.getRecurrenceRule(this._appointmentForm.option("formData"), this.scheduler._dataAccessors.expr);
                    if (this.isVisible()) {
                        this.changeSize(isRecurrence)
                    }
                }
            }, {
                key: "_getPopupToolbarItems",
                value: function() {
                    var _this3 = this;
                    var isIOs = "ios" === _devices2.default.current().platform;
                    return [{
                        shortcut: "done",
                        options: {
                            text: _message2.default.format("Done")
                        },
                        location: TOOLBAR_ITEM_AFTER_LOCATION,
                        onClick: function(e) {
                            return _this3._doneButtonClickHandler(e)
                        }
                    }, {
                        shortcut: "cancel",
                        location: isIOs ? TOOLBAR_ITEM_BEFORE_LOCATION : TOOLBAR_ITEM_AFTER_LOCATION
                    }]
                }
            }, {
                key: "saveChanges",
                value: function(showLoadPanel) {
                    var _this4 = this;
                    var deferred = new _deferred.Deferred;
                    var validation = this._appointmentForm.validate();
                    var state = this.state.appointment;
                    var convert = function(obj, dateFieldName) {
                        var date = new Date(_this4.scheduler.fire("getField", dateFieldName, obj));
                        var tzDiff = _this4.scheduler._getTimezoneOffsetByOption() * toMs("hour") + _this4.scheduler.fire("getClientTimezoneOffset", date);
                        return new Date(date.getTime() + tzDiff)
                    };
                    showLoadPanel && this._showLoadPanel();
                    (0, _deferred.when)(validation && validation.complete || validation).done(function(validation) {
                        if (validation && !validation.isValid) {
                            _this4._hideLoadPanel();
                            deferred.resolve(false);
                            return
                        }
                        var formData = _object2.default.deepExtendArraySafe({}, _this4._getFormData(), true);
                        var oldData = _this4.scheduler._editAppointmentData;
                        var recData = _this4.scheduler._updatedRecAppointment;
                        if (state.isEmptyText && "" === formData.text) {
                            delete formData.text
                        }
                        if (state.isEmptyDescription && "" === formData.description) {
                            delete formData.description
                        }
                        if (void 0 === state.data.recurrenceRule && "" === formData.recurrenceRule) {
                            delete formData.recurrenceRule
                        }
                        if ((0, _type.isDefined)(formData.repeat)) {
                            delete formData.repeat
                        }
                        if (oldData) {
                            _this4.scheduler._convertDatesByTimezoneBack(false, formData)
                        }
                        if (oldData && !recData) {
                            _this4.scheduler.updateAppointment(oldData, formData).done(deferred.resolve)
                        } else {
                            if (recData) {
                                _this4.scheduler.updateAppointment(oldData, recData);
                                delete _this4.scheduler._updatedRecAppointment;
                                if ("number" === typeof _this4.scheduler._getTimezoneOffsetByOption()) {
                                    _this4.scheduler.fire("setField", "startDate", formData, convert.call(_this4, formData, "startDate"));
                                    _this4.scheduler.fire("setField", "endDate", formData, convert.call(_this4, formData, "endDate"))
                                }
                            }
                            _this4.scheduler.addAppointment(formData).done(deferred.resolve)
                        }
                        deferred.done(function() {
                            _this4._hideLoadPanel();
                            _this4.state.lastEditData = formData
                        })
                    });
                    return deferred.promise()
                }
            }, {
                key: "_getFormData",
                value: function() {
                    var formData = this._appointmentForm.option("formData");
                    var startDate = this.scheduler.fire("getField", "startDate", formData);
                    var endDate = this.scheduler.fire("getField", "endDate", formData);
                    this.scheduler.fire("setField", "startDate", formData, startDate);
                    this.scheduler.fire("setField", "endDate", formData, endDate);
                    return formData
                }
            }, {
                key: "_doneButtonClickHandler",
                value: function(e) {
                    e.cancel = true;
                    this.saveEditData()
                }
            }, {
                key: "saveEditData",
                value: function() {
                    var _this5 = this;
                    var deferred = new _deferred.Deferred;
                    if (this._tryLockSaveChanges()) {
                        (0, _deferred.when)(this.saveChanges(true)).done(function() {
                            if (_this5.state.lastEditData) {
                                var startDate = _this5.scheduler.fire("getField", "startDate", _this5.state.lastEditData);
                                _this5.scheduler._workSpace.updateScrollPosition(startDate);
                                _this5.state.lastEditData = null
                            }
                            _this5._unlockSaveChanges();
                            deferred.resolve()
                        })
                    }
                    return deferred.promise()
                }
            }, {
                key: "_hideLoadPanel",
                value: function() {
                    _ui2.default.hide()
                }
            }, {
                key: "_showLoadPanel",
                value: function() {
                    var $overlayContent = this._popup.overlayContent();
                    _ui2.default.show({
                        container: $overlayContent,
                        position: {
                            of: $overlayContent
                        }
                    })
                }
            }, {
                key: "_tryLockSaveChanges",
                value: function() {
                    if (false === this.state.saveChangesLocker) {
                        this.state.saveChangesLocker = true;
                        return true
                    }
                    return false
                }
            }, {
                key: "_unlockSaveChanges",
                value: function() {
                    this.state.saveChangesLocker = false
                }
            }]);
            return AppointmentPopup
        }();
        exports.default = AppointmentPopup
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.appointment_form.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _form = __webpack_require__( /*! ../form */ 144);
        var _form2 = _interopRequireDefault(_form);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _date_serialization2 = _interopRequireDefault(_date_serialization);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        __webpack_require__( /*! ./ui.scheduler.recurrence_editor */ 729);
        __webpack_require__( /*! ./timezones/ui.scheduler.timezone_editor */ 730);
        __webpack_require__( /*! ../text_area */ 341);
        __webpack_require__( /*! ../tag_box */ 244);
        __webpack_require__( /*! ../switch */ 340);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var SCREEN_SIZE_OF_SINGLE_COLUMN = 600;
        var SchedulerAppointmentForm = {
            _appointmentForm: {},
            _lockDateShiftFlag: false,
            _validateAppointmentFormDate: function(editor, value, previousValue) {
                var isCurrentDateCorrect = null === value || !!value;
                var isPreviousDateCorrect = null === previousValue || !!previousValue;
                if (!isCurrentDateCorrect && isPreviousDateCorrect) {
                    editor.option("value", previousValue)
                }
            },
            _getAllDayStartDate: function(startDate) {
                return new Date(new Date(startDate).setHours(0, 0, 0, 0))
            },
            _getAllDayEndDate: function(startDate) {
                return new Date(new Date(startDate).setDate(startDate.getDate() + 1))
            },
            _getStartDateWithStartHour: function(startDate, startDayHour) {
                return new Date(new Date(startDate).setHours(startDayHour))
            },
            create: function(componentCreator, $container, isReadOnly, formData) {
                this._appointmentForm = componentCreator($container, _form2.default, {
                    items: this._editors,
                    readOnly: isReadOnly,
                    showValidationSummary: true,
                    scrollingEnabled: true,
                    colCount: "auto",
                    colCountByScreen: {
                        lg: 2,
                        xs: 1
                    },
                    formData: formData,
                    showColonAfterLabel: false,
                    labelLocation: "top",
                    screenByWidth: function(width) {
                        return width < SCREEN_SIZE_OF_SINGLE_COLUMN || "desktop" !== _devices2.default.current().deviceType ? "xs" : "lg"
                    }
                });
                return this._appointmentForm
            },
            _dateBoxValueChanged: function(args, dateExpr, isNeedCorrect) {
                this._validateAppointmentFormDate(args.component, args.value, args.previousValue);
                var value = _date_serialization2.default.deserializeDate(args.value);
                var previousValue = _date_serialization2.default.deserializeDate(args.previousValue);
                var dateEditor = this._appointmentForm.getEditor(dateExpr);
                var dateValue = _date_serialization2.default.deserializeDate(dateEditor.option("value"));
                if (!this._appointmentForm._lockDateShiftFlag && dateValue && value && isNeedCorrect(dateValue, value)) {
                    var duration = previousValue ? dateValue.getTime() - previousValue.getTime() : 0;
                    dateEditor.option("value", new Date(value.getTime() + duration))
                }
            },
            _getTimezoneEditor: function(timeZoneExpr, secondTimeZoneExpr, visibleIndex, colSpan, schedulerInst, isMainTimeZone) {
                var _this = this;
                var isShow = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : false;
                return {
                    dataField: timeZoneExpr,
                    editorType: "dxSchedulerTimezoneEditor",
                    visibleIndex: visibleIndex,
                    colSpan: colSpan,
                    label: {
                        text: " "
                    },
                    editorOptions: {
                        observer: schedulerInst,
                        onValueChanged: function(args) {
                            var form = _this._appointmentForm;
                            var secondTimezoneEditor = form.getEditor(secondTimeZoneExpr);
                            if (isMainTimeZone) {
                                secondTimezoneEditor.option("value", args.value)
                            }
                        }
                    },
                    visible: isShow
                }
            },
            _getDateBoxEditor: function(dataExpr, colSpan, firstDayOfWeek, label, callback) {
                return {
                    dataField: dataExpr,
                    editorType: "dxDateBox",
                    colSpan: colSpan,
                    label: {
                        text: _message2.default.format(label)
                    },
                    validationRules: [{
                        type: "required"
                    }],
                    editorOptions: {
                        width: "100%",
                        calendarOptions: {
                            firstDayOfWeek: firstDayOfWeek
                        },
                        onValueChanged: callback
                    }
                }
            },
            _getDateBoxItems: function(dataExprs, schedulerInst, allowTimeZoneEditing) {
                var _this2 = this;
                var colSpan = allowTimeZoneEditing ? 2 : 1;
                var firstDayOfWeek = schedulerInst.option("firstDayOfWeek");
                return [this._getDateBoxEditor(dataExprs.startDateExpr, colSpan, firstDayOfWeek, "dxScheduler-editorLabelStartDate", function(args) {
                    _this2._dateBoxValueChanged(args, dataExprs.endDateExpr, function(endValue, startValue) {
                        return endValue < startValue
                    })
                }), this._getTimezoneEditor(dataExprs.startDateTimeZoneExpr, dataExprs.endDateTimeZoneExpr, 1, colSpan, schedulerInst, true, allowTimeZoneEditing), this._getDateBoxEditor(dataExprs.endDateExpr, colSpan, firstDayOfWeek, "dxScheduler-editorLabelEndDate", function(args) {
                    _this2._dateBoxValueChanged(args, dataExprs.startDateExpr, function(startValue, endValue) {
                        return endValue < startValue
                    })
                }), this._getTimezoneEditor(dataExprs.endDateTimeZoneExpr, dataExprs.startDateTimeZoneExpr, 3, colSpan, schedulerInst, false, allowTimeZoneEditing)]
            },
            _getMainItems: function(dataExprs, schedulerInst, triggerResize, changeSize, allowTimeZoneEditing) {
                var _this3 = this;
                return [{
                    dataField: dataExprs.textExpr,
                    editorType: "dxTextBox",
                    colSpan: 2,
                    label: {
                        text: _message2.default.format("dxScheduler-editorLabelTitle")
                    }
                }, {
                    itemType: "group",
                    colSpan: 2,
                    colCountByScreen: {
                        lg: 2,
                        xs: 1
                    },
                    items: this._getDateBoxItems(dataExprs, schedulerInst, allowTimeZoneEditing)
                }, {
                    itemType: "group",
                    colCountByScreen: {
                        lg: 3,
                        xs: 3
                    },
                    colSpan: 2,
                    items: [{
                        dataField: dataExprs.allDayExpr,
                        cssClass: "dx-appointment-form-switch",
                        editorType: "dxSwitch",
                        label: {
                            text: _message2.default.format("dxScheduler-allDay"),
                            location: "right"
                        },
                        editorOptions: {
                            onValueChanged: function(args) {
                                var value = args.value;
                                var startDateEditor = _this3._appointmentForm.getEditor(dataExprs.startDateExpr);
                                var endDateEditor = _this3._appointmentForm.getEditor(dataExprs.endDateExpr);
                                var startDate = _date_serialization2.default.deserializeDate(startDateEditor.option("value"));
                                if (!_this3._appointmentForm._lockDateShiftFlag && startDate) {
                                    if (value) {
                                        var allDayStartDate = _this3._getAllDayStartDate(startDate);
                                        startDateEditor.option("value", allDayStartDate);
                                        endDateEditor.option("value", _this3._getAllDayEndDate(allDayStartDate))
                                    } else {
                                        var startDateWithStartHour = _this3._getStartDateWithStartHour(startDate, schedulerInst.option("startDayHour"));
                                        var endDate = schedulerInst._workSpace.calculateEndDate(startDateWithStartHour);
                                        startDateEditor.option("value", startDateWithStartHour);
                                        endDateEditor.option("value", endDate)
                                    }
                                }
                                startDateEditor.option("type", value ? "date" : "datetime");
                                endDateEditor.option("type", value ? "date" : "datetime")
                            }
                        }
                    }, {
                        editorType: "dxSwitch",
                        dataField: "repeat",
                        cssClass: "dx-appointment-form-switch",
                        name: "visibilityChanged",
                        label: {
                            text: _message2.default.format("dxScheduler-editorLabelRecurrence"),
                            location: "right"
                        },
                        editorOptions: {
                            onValueChanged: function(args) {
                                var form = _this3._appointmentForm;
                                form.option("items[0].colSpan", args.value ? 1 : 2);
                                form.getEditor(dataExprs.recurrenceRuleExpr).option("visible", args.value);
                                changeSize(args.value);
                                triggerResize()
                            }
                        }
                    }]
                }, {
                    itemType: "empty",
                    colSpan: 2
                }, {
                    dataField: dataExprs.descriptionExpr,
                    editorType: "dxTextArea",
                    colSpan: 2,
                    label: {
                        text: _message2.default.format("dxScheduler-editorLabelDescription")
                    }
                }, {
                    itemType: "empty",
                    colSpan: 2
                }]
            },
            prepareAppointmentFormEditors: function(dataExprs, schedulerInst, triggerResize, changeSize, appointmentData, allowTimeZoneEditing, readOnly) {
                var _this4 = this;
                var recurrenceEditorVisibility = !!this.getRecurrenceRule(appointmentData, dataExprs);
                this._editors = [{
                    itemType: "group",
                    colCountByScreen: {
                        lg: 2,
                        xs: 1
                    },
                    colSpan: recurrenceEditorVisibility ? 1 : 2,
                    items: this._getMainItems(dataExprs, schedulerInst, triggerResize, changeSize, allowTimeZoneEditing)
                }, {
                    dataField: dataExprs.recurrenceRuleExpr,
                    editorType: "dxRecurrenceEditor",
                    editorOptions: {
                        readOnly: readOnly,
                        firstDayOfWeek: schedulerInst.option("firstDayOfWeek"),
                        onInitialized: function(e) {
                            var form = _this4._appointmentForm;
                            if (form.option) {
                                e.component.option("visible", !!_this4.getRecurrenceRule(form.option("formData"), dataExprs))
                            }
                        }
                    },
                    label: {
                        text: " ",
                        visible: false
                    }
                }];
                return this._editors
            },
            getRecurrenceRule: function(data, dataExprs) {
                return data[dataExprs.recurrenceRuleExpr]
            },
            concatResources: function(resources) {
                this._editors[0].items = this._editors[0].items.concat(resources)
            },
            setEditorsType: function(form, startDateExpr, endDateExpr, allDay) {
                var startDateFormItem = form.itemOption(startDateExpr);
                var endDateFormItem = form.itemOption(endDateExpr);
                if (startDateFormItem && endDateFormItem) {
                    var startDateEditorOptions = startDateFormItem.editorOptions;
                    var endDateEditorOptions = endDateFormItem.editorOptions;
                    startDateEditorOptions.type = endDateEditorOptions.type = allDay ? "date" : "datetime";
                    form.itemOption(startDateExpr, "editorOptions", startDateEditorOptions);
                    form.itemOption(endDateExpr, "editorOptions", endDateEditorOptions)
                }
            },
            updateFormData: function(appointmentForm, formData) {
                appointmentForm._lockDateShiftFlag = true;
                appointmentForm.option("formData", formData);
                appointmentForm._lockDateShiftFlag = false
            }
        };
        module.exports = SchedulerAppointmentForm
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.recurrence_editor.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _editor = __webpack_require__( /*! ../editor/editor */ 48);
        var _editor2 = _interopRequireDefault(_editor);
        var _radio_group = __webpack_require__( /*! ../radio_group */ 336);
        var _radio_group2 = _interopRequireDefault(_radio_group);
        var _button_group = __webpack_require__( /*! ../button_group */ 233);
        var _button_group2 = _interopRequireDefault(_button_group);
        var _number_box = __webpack_require__( /*! ../number_box */ 121);
        var _number_box2 = _interopRequireDefault(_number_box);
        var _select_box = __webpack_require__( /*! ../select_box */ 97);
        var _select_box2 = _interopRequireDefault(_select_box);
        var _date_box = __webpack_require__( /*! ../date_box */ 198);
        var _date_box2 = _interopRequireDefault(_date_box);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _date3 = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date4 = _interopRequireDefault(_date3);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.publisher_mixin */ 123);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var RECURRENCE_EDITOR = "dx-recurrence-editor";
        var LABEL_POSTFIX = "-label";
        var WRAPPER_POSTFIX = "-wrapper";
        var RECURRENCE_EDITOR_CONTAINER = "dx-recurrence-editor-container";
        var FREQUENCY_EDITOR = "dx-recurrence-selectbox-freq";
        var INTERVAL_EDITOR = "dx-recurrence-numberbox-interval";
        var INTERVAL_EDITOR_FIELD = "dx-recurrence-interval-field";
        var REPEAT_END_EDITOR = "dx-recurrence-repeat-end";
        var REPEAT_END_EDITOR_CONTAINER = "dx-recurrence-repeat-end-container";
        var REPEAT_TYPE_EDITOR = "dx-recurrence-radiogroup-repeat-type";
        var REPEAT_COUNT_EDITOR = "dx-recurrence-numberbox-repeat-count";
        var REPEAT_UNTIL_DATE_EDITOR = "dx-recurrence-datebox-until-date";
        var REPEAT_ON_EDITOR = "dx-recurrence-repeat-on";
        var REPEAT_ON_MONTH_EDITOR = "dx-recurrence-repeat-on-month";
        var DAY_OF_MONTH = "dx-recurrence-numberbox-day-of-month";
        var REPEAT_ON_YEAR_EDITOR = "dx-recurrence-repeat-on-year";
        var MONTH_OF_YEAR = "dx-recurrence-selectbox-month-of-year";
        var FIELD_CLASS = "dx-field";
        var RECURRENCE_FREQ_FIELD = "dx-recurrence-freq-field";
        var FIELD_LABEL_CLASS = "dx-field-label";
        var FIELD_VALUE_CLASS = "dx-field-value";
        var RECURRENCE_BUTTON_GROUP = "dx-recurrence-button-group";
        var defaultRecurrenceTypeIndex = 1;
        var frequenciesMessages = [{
            recurrence: "dxScheduler-recurrenceHourly",
            value: "hourly"
        }, {
            recurrence: "dxScheduler-recurrenceDaily",
            value: "daily"
        }, {
            recurrence: "dxScheduler-recurrenceWeekly",
            value: "weekly"
        }, {
            recurrence: "dxScheduler-recurrenceMonthly",
            value: "monthly"
        }, {
            recurrence: "dxScheduler-recurrenceYearly",
            value: "yearly"
        }];
        var frequencies = frequenciesMessages.map(function(item) {
            return {
                text: function() {
                    return _message2.default.format(item.recurrence)
                },
                value: item.value
            }
        });
        var repeatEndTypes = [{
            text: function() {
                return _message2.default.format("dxScheduler-recurrenceNever")
            },
            value: "never"
        }, {
            text: function() {
                return _message2.default.format("dxScheduler-recurrenceRepeatOnDate")
            },
            value: "until"
        }, {
            text: function() {
                return _message2.default.format("dxScheduler-recurrenceRepeatCount")
            },
            value: "count"
        }];
        var days = ["SU", "MO", "TU", "WE", "TH", "FR", "SA"];
        var DAYS_IN_WEEK = 7;
        var RecurrenceRule = function() {
            function RecurrenceRule(recurrence) {
                _classCallCheck(this, RecurrenceRule);
                this._recurrenceRule = _utils2.default.getRecurrenceRule(recurrence).rule
            }
            _createClass(RecurrenceRule, [{
                key: "makeRules",
                value: function(string) {
                    this._recurrenceRule = _utils2.default.getRecurrenceRule(string).rule
                }
            }, {
                key: "makeRule",
                value: function(field, value) {
                    if (!value) {
                        delete this._recurrenceRule[field];
                        return
                    }
                    if ((0, _type.isDefined)(field)) {
                        if ("until" === field) {
                            delete this._recurrenceRule.count
                        }
                        if ("count" === field) {
                            delete this._recurrenceRule.until
                        }
                        this._recurrenceRule[field] = value
                    }
                }
            }, {
                key: "repeatableRule",
                value: function() {
                    var rules = this._recurrenceRule;
                    if ("count" in rules) {
                        return "count"
                    }
                    if ("until" in rules) {
                        return "until"
                    }
                    return null
                }
            }, {
                key: "recurrenceString",
                value: function() {
                    return _utils2.default.getRecurrenceString(this._recurrenceRule)
                }
            }, {
                key: "rules",
                value: function() {
                    return this._recurrenceRule
                }
            }, {
                key: "daysFromByDayRule",
                value: function() {
                    return _utils2.default.daysFromByDayRule(this._recurrenceRule)
                }
            }]);
            return RecurrenceRule
        }();
        var RecurrenceEditor = _editor2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    value: null,
                    startDate: void 0,
                    firstDayOfWeek: void 0
                })
            },
            _getFirstDayOfWeek: function() {
                var firstDayOfWeek = this.option("firstDayOfWeek");
                return (0, _type.isDefined)(firstDayOfWeek) ? firstDayOfWeek : _date2.default.firstDayOfWeekIndex()
            },
            _createComponent: function(element, name) {
                var config = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
                this._extendConfig(config, {
                    readOnly: this.option("readOnly")
                });
                return this.callBase(element, name, config)
            },
            _init: function() {
                this.callBase();
                this._recurrenceRule = new RecurrenceRule(this.option("value"))
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(RECURRENCE_EDITOR);
                this._$container = (0, _renderer2.default)("<div>").addClass(RECURRENCE_EDITOR_CONTAINER).appendTo(this.$element());
                this._renderEditors();
                this._renderContainerVisibility(this.option("value"))
            },
            _renderContainerVisibility: function(value) {
                if (value) {
                    this._$container.show();
                    _dom2.default.triggerShownEvent(this._$container)
                } else {
                    this._$container.hide()
                }
            },
            _changeValueByVisibility: function(value) {
                this._renderContainerVisibility(value);
                if (value) {
                    if (!this.option("value")) {
                        this._handleDefaults()
                    }
                } else {
                    this._recurrenceRule.makeRules("");
                    this.option("value", "")
                }
            },
            _handleDefaults: function() {
                this._recurrenceRule.makeRule("freq", frequenciesMessages[defaultRecurrenceTypeIndex].value);
                this._changeEditorValue()
            },
            _changeEditorValue: function() {
                this.option("value", this._recurrenceRule.recurrenceString() || "")
            },
            _renderEditors: function() {
                this._renderFreqEditor();
                this._renderIntervalEditor();
                this._renderRepeatOnEditor();
                this._renderRepeatEndEditor()
            },
            _renderFreqEditor: function() {
                var _this = this;
                var freq = (this._recurrenceRule.rules().freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase();
                var $freqEditor = (0, _renderer2.default)("<div>").addClass(FREQUENCY_EDITOR).addClass(FIELD_VALUE_CLASS);
                var $freqEditorLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-editorLabelRecurrence")).addClass(FIELD_LABEL_CLASS);
                this._freqEditor = this._createComponent($freqEditor, _select_box2.default, {
                    field: "freq",
                    items: frequencies,
                    value: freq,
                    valueExpr: "value",
                    displayExpr: "text",
                    layout: "horizontal",
                    onValueChanged: function(args) {
                        _this._valueChangedHandler(args)
                    }
                });
                var $field = (0, _renderer2.default)("<div>").addClass(FIELD_CLASS).addClass(RECURRENCE_FREQ_FIELD).append($freqEditorLabel, $freqEditor);
                this._$container.append($field)
            },
            _renderIntervalEditor: function() {
                var freq = this._recurrenceRule.rules().freq || "daily";
                var $intervalEditor = (0, _renderer2.default)("<div>").addClass(INTERVAL_EDITOR).addClass(FIELD_VALUE_CLASS);
                var $intervalEditorLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatEvery")).addClass(INTERVAL_EDITOR + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS);
                this._$intervalTypeLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeat".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase()))).addClass(REPEAT_TYPE_EDITOR + LABEL_POSTFIX);
                var interval = this._recurrenceRule.rules().interval || 1;
                this._intervalEditor = this._createComponent($intervalEditor, _number_box2.default, {
                    field: "interval",
                    min: 1,
                    value: interval,
                    showSpinButtons: true,
                    useLargeSpinButtons: false,
                    onValueChanged: this._valueChangedHandler.bind(this)
                });
                var $field = (0, _renderer2.default)("<div>").addClass(FIELD_CLASS).addClass(INTERVAL_EDITOR_FIELD).append($intervalEditorLabel, $intervalEditor, this._$intervalTypeLabel);
                this._$container.append($field);
                this._setAriaDescribedBy(this._intervalEditor, $intervalEditorLabel)
            },
            _renderRepeatOnEditor: function() {
                this._clearRepeatOnEditor();
                var freq = (this._recurrenceRule.rules().freq || "").toLowerCase();
                if (!(0, _type.isDefined)(this._$repeatOnEditor)) {
                    this._$repeatOnEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_EDITOR).addClass(FIELD_CLASS).appendTo(this._$container)
                }
                if (!freq || "daily" === freq || "minutely" === freq || "hourly" === freq) {
                    this._clearRepeatOnEditor();
                    this._clearRepeatOnLabel();
                    return
                }
                if (!(0, _type.isDefined)(this._$repeatOnLabel)) {
                    this._renderRepeatOnLabel(this._$repeatOnEditor)
                }
                if ("weekly" === freq && !this._$repeatOnWeek) {
                    this._renderRepeatOnWeekEditor();
                    return
                }
                if ("monthly" === freq && !this._$repeatOnMonth) {
                    this._renderRepeatOnMonthEditor();
                    return
                }
                if ("yearly" === freq && !this._$repeatOnYear) {
                    this._renderRepeatOnYearEditor();
                    return
                }
            },
            _renderRepeatOnLabel: function($element) {
                this._$repeatOnLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatOn")).addClass(REPEAT_ON_EDITOR + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS);
                $element.append(this._$repeatOnLabel)
            },
            _clearRepeatOnEditor: function() {
                if ((0, _type.isDefined)(this._$repeatOnWeek)) {
                    this._$repeatOnWeek.detach();
                    this._$repeatOnWeek.remove();
                    delete this._$repeatOnWeek
                }
                if ((0, _type.isDefined)(this._$repeatOnMonth)) {
                    this._$repeatOnMonth.detach();
                    this._$repeatOnMonth.remove();
                    delete this._$repeatOnMonth
                }
                if ((0, _type.isDefined)(this._$repeatOnYear)) {
                    this._$repeatOnYear.detach();
                    this._$repeatOnYear.remove();
                    delete this._$repeatOnYear
                }
            },
            _clearRepeatOnLabel: function() {
                if ((0, _type.isDefined)(this._$repeatOnLabel)) {
                    this._$repeatOnLabel.detach();
                    this._$repeatOnLabel.remove();
                    delete this._$repeatOnLabel
                }
            },
            _getDayIndex: function() {
                var firstDayOfWeek = this._getFirstDayOfWeek();
                return function(index) {
                    return (index + firstDayOfWeek) % DAYS_IN_WEEK
                }
            },
            _renderRepeatOnWeekEditor: function() {
                var _this2 = this;
                var firstDayOfWeek = this._getFirstDayOfWeek();
                var byDay = this._recurrenceRule.rules().byday ? this._recurrenceRule.rules().byday.split(",") : days[firstDayOfWeek];
                var localDaysNames = _date2.default.getDayNames("abbreviated");
                var dayNames = days.slice(firstDayOfWeek).concat(days.slice(0, firstDayOfWeek));
                var itemsButtonGroup = localDaysNames.slice(firstDayOfWeek).concat(localDaysNames.slice(0, firstDayOfWeek)).map(function(item, index) {
                    return {
                        text: item,
                        key: dayNames[index]
                    }
                });
                this._$repeatOnWeek = (0, _renderer2.default)("<div>").addClass(RECURRENCE_BUTTON_GROUP).appendTo(this._$repeatOnEditor);
                this._weekEditor = this._createComponent(this._$repeatOnWeek, _button_group2.default, {
                    items: itemsButtonGroup,
                    selectionMode: "multiple",
                    selectedItemKeys: byDay,
                    keyExpr: "key",
                    onSelectionChanged: function(e) {
                        var selectedKeys = e.component.option("selectedItemKeys");
                        _this2._recurrenceRule.makeRule("byday", selectedKeys);
                        _this2._changeEditorValue()
                    }
                })
            },
            _daysOfWeekByRules: function() {
                var daysByRule = this._recurrenceRule.daysFromByDayRule();
                if (!daysByRule.length) {
                    daysByRule = [days[this.option("startDate").getDay()]]
                }
                return daysByRule
            },
            _renderRepeatOnMonthEditor: function() {
                this._$repeatOnMonth = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_MONTH_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatOnEditor);
                this._renderDayOfMonthEditor(this._$repeatOnMonth)
            },
            _renderRepeatOnYearEditor: function() {
                this._$repeatOnYear = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_YEAR_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatOnEditor);
                var months = [];
                var monthsNames = _date2.default.getMonthNames("wide");
                for (var i = 0; i < 12; i++) {
                    months[i] = {
                        value: String(i + 1),
                        text: monthsNames[i]
                    }
                }
                var byMonth = this._monthOfYearByRules();
                var $monthOfYear = (0, _renderer2.default)("<div>").addClass(MONTH_OF_YEAR).appendTo(this._$repeatOnYear);
                var monthChanged = function(args) {
                    this._valueChangedHandler.call(this, args);
                    var monthValue = parseInt(args.component.option("value"));
                    if (this._dayEditor && monthValue) {
                        var maxAllowedDay = new Date((new Date).getFullYear(), parseInt(monthValue), 0).getDate();
                        if (2 === monthValue) {
                            maxAllowedDay = 29
                        }
                        this._dayEditor.option("max", maxAllowedDay)
                    }
                };
                this._monthEditor = this._createComponent($monthOfYear, _select_box2.default, {
                    field: "bymonth",
                    items: months,
                    value: byMonth,
                    displayExpr: "text",
                    valueExpr: "value",
                    onValueChanged: monthChanged.bind(this)
                });
                this._renderDayOfMonthEditor(this._$repeatOnYear)
            },
            _monthOfYearByRules: function() {
                var monthByRule = this._recurrenceRule.rules().bymonth;
                if (!monthByRule) {
                    monthByRule = this.option("startDate").getMonth() + 1
                }
                return monthByRule
            },
            _renderDayOfMonthEditor: function($element) {
                var byMonthDay = this._dayOfMonthByRules();
                var $dayEditor = (0, _renderer2.default)("<div>").addClass(DAY_OF_MONTH);
                this._dayEditor = this._createComponent($dayEditor, _number_box2.default, {
                    field: "bymonthday",
                    min: 1,
                    max: 31,
                    showSpinButtons: true,
                    useLargeSpinButtons: false,
                    value: byMonthDay,
                    onValueChanged: this._valueChangedHandler.bind(this)
                });
                $element.append($dayEditor)
            },
            _dayOfMonthByRules: function() {
                var dayByRule = this._recurrenceRule.rules().bymonthday;
                if (!dayByRule) {
                    dayByRule = this.option("startDate").getDate()
                }
                return dayByRule
            },
            _setAriaDescribedBy: function(editor, $label) {
                var labelId = "label-".concat(new _guid2.default);
                editor.setAria("describedby", labelId);
                editor.setAria("id", labelId, $label)
            },
            _handleRepeatEndDefaults: function() {
                this._recurrenceRule.makeRule("count", 1);
                this._changeEditorValue()
            },
            _renderRepeatEndEditor: function(rule) {
                rule = (0, _type.isDefined)(rule) ? rule : this._recurrenceRule.repeatableRule();
                if (!rule) {
                    rule = "count"
                }
                if (!(0, _type.isDefined)(this._$repeatEndEditor)) {
                    (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceEnd")).addClass(REPEAT_END_EDITOR_CONTAINER + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS).appendTo(this._$container);
                    this._$repeatEndEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR_CONTAINER).addClass(FIELD_CLASS).appendTo(this._$container);
                    this._renderRepeatEndTypeEditor()
                }
            },
            _renderRepeatEndTypeEditor: function() {
                var _this3 = this;
                var repeatType = this._recurrenceRule.repeatableRule() || "never";
                this._$repeatTypeEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_TYPE_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatEndEditor);
                this._repeatTypeEditor = this._createComponent(this._$repeatTypeEditor, _radio_group2.default, {
                    items: repeatEndTypes,
                    value: repeatType,
                    displayExpr: "text",
                    valueExpr: "value",
                    itemTemplate: function(itemData) {
                        if ("count" === itemData.value) {
                            return _this3._renderRepeatCountEditor()
                        }
                        if ("until" === itemData.value) {
                            return _this3._renderRepeatUntilEditor()
                        }
                        return _this3._renderDefaultRepeatEnd()
                    },
                    layout: "vertical",
                    onValueChanged: this._repeatTypeValueChangedHandler.bind(this)
                });
                this._disableRepeatEndParts(repeatType)
            },
            _renderDefaultRepeatEnd: function() {
                var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
                (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceNever")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
                return $editorTemplate
            },
            _repeatTypeValueChangedHandler: function(args) {
                var value = args.value;
                this._disableRepeatEndParts(value);
                if ("until" === value) {
                    this._recurrenceRule.makeRule(value, this._getUntilValue())
                }
                if ("count" === value) {
                    this._recurrenceRule.makeRule(value, this._repeatCountEditor.option("value"))
                }
                if ("never" === value) {
                    this._recurrenceRule.makeRule("count", "");
                    this._recurrenceRule.makeRule("until", "")
                }
                this._changeEditorValue()
            },
            _disableRepeatEndParts: function(value) {
                if ("until" === value) {
                    this._repeatCountEditor.option("disabled", true);
                    this._repeatUntilDate.option("disabled", false)
                }
                if ("count" === value) {
                    this._repeatCountEditor.option("disabled", false);
                    this._repeatUntilDate.option("disabled", true)
                }
                if ("never" === value) {
                    this._repeatCountEditor.option("disabled", true);
                    this._repeatUntilDate.option("disabled", true)
                }
            },
            _renderRepeatCountEditor: function() {
                var repeatCount = this._recurrenceRule.rules().count || 1;
                var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
                (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceAfter")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
                this._$repeatCountEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_COUNT_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo($editorTemplate);
                (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatCount")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
                this._repeatCountEditor = this._createComponent(this._$repeatCountEditor, _number_box2.default, {
                    field: "count",
                    min: 1,
                    showSpinButtons: true,
                    useLargeSpinButtons: false,
                    value: repeatCount,
                    onValueChanged: this._repeatCountValueChangeHandler.bind(this)
                });
                return $editorTemplate
            },
            _repeatCountValueChangeHandler: function(args) {
                if ("count" !== this._recurrenceRule.repeatableRule()) {
                    return
                }
                var value = args.value;
                this._recurrenceRule.makeRule("count", value);
                this._changeEditorValue()
            },
            _formatUntilDate: function(date) {
                if (this._recurrenceRule.rules().until && _date4.default.sameDate(this._recurrenceRule.rules().until, date)) {
                    return date
                }
                return _date4.default.setToDayEnd(date)
            },
            _renderRepeatUntilEditor: function() {
                var repeatUntil = this._recurrenceRule.rules().until || this._formatUntilDate(new Date);
                var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
                (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceOn")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
                this._$repeatDateEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_UNTIL_DATE_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo($editorTemplate);
                this._repeatUntilDate = this._createComponent(this._$repeatDateEditor, _date_box2.default, {
                    field: "until",
                    value: repeatUntil,
                    type: "date",
                    onValueChanged: this._repeatUntilValueChangeHandler.bind(this),
                    calendarOptions: {
                        firstDayOfWeek: this._getFirstDayOfWeek()
                    }
                });
                return $editorTemplate
            },
            _repeatUntilValueChangeHandler: function(args) {
                if ("until" !== this._recurrenceRule.repeatableRule()) {
                    return
                }
                var untilDate = this._formatUntilDate(new Date(args.value));
                this._repeatUntilDate.option("value", untilDate);
                this._recurrenceRule.makeRule("until", untilDate);
                this._changeEditorValue()
            },
            _valueChangedHandler: function(args) {
                var value = args.component.option("value");
                var field = args.component.option("field");
                if (!this.option("visible")) {
                    this.option("value", "")
                } else {
                    this._recurrenceRule.makeRule(field, value);
                    this._makeRepeatOnRule(field, value);
                    this._changeEditorValue()
                }
            },
            _makeRepeatOnRule: function(field, value) {
                if ("freq" !== field) {
                    return
                }
                if ("daily" === value) {
                    this._recurrenceRule.makeRule("byday", "");
                    this._recurrenceRule.makeRule("bymonth", "");
                    this._recurrenceRule.makeRule("bymonthday", "")
                }
                if ("weekly" === value) {
                    this._recurrenceRule.makeRule("byday", this._daysOfWeekByRules());
                    this._recurrenceRule.makeRule("bymonth", "");
                    this._recurrenceRule.makeRule("bymonthday", "")
                }
                if ("monthly" === value) {
                    this._recurrenceRule.makeRule("bymonthday", this._dayOfMonthByRules());
                    this._recurrenceRule.makeRule("bymonth", "");
                    this._recurrenceRule.makeRule("byday", "")
                }
                if ("yearly" === value) {
                    this._recurrenceRule.makeRule("bymonthday", this._dayOfMonthByRules());
                    this._recurrenceRule.makeRule("bymonth", this._monthOfYearByRules());
                    this._recurrenceRule.makeRule("byday", "")
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        this._recurrenceRule.makeRules(args.value);
                        this._changeRepeatCountValue();
                        this._repeatTypeEditor.option("value", this._recurrenceRule.repeatableRule() || "never");
                        this._renderRepeatEndEditor();
                        this._renderRepeatOnEditor();
                        this._changeEditorsValues(this._recurrenceRule.rules());
                        this.callBase(args);
                        break;
                    case "startDate":
                        this._renderRepeatOnEditor();
                        this._makeRepeatOnRule("freq", this._recurrenceRule.rules().freq);
                        if ((0, _type.isDefined)(this._recurrenceRule.recurrenceString())) {
                            this._changeEditorValue()
                        }
                        break;
                    case "firstDayOfWeek":
                        this._renderRepeatOnEditor();
                        if (this._$repeatDateEditor) {
                            this._repeatUntilDate.option("calendarOptions.firstDayOfWeek", this._getFirstDayOfWeek())
                        }
                        break;
                    case "visible":
                        this._changeValueByVisibility(args.value);
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _changeEditorsValues: function(rules) {
                this._freqEditor.option("value", (rules.freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase());
                this._changeRepeatTypeLabel();
                this._intervalEditor.option("value", rules.interval || 1);
                this._changeRepeatCountValue();
                this._changeRepeatUntilValue();
                this._changeDayOfMonthValue();
                this._changeMonthOfYearValue()
            },
            _changeRepeatTypeLabel: function() {
                var $labels = this.$element().find(".".concat(REPEAT_TYPE_EDITOR).concat(LABEL_POSTFIX));
                if (!$labels.length) {
                    return
                }
                var freq = this._recurrenceRule.rules().freq || "daily";
                (0, _iterator.each)($labels, function(_, $label) {
                    (0, _renderer2.default)($label).text(_message2.default.format("dxScheduler-recurrenceRepeat".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase())))
                })
            },
            _changeRepeatCountValue: function() {
                if (!this._$repeatCountEditor) {
                    return
                }
                var count = this._recurrenceRule.rules().count || 1;
                this._repeatCountEditor.option("value", count)
            },
            _changeRepeatUntilValue: function() {
                if (!this._$repeatDateEditor) {
                    return
                }
                this._repeatUntilDate.option("value", this._getUntilValue())
            },
            _getUntilValue: function() {
                return this._recurrenceRule.rules().until || this._formatUntilDate(new Date)
            },
            _changeDayOfMonthValue: function() {
                if (!this._$repeatOnMonth && !this._$repeatOnYear) {
                    return
                }
                var day = this._dayOfMonthByRules() || 1;
                this._dayEditor.option("value", day)
            },
            _changeMonthOfYearValue: function() {
                if (!this._$repeatOnYear) {
                    return
                }
                var month = this._monthOfYearByRules() || 1;
                this._monthEditor.option("value", month)
            },
            toggle: function() {
                this._freqEditor.focus()
            },
            setAria: function() {
                if (this._switchEditor) {
                    this._switchEditor.setAria(arguments.length <= 0 ? void 0 : arguments[0], arguments.length <= 1 ? void 0 : arguments[1])
                }
            }
        }).include(_uiScheduler2.default);
        (0, _component_registrator2.default)("dxRecurrenceEditor", RecurrenceEditor);
        module.exports = RecurrenceEditor
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/timezones/ui.scheduler.timezone_editor.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var extend = __webpack_require__( /*! ../../../core/utils/extend */ 0).extend;
        var publisherMixin = __webpack_require__( /*! ../ui.scheduler.publisher_mixin */ 123);
        var messageLocalization = __webpack_require__( /*! ../../../localization/message */ 10);
        var Editor = __webpack_require__( /*! ../../editor/editor */ 48);
        var SelectBox = __webpack_require__( /*! ../../select_box */ 97);
        var TIMEZONE_EDITOR_CLASS = "dx-timezone-editor";
        var TIMEZONE_DISPLAY_NAME_SELECTBOX_CLASS = "dx-timezone-display-name";
        var TIMEZONE_IANA_ID_SELECTBOX_CLASS = "dx-timezone-iana-id";
        var SchedulerTimezoneEditor = Editor.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: null
                })
            },
            _createComponent: function(element, name, config) {
                config = config || {};
                this._extendConfig(config, {
                    readOnly: this.option("readOnly")
                });
                return this.callBase(element, name, config)
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(TIMEZONE_EDITOR_CLASS)
            },
            _render: function() {
                this._renderDisplayNameEditor();
                this._renderIanaIdEditor();
                this.callBase()
            },
            _renderDisplayNameEditor: function() {
                var noTzTitle = messageLocalization.format("dxScheduler-noTimezoneTitle");
                var value = this.invoke("getTimezoneDisplayNameById", this.option("value")) || noTzTitle;
                this._displayNameEditor = this._renderSelectBox(TIMEZONE_DISPLAY_NAME_SELECTBOX_CLASS, {
                    items: [noTzTitle].concat(this.invoke("getTimezonesDisplayName")),
                    value: value,
                    onValueChanged: function(e) {
                        this._processDisplayNameChanging(e.value)
                    }.bind(this)
                })
            },
            _renderIanaIdEditor: function() {
                this._ianaIdEditor = this._renderSelectBox(TIMEZONE_IANA_ID_SELECTBOX_CLASS, {
                    items: this._idsDataSource(),
                    value: this.option("value"),
                    onValueChanged: function(e) {
                        this.option("value", e.value)
                    }.bind(this),
                    valueExpr: "id",
                    displayExpr: "displayName",
                    disabled: this._calculateIanaIdEditorDisabledState()
                })
            },
            _renderSelectBox: function(cssClass, options) {
                options = options || {};
                var $element = $("<div>").addClass(cssClass);
                var selectBox = this._createComponent($element, SelectBox, options);
                this.$element().append($element);
                return selectBox
            },
            _idsDataSource: function() {
                return this.invoke("getSimilarTimezones", this.option("value"))
            },
            _calculateIanaIdEditorDisabledState: function() {
                return !this.option("value")
            },
            _processDisplayNameChanging: function(displayName) {
                var tzIds = this.invoke("getTimezonesIdsByDisplayName", displayName);
                var tzId = tzIds.length ? tzIds[0].id : null;
                this.option("value", tzId);
                this._ianaIdEditor.option({
                    value: tzId,
                    items: this._idsDataSource(tzIds),
                    disabled: this._calculateIanaIdEditorDisabledState()
                })
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "value":
                        this._ianaIdEditor.option({
                            value: value,
                            items: this._idsDataSource()
                        });
                        if (value) {
                            this._displayNameEditor.option("value", this.invoke("getTimezoneDisplayNameById", value))
                        } else {
                            this._displayNameEditor.option("value", messageLocalization.format("dxScheduler-noTimezoneTitle"))
                        }
                        this.callBase(args);
                        break;
                    case "readOnly":
                        this._displayNameEditor && this._displayNameEditor.option("readOnly", value);
                        this._ianaIdEditor && this._ianaIdEditor.option("readOnly", value);
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(publisherMixin);
        registerComponent("dxSchedulerTimezoneEditor", {}, SchedulerTimezoneEditor);
        module.exports = SchedulerTimezoneEditor
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.header.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var noop = __webpack_require__( /*! ../../core/utils/common */ 3).noop;
        var isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 4).each;
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 14).inArray;
        var camelize = __webpack_require__( /*! ../../core/utils/inflector */ 34).camelize;
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var Widget = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var publisherMixin = __webpack_require__( /*! ./ui.scheduler.publisher_mixin */ 123);
        var SchedulerNavigator = __webpack_require__( /*! ./ui.scheduler.navigator */ 732);
        var DropDownMenu = __webpack_require__( /*! ../drop_down_menu */ 201);
        var Tabs = __webpack_require__( /*! ../tabs */ 203);
        var errors = __webpack_require__( /*! ../../core/errors */ 22);
        var messageLocalization = __webpack_require__( /*! ../../localization/message */ 10);
        var COMPONENT_CLASS = "dx-scheduler-header";
        var VIEW_SWITCHER_CLASS = "dx-scheduler-view-switcher";
        var VIEW_SWITCHER_LABEL_CLASS = "dx-scheduler-view-switcher-label";
        var STEP_MAP = {
            day: "day",
            week: "week",
            workWeek: "workWeek",
            month: "month",
            timelineDay: "day",
            timelineWeek: "week",
            timelineWorkWeek: "workWeek",
            timelineMonth: "month",
            agenda: "agenda"
        };
        var VIEWS = ["day", "week", "workWeek", "month", "timelineDay", "timelineWeek", "timelineWorkWeek", "timelineMonth", "agenda"];
        var SchedulerHeader = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    views: [],
                    isAdaptive: false,
                    intervalCount: 1,
                    currentView: "day",
                    firstDayOfWeek: void 0,
                    currentDate: new Date,
                    min: void 0,
                    max: void 0,
                    useDropDownViewSwitcher: false,
                    _dropDownButtonIcon: "overlay"
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    currentView: true
                })
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "views":
                        this._validateViews();
                        this._viewSwitcher.option({
                            items: value,
                            selectedItem: this.option("currentView")
                        });
                        break;
                    case "customizeDateNavigatorText":
                        this._navigator.option(args.name, value);
                        break;
                    case "currentView":
                        this._viewSwitcher.option("selectedItem", value);
                        this._navigator.option("step", STEP_MAP[this._getCurrentViewType()]);
                        this._changeViewSwitcherLabelText();
                        break;
                    case "currentDate":
                        this._navigator.option("date", value);
                        break;
                    case "displayedDate":
                        this._navigator.option("displayedDate", value);
                        break;
                    case "min":
                    case "max":
                    case "firstDayOfWeek":
                    case "intervalCount":
                        this._navigator.option(args.name, value);
                        break;
                    case "tabIndex":
                    case "focusStateEnabled":
                        this._viewSwitcher.option(args.name, value);
                        this._navigator.option(args.name, value);
                        this.callBase(args);
                        break;
                    case "useDropDownViewSwitcher":
                        this._refreshViewSwitcher();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(COMPONENT_CLASS)
            },
            _initMarkup: function() {
                this.callBase();
                this._renderNavigator();
                this._renderViewSwitcher()
            },
            _renderNavigator: function() {
                this._navigator = this._createComponent("<div>", SchedulerNavigator, {
                    min: this.option("min"),
                    max: this.option("max"),
                    intervalCount: this.option("intervalCount"),
                    date: this.option("currentDate"),
                    step: STEP_MAP[this._getCurrentViewType()],
                    firstDayOfWeek: this.option("firstDayOfWeek"),
                    tabIndex: this.option("tabIndex"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    observer: this.option("observer"),
                    customizeDateNavigatorText: this.option("customizeDateNavigatorText")
                });
                this._navigator.$element().appendTo(this.$element())
            },
            _renderViewSwitcher: function() {
                this._validateViews();
                var $viewSwitcher = $("<div>").addClass(VIEW_SWITCHER_CLASS).appendTo(this.$element());
                this.option("useDropDownViewSwitcher") ? this._renderViewSwitcherDropDownMenu($viewSwitcher) : this._renderViewSwitcherTabs($viewSwitcher)
            },
            _validateViews: function() {
                var views = this.option("views");
                each(views, function(_, view) {
                    var isViewIsObject = typeUtils.isObject(view);
                    var viewType = isViewIsObject && view.type ? view.type : view;
                    if (inArray(viewType, VIEWS) === -1) {
                        errors.log("W0008", viewType)
                    }
                })
            },
            _getCurrentViewType: function() {
                var currentView = this.option("currentView");
                return currentView.type || currentView
            },
            _renderViewSwitcherTabs: function($element) {
                var that = this;
                $element.addClass(Tabs.getTabsExpandedClass);
                this._viewSwitcher = this._createComponent($element, Tabs, {
                    selectionRequired: true,
                    scrollingEnabled: true,
                    onSelectionChanged: this._updateCurrentView.bind(this),
                    items: this.option("views"),
                    itemTemplate: function(item) {
                        return $("<span>").addClass("dx-tab-text").text(that._getItemText(item))
                    },
                    selectedItem: this.option("currentView"),
                    tabIndex: this.option("tabIndex"),
                    focusStateEnabled: this.option("focusStateEnabled")
                })
            },
            _getItemText: function(item) {
                return item.name || messageLocalization.format("dxScheduler-switcher" + camelize(item.type || item, true))
            },
            _refreshViewSwitcher: function() {
                this._viewSwitcher._dispose();
                this._viewSwitcher.$element().remove();
                delete this._viewSwitcher;
                this._removeViewSwitcherLabel();
                this._renderViewSwitcher()
            },
            _removeViewSwitcherLabel: function() {
                if (isDefined(this._$viewSwitcherLabel)) {
                    this._$viewSwitcherLabel.detach();
                    this._$viewSwitcherLabel.remove();
                    delete this._$viewSwitcherLabel
                }
            },
            _renderViewSwitcherDropDownMenu: function($element) {
                var that = this;
                this._$viewSwitcherLabel = $("<div>").addClass(VIEW_SWITCHER_LABEL_CLASS).appendTo(this.$element());
                this._changeViewSwitcherLabelText();
                this._viewSwitcher = this._createComponent($element, DropDownMenu, {
                    onItemClick: this._updateCurrentView.bind(this),
                    buttonIcon: this.option("_dropDownButtonIcon"),
                    items: this.option("views"),
                    selectionMode: this.option("isAdaptive") ? "single" : "none",
                    selectedItemKeys: [this.option("currentView")],
                    itemTemplate: function(item) {
                        return $("<span>").addClass("dx-dropdownmenu-item-text").text(that._getItemText(item))
                    }
                })
            },
            _changeViewSwitcherLabelText: function() {
                if (!isDefined(this._$viewSwitcherLabel)) {
                    return
                }
                var currentView = this.option("currentView");
                var currentViewText = this._getItemText(currentView);
                this._$viewSwitcherLabel.text(currentViewText)
            },
            _getCurrentViewName: function(currentView) {
                return typeUtils.isObject(currentView) ? currentView.name || currentView.type : currentView
            },
            _updateCurrentView: function(e) {
                var selectedItem = e.itemData || e.component.option("selectedItem");
                var viewName = this._getCurrentViewName(selectedItem);
                this.notifyObserver("currentViewUpdated", viewName)
            },
            _renderFocusTarget: noop
        }).include(publisherMixin);
        registerComponent("dxSchedulerHeader", SchedulerHeader);
        module.exports = SchedulerHeader
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.navigator.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _devices = __webpack_require__( /*! ../../core/devices */ 15);
        var _devices2 = _interopRequireDefault(_devices);
        var _ui3 = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui4 = _interopRequireDefault(_ui3);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _calendar = __webpack_require__( /*! ../calendar */ 234);
        var _calendar2 = _interopRequireDefault(_calendar);
        var _popover = __webpack_require__( /*! ../popover */ 119);
        var _popover2 = _interopRequireDefault(_popover);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.publisher_mixin */ 123);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _date3 = __webpack_require__( /*! ../../localization/date */ 35);
        var _date4 = _interopRequireDefault(_date3);
        var _ui5 = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 89);
        var _ui6 = _interopRequireDefault(_ui5);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var ELEMENT_CLASS = "dx-scheduler-navigator";
        var CALENDAR_CLASS = "dx-scheduler-navigator-calendar";
        var NEXT_BUTTON_CLASS = "dx-scheduler-navigator-next";
        var CAPTION_BUTTON_CLASS = "dx-scheduler-navigator-caption";
        var PREVIOUS_BUTTON_CLASS = "dx-scheduler-navigator-previous";
        var CALENDAR_POPOVER_CLASS = "dx-scheduler-navigator-calendar-popover";
        var MONDAY_INDEX = 1;
        var getDefaultFirstDayOfWeekIndex = function(shift) {
            return shift ? MONDAY_INDEX : _date4.default.firstDayOfWeekIndex()
        };
        var getDateMonthFormat = function(short) {
            return function(date) {
                var monthName = _date4.default.getMonthNames(short ? "abbreviated" : "wide")[date.getMonth()];
                return [_date4.default.format(date, "day"), monthName].join(" ")
            }
        };
        var getMonthYearFormat = function(date) {
            return _date4.default.getMonthNames("abbreviated")[date.getMonth()] + " " + _date4.default.format(date, "year")
        };
        var getCaptionFormat = function getCaptionFormat(short, intervalCount, duration) {
            var dateMonthFormat = getDateMonthFormat(short);
            return function(date) {
                if (intervalCount > 1) {
                    var lastIntervalDate = new Date(date);
                    var defaultViewDuration = duration;
                    lastIntervalDate.setDate(date.getDate() + defaultViewDuration - 1);
                    var isDifferentMonthDates = date.getMonth() !== lastIntervalDate.getMonth();
                    var useShortFormat = isDifferentMonthDates || short;
                    var firstWeekDateText = _date4.default.format(date, isDifferentMonthDates ? getDateMonthFormat(useShortFormat) : "d");
                    var lastWeekDateText = _date4.default.format(lastIntervalDate, getCaptionFormat(useShortFormat));
                    return firstWeekDateText + "-" + lastWeekDateText
                }
                return [dateMonthFormat(date), _date4.default.format(date, "year")].join(" ")
            }
        };
        var getWeekCaption = function(date, shift, rejectWeekend) {
            var firstDayOfWeek = this.option("firstDayOfWeek");
            var firstDayOfWeekIndex = (0, _type.isDefined)(firstDayOfWeek) ? firstDayOfWeek : getDefaultFirstDayOfWeekIndex(shift);
            if (0 === firstDayOfWeekIndex && rejectWeekend) {
                firstDayOfWeekIndex = MONDAY_INDEX
            }
            var firstWeekDate = _date2.default.getFirstWeekDate(date, firstDayOfWeekIndex);
            var weekendDuration = 2;
            if (rejectWeekend) {
                firstWeekDate = _date2.default.normalizeDateByWeek(firstWeekDate, date)
            }
            if (firstDayOfWeek >= 6 && rejectWeekend) {
                firstWeekDate.setDate(firstWeekDate.getDate() + (7 - firstDayOfWeek + 1))
            }
            var lastWeekDate = new Date(firstWeekDate);
            var intervalCount = this.option("intervalCount");
            shift = shift || 6;
            lastWeekDate = new Date(lastWeekDate.setDate(lastWeekDate.getDate() + (intervalCount > 1 ? 7 * (intervalCount - 1) + shift : shift)));
            if (lastWeekDate.getDay() % 6 === 0 && rejectWeekend) {
                lastWeekDate.setDate(lastWeekDate.getDate() + weekendDuration)
            }
            return {
                text: formatCaptionByMonths.call(this, lastWeekDate, firstWeekDate),
                startDate: firstWeekDate,
                endDate: lastWeekDate
            }
        };
        var formatCaptionByMonths = function(lastDate, firstDate) {
            var isDifferentMonthDates = firstDate.getMonth() !== lastDate.getMonth();
            var isDifferentYears = firstDate.getFullYear() !== lastDate.getFullYear();
            var useShortFormat = isDifferentMonthDates || this.option("_useShortDateFormat");
            var lastDateText;
            var firstDateText;
            if (isDifferentYears) {
                firstDateText = _date4.default.format(firstDate, getCaptionFormat(true));
                lastDateText = _date4.default.format(lastDate, getCaptionFormat(true))
            } else {
                firstDateText = _date4.default.format(firstDate, isDifferentMonthDates ? getDateMonthFormat(useShortFormat) : "d");
                lastDateText = _date4.default.format(lastDate, getCaptionFormat(useShortFormat))
            }
            return firstDateText + "-" + lastDateText
        };
        var getMonthCaption = function(date) {
            var firstDate = new Date(_date2.default.getFirstMonthDate(date));
            var lastDate = new Date(_date2.default.getLastMonthDate(firstDate));
            var text;
            if (this.option("intervalCount") > 1) {
                lastDate = new Date(firstDate);
                lastDate.setMonth(firstDate.getMonth() + this.option("intervalCount") - 1);
                lastDate = new Date(_date2.default.getLastMonthDate(lastDate));
                var isSameYear = firstDate.getYear() === lastDate.getYear();
                var lastDateText = getMonthYearFormat(lastDate);
                var firstDateText = isSameYear ? _date4.default.getMonthNames("abbreviated")[firstDate.getMonth()] : getMonthYearFormat(firstDate);
                text = firstDateText + "-" + lastDateText
            } else {
                text = _date4.default.format(date, "monthandyear")
            }
            return {
                text: text,
                startDate: firstDate,
                endDate: lastDate
            }
        };
        var dateGetter = function(date, offset) {
            return new Date(date[this.setter](date[this.getter]() + offset))
        };
        var getConfig = function(step) {
            var agendaDuration;
            switch (step) {
                case "day":
                    return {
                        duration: 1 * this.option("intervalCount"), setter: "setDate", getter: "getDate", getDate: dateGetter, getCaption: function(date) {
                            var format = getCaptionFormat(false, this.option("intervalCount"), this._getConfig().duration);
                            return {
                                text: _date4.default.format(date, format),
                                startDate: date,
                                endDate: date
                            }
                        }
                    };
                case "week":
                    return {
                        duration: 7 * this.option("intervalCount"), setter: "setDate", getter: "getDate", getDate: dateGetter, getCaption: getWeekCaption
                    };
                case "workWeek":
                    return {
                        duration: 7 * this.option("intervalCount"), setter: "setDate", getter: "getDate", getDate: dateGetter, getCaption: function(date) {
                            return getWeekCaption.call(this, date, 4, true)
                        }
                    };
                case "month":
                    return {
                        duration: 1 * this.option("intervalCount"), setter: "setMonth", getter: "getMonth", getDate: function(date, offset) {
                            var currentDate = date.getDate();
                            date.setDate(1);
                            date = dateGetter.call(this, date, offset);
                            var lastDate = _date2.default.getLastMonthDay(date);
                            date.setDate(currentDate < lastDate ? currentDate : lastDate);
                            return date
                        }, getCaption: getMonthCaption
                    };
                case "agenda":
                    agendaDuration = this.invoke("getAgendaDuration");
                    agendaDuration = (0, _type.isNumeric)(agendaDuration) && agendaDuration > 0 ? agendaDuration : 7;
                    return {
                        duration: agendaDuration, setter: "setDate", getter: "getDate", getDate: dateGetter, getCaption: function(date) {
                            var format = getCaptionFormat(this.option("_useShortDateFormat"));
                            var firstDate = new Date(date);
                            var lastDate = new Date(date);
                            var text;
                            if (agendaDuration > 1) {
                                lastDate.setDate(lastDate.getDate() + agendaDuration - 1);
                                text = formatCaptionByMonths.call(this, lastDate, date)
                            } else {
                                text = _date4.default.format(date, format)
                            }
                            return {
                                text: text,
                                startDate: firstDate,
                                endDate: lastDate
                            }
                        }
                    }
            }
        };
        var SchedulerNavigator = _ui4.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    date: new Date,
                    displayedDate: void 0,
                    step: "day",
                    intervalCount: 1,
                    min: void 0,
                    max: void 0,
                    firstDayOfWeek: void 0,
                    _useShortDateFormat: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return !_devices2.default.real().generic || _devices2.default.isSimulator()
                    },
                    options: {
                        _useShortDateFormat: true
                    }
                }])
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "step":
                    case "date":
                    case "intervalCount":
                    case "displayedDate":
                        this._updateButtonsState();
                        this._renderCaption();
                        this._setCalendarOption("value", this.option("date"));
                        break;
                    case "min":
                    case "max":
                        this._updateButtonsState();
                        this._setCalendarOption(args.name, args.value);
                        break;
                    case "firstDayOfWeek":
                        this._setCalendarOption(args.name, args.value);
                        break;
                    case "customizeDateNavigatorText":
                        this._renderCaption();
                        break;
                    case "tabIndex":
                    case "focusStateEnabled":
                        this._next.option(args.name, args.value);
                        this._caption.option(args.name, args.value);
                        this._prev.option(args.name, args.value);
                        this._setCalendarOption(args.name, args.value);
                        this.callBase(args);
                        break;
                    case "_useShortDateFormat":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(ELEMENT_CLASS);
                this._initButtons()
            },
            _initButtons: function() {
                var $next = (0, _renderer2.default)("<div>").addClass(NEXT_BUTTON_CLASS);
                this._next = this._createComponent($next, _button2.default, {
                    icon: "chevronnext",
                    onClick: this._updateCurrentDate.bind(this, 1),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    tabIndex: this.option("tabIndex"),
                    integrationOptions: {}
                });
                var $caption = (0, _renderer2.default)("<div>").addClass(CAPTION_BUTTON_CLASS);
                this._caption = this._createComponent($caption, _button2.default, {
                    focusStateEnabled: this.option("focusStateEnabled"),
                    tabIndex: this.option("tabIndex"),
                    integrationOptions: {}
                });
                var $prev = (0, _renderer2.default)("<div>").addClass(PREVIOUS_BUTTON_CLASS);
                this._prev = this._createComponent($prev, _button2.default, {
                    icon: "chevronprev",
                    onClick: this._updateCurrentDate.bind(this, -1),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    tabIndex: this.option("tabIndex"),
                    integrationOptions: {}
                });
                this.setAria("label", "Next period", $next);
                this.setAria("label", "Previous period", $prev);
                this._updateButtonsState();
                this.$element().append($prev, $caption, $next)
            },
            _updateButtonsState: function() {
                var min = this.option("min");
                var max = this.option("max");
                var caption = this._getConfig().getCaption.call(this, this.option("displayedDate") || this.option("date"));
                min = min ? _date2.default.trimTime(min) : min;
                max = max ? _date2.default.trimTime(max) : max;
                max && max.setHours(23, 59, 59);
                this._prev.option("disabled", min && !isNaN(min.getTime()) && this._getNextDate(-1, caption.endDate) < min);
                this._next.option("disabled", max && !isNaN(max.getTime()) && this._getNextDate(1, caption.startDate) > max)
            },
            _updateCurrentDate: function(direction) {
                var date = this._getNextDate(direction);
                _date2.default.normalizeDate(date, this.option("min"), this.option("max"));
                this.notifyObserver("currentDateUpdated", date)
            },
            _getNextDate: function(direction) {
                var initialDate = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;
                var stepConfig = this._getConfig();
                var offset = stepConfig.duration * direction;
                var date = stepConfig.getDate(new Date(initialDate || this.option("date")), offset);
                return date
            },
            _renderFocusTarget: _common.noop,
            _initMarkup: function() {
                this.callBase();
                this._renderCaption()
            },
            _render: function() {
                this.callBase();
                this._renderPopover();
                this._renderCaptionKeys()
            },
            _isMobileLayout: function() {
                return !_devices2.default.current().generic
            },
            _renderPopover: function() {
                var _this = this;
                var overlayType = this._isMobileLayout() ? _popup2.default : _popover2.default;
                var popoverContainer = (0, _renderer2.default)("<div>").addClass(CALENDAR_POPOVER_CLASS);
                this._popover = this._createComponent(popoverContainer, overlayType, {
                    contentTemplate: function() {
                        return _this._createPopupContent()
                    },
                    defaultOptionsRules: [{
                        device: function() {
                            return !_devices2.default.current().generic
                        },
                        options: {
                            fullScreen: true,
                            showCloseButton: false,
                            toolbarItems: [{
                                shortcut: "cancel"
                            }]
                        }
                    }, {
                        device: function() {
                            return _devices2.default.current().generic
                        },
                        options: {
                            target: this._caption.$element()
                        }
                    }]
                });
                this._popover.$element().appendTo(this.$element())
            },
            _createScrollable: function(content) {
                var result = this._createComponent((0, _renderer2.default)("<div>"), _ui6.default, {
                    direction: "vertical"
                });
                result.$content().append(content);
                return result
            },
            _createPopupContent: function() {
                var result = (0, _renderer2.default)("<div>").addClass(CALENDAR_CLASS);
                this._calendar = this._createComponent(result, _calendar2.default, this._calendarOptions());
                if (this._isMobileLayout()) {
                    var scrollable = this._createScrollable(result);
                    return scrollable.$element()
                }
                return result
            },
            _calendarOptions: function() {
                return {
                    min: this.option("min"),
                    max: this.option("max"),
                    firstDayOfWeek: this.option("firstDayOfWeek"),
                    value: this.option("date"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    onValueChanged: function(e) {
                        if (!this.option("visible")) {
                            return
                        }
                        this.notifyObserver("currentDateUpdated", e.value);
                        this._popover.hide()
                    }.bind(this),
                    hasFocus: function() {
                        return true
                    },
                    tabIndex: null
                }
            },
            _renderCaption: function() {
                var _this2 = this;
                var date = this.option("displayedDate") || this.option("date");
                var captionConfig = this._getConfig().getCaption.call(this, date);
                var customizationFunction = this.option("customizeDateNavigatorText");
                var caption = _type2.default.isFunction(customizationFunction) ? customizationFunction(captionConfig) : captionConfig.text;
                this._caption.option({
                    text: caption,
                    onKeyboardHandled: function(opts) {
                        _this2.option("focusStateEnabled") && !_this2.option("disabled") && _this2._calendar._keyboardHandler(opts)
                    },
                    onClick: function() {
                        return _this2._popover.toggle()
                    }
                })
            },
            _renderCaptionKeys: function() {
                if (!this.option("focusStateEnabled") || this.option("disabled")) {
                    return
                }
                var that = this;
                var executeHandler = function() {
                    if (that._popover.$content().is(":hidden")) {
                        that._popover.show()
                    } else {
                        return true
                    }
                };
                var tabHandler = function() {
                    that._popover.hide()
                };
                this._caption.registerKeyHandler("enter", executeHandler);
                this._caption.registerKeyHandler("space", executeHandler);
                this._caption.registerKeyHandler("tab", tabHandler)
            },
            _setCalendarOption: function(name, value) {
                if (this._calendar) {
                    this._calendar.option(name, value)
                }
            },
            _getConfig: function() {
                var step = this.option("step");
                var config = getConfig.call(this, step);
                if (!config) {
                    throw _ui2.default.Error("E1033", step)
                }
                return config
            }
        }).include(_uiScheduler2.default);
        (0, _component_registrator2.default)("dxSchedulerNavigator", SchedulerNavigator);
        module.exports = SchedulerNavigator
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space_day.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerWorkSpace = __webpack_require__( /*! ./ui.scheduler.work_space.indicator */ 206);
        var DAY_CLASS = "dx-scheduler-work-space-day";
        var SchedulerWorkSpaceDay = SchedulerWorkSpace.inherit({
            _getElementClass: function() {
                return DAY_CLASS
            },
            _getRowCount: function() {
                return this._getCellCountInDay()
            },
            _getCellCount: function() {
                return this.option("intervalCount")
            },
            _setFirstViewDate: function() {
                this._firstViewDate = this._getViewStartByOptions();
                this._setStartDayHour(this._firstViewDate)
            },
            _getDateByIndex: function(headerIndex) {
                if (1 === this.option("intervalCount")) {
                    return this._firstViewDate
                }
                var resultDate = new Date(this._firstViewDate);
                resultDate.setDate(this._firstViewDate.getDate() + headerIndex);
                return resultDate
            },
            _getFormat: function() {
                return this._formatWeekdayAndDay
            },
            _renderDateHeader: function() {
                if (1 === this.option("intervalCount")) {
                    return
                }
                return this.callBase()
            },
            _getRightCell: function(isMultiSelection) {
                if (!isMultiSelection) {
                    return this.callBase(isMultiSelection)
                }
                return this._$focusedCell
            },
            _getLeftCell: function(isMultiSelection) {
                if (!isMultiSelection) {
                    return this.callBase(isMultiSelection)
                }
                return this._$focusedCell
            }
        });
        registerComponent("dxSchedulerWorkSpaceDay", SchedulerWorkSpaceDay);
        module.exports = SchedulerWorkSpaceDay
    },
    /*!*************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space.grouped.strategy.horizontal.js ***!
      \*************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var GroupedStrategy = __webpack_require__( /*! ./ui.scheduler.work_space.grouped.strategy */ 401);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var HORIZONTAL_GROUPED_ATTR = "dx-group-row-count";
        var HorizontalGroupedStrategy = GroupedStrategy.inherit({
            prepareCellIndexes: function(cellCoordinates, groupIndex, inAllDay) {
                var groupByDay = this._workSpace.isGroupedByDate();
                if (!groupByDay) {
                    return {
                        rowIndex: cellCoordinates.rowIndex,
                        cellIndex: cellCoordinates.cellIndex + groupIndex * this._workSpace._getCellCount()
                    }
                } else {
                    return {
                        rowIndex: cellCoordinates.rowIndex,
                        cellIndex: cellCoordinates.cellIndex * this._workSpace._getGroupCount() + groupIndex
                    }
                }
            },
            calculateCellIndex: function(rowIndex, cellIndex) {
                cellIndex %= this._workSpace._getCellCount();
                return this._workSpace._getRowCount() * cellIndex + rowIndex
            },
            getGroupIndex: function(rowIndex, cellIndex) {
                var groupByDay = this._workSpace.isGroupedByDate();
                var groupCount = this._workSpace._getGroupCount();
                if (groupByDay) {
                    return cellIndex % groupCount
                } else {
                    return Math.floor(cellIndex / this._workSpace._getCellCount())
                }
            },
            calculateHeaderCellRepeatCount: function() {
                return this._workSpace._getGroupCount() || 1
            },
            insertAllDayRowsIntoDateTable: function() {
                return false
            },
            getTotalCellCount: function(groupCount) {
                groupCount = groupCount || 1;
                return this._workSpace._getCellCount() * groupCount
            },
            getTotalRowCount: function() {
                return this._workSpace._getRowCount()
            },
            addAdditionalGroupCellClasses: function(cellClass, index) {
                cellClass = this._addLastGroupCellClass(cellClass, index);
                return this._addFirstGroupCellClass(cellClass, index)
            },
            _addLastGroupCellClass: function(cellClass, index) {
                var groupByDay = this._workSpace.option("groupByDate");
                if (groupByDay) {
                    if (index % this._workSpace._getGroupCount() === 0) {
                        return cellClass + " " + this.getLastGroupCellClass()
                    }
                } else {
                    if (index % this._workSpace._getCellCount() === 0) {
                        return cellClass + " " + this.getLastGroupCellClass()
                    }
                }
                return cellClass
            },
            _addFirstGroupCellClass: function(cellClass, index) {
                if ((index - 1) % this._workSpace._getCellCount() === 0) {
                    return cellClass + " " + this.getFirstGroupCellClass()
                }
                return cellClass
            },
            getHorizontalMax: function(groupIndex) {
                return this._workSpace.getMaxAllowedPosition()[groupIndex]
            },
            getVerticalMax: function(groupIndex) {
                return this._workSpace.getMaxAllowedVerticalPosition()[0]
            },
            calculateTimeCellRepeatCount: function() {
                return 1
            },
            getWorkSpaceMinWidth: function() {
                return getBoundingRect(this._workSpace.$element().get(0)).width - this._workSpace.getTimePanelWidth()
            },
            getAllDayOffset: function() {
                return this._workSpace.getAllDayHeight()
            },
            getAllDayTableHeight: function() {
                return getBoundingRect(this._workSpace._$allDayTable.get(0)).height || 0
            },
            getGroupCountAttr: function(groupRowCount, groupRows) {
                return {
                    attr: HORIZONTAL_GROUPED_ATTR,
                    count: groupRows && groupRows.elements.length
                }
            },
            getLeftOffset: function() {
                return this._workSpace.getTimePanelWidth()
            },
            getGroupBoundsOffset: function(cellCount, $cells, cellWidth, coordinates) {
                var groupIndex;
                var cellIndex;
                var startCellIndex;
                var startOffset;
                var endOffset;
                if (this._workSpace.isGroupedByDate()) {
                    startCellIndex = 0;
                    startOffset = $cells.eq(startCellIndex).offset().left - cellWidth / 2;
                    endOffset = $cells.eq(cellCount * this._workSpace._getGroupCount() - 1).offset().left + cellWidth + cellWidth / 2
                } else {
                    cellIndex = this._workSpace.getCellIndexByCoordinates(coordinates);
                    groupIndex = coordinates.groupIndex || Math.floor(cellIndex / cellCount);
                    startCellIndex = groupIndex * cellCount;
                    startOffset = $cells.eq(startCellIndex).offset().left - cellWidth / 2;
                    endOffset = $cells.eq(startCellIndex + cellCount - 1).offset().left + cellWidth + cellWidth / 2
                }
                return {
                    left: startOffset,
                    right: endOffset,
                    top: 0,
                    bottom: 0
                }
            },
            shiftIndicator: function($indicator, height, rtlOffset, i) {
                var offset = this._workSpace._getCellCount() * this._workSpace.getRoundedCellWidth(i - 1, 0) * i + this._workSpace.getIndicatorOffset(i) + i;
                var horizontalOffset = rtlOffset ? rtlOffset - offset : offset;
                $indicator.css("left", horizontalOffset);
                $indicator.css("top", height)
            },
            getShaderOffset: function(i, width) {
                var offset = this._workSpace._getCellCount() * this._workSpace.getRoundedCellWidth(i - 1) * i;
                return this._workSpace.option("rtlEnabled") ? getBoundingRect(this._workSpace._dateTableScrollable.$content().get(0)).width - offset - this._workSpace.getTimePanelWidth() - width : offset
            },
            getShaderTopOffset: function(i) {
                return -this.getShaderMaxHeight() * (i > 0 ? 1 : 0)
            },
            getShaderHeight: function() {
                var height = this._workSpace.getIndicationHeight();
                return height
            },
            getShaderMaxHeight: function() {
                return getBoundingRect(this._workSpace._dateTableScrollable.$content().get(0)).height
            },
            getShaderWidth: function(i) {
                return this._workSpace.getIndicationWidth(i)
            },
            getScrollableScrollTop: function(allDay) {
                return !allDay ? this._workSpace.getScrollable().scrollTop() : 0
            }
        });
        module.exports = HorizontalGroupedStrategy
    },
    /*!***********************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space.grouped.strategy.vertical.js ***!
      \***********************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var GroupedStrategy = __webpack_require__( /*! ./ui.scheduler.work_space.grouped.strategy */ 401);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var VERTICAL_GROUPED_ATTR = "dx-group-column-count";
        var DATE_HEADER_OFFSET = 10;
        var WORK_SPACE_BORDER = 1;
        var VerticalGroupedStrategy = GroupedStrategy.inherit({
            prepareCellIndexes: function(cellCoordinates, groupIndex, inAllDayRow) {
                var rowIndex = cellCoordinates.rowIndex + groupIndex * this._workSpace._getRowCount();
                if (this._workSpace.supportAllDayRow() && this._workSpace.option("showAllDayPanel")) {
                    rowIndex += groupIndex;
                    if (!inAllDayRow) {
                        rowIndex += 1
                    }
                }
                return {
                    rowIndex: rowIndex,
                    cellIndex: cellCoordinates.cellIndex
                }
            },
            calculateCellIndex: function(rowIndex, cellIndex) {
                rowIndex %= this._workSpace._getRowCount();
                return this._workSpace._getRowCount() * cellIndex + rowIndex
            },
            getGroupIndex: function(rowIndex, cellIndex) {
                return Math.floor(rowIndex / this._workSpace._getRowCount())
            },
            calculateHeaderCellRepeatCount: function() {
                return 1
            },
            insertAllDayRowsIntoDateTable: function() {
                return this._workSpace.option("showAllDayPanel")
            },
            getTotalCellCount: function(groupCount) {
                return this._workSpace._getCellCount()
            },
            getTotalRowCount: function() {
                return this._workSpace._getRowCount() * this._workSpace._getGroupCount()
            },
            addAdditionalGroupCellClasses: function(cellClass, index, i, j) {
                cellClass = this._addLastGroupCellClass(cellClass, i + 1);
                return this._addFirstGroupCellClass(cellClass, i + 1)
            },
            _addLastGroupCellClass: function(cellClass, index) {
                if (index % this._workSpace._getRowCount() === 0) {
                    return cellClass + " " + this.getLastGroupCellClass()
                }
                return cellClass
            },
            _addFirstGroupCellClass: function(cellClass, index) {
                if ((index - 1) % this._workSpace._getRowCount() === 0) {
                    return cellClass + " " + this.getFirstGroupCellClass()
                }
                return cellClass
            },
            getHorizontalMax: function(groupIndex) {
                return this._workSpace.getMaxAllowedPosition()[0]
            },
            getVerticalMax: function(groupIndex) {
                var maxAllowedPosition = this._workSpace.getMaxAllowedVerticalPosition()[groupIndex];
                maxAllowedPosition += this._getOffsetByAllDayPanel(groupIndex);
                return maxAllowedPosition
            },
            _getOffsetByAllDayPanel: function(groupIndex) {
                var result = 0;
                if (this._workSpace.supportAllDayRow() && this._workSpace.option("showAllDayPanel")) {
                    result = this._workSpace.getCellHeight() * (groupIndex + 1)
                }
                return result
            },
            _getGroupTop: function(groupIndex) {
                return this._workSpace.getMaxAllowedVerticalPosition()[groupIndex] - this._workSpace.getCellHeight() * this._workSpace._getRowCount()
            },
            calculateTimeCellRepeatCount: function() {
                return this._workSpace._getGroupCount() || 1
            },
            getWorkSpaceMinWidth: function() {
                var minWidth = this._workSpace._getWorkSpaceWidth();
                var workspaceContainerWidth = getBoundingRect(this._workSpace.$element().get(0)).width - this._workSpace.getTimePanelWidth() - this._workSpace.getGroupTableWidth() - 2 * WORK_SPACE_BORDER;
                if (minWidth < workspaceContainerWidth) {
                    minWidth = workspaceContainerWidth
                }
                return minWidth
            },
            getAllDayOffset: function() {
                return 0
            },
            getAllDayTableHeight: function() {
                return 0
            },
            getGroupCountAttr: function() {
                return {
                    attr: VERTICAL_GROUPED_ATTR,
                    count: this._workSpace.option("groups") && this._workSpace.option("groups").length
                }
            },
            getLeftOffset: function() {
                return this._workSpace.getTimePanelWidth() + this._workSpace.getGroupTableWidth()
            },
            getGroupBoundsOffset: function(cellCount, $cells, cellWidth, coordinates) {
                var groupIndex = coordinates.groupIndex;
                var startOffset = $cells.eq(0).offset().left;
                var endOffset = $cells.eq(cellCount - 1).offset().left + cellWidth;
                var dayHeight = this._workSpace._calculateDayDuration() / this._workSpace.option("hoursInterval") * this._workSpace.getCellHeight();
                var scrollTop = this.getScrollableScrollTop();
                var topOffset = groupIndex * dayHeight + getBoundingRect(this._workSpace._$thead.get(0)).height + this._workSpace.invoke("getHeaderHeight") + DATE_HEADER_OFFSET - scrollTop;
                if (this._workSpace.option("showAllDayPanel") && this._workSpace.supportAllDayRow()) {
                    topOffset += this._workSpace.getCellHeight() * (groupIndex + 1)
                }
                var bottomOffset = topOffset + dayHeight;
                return {
                    left: startOffset,
                    right: endOffset,
                    top: topOffset,
                    bottom: bottomOffset
                }
            },
            shiftIndicator: function($indicator, height, rtlOffset, i) {
                var offset = this._workSpace.getIndicatorOffset(0);
                var tableOffset = this._workSpace.option("crossScrollingEnabled") ? 0 : this._workSpace.getGroupTableWidth();
                var horizontalOffset = rtlOffset ? rtlOffset - offset : offset;
                var verticalOffset = this._workSpace._getRowCount() * this._workSpace.getCellHeight() * i;
                if (this._workSpace.supportAllDayRow() && this._workSpace.option("showAllDayPanel")) {
                    verticalOffset += this._workSpace.getAllDayHeight() * (i + 1)
                }
                $indicator.css("left", horizontalOffset + tableOffset);
                $indicator.css("top", height + verticalOffset)
            },
            getShaderOffset: function(i, width) {
                var offset = this._workSpace.option("crossScrollingEnabled") ? 0 : this._workSpace.getGroupTableWidth();
                return this._workSpace.option("rtlEnabled") ? getBoundingRect(this._$container.get(0)).width - offset - this._workSpace.getWorkSpaceLeftOffset() - width : offset
            },
            getShaderTopOffset: function(i) {
                return 0
            },
            getShaderHeight: function() {
                var height = this._workSpace.getIndicationHeight();
                if (this._workSpace.supportAllDayRow() && this._workSpace.option("showAllDayPanel")) {
                    height += this._workSpace.getCellHeight()
                }
                return height
            },
            getShaderMaxHeight: function() {
                var height = this._workSpace._getRowCount() * this._workSpace.getCellHeight();
                if (this._workSpace.supportAllDayRow() && this._workSpace.option("showAllDayPanel")) {
                    height += this._workSpace.getCellHeight()
                }
                return height
            },
            getShaderWidth: function(i) {
                return this._workSpace.getIndicationWidth(0)
            },
            getScrollableScrollTop: function(allDay) {
                return this._workSpace.getScrollable().scrollTop()
            }
        });
        module.exports = VerticalGroupedStrategy
    },
    /*!************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/shaders/ui.scheduler.current_time_shader.vertical.js ***!
      \************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var Shader = __webpack_require__( /*! ./ui.scheduler.current_time_shader */ 402);
        var DATE_TIME_SHADER_ALL_DAY_CLASS = "dx-scheduler-date-time-shader-all-day";
        var DATE_TIME_SHADER_TOP_CLASS = "dx-scheduler-date-time-shader-top";
        var DATE_TIME_SHADER_BOTTOM_CLASS = "dx-scheduler-date-time-shader-bottom";
        var VerticalCurrentTimeShader = Shader.inherit({
            _renderShader: function() {
                var shaderHeight = this._getShaderHeight();
                var maxHeight = this._getShaderMaxHeight();
                var renderSolidShader = false;
                if (shaderHeight > maxHeight) {
                    shaderHeight = maxHeight;
                    renderSolidShader = true
                }
                if (shaderHeight >= 0) {
                    this._$shader.height(shaderHeight);
                    var groupCount = this._workspace._getGroupCount() || 1;
                    if (renderSolidShader) {
                        this._renderTopShader(this._$shader, shaderHeight, getBoundingRect(this._$container.get(0)).width, 0);
                        this._renderAllDayShader(getBoundingRect(this._$container.get(0)).width, 0)
                    } else {
                        for (var i = 0; i < groupCount; i++) {
                            var shaderWidth = this._getShaderWidth(i);
                            this._renderTopShader(this._$shader, shaderHeight, shaderWidth, i);
                            this._renderBottomShader(this._$shader, maxHeight - shaderHeight, shaderWidth, i);
                            this._renderAllDayShader(shaderWidth, i)
                        }
                    }
                }
            },
            _renderTopShader: function($shader, height, width, i) {
                this._$topShader = $("<div>").addClass(DATE_TIME_SHADER_TOP_CLASS);
                width && this._$topShader.width(width) && this._$topShader.height(height);
                this._$topShader.css("marginTop", this._getShaderTopOffset(i));
                this._$topShader.css("left", this._getShaderOffset(i, width));
                $shader.append(this._$topShader)
            },
            _renderBottomShader: function($shader, height, width, i) {
                this._$bottomShader = $("<div>").addClass(DATE_TIME_SHADER_BOTTOM_CLASS);
                this._$bottomShader.width(width - this._workspace.getCellWidth()) && this._$bottomShader.height(height);
                this._$bottomShader.css("left", this._getShaderOffset(i, width - this._workspace.getCellWidth()));
                $shader.append(this._$bottomShader)
            },
            _renderAllDayShader: function(shaderWidth, i) {
                if (this._workspace.option("showAllDayPanel")) {
                    this._$allDayIndicator = $("<div>").addClass(DATE_TIME_SHADER_ALL_DAY_CLASS);
                    this._$allDayIndicator.height(this._workspace.getAllDayHeight());
                    this._$allDayIndicator.width(shaderWidth);
                    this._$allDayIndicator.css("left", this._getShaderOffset(i, shaderWidth));
                    this._workspace._$allDayPanel.prepend(this._$allDayIndicator)
                }
            },
            _getShaderOffset: function(i, width) {
                return this._workspace.getGroupedStrategy().getShaderOffset(i, width)
            },
            _getShaderTopOffset: function(i) {
                return this._workspace.getGroupedStrategy().getShaderTopOffset(i)
            },
            _getShaderHeight: function(i, width) {
                return this._workspace.getGroupedStrategy().getShaderHeight()
            },
            _getShaderMaxHeight: function(i, width) {
                return this._workspace.getGroupedStrategy().getShaderMaxHeight()
            },
            _getShaderWidth: function(i) {
                return this._workspace.getGroupedStrategy().getShaderWidth(i)
            },
            clean: function() {
                this.callBase();
                this._workspace && this._workspace._$allDayPanel && this._workspace._$allDayPanel.find("." + DATE_TIME_SHADER_ALL_DAY_CLASS).remove()
            }
        });
        module.exports = VerticalCurrentTimeShader
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/appointmentDragBehavior.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _draggable = __webpack_require__( /*! ../draggable */ 196);
        var _draggable2 = _interopRequireDefault(_draggable);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _constants = __webpack_require__( /*! ./constants */ 171);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var FIXED_CONTAINER_PROP_NAME = "fixedContainer";
        var APPOINTMENT_ITEM_CLASS = "dx-scheduler-appointment";
        var AppointmentDragBehavior = function() {
            function AppointmentDragBehavior(scheduler) {
                _classCallCheck(this, AppointmentDragBehavior);
                this.scheduler = scheduler;
                this.appointments = scheduler._appointments;
                this.initialPosition = {
                    left: 0,
                    top: 0
                };
                this.currentAppointment = null
            }
            _createClass(AppointmentDragBehavior, [{
                key: "isAllDay",
                value: function(appointment) {
                    return appointment.data("dxAppointmentSettings").allDay
                }
            }, {
                key: "getContainerShift",
                value: function(isAllDay) {
                    var appointmentContainer = this.appointments._getAppointmentContainer(isAllDay);
                    var dragAndDropContainer = this.appointments.option(FIXED_CONTAINER_PROP_NAME);
                    var appointmentContainerRect = (0, _position.getBoundingRect)(appointmentContainer[0]);
                    var dragAndDropContainerRect = (0, _position.getBoundingRect)(dragAndDropContainer[0]);
                    return {
                        left: appointmentContainerRect.left - dragAndDropContainerRect.left,
                        top: appointmentContainerRect.top - dragAndDropContainerRect.top
                    }
                }
            }, {
                key: "onDragStart",
                value: function(e) {
                    this.initialPosition = _translator2.default.locate((0, _renderer2.default)(e.itemElement));
                    this.appointments.notifyObserver("hideAppointmentTooltip")
                }
            }, {
                key: "getAppointmentElement",
                value: function(e) {
                    var itemElement = e.event.data && e.event.data.itemElement || e.itemElement;
                    return (0, _renderer2.default)(itemElement)
                }
            }, {
                key: "onDragEnd",
                value: function(e) {
                    var $appointment = this.getAppointmentElement(e);
                    var container = this.appointments._getAppointmentContainer(this.isAllDay($appointment));
                    container.append($appointment);
                    this.currentAppointment = $appointment;
                    this.appointments.notifyObserver("updateAppointmentAfterDrag", {
                        event: e,
                        data: this.appointments._getItemData($appointment),
                        $appointment: $appointment,
                        coordinates: this.initialPosition
                    })
                }
            }, {
                key: "getItemData",
                value: function(appointment) {
                    var itemData = (0, _renderer2.default)(appointment).data(_constants.LIST_ITEM_DATA_KEY);
                    return itemData && itemData.data || this.appointments._getItemData(appointment)
                }
            }, {
                key: "getItemSettings",
                value: function(appointment) {
                    var itemData = (0, _renderer2.default)(appointment).data(_constants.LIST_ITEM_DATA_KEY);
                    return itemData && itemData.settings || []
                }
            }, {
                key: "createDragStartHandler",
                value: function(options, appointmentDragging) {
                    var _this = this;
                    return function(e) {
                        e.itemData = _this.getItemData(e.itemElement);
                        e.itemSettings = _this.getItemSettings(e.itemElement);
                        appointmentDragging.onDragStart && appointmentDragging.onDragStart(e);
                        if (!e.cancel) {
                            options.onDragStart(e)
                        }
                    }
                }
            }, {
                key: "createDragEndHandler",
                value: function(options, appointmentDragging) {
                    var _this2 = this;
                    return function(e) {
                        appointmentDragging.onDragEnd && appointmentDragging.onDragEnd(e);
                        if (!e.cancel) {
                            options.onDragEnd(e);
                            if (e.fromComponent !== e.toComponent) {
                                appointmentDragging.onRemove && appointmentDragging.onRemove(e);
                                _this2.appointments.notifyObserver("removeDroppableCellClass")
                            }
                        }
                    }
                }
            }, {
                key: "createDropHandler",
                value: function(appointmentDragging) {
                    var _this3 = this;
                    return function(e) {
                        e.itemData = (0, _extend.extend)({}, e.itemData, _this3.appointments.invoke("getUpdatedData", {
                            data: e.itemData
                        }));
                        if (e.fromComponent !== e.toComponent) {
                            appointmentDragging.onAdd && appointmentDragging.onAdd(e)
                        }
                    }
                }
            }, {
                key: "addTo",
                value: function(container, config) {
                    var appointmentDragging = this.scheduler.option("appointmentDragging") || {};
                    var options = (0, _extend.extend)({
                        component: this.scheduler,
                        contentTemplate: null,
                        filter: ".".concat(APPOINTMENT_ITEM_CLASS),
                        immediate: false,
                        onDragStart: this.onDragStart.bind(this),
                        onDragEnd: this.onDragEnd.bind(this)
                    }, config);
                    this.appointments._createComponent(container, _draggable2.default, (0, _extend.extend)({}, options, appointmentDragging, {
                        onDragStart: this.createDragStartHandler(options, appointmentDragging),
                        onDragEnd: this.createDragEndHandler(options, appointmentDragging),
                        onDrop: this.createDropHandler(appointmentDragging)
                    }))
                }
            }, {
                key: "moveBack",
                value: function() {
                    if (this.currentAppointment && void 0 !== this.initialPosition.left && void 0 !== this.initialPosition.top) {
                        _translator2.default.move(this.currentAppointment, this.initialPosition)
                    }
                }
            }]);
            return AppointmentDragBehavior
        }();
        exports.default = AppointmentDragBehavior;
        module.exports = AppointmentDragBehavior
    },
    /*!*******************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space_work_week.js ***!
      \*******************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var workWeekUtils = __webpack_require__( /*! ./utils.work_week */ 404);
        var toMs = dateUtils.dateToMilliseconds;
        var SchedulerWorkSpaceWeek = __webpack_require__( /*! ./ui.scheduler.work_space_week */ 403);
        var WORK_WEEK_CLASS = "dx-scheduler-work-space-work-week";
        var dayIndexes = [1, 2, 3, 4, 5];
        var weekCounter = 0;
        var SchedulerWorkSpaceWorkWeek = SchedulerWorkSpaceWeek.inherit({
            _getElementClass: function() {
                return WORK_WEEK_CLASS
            },
            _getCellCount: function() {
                return 5 * this.option("intervalCount")
            },
            _firstDayOfWeek: function() {
                return workWeekUtils.getFirstDayOfWeek(this.option("firstDayOfWeek"))
            },
            _isSkippedData: workWeekUtils.isDataOnWeekend,
            _getDateByIndex: function(headerIndex) {
                var resultDate = new Date(this._firstViewDate);
                if (headerIndex % this._getCellCount() === 0) {
                    weekCounter = 0
                }
                resultDate.setDate(this._firstViewDate.getDate() + headerIndex + weekCounter);
                var index = resultDate.getDay();
                while (dayIndexes.indexOf(index) === -1) {
                    resultDate.setDate(resultDate.getDate() + 1);
                    index = resultDate.getDay();
                    weekCounter++
                }
                return resultDate
            },
            _renderView: function() {
                weekCounter = 0;
                this.callBase()
            },
            _getWeekendsCount: workWeekUtils.getWeekendsCount,
            _setFirstViewDate: function() {
                this._firstViewDate = workWeekUtils.getFirstViewDate(this._getViewStartByOptions(), this._firstDayOfWeek());
                this._setStartDayHour(this._firstViewDate)
            },
            _getOffsetByCount: function(cellIndex) {
                var cellsInGroup = this._getCellCount();
                var inGroup = Math.floor(cellIndex / cellsInGroup);
                cellIndex -= cellsInGroup * inGroup;
                var weekendCount = Math.floor(cellIndex / 5);
                return toMs("day") * weekendCount * 2
            }
        });
        registerComponent("dxSchedulerWorkSpaceWorkWeek", SchedulerWorkSpaceWorkWeek);
        module.exports = SchedulerWorkSpaceWorkWeek
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.work_space_month.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var noop = __webpack_require__( /*! ../../../core/utils/common */ 3).noop;
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerWorkSpace = __webpack_require__( /*! ./ui.scheduler.work_space.indicator */ 206);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var getBoundingRect = __webpack_require__( /*! ../../../core/utils/position */ 21).getBoundingRect;
        var dateLocalization = __webpack_require__( /*! ../../../localization/date */ 35);
        var MONTH_CLASS = "dx-scheduler-work-space-month";
        var DATE_TABLE_CURRENT_DATE_CLASS = "dx-scheduler-date-table-current-date";
        var DATE_TABLE_FIRST_OF_MONTH_CLASS = "dx-scheduler-date-table-first-of-month";
        var DATE_TABLE_OTHER_MONTH_DATE_CLASS = "dx-scheduler-date-table-other-month";
        var DATE_TABLE_SCROLLABLE_FIXED_CLASS = "dx-scheduler-scrollable-fixed-content";
        var DAYS_IN_WEEK = 7;
        var DAY_IN_MILLISECONDS = 864e5;
        var toMs = dateUtils.dateToMilliseconds;
        var SchedulerWorkSpaceMonth = SchedulerWorkSpace.inherit({
            _toggleFixedScrollableClass: function() {
                this._dateTableScrollable.$content().toggleClass(DATE_TABLE_SCROLLABLE_FIXED_CLASS, !this._isWorkSpaceWithCount() && !this._isVerticalGroupedWorkSpace())
            },
            _getElementClass: function() {
                return MONTH_CLASS
            },
            _getRowCount: function() {
                return this._isWorkSpaceWithCount() ? 4 * this.option("intervalCount") + 2 : 6
            },
            _getCellCount: function() {
                return DAYS_IN_WEEK
            },
            _getDateByIndex: function(headerIndex) {
                var resultDate = new Date(this._firstViewDate);
                resultDate.setDate(this._firstViewDate.getDate() + headerIndex);
                return resultDate
            },
            _getFormat: function() {
                return this._formatWeekday
            },
            _calculateCellIndex: function(rowIndex, cellIndex) {
                if (this._isVerticalGroupedWorkSpace()) {
                    rowIndex %= this._getRowCount()
                } else {
                    cellIndex %= this._getCellCount()
                }
                return rowIndex * this._getCellCount() + cellIndex
            },
            _getInterval: function() {
                return DAY_IN_MILLISECONDS
            },
            _getIntervalBetween: function(currentDate) {
                var firstViewDate = this.getStartViewDate();
                var timeZoneOffset = dateUtils.getTimezonesDifference(firstViewDate, currentDate);
                return currentDate.getTime() - (firstViewDate.getTime() - 36e5 * this.option("startDayHour")) - timeZoneOffset
            },
            _getDateByCellIndexes: function(rowIndex, cellIndex) {
                var date = this.callBase(rowIndex, cellIndex);
                this._setStartDayHour(date);
                return date
            },
            getCellWidth: function() {
                var DAYS_IN_WEEK = 7;
                var averageWidth = 0;
                this._getCells().slice(0, DAYS_IN_WEEK).each(function(index, element) {
                    return averageWidth += getBoundingRect(element).width
                });
                return averageWidth / DAYS_IN_WEEK
            },
            _calculateHiddenInterval: function() {
                return 0
            },
            _insertAllDayRowsIntoDateTable: function() {
                return false
            },
            _getCellCoordinatesByIndex: function(index) {
                var rowIndex = Math.floor(index / this._getCellCount());
                var cellIndex = index - this._getCellCount() * rowIndex;
                return {
                    rowIndex: rowIndex,
                    cellIndex: cellIndex
                }
            },
            _createWorkSpaceElements: function() {
                if (this._isVerticalGroupedWorkSpace()) {
                    this._createWorkSpaceScrollableElements()
                } else {
                    this.callBase()
                }
            },
            _needCreateCrossScrolling: function() {
                return this.option("crossScrollingEnabled") || this._isVerticalGroupedWorkSpace()
            },
            _renderTimePanel: noop,
            _renderAllDayPanel: noop,
            _getTableAllDay: noop,
            _toggleAllDayVisibility: noop,
            _changeAllDayVisibility: noop,
            _setFirstViewDate: function() {
                var firstMonthDate = dateUtils.getFirstMonthDate(this._getViewStartByOptions());
                this._firstViewDate = dateUtils.getFirstWeekDate(firstMonthDate, this.option("firstDayOfWeek") || dateLocalization.firstDayOfWeekIndex());
                this._setStartDayHour(this._firstViewDate);
                var date = this._getViewStartByOptions();
                this._minVisibleDate = new Date(date.setDate(1));
                this._maxVisibleDate = new Date(new Date(date.setMonth(date.getMonth() + this.option("intervalCount"))).setDate(0))
            },
            _getViewStartByOptions: function() {
                if (!this.option("startDate")) {
                    return new Date(this.option("currentDate").getTime())
                } else {
                    var startDate = this._getStartViewDate();
                    var currentDate = this.option("currentDate");
                    var diff = startDate.getTime() <= currentDate.getTime() ? 1 : -1;
                    var endDate = new Date(new Date(this._getStartViewDate().setMonth(this._getStartViewDate().getMonth() + diff * this.option("intervalCount"))));
                    while (!this._dateInRange(currentDate, startDate, endDate, diff)) {
                        startDate = new Date(endDate);
                        if (diff > 0) {
                            startDate.setDate(1)
                        }
                        endDate = new Date(new Date(endDate.setMonth(endDate.getMonth() + diff * this.option("intervalCount"))))
                    }
                    return diff > 0 ? startDate : endDate
                }
            },
            _getStartViewDate: function() {
                var firstMonthDate = dateUtils.getFirstMonthDate(this.option("startDate"));
                return firstMonthDate
            },
            _renderTableBody: function(options) {
                options.getCellText = this._getCellText.bind(this);
                this.callBase(options)
            },
            _getCellText: function(rowIndex, cellIndex) {
                if (this.option("groupByDate") && this._getGroupCount()) {
                    cellIndex = Math.floor(cellIndex / this._getGroupCount())
                } else {
                    cellIndex %= this._getCellCount()
                }
                var date = this._getDate(rowIndex, cellIndex);
                if (this._isWorkSpaceWithCount() && this._isFirstDayOfMonth(date)) {
                    return this._formatMonthAndDay(date)
                }
                return dateLocalization.format(date, "dd")
            },
            _formatMonthAndDay: function(date) {
                var monthName = dateLocalization.getMonthNames("abbreviated")[date.getMonth()];
                return [monthName, dateLocalization.format(date, "day")].join(" ")
            },
            _getDate: function(week, day) {
                var result = new Date(this._firstViewDate);
                var lastRowInDay = this._getRowCount();
                result.setDate(result.getDate() + week % lastRowInDay * DAYS_IN_WEEK + day);
                return result
            },
            _updateIndex: function(index) {
                return index
            },
            _prepareCellData: function(rowIndex, cellIndex, cell) {
                var data = this.callBase(rowIndex, cellIndex, cell);
                var $cell = $(cell);
                $cell.toggleClass(DATE_TABLE_CURRENT_DATE_CLASS, this._isCurrentDate(data.startDate)).toggleClass(DATE_TABLE_FIRST_OF_MONTH_CLASS, this._isFirstDayOfMonth(data.startDate)).toggleClass(DATE_TABLE_OTHER_MONTH_DATE_CLASS, this._isOtherMonth(data.startDate));
                return data
            },
            _isCurrentDate: function(cellDate) {
                var today = new Date;
                return dateUtils.sameDate(cellDate, today)
            },
            _isFirstDayOfMonth: function(cellDate) {
                return this._isWorkSpaceWithCount() && 1 === cellDate.getDate()
            },
            _isOtherMonth: function(cellDate) {
                return !dateUtils.dateInRange(cellDate, this._minVisibleDate, this._maxVisibleDate, "date")
            },
            needRenderDateTimeIndication: function() {
                return false
            },
            getCellDuration: function() {
                return 36e5 * this._calculateDayDuration()
            },
            getIntervalDuration: function() {
                return toMs("day")
            },
            getTimePanelWidth: function() {
                return 0
            },
            getPositionShift: function(timeShift) {
                return {
                    cellPosition: timeShift * this.getCellWidth(),
                    top: 0,
                    left: 0
                }
            },
            getCellCountToLastViewDate: function(date) {
                var firstDateTime = date.getTime();
                var lastDateTime = this.getEndViewDate().getTime();
                var dayDurationInMs = this.getCellDuration();
                return Math.ceil((lastDateTime - firstDateTime) / dayDurationInMs)
            },
            supportAllDayRow: function() {
                return false
            },
            keepOriginalHours: function() {
                return true
            },
            calculateEndDate: function(startDate) {
                var startDateCopy = new Date(startDate);
                return new Date(startDateCopy.setHours(this.option("endDayHour")))
            },
            getWorkSpaceLeftOffset: function() {
                return 0
            },
            needApplyCollectorOffset: function() {
                return true
            },
            _getDateTableBorderOffset: function() {
                return this._getDateTableBorder()
            },
            _getCellPositionByIndex: function(index, groupIndex) {
                var position = this.callBase(index, groupIndex);
                var rowIndex = this._getCellCoordinatesByIndex(index).rowIndex;
                var calculatedTopOffset;
                if (!this._isVerticalGroupedWorkSpace()) {
                    calculatedTopOffset = this.getCellHeight() * rowIndex
                } else {
                    calculatedTopOffset = this.getCellHeight() * (rowIndex + groupIndex * this._getRowCount())
                }
                if (calculatedTopOffset) {
                    position.top = calculatedTopOffset
                }
                return position
            },
            _getHeaderDate: function() {
                return this._getViewStartByOptions()
            },
            _supportCompactDropDownAppointments: function() {
                return false
            },
            scrollToTime: noop
        });
        registerComponent("dxSchedulerWorkSpaceMonth", SchedulerWorkSpaceMonth);
        module.exports = SchedulerWorkSpaceMonth
    },
    /*!***********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.timeline_day.js ***!
      \***********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerTimeline = __webpack_require__( /*! ./ui.scheduler.timeline */ 251);
        var TIMELINE_CLASS = "dx-scheduler-timeline-day";
        var SchedulerTimelineDay = SchedulerTimeline.inherit({
            _getElementClass: function() {
                return TIMELINE_CLASS
            },
            _setFirstViewDate: function() {
                this._firstViewDate = this.option("currentDate");
                this._setStartDayHour(this._firstViewDate)
            },
            _needRenderWeekHeader: function() {
                return this._isWorkSpaceWithCount()
            }
        });
        registerComponent("dxSchedulerTimelineDay", SchedulerTimelineDay);
        module.exports = SchedulerTimelineDay
    },
    /*!**************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/shaders/ui.scheduler.current_time_shader.horizontal.js ***!
      \**************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _position = __webpack_require__( /*! ../../../core/utils/position */ 21);
        var Shader = __webpack_require__( /*! ./ui.scheduler.current_time_shader */ 402);
        var HorizontalCurrentTimeShader = Shader.inherit({
            _renderShader: function() {
                var groupCount = "horizontal" === this._workspace.option("groupOrientation") ? this._workspace._getGroupCount() : 1;
                this._customizeShader(this._$shader, 0);
                if (groupCount > 1) {
                    for (var i = 1; i < groupCount; i++) {
                        var $shader = this._createShader();
                        this._customizeShader($shader, 1);
                        this._shader.push($shader)
                    }
                }
            },
            _customizeShader: function($shader, groupIndex) {
                var shaderWidth = this._workspace.getIndicationWidth();
                var maxWidth = (0, _position.getBoundingRect)(this._$container.get(0)).width;
                if (shaderWidth > maxWidth) {
                    shaderWidth = maxWidth
                }
                if (shaderWidth > 0) {
                    $shader.width(shaderWidth)
                }
                $shader.css("left", this._workspace._getCellCount() * this._workspace.getCellWidth() * groupIndex)
            }
        });
        module.exports = HorizontalCurrentTimeShader
    },
    /*!*****************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.timeline_work_week.js ***!
      \*****************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerTimelineWeek = __webpack_require__( /*! ./ui.scheduler.timeline_week */ 405);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var workWeekUtils = __webpack_require__( /*! ./utils.work_week */ 404);
        var toMs = dateUtils.dateToMilliseconds;
        var TIMELINE_CLASS = "dx-scheduler-timeline-work-week";
        var LAST_DAY_WEEK_INDEX = 5;
        var SchedulerTimelineWorkWeek = SchedulerTimelineWeek.inherit({
            _getElementClass: function() {
                return TIMELINE_CLASS
            },
            _getWeekDuration: function() {
                return 5
            },
            _firstDayOfWeek: function() {
                return workWeekUtils.getFirstDayOfWeek(this.option("firstDayOfWeek"))
            },
            _isSkippedData: workWeekUtils.isDataOnWeekend,
            _incrementDate: function(date) {
                var day = date.getDay();
                if (day === LAST_DAY_WEEK_INDEX) {
                    date.setDate(date.getDate() + 2)
                }
                this.callBase(date)
            },
            _getOffsetByCount: function(cellIndex) {
                var weekendCount = Math.floor(cellIndex / (5 * this._getCellCountInDay()));
                return toMs("day") * weekendCount * 2
            },
            _getWeekendsCount: workWeekUtils.getWeekendsCount,
            _setFirstViewDate: function() {
                this._firstViewDate = workWeekUtils.getFirstViewDate(this.option("currentDate"), this._firstDayOfWeek());
                this._setStartDayHour(this._firstViewDate)
            }
        });
        registerComponent("dxSchedulerTimelineWorkWeek", SchedulerTimelineWorkWeek);
        module.exports = SchedulerTimelineWorkWeek
    },
    /*!*************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.timeline_month.js ***!
      \*************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerTimeline = __webpack_require__( /*! ./ui.scheduler.timeline */ 251);
        var dateUtils = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var TIMELINE_CLASS = "dx-scheduler-timeline-month";
        var DAY_IN_MILLISECONDS = 864e5;
        var toMs = dateUtils.dateToMilliseconds;
        var SchedulerTimelineMonth = SchedulerTimeline.inherit({
            _renderView: function() {
                this.callBase();
                this._updateScrollable()
            },
            _getElementClass: function() {
                return TIMELINE_CLASS
            },
            _getDateHeaderTemplate: function() {
                return this.option("dateCellTemplate")
            },
            _getHiddenInterval: function() {
                return 0
            },
            _getIndicationFirstViewDate: function() {
                return dateUtils.trimTime(new Date(this._firstViewDate))
            },
            getCellDuration: function() {
                return toMs("day")
            },
            calculateEndViewDate: function(dateOfLastViewCell) {
                return new Date(dateOfLastViewCell.getTime() + this._calculateDayDuration() * toMs("hour"))
            },
            _getCellCount: function() {
                var currentDate = this.option("currentDate");
                var cellCount = 0;
                if (this._isWorkSpaceWithCount()) {
                    var intervalCount = this.option("intervalCount");
                    for (var i = 1; i <= intervalCount; i++) {
                        cellCount += new Date(currentDate.getFullYear(), currentDate.getMonth() + i, 0).getDate()
                    }
                } else {
                    cellCount = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0).getDate()
                }
                return cellCount
            },
            _setFirstViewDate: function() {
                this._firstViewDate = dateUtils.getFirstMonthDate(this.option("currentDate"));
                this._setStartDayHour(this._firstViewDate)
            },
            _getFormat: function() {
                return this._formatWeekdayAndDay
            },
            _getDateByIndex: function(headerIndex) {
                var resultDate = new Date(this._firstViewDate);
                resultDate.setDate(this._firstViewDate.getDate() + headerIndex);
                return resultDate
            },
            _getInterval: function() {
                return DAY_IN_MILLISECONDS
            },
            _getIntervalBetween: function(currentDate) {
                var firstViewDate = this.getStartViewDate();
                var timeZoneOffset = dateUtils.getTimezonesDifference(firstViewDate, currentDate);
                return currentDate.getTime() - (firstViewDate.getTime() - 36e5 * this.option("startDayHour")) - timeZoneOffset
            },
            calculateEndDate: function(startDate) {
                var startDateCopy = new Date(startDate);
                return new Date(startDateCopy.setHours(this.option("endDayHour")))
            },
            _calculateHiddenInterval: function() {
                return 0
            },
            _getDateByCellIndexes: function(rowIndex, cellIndex) {
                var date = this.callBase(rowIndex, cellIndex);
                this._setStartDayHour(date);
                return date
            },
            needUpdateScrollPosition: function(hours, minutes, bounds, date) {
                return this._dateWithinBounds(bounds, date)
            },
            getPositionShift: function() {
                return {
                    top: 0,
                    left: 0,
                    cellPosition: 0
                }
            }
        });
        registerComponent("dxSchedulerTimelineMonth", SchedulerTimelineMonth);
        module.exports = SchedulerTimelineMonth
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/workspaces/ui.scheduler.agenda.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../../core/renderer */ 2);
        var domAdapter = __webpack_require__( /*! ../../../core/dom_adapter */ 12);
        var noop = __webpack_require__( /*! ../../../core/utils/common */ 3).noop;
        var each = __webpack_require__( /*! ../../../core/utils/iterator */ 4).each;
        var getPublicElement = __webpack_require__( /*! ../../../core/utils/dom */ 11).getPublicElement;
        var registerComponent = __webpack_require__( /*! ../../../core/component_registrator */ 9);
        var SchedulerWorkSpace = __webpack_require__( /*! ./ui.scheduler.work_space */ 400);
        var extend = __webpack_require__( /*! ../../../core/utils/extend */ 0).extend;
        var dateLocalization = __webpack_require__( /*! ../../../localization/date */ 35);
        var tableCreator = __webpack_require__( /*! ../ui.scheduler.table_creator */ 250);
        var AGENDA_CLASS = "dx-scheduler-agenda";
        var AGENDA_DATE_CLASS = "dx-scheduler-agenda-date";
        var GROUP_TABLE_CLASS = "dx-scheduler-group-table";
        var AGENDA_GROUPED_ATTR = "dx-group-column-count";
        var TIME_PANEL_ROW_CLASS = "dx-scheduler-time-panel-row";
        var TIME_PANEL_CELL_CLASS = "dx-scheduler-time-panel-cell";
        var NODATA_CONTAINER_CLASS = "dx-scheduler-agenda-nodata";
        var LAST_ROW_CLASS = "dx-scheduler-date-table-last-row";
        var INNER_CELL_MARGIN = 5;
        var OUTER_CELL_MARGIN = 20;
        var SchedulerAgenda = SchedulerWorkSpace.inherit({
            _activeStateUnit: void 0,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    agendaDuration: 7,
                    rowHeight: 60,
                    noDataText: ""
                })
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "agendaDuration":
                        break;
                    case "noDataText":
                    case "rowHeight":
                        this._recalculateAgenda(this._rows);
                        break;
                    case "groups":
                        if (!value || !value.length) {
                            if (this._$groupTable) {
                                this._$groupTable.remove();
                                this._$groupTable = null;
                                this._detachGroupCountAttr()
                            }
                        } else {
                            if (!this._$groupTable) {
                                this._initGroupTable();
                                this._dateTableScrollable.$content().prepend(this._$groupTable)
                            }
                        }
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _renderFocusState: noop,
            _renderFocusTarget: noop,
            _cleanFocusState: noop,
            supportAllDayRow: function() {
                return false
            },
            _isVerticalGroupedWorkSpace: function() {
                return false
            },
            _getElementClass: function() {
                return AGENDA_CLASS
            },
            _setFirstViewDate: function() {
                this._firstViewDate = new Date(this.option("currentDate"));
                this._setStartDayHour(this._firstViewDate)
            },
            _getRowCount: function() {
                return this.option("agendaDuration")
            },
            _getCellCount: function() {
                return 1
            },
            _getTimePanelRowCount: function() {
                return this.option("agendaDuration")
            },
            _getDateByIndex: noop,
            _getFormat: function() {
                return "d ddd"
            },
            _renderAllDayPanel: noop,
            _toggleAllDayVisibility: noop,
            _initWorkSpaceUnits: function() {
                this._initGroupTable();
                this._$timePanel = $("<table>").addClass(this._getTimePanelClass());
                this._$dateTable = $("<table>").addClass(this._getDateTableClass())
            },
            _initGroupTable: function() {
                var groups = this.option("groups");
                if (groups && groups.length) {
                    this._$groupTable = $("<table>").addClass(GROUP_TABLE_CLASS)
                }
            },
            _renderView: function() {
                this._setFirstViewDate();
                this._rows = [];
                this.invoke("getAgendaRows", {
                    agendaDuration: this.option("agendaDuration"),
                    currentDate: new Date(this.option("currentDate"))
                }).done(function(rows) {
                    this._recalculateAgenda(rows)
                }.bind(this))
            },
            _recalculateAgenda: function(rows) {
                var cellTemplates = [];
                this._cleanView();
                if (this._rowsIsEmpty(rows)) {
                    this._renderNoData();
                    return
                }
                this._rows = rows;
                if (this._$groupTable) {
                    cellTemplates = this._renderGroupHeader();
                    this._setGroupHeaderCellsHeight()
                }
                this._renderTimePanel();
                this._renderDateTable();
                this.invoke("onAgendaReady", rows);
                this._applyCellTemplates(cellTemplates);
                this._dateTableScrollable.update()
            },
            _renderNoData: function() {
                this._$noDataContainer = $("<div>").addClass(NODATA_CONTAINER_CLASS).html(this.option("noDataText"));
                this._dateTableScrollable.$content().append(this._$noDataContainer)
            },
            _setTableSizes: noop,
            _toggleHorizontalScrollClass: noop,
            _createCrossScrollingConfig: noop,
            _setGroupHeaderCellsHeight: function() {
                var $cells = this._getGroupHeaderCells().filter(function(_, element) {
                    return !element.getAttribute("rowSpan")
                });
                var rows = this._removeEmptyRows(this._rows);
                if (!rows.length) {
                    return
                }
                for (var i = 0; i < $cells.length; i++) {
                    var $cellContent = $cells.eq(i).find(".dx-scheduler-group-header-content");
                    $cellContent.outerHeight(this._getGroupRowHeight(rows[i]))
                }
            },
            _rowsIsEmpty: function(rows) {
                var result = true;
                for (var i = 0; i < rows.length; i++) {
                    var groupRow = rows[i];
                    for (var j = 0; j < groupRow.length; j++) {
                        if (groupRow[j]) {
                            result = false;
                            break
                        }
                    }
                }
                return result
            },
            _detachGroupCountAttr: function() {
                this.$element().removeAttr(AGENDA_GROUPED_ATTR)
            },
            _attachGroupCountAttr: function() {
                this.$element().attr(AGENDA_GROUPED_ATTR, this.option("groups").length)
            },
            _removeEmptyRows: function(rows) {
                var result = [];
                var isEmpty = function(data) {
                    return !data.some(function(value) {
                        return value > 0
                    })
                };
                for (var i = 0; i < rows.length; i++) {
                    if (rows[i].length && !isEmpty(rows[i])) {
                        result.push(rows[i])
                    }
                }
                return result
            },
            _getGroupHeaderContainer: function() {
                return this._$groupTable
            },
            _makeGroupRows: function() {
                var tree = this.invoke("createReducedResourcesTree");
                var cellTemplate = this.option("resourceCellTemplate");
                var getGroupHeaderContentClass = this._getGroupHeaderContentClass();
                var cellTemplates = [];
                var table = tableCreator.makeGroupedTableFromJSON(tableCreator.VERTICAL, tree, {
                    cellTag: "th",
                    groupTableClass: GROUP_TABLE_CLASS,
                    groupRowClass: this._getGroupRowClass(),
                    groupCellClass: this._getGroupHeaderClass(),
                    groupCellCustomContent: function(cell, cellText, index, data) {
                        var container = domAdapter.createElement("div");
                        var contentWrapper = domAdapter.createElement("div");
                        container.className = getGroupHeaderContentClass;
                        contentWrapper.appendChild(cellText);
                        container.appendChild(contentWrapper);
                        container.className = getGroupHeaderContentClass;
                        if (cellTemplate && cellTemplate.render) {
                            cellTemplates.push(cellTemplate.render.bind(cellTemplate, {
                                model: {
                                    data: data.data,
                                    id: data.value,
                                    color: data.color,
                                    text: cellText.textContent
                                },
                                container: getPublicElement($(container)),
                                index: index
                            }))
                        } else {
                            contentWrapper.appendChild(cellText);
                            container.appendChild(contentWrapper)
                        }
                        cell.appendChild(container)
                    },
                    cellTemplate: cellTemplate
                });
                return {
                    elements: $(table).find("." + this._getGroupRowClass()),
                    cellTemplates: cellTemplates
                }
            },
            _cleanView: function() {
                this._$dateTable.empty();
                this._$timePanel.empty();
                if (this._$groupTable) {
                    this._$groupTable.empty()
                }
                if (this._$noDataContainer) {
                    this._$noDataContainer.empty();
                    this._$noDataContainer.remove();
                    delete this._$noDataContainer
                }
            },
            _createWorkSpaceElements: function() {
                this._createWorkSpaceStaticElements()
            },
            _createWorkSpaceStaticElements: function() {
                if (this._$groupTable) {
                    this._dateTableScrollable.$content().prepend(this._$groupTable)
                }
                this._dateTableScrollable.$content().append(this._$timePanel, this._$dateTable);
                this.$element().append(this._dateTableScrollable.$element())
            },
            _renderDateTable: function() {
                this._renderTableBody({
                    container: getPublicElement(this._$dateTable),
                    rowClass: this._getDateTableRowClass(),
                    cellClass: this._getDateTableCellClass()
                })
            },
            _attachTablesEvents: noop,
            _attachEvents: noop,
            _cleanCellDataCache: noop,
            needRenderDateTimeIndication: function() {
                return false
            },
            _prepareCellTemplateOptions: function(text, date, rowIndex, $cell) {
                var groupsOpt = this.option("groups");
                var groups = {};
                var path = groupsOpt.length && this._getPathToLeaf(rowIndex) || [];
                path.forEach(function(resourceValue, resourceIndex) {
                    var resourceName = groupsOpt[resourceIndex].name;
                    groups[resourceName] = resourceValue
                });
                return {
                    model: {
                        text: text,
                        date: date,
                        groups: groups
                    },
                    container: getPublicElement($cell),
                    index: rowIndex
                }
            },
            _renderTableBody: function(options) {
                var cellTemplates = [];
                var cellTemplateOpt = options.cellTemplate;
                this._$rows = [];
                var i;
                var fillTableBody = function(rowIndex, rowSize) {
                    if (rowSize) {
                        var date;
                        var cellDateNumber;
                        var cellDayName;
                        var $row = $("<tr>");
                        var $td = $("<td>").height(this._getRowHeight(rowSize));
                        if (options.getStartDate) {
                            date = options.getStartDate && options.getStartDate(rowIndex);
                            cellDateNumber = dateLocalization.format(date, "d");
                            cellDayName = dateLocalization.format(date, this._formatWeekday)
                        }
                        if (cellTemplateOpt && cellTemplateOpt.render) {
                            var templateOptions = this._prepareCellTemplateOptions(cellDateNumber + " " + cellDayName, date, i, $td);
                            cellTemplates.push(cellTemplateOpt.render.bind(cellTemplateOpt, templateOptions))
                        } else {
                            if (cellDateNumber && cellDayName) {
                                $td.addClass(AGENDA_DATE_CLASS).text(cellDateNumber + " " + cellDayName)
                            }
                        }
                        if (options.rowClass) {
                            $row.addClass(options.rowClass)
                        }
                        if (options.cellClass) {
                            $td.addClass(options.cellClass)
                        }
                        $row.append($td);
                        this._$rows.push($row)
                    }
                }.bind(this);
                for (i = 0; i < this._rows.length; i++) {
                    each(this._rows[i], fillTableBody);
                    this._setLastRowClass()
                }
                $(options.container).append($("<tbody>").append(this._$rows));
                this._applyCellTemplates(cellTemplates)
            },
            _setLastRowClass: function() {
                if (this._rows.length > 1 && this._$rows.length) {
                    var $lastRow = this._$rows[this._$rows.length - 1];
                    $lastRow.addClass(LAST_ROW_CLASS)
                }
            },
            _renderTimePanel: function() {
                this._renderTableBody({
                    container: getPublicElement(this._$timePanel),
                    rowCount: this._getTimePanelRowCount(),
                    cellCount: 1,
                    rowClass: TIME_PANEL_ROW_CLASS,
                    cellClass: TIME_PANEL_CELL_CLASS,
                    cellTemplate: this.option("dateCellTemplate"),
                    getStartDate: this._getTimePanelStartDate.bind(this)
                })
            },
            _getTimePanelStartDate: function(rowIndex) {
                var current = new Date(this.option("currentDate"));
                var cellDate = new Date(current.setDate(current.getDate() + rowIndex));
                return cellDate
            },
            _getRowHeight: function(rowSize) {
                var baseHeight = this.option("rowHeight");
                var innerOffset = (rowSize - 1) * INNER_CELL_MARGIN;
                return rowSize ? baseHeight * rowSize + innerOffset + OUTER_CELL_MARGIN : 0
            },
            _getGroupRowHeight: function(groupRows) {
                if (!groupRows) {
                    return
                }
                var result = 0;
                for (var i = 0; i < groupRows.length; i++) {
                    result += this._getRowHeight(groupRows[i])
                }
                return result
            },
            getAgendaVerticalStepHeight: function() {
                return this.option("rowHeight")
            },
            getEndViewDate: function() {
                var currentDate = new Date(this.option("currentDate"));
                var agendaDuration = this.option("agendaDuration");
                currentDate.setHours(this.option("endDayHour"));
                var result = currentDate.setDate(currentDate.getDate() + agendaDuration - 1) - 6e4;
                return new Date(result)
            },
            getEndViewDateByEndDayHour: function() {
                return this.getEndViewDate()
            },
            getCoordinatesByDate: function() {
                return {
                    top: 0,
                    left: 0,
                    max: 0,
                    groupIndex: 0
                }
            },
            getCellDataByCoordinates: function() {
                return {
                    startDate: null,
                    endDate: null
                }
            }
        });
        registerComponent("dxSchedulerAgenda", SchedulerAgenda);
        module.exports = SchedulerAgenda
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.resource_manager.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _object = __webpack_require__( /*! ../../core/utils/object */ 47);
        var _object2 = _interopRequireDefault(_object);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _data_source = __webpack_require__( /*! ../../data/data_source/data_source */ 61);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _utils = __webpack_require__( /*! ../../data/data_source/utils */ 64);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var getValueExpr = function(resource) {
            return resource.valueExpr || "id"
        };
        var getDisplayExpr = function(resource) {
            return resource.displayExpr || "text"
        };
        var ResourceManager = function() {
            function ResourceManager(resources) {
                _classCallCheck(this, ResourceManager);
                this._resourceLoader = {};
                this.setResources(resources)
            }
            _createClass(ResourceManager, [{
                key: "_createWrappedDataSource",
                value: function(dataSource) {
                    if (dataSource instanceof _data_source.DataSource) {
                        return dataSource
                    }
                    var result = {
                        store: (0, _utils.normalizeDataSourceOptions)(dataSource).store,
                        pageSize: 0
                    };
                    if (!Array.isArray(dataSource)) {
                        result.filter = dataSource.filter
                    }
                    return new _data_source.DataSource(result)
                }
            }, {
                key: "_mapResourceData",
                value: function(resource, data) {
                    var valueGetter = _data2.default.compileGetter(getValueExpr(resource));
                    var displayGetter = _data2.default.compileGetter(getDisplayExpr(resource));
                    return _iterator2.default.map(data, function(item) {
                        var result = {
                            id: valueGetter(item),
                            text: displayGetter(item)
                        };
                        if (item.color) {
                            result.color = item.color
                        }
                        return result
                    })
                }
            }, {
                key: "_isMultipleResource",
                value: function(resourceField) {
                    var result = false;
                    _iterator2.default.each(this.getResources(), function(_, resource) {
                        var field = this.getField(resource);
                        if (field === resourceField) {
                            result = resource.allowMultiple;
                            return false
                        }
                    }.bind(this));
                    return result
                }
            }, {
                key: "getDataAccessors",
                value: function(field, type) {
                    var result = null;
                    _iterator2.default.each(this._dataAccessors[type], function(accessorName, accessors) {
                        if (field === accessorName) {
                            result = accessors;
                            return false
                        }
                    });
                    return result
                }
            }, {
                key: "getField",
                value: function(resource) {
                    return resource.fieldExpr || resource.field
                }
            }, {
                key: "setResources",
                value: function(resources) {
                    this._resources = resources;
                    this._dataAccessors = {
                        getter: {},
                        setter: {}
                    };
                    this._resourceFields = _iterator2.default.map(resources || [], function(resource) {
                        var field = this.getField(resource);
                        this._dataAccessors.getter[field] = _data2.default.compileGetter(field);
                        this._dataAccessors.setter[field] = _data2.default.compileSetter(field);
                        return field
                    }.bind(this))
                }
            }, {
                key: "getResources",
                value: function() {
                    return this._resources || []
                }
            }, {
                key: "getResourcesData",
                value: function() {
                    return this._resourcesData || []
                }
            }, {
                key: "getEditors",
                value: function() {
                    var result = [];
                    var that = this;
                    _iterator2.default.each(this.getResources(), function(i, resource) {
                        var field = that.getField(resource);
                        var currentResourceItems = that._getResourceDataByField(field);
                        result.push({
                            editorOptions: {
                                dataSource: currentResourceItems.length ? currentResourceItems : that._createWrappedDataSource(resource.dataSource),
                                displayExpr: getDisplayExpr(resource),
                                valueExpr: getValueExpr(resource)
                            },
                            dataField: field,
                            editorType: resource.allowMultiple ? "dxTagBox" : "dxSelectBox",
                            label: {
                                text: resource.label || field
                            }
                        })
                    });
                    return result
                }
            }, {
                key: "getResourceDataByValue",
                value: function(field, value) {
                    var that = this;
                    var result = new _deferred.Deferred;
                    _iterator2.default.each(this.getResources(), function(_, resource) {
                        var resourceField = that.getField(resource);
                        if (resourceField === field) {
                            var dataSource = that._createWrappedDataSource(resource.dataSource);
                            var valueExpr = getValueExpr(resource);
                            if (!that._resourceLoader[field]) {
                                that._resourceLoader[field] = dataSource.load()
                            }
                            that._resourceLoader[field].done(function(data) {
                                var filteredData = (0, _query2.default)(data).filter(valueExpr, value).toArray();
                                delete that._resourceLoader[field];
                                result.resolve(filteredData[0])
                            }).fail(function() {
                                delete that._resourceLoader[field];
                                result.reject()
                            });
                            return false
                        }
                    });
                    return result.promise()
                }
            }, {
                key: "setResourcesToItem",
                value: function(itemData, resources) {
                    var resourcesSetter = this._dataAccessors.setter;
                    for (var name in resources) {
                        if (Object.prototype.hasOwnProperty.call(resources, name)) {
                            var resourceData = resources[name];
                            resourcesSetter[name](itemData, this._isMultipleResource(name) ? _array2.default.wrapToArray(resourceData) : resourceData)
                        }
                    }
                }
            }, {
                key: "getResourcesFromItem",
                value: function(itemData, wrapOnlyMultipleResources) {
                    var _this = this;
                    var result = null;
                    if (!(0, _type.isDefined)(wrapOnlyMultipleResources)) {
                        wrapOnlyMultipleResources = false
                    }
                    this._resourceFields.forEach(function(field) {
                        _iterator2.default.each(itemData, function(fieldName, fieldValue) {
                            var tempObject = {};
                            tempObject[fieldName] = fieldValue;
                            var resourceData = _this.getDataAccessors(field, "getter")(tempObject);
                            if ((0, _type.isDefined)(resourceData)) {
                                if (!result) {
                                    result = {}
                                }
                                if (1 === resourceData.length) {
                                    resourceData = resourceData[0]
                                }
                                if (!wrapOnlyMultipleResources || wrapOnlyMultipleResources && _this._isMultipleResource(field)) {
                                    _this.getDataAccessors(field, "setter")(tempObject, _array2.default.wrapToArray(resourceData))
                                } else {
                                    _this.getDataAccessors(field, "setter")(tempObject, resourceData)
                                }(0, _extend.extend)(result, tempObject);
                                return true
                            }
                        })
                    });
                    return result
                }
            }, {
                key: "loadResources",
                value: function(groups) {
                    var result = new _deferred.Deferred;
                    var that = this;
                    var deferreds = [];
                    _iterator2.default.each(this.getResourcesByFields(groups), function(i, resource) {
                        var deferred = new _deferred.Deferred;
                        var field = that.getField(resource);
                        deferreds.push(deferred);
                        that._createWrappedDataSource(resource.dataSource).load().done(function(data) {
                            deferred.resolve({
                                name: field,
                                items: that._mapResourceData(resource, data),
                                data: data
                            })
                        }).fail(function() {
                            deferred.reject()
                        })
                    });
                    if (!deferreds.length) {
                        that._resourcesData = [];
                        return result.resolve([])
                    }
                    _deferred.when.apply(null, deferreds).done(function() {
                        var data = Array.prototype.slice.call(arguments);
                        var mapFunction = function(obj) {
                            return {
                                name: obj.name,
                                items: obj.items,
                                data: obj.data
                            }
                        };
                        that._resourcesData = data;
                        result.resolve(data.map(mapFunction))
                    }).fail(function() {
                        result.reject()
                    });
                    return result.promise()
                }
            }, {
                key: "getResourcesByFields",
                value: function(fields) {
                    return (0, _common.grep)(this.getResources(), function(resource) {
                        var field = this.getField(resource);
                        return (0, _array.inArray)(field, fields) > -1
                    }.bind(this))
                }
            }, {
                key: "getResourceByField",
                value: function(field) {
                    return this.getResourcesByFields([field])[0] || {}
                }
            }, {
                key: "getResourceColor",
                value: function(field, value) {
                    var valueExpr = this.getResourceByField(field).valueExpr || "id";
                    var valueGetter = _data2.default.compileGetter(valueExpr);
                    var colorExpr = this.getResourceByField(field).colorExpr || "color";
                    var colorGetter = _data2.default.compileGetter(colorExpr);
                    var result = new _deferred.Deferred;
                    var resourceData = this._getResourceDataByField(field);
                    var resourceDataLength = resourceData.length;
                    var color;
                    if (resourceDataLength) {
                        for (var i = 0; i < resourceDataLength; i++) {
                            if (valueGetter(resourceData[i]) === value) {
                                color = colorGetter(resourceData[i]);
                                break
                            }
                        }
                        result.resolve(color)
                    } else {
                        this.getResourceDataByValue(field, value).done(function(resourceData) {
                            if (resourceData) {
                                color = colorGetter(resourceData)
                            }
                            result.resolve(color)
                        }).fail(function() {
                            result.reject()
                        })
                    }
                    return result.promise()
                }
            }, {
                key: "getResourceForPainting",
                value: function(groups) {
                    var resources = this.getResources();
                    var result;
                    _iterator2.default.each(resources, function(index, resource) {
                        if (resource.useColorAsDefault) {
                            result = resource;
                            return false
                        }
                    });
                    if (!result) {
                        if (Array.isArray(groups) && groups.length) {
                            resources = this.getResourcesByFields(groups)
                        }
                        result = resources[resources.length - 1]
                    }
                    return result
                }
            }, {
                key: "createResourcesTree",
                value: function(groups) {
                    var leafIndex = 0;
                    var groupIndex = groupIndex || 0;

                    function make(group, groupIndex, result, parent) {
                        result = result || [];
                        for (var i = 0; i < group.items.length; i++) {
                            var currentGroupItem = group.items[i];
                            var resultItem = {
                                name: group.name,
                                value: currentGroupItem.id,
                                title: currentGroupItem.text,
                                data: group.data && group.data[i],
                                children: [],
                                parent: parent ? parent : null
                            };
                            result.push(resultItem);
                            var nextGroupIndex = groupIndex + 1;
                            if (groups[nextGroupIndex]) {
                                make.call(this, groups[nextGroupIndex], nextGroupIndex, resultItem.children, resultItem)
                            }
                            if (!resultItem.children.length) {
                                resultItem.leafIndex = leafIndex;
                                leafIndex++
                            }
                        }
                        return result
                    }
                    return make.call(this, groups[0], 0)
                }
            }, {
                key: "_hasGroupItem",
                value: function(appointmentResources, groupName, itemValue) {
                    var group = this.getDataAccessors(groupName, "getter")(appointmentResources);
                    if (group) {
                        if ((0, _array.inArray)(itemValue, group) > -1) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_getResourceDataByField",
                value: function(fieldName) {
                    var loadedResources = this.getResourcesData();
                    var currentResourceData = [];
                    for (var i = 0, resourceCount = loadedResources.length; i < resourceCount; i++) {
                        if (loadedResources[i].name === fieldName) {
                            currentResourceData = loadedResources[i].data;
                            break
                        }
                    }
                    return currentResourceData
                }
            }, {
                key: "getResourceTreeLeaves",
                value: function(tree, appointmentResources, result) {
                    result = result || [];
                    for (var i = 0; i < tree.length; i++) {
                        if (!this._hasGroupItem(appointmentResources, tree[i].name, tree[i].value)) {
                            continue
                        }
                        if ((0, _type.isDefined)(tree[i].leafIndex)) {
                            result.push(tree[i].leafIndex)
                        }
                        if (tree[i].children) {
                            this.getResourceTreeLeaves(tree[i].children, appointmentResources, result)
                        }
                    }
                    return result
                }
            }, {
                key: "groupAppointmentsByResources",
                value: function(appointments, resources) {
                    var tree = this.createResourcesTree(resources);
                    var result = {};
                    _iterator2.default.each(appointments, function(_, appointment) {
                        var appointmentResources = this.getResourcesFromItem(appointment);
                        var treeLeaves = this.getResourceTreeLeaves(tree, appointmentResources);
                        for (var i = 0; i < treeLeaves.length; i++) {
                            if (!result[treeLeaves[i]]) {
                                result[treeLeaves[i]] = []
                            }
                            result[treeLeaves[i]].push(_object2.default.deepExtendArraySafe({}, appointment, true))
                        }
                    }.bind(this));
                    return result
                }
            }, {
                key: "reduceResourcesTree",
                value: function(tree, existingAppointments, _result) {
                    _result = _result ? _result.children : [];
                    var that = this;
                    tree.forEach(function(node, index) {
                        var ok = false;
                        var resourceName = node.name;
                        var resourceValue = node.value;
                        var resourceTitle = node.title;
                        var resourceData = node.data;
                        var resourceGetter = that.getDataAccessors(resourceName, "getter");
                        existingAppointments.forEach(function(appointment) {
                            if (!ok) {
                                var resourceFromAppointment = resourceGetter(appointment);
                                if (Array.isArray(resourceFromAppointment)) {
                                    if (resourceFromAppointment.indexOf(resourceValue) > -1) {
                                        _result.push({
                                            name: resourceName,
                                            value: resourceValue,
                                            title: resourceTitle,
                                            data: resourceData,
                                            children: []
                                        });
                                        ok = true
                                    }
                                } else {
                                    if (resourceFromAppointment === resourceValue) {
                                        _result.push({
                                            name: resourceName,
                                            value: resourceValue,
                                            title: resourceTitle,
                                            data: resourceData,
                                            children: []
                                        });
                                        ok = true
                                    }
                                }
                            }
                        });
                        if (ok && node.children && node.children.length) {
                            that.reduceResourcesTree(node.children, existingAppointments, _result[index])
                        }
                    });
                    return _result
                }
            }]);
            return ResourceManager
        }();
        exports.default = ResourceManager
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.appointment_model.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _config = __webpack_require__( /*! ../../core/config */ 30);
        var _config2 = _interopRequireDefault(_config);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _date_serialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 54);
        var _date_serialization2 = _interopRequireDefault(_date_serialization);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _query = __webpack_require__( /*! ../../data/query */ 45);
        var _query2 = _interopRequireDefault(_query);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var toMs = _date2.default.dateToMilliseconds;
        var DATE_FILTER_POSITION = 0;
        var USER_FILTER_POSITION = 1;
        var FilterMaker = function() {
            function FilterMaker(dataAccessors) {
                _classCallCheck(this, FilterMaker);
                this._filterRegistry = null;
                this._dataAccessors = dataAccessors
            }
            _createClass(FilterMaker, [{
                key: "isRegistered",
                value: function() {
                    return !!this._filterRegistry
                }
            }, {
                key: "clearRegistry",
                value: function() {
                    delete this._filterRegistry
                }
            }, {
                key: "make",
                value: function(type, args) {
                    if (!this._filterRegistry) {
                        this._filterRegistry = {}
                    }
                    this._make(type).apply(this, args)
                }
            }, {
                key: "_make",
                value: function(type) {
                    var _this = this;
                    switch (type) {
                        case "date":
                            return function(min, max, useAccessors) {
                                var startDate = useAccessors ? _this._dataAccessors.getter.startDate : _this._dataAccessors.expr.startDateExpr;
                                var endDate = useAccessors ? _this._dataAccessors.getter.endDate : _this._dataAccessors.expr.endDateExpr;
                                var recurrenceRule = _this._dataAccessors.expr.recurrenceRuleExpr;
                                _this._filterRegistry.date = [
                                    [
                                        [endDate, ">", min],
                                        [startDate, "<", max]
                                    ], "or", [recurrenceRule, "startswith", "freq"], "or", [
                                        [endDate, min],
                                        [startDate, min]
                                    ]
                                ];
                                if (!recurrenceRule) {
                                    _this._filterRegistry.date.splice(1, 2)
                                }
                            };
                        case "user":
                            return function(userFilter) {
                                _this._filterRegistry.user = userFilter
                            }
                    }
                }
            }, {
                key: "combine",
                value: function() {
                    var filter = [];
                    this._filterRegistry.date && filter.push(this._filterRegistry.date);
                    this._filterRegistry.user && filter.push(this._filterRegistry.user);
                    return filter
                }
            }, {
                key: "dateFilter",
                value: function() {
                    return this._filterRegistry.date
                }
            }]);
            return FilterMaker
        }();
        var compareDateWithStartDayHour = function(startDate, endDate, startDayHour, allDay, severalDays) {
            var startTime = _date2.default.dateTimeFromDecimal(startDayHour);
            var result = startDate.getHours() >= startTime.hours && startDate.getMinutes() >= startTime.minutes || endDate.getHours() === startTime.hours && endDate.getMinutes() > startTime.minutes || endDate.getHours() > startTime.hours || severalDays || allDay;
            return result
        };
        var compareDateWithEndDayHour = function(startDate, endDate, startDayHour, endDayHour, allDay, severalDays, max, min) {
            var hiddenInterval = (24 - endDayHour + startDayHour) * toMs("hour");
            var apptDuration = endDate.getTime() - startDate.getTime();
            var delta = (hiddenInterval - apptDuration) / toMs("hour");
            var apptStartHour = startDate.getHours();
            var apptStartMinutes = startDate.getMinutes();
            var result;
            var endTime = _date2.default.dateTimeFromDecimal(endDayHour);
            var startTime = _date2.default.dateTimeFromDecimal(startDayHour);
            result = apptStartHour < endTime.hours || apptStartHour === endTime.hours && apptStartMinutes < endTime.minutes || allDay && startDate <= max || severalDays && startDate < max && endDate > min && (apptStartHour < endTime.hours || 60 * endDate.getHours() + endDate.getMinutes() > 60 * startTime.hours);
            if (apptDuration < hiddenInterval) {
                if (apptStartHour > endTime.hours && apptStartMinutes > endTime.minutes && delta <= apptStartHour - endDayHour) {
                    result = false
                }
            }
            return result
        };
        var AppointmentModel = function() {
            function AppointmentModel(dataSource, dataAccessors, baseAppointmentDuration) {
                _classCallCheck(this, AppointmentModel);
                this.setDataAccessors(dataAccessors);
                this.setDataSource(dataSource);
                this._updatedAppointmentKeys = [];
                this._filterMaker = new FilterMaker(dataAccessors);
                this._baseAppointmentDuration = baseAppointmentDuration
            }
            _createClass(AppointmentModel, [{
                key: "_createFilter",
                value: function(min, max, remoteFiltering, dateSerializationFormat) {
                    this._filterMaker.make("date", [min, max]);
                    var userFilterPosition = this._excessFiltering() ? this._dataSource.filter()[USER_FILTER_POSITION] : this._dataSource.filter();
                    this._filterMaker.make("user", [userFilterPosition]);
                    if (remoteFiltering) {
                        this._dataSource.filter(this._combineRemoteFilter(dateSerializationFormat))
                    }
                }
            }, {
                key: "_excessFiltering",
                value: function() {
                    var dateFilter = this._filterMaker.dateFilter();
                    var dataSourceFilter = this._dataSource.filter();
                    return dataSourceFilter && ((0, _common.equalByValue)(dataSourceFilter, dateFilter) || dataSourceFilter.length && (0, _common.equalByValue)(dataSourceFilter[DATE_FILTER_POSITION], dateFilter))
                }
            }, {
                key: "_combineFilter",
                value: function() {
                    return this._filterMaker.combine()
                }
            }, {
                key: "_getStoreKey",
                value: function(target) {
                    var store = this._dataSource.store();
                    return store.keyOf(target)
                }
            }, {
                key: "_filterAppointmentByResources",
                value: function(appointment, resources) {
                    var _this2 = this;
                    var result = false;
                    var i;
                    var len;
                    var resourceName;
                    var checkAppointmentResourceValues = function() {
                        var resourceGetter = _this2._dataAccessors.getter.resources[resourceName];
                        var resource;
                        if (_type2.default.isFunction(resourceGetter)) {
                            resource = resourceGetter(appointment)
                        }
                        var appointmentResourceValues = _array2.default.wrapToArray(resource);
                        var resourceData = _iterator2.default.map(resources[i].items, function(item) {
                            return item.id
                        });
                        for (var j = 0, itemDataCount = appointmentResourceValues.length; j < itemDataCount; j++) {
                            if ((0, _array.inArray)(appointmentResourceValues[j], resourceData) > -1) {
                                return true
                            }
                        }
                        return false
                    };
                    for (i = 0, len = resources.length; i < len; i++) {
                        resourceName = resources[i].name;
                        result = checkAppointmentResourceValues.call(this);
                        if (!result) {
                            return false
                        }
                    }
                    return result
                }
            }, {
                key: "_filterAppointmentByRRule",
                value: function(appointment, min, max, startDayHour, endDayHour, firstDayOfWeek) {
                    var recurrenceRule = appointment.recurrenceRule;
                    var recurrenceException = appointment.recurrenceException;
                    var allDay = appointment.allDay;
                    var result = true;
                    var appointmentStartDate = appointment.startDate;
                    var appointmentEndDate = appointment.endDate;
                    if (allDay || this._appointmentPartInInterval(appointmentStartDate, appointmentEndDate, startDayHour, endDayHour)) {
                        var trimmedDates = this._trimDates(min, max);
                        min = trimmedDates.min;
                        max = new Date(trimmedDates.max.getTime() - toMs("minute"))
                    }
                    if (recurrenceRule && !_utils2.default.getRecurrenceRule(recurrenceRule).isValid) {
                        result = appointmentEndDate > min && appointmentStartDate <= max
                    }
                    if (result && _utils2.default.getRecurrenceRule(recurrenceRule).isValid) {
                        result = _utils2.default.dateInRecurrenceRange({
                            rule: recurrenceRule,
                            exception: recurrenceException,
                            start: appointmentStartDate,
                            end: appointmentEndDate,
                            min: min,
                            max: max,
                            firstDayOfWeek: firstDayOfWeek
                        })
                    }
                    return result
                }
            }, {
                key: "_appointmentPartInInterval",
                value: function(startDate, endDate, startDayHour, endDayHour) {
                    var apptStartDayHour = startDate.getHours();
                    var apptEndDayHour = endDate.getHours();
                    return apptStartDayHour <= startDayHour && apptEndDayHour <= endDayHour && apptEndDayHour >= startDayHour || apptEndDayHour >= endDayHour && apptStartDayHour <= endDayHour && apptStartDayHour >= startDayHour
                }
            }, {
                key: "_createCombinedFilter",
                value: function(filterOptions, timeZoneProcessor) {
                    var dataAccessors = this._dataAccessors;
                    var startDayHour = filterOptions.startDayHour;
                    var endDayHour = filterOptions.endDayHour;
                    var min = new Date(filterOptions.min);
                    var max = new Date(filterOptions.max);
                    var resources = filterOptions.resources;
                    var firstDayOfWeek = filterOptions.firstDayOfWeek;
                    var getRecurrenceException = filterOptions.recurrenceException;
                    var that = this;
                    return [
                        [function(appointment) {
                            var result = true;
                            var startDate = new Date(dataAccessors.getter.startDate(appointment));
                            var endDate = new Date(dataAccessors.getter.endDate(appointment));
                            var appointmentTakesAllDay = that.appointmentTakesAllDay(appointment, startDayHour, endDayHour);
                            var appointmentTakesSeveralDays = that.appointmentTakesSeveralDays(appointment);
                            var isAllDay = dataAccessors.getter.allDay(appointment);
                            var appointmentIsLong = appointmentTakesSeveralDays || appointmentTakesAllDay;
                            var useRecurrence = _type2.default.isDefined(dataAccessors.getter.recurrenceRule);
                            var recurrenceRule;
                            if (useRecurrence) {
                                recurrenceRule = dataAccessors.getter.recurrenceRule(appointment)
                            }
                            if (resources && resources.length) {
                                result = that._filterAppointmentByResources(appointment, resources)
                            }
                            if (appointmentTakesAllDay && false === filterOptions.allDay) {
                                result = false
                            }
                            var startDateTimeZone = dataAccessors.getter.startDateTimeZone(appointment);
                            var endDateTimeZone = dataAccessors.getter.endDateTimeZone(appointment);
                            var comparableStartDate = timeZoneProcessor(startDate, startDateTimeZone);
                            var comparableEndDate = timeZoneProcessor(endDate, endDateTimeZone);
                            if (result && useRecurrence) {
                                var recurrenceException = getRecurrenceException ? getRecurrenceException(appointment) : dataAccessors.getter.recurrenceException(appointment);
                                result = that._filterAppointmentByRRule({
                                    startDate: comparableStartDate,
                                    endDate: comparableEndDate,
                                    recurrenceRule: recurrenceRule,
                                    recurrenceException: recurrenceException,
                                    allDay: appointmentTakesAllDay
                                }, min, max, startDayHour, endDayHour, firstDayOfWeek)
                            }
                            if (result && comparableEndDate < min && appointmentIsLong && !isAllDay && (!useRecurrence || useRecurrence && !recurrenceRule)) {
                                result = false
                            }
                            if (result && void 0 !== startDayHour) {
                                result = compareDateWithStartDayHour(comparableStartDate, comparableEndDate, startDayHour, appointmentTakesAllDay, appointmentTakesSeveralDays)
                            }
                            if (result && void 0 !== endDayHour) {
                                result = compareDateWithEndDayHour(comparableStartDate, comparableEndDate, startDayHour, endDayHour, appointmentTakesAllDay, appointmentTakesSeveralDays, max, min)
                            }
                            if (result && useRecurrence && !recurrenceRule) {
                                if (comparableEndDate < min && !isAllDay) {
                                    result = false
                                }
                            }
                            return result
                        }]
                    ]
                }
            }, {
                key: "setDataSource",
                value: function(dataSource) {
                    this._dataSource = dataSource;
                    this.cleanModelState();
                    this._initStoreChangeHandlers();
                    this._filterMaker && this._filterMaker.clearRegistry()
                }
            }, {
                key: "_initStoreChangeHandlers",
                value: function() {
                    var _this3 = this;
                    this._dataSource && this._dataSource.store().on("updating", function(newItem) {
                        _this3._updatedAppointment = newItem
                    }.bind(this));
                    this._dataSource && this._dataSource.store().on("push", function(items) {
                        items.forEach(function(item) {
                            _this3._updatedAppointmentKeys.push({
                                key: _this3._dataSource.store().key(),
                                value: item.key
                            })
                        }.bind(_this3))
                    }.bind(this))
                }
            }, {
                key: "getUpdatedAppointment",
                value: function() {
                    return this._updatedAppointment
                }
            }, {
                key: "getUpdatedAppointmentKeys",
                value: function() {
                    return this._updatedAppointmentKeys
                }
            }, {
                key: "cleanModelState",
                value: function() {
                    this._updatedAppointment = null;
                    this._updatedAppointmentKeys = []
                }
            }, {
                key: "setDataAccessors",
                value: function(dataAccessors) {
                    this._dataAccessors = dataAccessors;
                    this._filterMaker = new FilterMaker(dataAccessors)
                }
            }, {
                key: "filterByDate",
                value: function(min, max, remoteFiltering, dateSerializationFormat) {
                    if (!this._dataSource) {
                        return
                    }
                    var trimmedDates = this._trimDates(min, max);
                    if (!this._filterMaker.isRegistered()) {
                        this._createFilter(trimmedDates.min, trimmedDates.max, remoteFiltering, dateSerializationFormat)
                    } else {
                        this._filterMaker.make("date", [trimmedDates.min, trimmedDates.max]);
                        if (this._dataSource.filter() && this._dataSource.filter().length > 1) {
                            var userFilter = this._serializeRemoteFilter([this._dataSource.filter()[1]], dateSerializationFormat);
                            this._filterMaker.make("user", userFilter)
                        }
                        if (remoteFiltering) {
                            this._dataSource.filter(this._combineRemoteFilter(dateSerializationFormat))
                        }
                    }
                }
            }, {
                key: "_combineRemoteFilter",
                value: function(dateSerializationFormat) {
                    var combinedFilter = this._filterMaker.combine();
                    return this._serializeRemoteFilter(combinedFilter, dateSerializationFormat)
                }
            }, {
                key: "_serializeRemoteFilter",
                value: function(filter, dateSerializationFormat) {
                    if (!Array.isArray(filter)) {
                        return filter
                    }
                    filter = (0, _extend.extend)([], filter);
                    var startDate = this._dataAccessors.expr.startDateExpr;
                    var endDate = this._dataAccessors.expr.endDateExpr;
                    if (_type2.default.isString(filter[0])) {
                        if ((0, _config2.default)().forceIsoDateParsing && filter.length > 1) {
                            if (filter[0] === startDate || filter[0] === endDate) {
                                filter[filter.length - 1] = _date_serialization2.default.serializeDate(new Date(filter[filter.length - 1]), dateSerializationFormat)
                            }
                        }
                    }
                    for (var i = 0; i < filter.length; i++) {
                        filter[i] = this._serializeRemoteFilter(filter[i], dateSerializationFormat)
                    }
                    return filter
                }
            }, {
                key: "filterLoadedAppointments",
                value: function(filterOptions, timeZoneProcessor) {
                    if (!_type2.default.isFunction(timeZoneProcessor)) {
                        timeZoneProcessor = function(date) {
                            return date
                        }
                    }
                    var combinedFilter = this._createCombinedFilter(filterOptions, timeZoneProcessor);
                    if (this._filterMaker.isRegistered()) {
                        this._filterMaker.make("user", void 0);
                        var trimmedDates = this._trimDates(filterOptions.min, filterOptions.max);
                        this._filterMaker.make("date", [trimmedDates.min, trimmedDates.max, true]);
                        var dateFilter = this.customizeDateFilter(this._filterMaker.combine(), timeZoneProcessor);
                        combinedFilter.push([dateFilter])
                    }
                    return (0, _query2.default)(this._dataSource.items()).filter(combinedFilter).toArray()
                }
            }, {
                key: "_trimDates",
                value: function(min, max) {
                    var minCopy = _date2.default.trimTime(new Date(min));
                    var maxCopy = _date2.default.trimTime(new Date(max));
                    maxCopy.setDate(maxCopy.getDate() + 1);
                    return {
                        min: minCopy,
                        max: maxCopy
                    }
                }
            }, {
                key: "hasAllDayAppointments",
                value: function(items, startDayHour, endDayHour) {
                    if (!items) {
                        return false
                    }
                    var that = this;
                    var result = false;
                    _iterator2.default.each(items, function(index, item) {
                        if (that.appointmentTakesAllDay(item, startDayHour, endDayHour)) {
                            result = true;
                            return false
                        }
                    });
                    return result
                }
            }, {
                key: "appointmentTakesAllDay",
                value: function(appointment, startDayHour, endDayHour) {
                    var dataAccessors = this._dataAccessors;
                    var startDate = dataAccessors.getter.startDate(appointment);
                    var endDate = dataAccessors.getter.endDate(appointment);
                    var allDay = dataAccessors.getter.allDay(appointment);
                    return allDay || this._appointmentHasAllDayDuration(startDate, endDate, startDayHour, endDayHour)
                }
            }, {
                key: "_appointmentHasAllDayDuration",
                value: function(startDate, endDate, startDayHour, endDayHour) {
                    startDate = new Date(startDate);
                    endDate = new Date(endDate);
                    var dayDuration = 24;
                    var appointmentDurationInHours = this._getAppointmentDurationInHours(startDate, endDate);
                    return appointmentDurationInHours >= dayDuration || this._appointmentHasShortDayDuration(startDate, endDate, startDayHour, endDayHour)
                }
            }, {
                key: "_appointmentHasShortDayDuration",
                value: function(startDate, endDate, startDayHour, endDayHour) {
                    var appointmentDurationInHours = this._getAppointmentDurationInHours(startDate, endDate);
                    var shortDayDurationInHours = endDayHour - startDayHour;
                    return appointmentDurationInHours >= shortDayDurationInHours && startDate.getHours() === startDayHour && endDate.getHours() === endDayHour
                }
            }, {
                key: "_getAppointmentDurationInHours",
                value: function(startDate, endDate) {
                    return (endDate.getTime() - startDate.getTime()) / toMs("hour")
                }
            }, {
                key: "appointmentTakesSeveralDays",
                value: function(appointment) {
                    var dataAccessors = this._dataAccessors;
                    var startDate = new Date(dataAccessors.getter.startDate(appointment));
                    var endDate = new Date(dataAccessors.getter.endDate(appointment));
                    return !_date2.default.sameDate(startDate, endDate)
                }
            }, {
                key: "customizeDateFilter",
                value: function(dateFilter, timeZoneProcessor) {
                    var _this4 = this;
                    var currentFilter = (0, _extend.extend)(true, [], dateFilter);
                    return function(appointment) {
                        var startDate = new Date(_this4._dataAccessors.getter.startDate(appointment));
                        var endDate = new Date(_this4._dataAccessors.getter.endDate(appointment));
                        endDate = _this4.fixWrongEndDate(appointment, startDate, endDate);
                        appointment = (0, _extend.extend)(true, {}, appointment);
                        var startDateTimeZone = _this4._dataAccessors.getter.startDateTimeZone(appointment);
                        var endDateTimeZone = _this4._dataAccessors.getter.endDateTimeZone(appointment);
                        var comparableStartDate = timeZoneProcessor(startDate, startDateTimeZone);
                        var comparableEndDate = timeZoneProcessor(endDate, endDateTimeZone);
                        _this4._dataAccessors.setter.startDate(appointment, comparableStartDate);
                        _this4._dataAccessors.setter.endDate(appointment, comparableEndDate);
                        return (0, _query2.default)([appointment]).filter(currentFilter).toArray().length > 0
                    }.bind(this)
                }
            }, {
                key: "fixWrongEndDate",
                value: function(appointment, startDate, endDate) {
                    if (this._isEndDateWrong(appointment, startDate, endDate)) {
                        if (this._dataAccessors.getter.allDay(appointment)) {
                            endDate = _date2.default.setToDayEnd(new Date(startDate))
                        } else {
                            endDate = new Date(startDate.getTime() + this._baseAppointmentDuration * toMs("minute"))
                        }
                        this._dataAccessors.setter.endDate(appointment, endDate)
                    }
                    return endDate
                }
            }, {
                key: "_isEndDateWrong",
                value: function(appointment, startDate, endDate) {
                    return !endDate || isNaN(endDate.getTime()) || startDate.getTime() > endDate.getTime()
                }
            }, {
                key: "add",
                value: function(data, tz) {
                    var _this5 = this;
                    return this._dataSource.store().insert(data).done(function() {
                        _this5._dataSource.load()
                    }.bind(this))
                }
            }, {
                key: "update",
                value: function(target, data) {
                    var _this6 = this;
                    var key = this._getStoreKey(target);
                    var d = new _deferred.Deferred;
                    this._dataSource.store().update(key, data).done(function() {
                        _this6._dataSource.load().done(d.resolve).fail(d.reject)
                    }).fail(d.reject);
                    return d.promise()
                }
            }, {
                key: "remove",
                value: function(target) {
                    var _this7 = this;
                    var key = this._getStoreKey(target);
                    return this._dataSource.store().remove(key).done(function() {
                        _this7._dataSource.load()
                    }.bind(this))
                }
            }]);
            return AppointmentModel
        }();
        module.exports = AppointmentModel
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.appointments.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 12);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _element_data = __webpack_require__( /*! ../../core/element_data */ 41);
        var _element_data2 = _interopRequireDefault(_element_data);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _date = __webpack_require__( /*! ../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _common2 = _interopRequireDefault(_common);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _object = __webpack_require__( /*! ../../core/utils/object */ 47);
        var _object2 = _interopRequireDefault(_object);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.publisher_mixin */ 123);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _uiScheduler3 = __webpack_require__( /*! ./ui.scheduler.appointment */ 748);
        var _uiScheduler4 = _interopRequireDefault(_uiScheduler3);
        var _utils3 = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils3);
        var _double_click = __webpack_require__( /*! ../../events/double_click */ 137);
        var _double_click2 = _interopRequireDefault(_double_click);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiCollection_widget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _utilsTimeZone = __webpack_require__( /*! ./utils.timeZone.js */ 148);
        var _utilsTimeZone2 = _interopRequireDefault(_utilsTimeZone);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var APPOINTMENT_SETTINGS_NAME = "dxAppointmentSettings";
        var COMPONENT_CLASS = "dx-scheduler-scrollable-appointments";
        var APPOINTMENT_ITEM_CLASS = "dx-scheduler-appointment";
        var APPOINTMENT_TITLE_CLASS = "dx-scheduler-appointment-title";
        var APPOINTMENT_CONTENT_DETAILS_CLASS = "dx-scheduler-appointment-content-details";
        var APPOINTMENT_DATE_CLASS = "dx-scheduler-appointment-content-date";
        var RECURRING_ICON_CLASS = "dx-scheduler-appointment-recurrence-icon";
        var ALL_DAY_CONTENT_CLASS = "dx-scheduler-appointment-content-allday";
        var DBLCLICK_EVENT_NAME = eventUtils.addNamespace(_double_click2.default.name, "dxSchedulerAppointment");
        var toMs = _date2.default.dateToMilliseconds;
        var SchedulerAppointments = _uiCollection_widget2.default.inherit({
            ctor: function(element, options) {
                this.callBase(element, options)
            },
            _supportedKeys: function() {
                var parent = this.callBase();
                var tabHandler = function(e) {
                    var appointments = this._getAccessAppointments();
                    var focusedAppointment = appointments.filter(".dx-state-focused");
                    var index = focusedAppointment.data(APPOINTMENT_SETTINGS_NAME).sortedIndex;
                    var lastIndex = appointments.length - 1;
                    if (index > 0 && e.shiftKey || index < lastIndex && !e.shiftKey) {
                        e.preventDefault();
                        e.shiftKey ? index-- : index++;
                        var $nextAppointment = this._getAppointmentByIndex(index);
                        this._resetTabIndex($nextAppointment);
                        _events_engine2.default.trigger($nextAppointment, "focus")
                    }
                };
                return (0, _extend.extend)(parent, {
                    escape: function() {
                        this.moveAppointmentBack();
                        this._escPressed = true
                    }.bind(this),
                    del: function(e) {
                        if (this.option("allowDelete")) {
                            e.preventDefault();
                            var data = this._getItemData(e.target);
                            this.notifyObserver("deleteAppointment", {
                                data: data,
                                target: e.target
                            });
                            this.notifyObserver("hideAppointmentTooltip")
                        }
                    }.bind(this),
                    tab: tabHandler
                })
            },
            _getAppointmentByIndex: function(sortedIndex) {
                var appointments = this._getAccessAppointments();
                return appointments.filter(function(_, $item) {
                    return _element_data2.default.data($item, APPOINTMENT_SETTINGS_NAME).sortedIndex === sortedIndex
                }).eq(0)
            },
            _getAccessAppointments: function() {
                return this._itemElements().filter(":visible").not(".dx-state-disabled")
            },
            _resetTabIndex: function($appointment) {
                this._focusTarget().attr("tabIndex", -1);
                $appointment.attr("tabIndex", this.option("tabIndex"))
            },
            _moveFocus: _common2.default.noop,
            _focusTarget: function() {
                return this._itemElements()
            },
            _renderFocusTarget: function() {
                var $appointment = this._getAppointmentByIndex(0);
                this._resetTabIndex($appointment)
            },
            _focusInHandler: function(e) {
                this.callBase.apply(this, arguments);
                this._$currentAppointment = (0, _renderer2.default)(e.target);
                this.option("focusedElement", (0, _dom.getPublicElement)((0, _renderer2.default)(e.target)))
            },
            _focusOutHandler: function() {
                var $appointment = this._getAppointmentByIndex(0);
                this.option("focusedElement", (0, _dom.getPublicElement)($appointment));
                this.callBase.apply(this, arguments)
            },
            _eventBindingTarget: function() {
                return this._itemContainer()
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    noDataText: null,
                    activeStateEnabled: true,
                    hoverStateEnabled: true,
                    tabIndex: 0,
                    fixedContainer: null,
                    allDayContainer: null,
                    allowDrag: true,
                    allowResize: true,
                    allowAllDayResize: true,
                    onAppointmentDblClick: null,
                    _collectorOffset: 0
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "items":
                        this._cleanFocusState();
                        this._clearDropDownItems();
                        this._clearDropDownItemsElements();
                        this._repaintAppointments(args.value);
                        this._renderDropDownAppointments();
                        this._attachAppointmentsEvents();
                        break;
                    case "fixedContainer":
                    case "allDayContainer":
                    case "onAppointmentDblClick":
                        break;
                    case "allowDrag":
                    case "allowResize":
                    case "allowAllDayResize":
                        this._invalidate();
                        break;
                    case "focusedElement":
                        this._resetTabIndex((0, _renderer2.default)(args.value));
                        this.callBase(args);
                        break;
                    case "allowDelete":
                        break;
                    case "focusStateEnabled":
                        this._clearDropDownItemsElements();
                        this._renderDropDownAppointments();
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _isAllDayAppointment: function(appointment) {
                return appointment.settings.length && appointment.settings[0].allDay || false
            },
            _isRepaintAppointment: function(appointment) {
                return !_type2.default.isDefined(appointment.needRepaint) || true === appointment.needRepaint
            },
            _isRepaintAll: function(appointments) {
                if (this.invoke("isCurrentViewAgenda")) {
                    return true
                }
                for (var i = 0; i < appointments.length; i++) {
                    var appointment = appointments[i];
                    if (!this._isRepaintAppointment(appointment)) {
                        return false
                    }
                }
                return true
            },
            _applyFragment: function(fragment, allDay) {
                if (fragment.children().length > 0) {
                    this._getAppointmentContainer(allDay).append(fragment)
                }
            },
            _onEachAppointment: function(appointment, index, container, isRepaintAll) {
                if (appointment && true === appointment.needRemove) {
                    this._clearItem(appointment);
                    return
                }
                if (this._isRepaintAppointment(appointment)) {
                    appointment.needRepaint = false;
                    !isRepaintAll && this._clearItem(appointment);
                    this._renderItem(index, appointment, container)
                }
            },
            _repaintAppointments: function(appointments) {
                var _this = this;
                var isRepaintAll = this._isRepaintAll(appointments);
                var allDayFragment = (0, _renderer2.default)(this._getAppointmentContainer(true));
                var commonFragment = (0, _renderer2.default)(this._getAppointmentContainer(false));
                if (isRepaintAll) {
                    this._getAppointmentContainer(true).html("");
                    this._getAppointmentContainer(false).html("")
                }!appointments.length && this._cleanItemContainer();
                appointments.forEach(function(appointment, index) {
                    var container = _this._isAllDayAppointment(appointment) ? allDayFragment : commonFragment;
                    _this._onEachAppointment(appointment, index, container, isRepaintAll)
                });
                this._applyFragment(allDayFragment, true);
                this._applyFragment(commonFragment, false)
            },
            _attachAppointmentsEvents: function() {
                this._attachClickEvent();
                this._attachHoldEvent();
                this._attachContextMenuEvent();
                this._attachAppointmentDblClick();
                this._renderFocusState();
                this._attachFeedbackEvents();
                this._attachHoverEvents()
            },
            _clearItem: function(item) {
                var $items = this._findItemElementByItem(item.itemData);
                if (!$items.length) {
                    return
                }(0, _iterator.each)($items, function(_, $item) {
                    $item.detach();
                    $item.remove()
                })
            },
            _clearDropDownItems: function() {
                this._virtualAppointments = {}
            },
            _clearDropDownItemsElements: function() {
                this.invoke("clearCompactAppointments")
            },
            _findItemElementByItem: function(item) {
                var result = [];
                var that = this;
                this.itemElements().each(function() {
                    var $item = (0, _renderer2.default)(this);
                    if ($item.data(that._itemDataKey()) === item) {
                        result.push($item)
                    }
                });
                return result
            },
            _itemClass: function() {
                return APPOINTMENT_ITEM_CLASS
            },
            _itemContainer: function() {
                var $container = this.callBase();
                var $result = $container;
                var $allDayContainer = this.option("allDayContainer");
                if ($allDayContainer) {
                    $result = $container.add($allDayContainer)
                }
                return $result
            },
            _cleanItemContainer: function() {
                this.callBase();
                var $allDayContainer = this.option("allDayContainer");
                if ($allDayContainer) {
                    $allDayContainer.empty()
                }
                this._virtualAppointments = {}
            },
            _clean: function() {
                this.callBase();
                delete this._$currentAppointment;
                delete this._initialSize;
                delete this._initialCoordinates
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(COMPONENT_CLASS);
                this._preventSingleAppointmentClick = false
            },
            _renderAppointmentTemplate: function($container, data, model) {
                var formatText = this.invoke("getTextAndFormatDate", model.appointmentData, model.appointmentData.settings || model.targetedAppointmentData || {}, "TIME");
                (0, _renderer2.default)("<div>").text(formatText.text).addClass(APPOINTMENT_TITLE_CLASS).appendTo($container);
                if (_type2.default.isPlainObject(data)) {
                    if (data.html) {
                        $container.html(data.html)
                    }
                }
                var $contentDetails = (0, _renderer2.default)("<div>").addClass(APPOINTMENT_CONTENT_DETAILS_CLASS);
                (0, _renderer2.default)("<div>").addClass(APPOINTMENT_DATE_CLASS).text(formatText.formatDate).appendTo($contentDetails);
                $contentDetails.appendTo($container);
                if (data.recurrenceRule) {
                    (0, _renderer2.default)("<span>").addClass(RECURRING_ICON_CLASS + " dx-icon-repeat").appendTo($container)
                }
                if (data.allDay) {
                    (0, _renderer2.default)("<div>").text(" " + _message2.default.format("dxScheduler-allDay") + ": ").addClass(ALL_DAY_CONTENT_CLASS).prependTo($contentDetails)
                }
            },
            _executeItemRenderAction: function(index, itemData, itemElement) {
                var action = this._getItemRenderAction();
                if (action) {
                    action(this.invoke("mapAppointmentFields", {
                        itemData: itemData,
                        itemElement: itemElement
                    }))
                }
                delete this._currentAppointmentSettings
            },
            _itemClickHandler: function(e) {
                this.callBase(e, {}, {
                    afterExecute: function(e) {
                        this._processItemClick(e.args[0].event)
                    }.bind(this)
                })
            },
            _processItemClick: function(e) {
                var $target = (0, _renderer2.default)(e.currentTarget);
                var data = this._getItemData($target);
                if ("keydown" === e.type || eventUtils.isFakeClickEvent(e)) {
                    this.notifyObserver("showEditAppointmentPopup", {
                        data: data,
                        target: $target
                    });
                    return
                }
                this._appointmentClickTimeout = setTimeout(function() {
                    if (!this._preventSingleAppointmentClick && _dom_adapter2.default.getBody().contains($target[0])) {
                        this.notifyObserver("showAppointmentTooltip", {
                            data: data,
                            target: $target
                        })
                    }
                    this._preventSingleAppointmentClick = false
                }.bind(this), 300)
            },
            _extendActionArgs: function() {
                var args = this.callBase.apply(this, arguments);
                return this.invoke("mapAppointmentFields", args)
            },
            _render: function() {
                this.callBase.apply(this, arguments);
                this._attachAppointmentDblClick()
            },
            _attachAppointmentDblClick: function() {
                var that = this;
                var itemSelector = that._itemSelector();
                var itemContainer = this._itemContainer();
                _events_engine2.default.off(itemContainer, DBLCLICK_EVENT_NAME, itemSelector);
                _events_engine2.default.on(itemContainer, DBLCLICK_EVENT_NAME, itemSelector, function(e) {
                    that._itemDXEventHandler(e, "onAppointmentDblClick", {}, {
                        afterExecute: function(e) {
                            that._dblClickHandler(e.args[0].event)
                        }
                    })
                })
            },
            _dblClickHandler: function(e) {
                var $targetAppointment = (0, _renderer2.default)(e.currentTarget);
                var appointmentData = this._getItemData($targetAppointment);
                clearTimeout(this._appointmentClickTimeout);
                this._preventSingleAppointmentClick = true;
                this.notifyObserver("showEditAppointmentPopup", {
                    data: appointmentData,
                    target: $targetAppointment
                })
            },
            _renderItem: function(index, item, container) {
                var itemData = item.itemData;
                for (var i = 0; i < item.settings.length; i++) {
                    var setting = item.settings[i];
                    this._currentAppointmentSettings = setting;
                    var $item = this.callBase(index, itemData, container);
                    $item.data(APPOINTMENT_SETTINGS_NAME, setting)
                }
            },
            _getItemContent: function($itemFrame) {
                $itemFrame.data(APPOINTMENT_SETTINGS_NAME, this._currentAppointmentSettings);
                var $itemContent = this.callBase($itemFrame);
                return $itemContent
            },
            _createItemByTemplate: function(itemTemplate, renderArgs) {
                var itemData = renderArgs.itemData,
                    container = renderArgs.container,
                    index = renderArgs.index;
                return itemTemplate.render({
                    model: {
                        appointmentData: itemData,
                        targetedAppointmentData: this.invoke("getTargetedAppointmentData", itemData, (0, _renderer2.default)(container).parent())
                    },
                    container: container,
                    index: index
                })
            },
            _getAppointmentContainer: function(allDay) {
                var $allDayContainer = this.option("allDayContainer");
                var $container = this.itemsContainer().not($allDayContainer);
                if (allDay && $allDayContainer) {
                    $container = $allDayContainer
                }
                return $container
            },
            _postprocessRenderItem: function(args) {
                this._renderAppointment(args.itemElement, this._currentAppointmentSettings)
            },
            _renderAppointment: function($appointment, settings) {
                $appointment.data(APPOINTMENT_SETTINGS_NAME, settings);
                this._applyResourceDataAttr($appointment);
                var data = this._getItemData($appointment);
                var geometry = this.invoke("getAppointmentGeometry", settings);
                var allowResize = this.option("allowResize") && (!_type2.default.isDefined(settings.skipResizing) || _type2.default.isString(settings.skipResizing));
                var allowDrag = this.option("allowDrag");
                var allDay = settings.allDay;
                this.invoke("setCellDataCacheAlias", this._currentAppointmentSettings, geometry);
                var deferredColor = this._getAppointmentColor($appointment, settings.groupIndex);
                if (settings.virtual) {
                    this._processVirtualAppointment(settings, $appointment, data, deferredColor)
                } else {
                    this._createComponent($appointment, _uiScheduler4.default, {
                        observer: this.option("observer"),
                        data: data,
                        geometry: geometry,
                        direction: settings.direction || "vertical",
                        allowResize: allowResize,
                        allowDrag: allowDrag,
                        allDay: allDay,
                        reduced: settings.appointmentReduced,
                        isCompact: settings.isCompact,
                        startDate: new Date(settings.startDate),
                        cellWidth: this.invoke("getCellWidth"),
                        cellHeight: this.invoke("getCellHeight"),
                        resizableConfig: this._resizableConfig(data, settings)
                    });
                    deferredColor.done(function(color) {
                        if (color) {
                            $appointment.css("backgroundColor", color)
                        }
                    })
                }
            },
            _applyResourceDataAttr: function($appointment) {
                var resources = this.invoke("getResourcesFromItem", this._getItemData($appointment));
                if (resources) {
                    (0, _iterator.each)(resources, function(name, values) {
                        var attr = "data-" + _common2.default.normalizeKey(name.toLowerCase()) + "-";
                        for (var i = 0; i < values.length; i++) {
                            $appointment.attr(attr + _common2.default.normalizeKey(values[i]), true)
                        }
                    })
                }
            },
            _resizableConfig: function(appointmentData, itemSetting) {
                return {
                    area: this._calculateResizableArea(itemSetting, appointmentData),
                    onResizeStart: function(e) {
                        this._$currentAppointment = (0, _renderer2.default)(e.element);
                        if (this.invoke("needRecalculateResizableArea")) {
                            var updatedArea = this._calculateResizableArea(this._$currentAppointment.data(APPOINTMENT_SETTINGS_NAME), this._$currentAppointment.data("dxItemData"));
                            e.component.option("area", updatedArea);
                            e.component._renderDragOffsets(e.event)
                        }
                        this._initialSize = {
                            width: e.width,
                            height: e.height
                        };
                        this._initialCoordinates = _translator2.default.locate(this._$currentAppointment)
                    }.bind(this),
                    onResizeEnd: function(e) {
                        if (this._escPressed) {
                            e.event.cancel = true;
                            return
                        }
                        this._resizeEndHandler(e)
                    }.bind(this)
                }
            },
            _calculateResizableArea: function(itemSetting, appointmentData) {
                var area = this.$element().closest(".dx-scrollable-content");
                return this.invoke("getResizableAppointmentArea", {
                    coordinates: {
                        left: itemSetting.left,
                        top: 0,
                        groupIndex: itemSetting.groupIndex
                    },
                    allDay: itemSetting.allDay
                }) || area
            },
            _resizeEndHandler: function(e) {
                var $element = (0, _renderer2.default)(e.element);
                var itemData = this._getItemData($element);
                var startDate = this.invoke("getStartDate", itemData, true);
                var endDate = this.invoke("getEndDate", itemData, true);
                var dateRange = this._getDateRange(e, startDate, endDate);
                var updatedDates = {};
                this.invoke("setField", "startDate", updatedDates, new Date(dateRange[0]));
                this.invoke("setField", "endDate", updatedDates, new Date(dateRange[1]));
                var data = (0, _extend.extend)({}, itemData, updatedDates);
                this.notifyObserver("updateAppointmentAfterResize", {
                    target: itemData,
                    data: data,
                    $appointment: $element
                })
            },
            _getDateRange: function(e, startDate, endDate) {
                var itemData = this._getItemData(e.element);
                var deltaTime = this.invoke("getDeltaTime", e, this._initialSize, itemData);
                var renderingStrategyDirection = this.invoke("getRenderingStrategyDirection");
                var isStartDateChanged = false;
                var isAllDay = this.invoke("isAllDay", itemData);
                var needCorrectDates = this.invoke("needCorrectAppointmentDates") && !isAllDay;
                var startTime;
                var endTime;
                if ("vertical" !== renderingStrategyDirection || isAllDay) {
                    isStartDateChanged = this.option("rtlEnabled") ? e.handles.right : e.handles.left
                } else {
                    isStartDateChanged = e.handles.top
                }
                if (isStartDateChanged) {
                    startTime = needCorrectDates ? this._correctStartDateByDelta(startDate, deltaTime) : startDate.getTime() - deltaTime;
                    startTime += _utilsTimeZone2.default.getTimezoneOffsetChangeInMs(startDate, endDate, startTime, endDate);
                    endTime = endDate.getTime()
                } else {
                    startTime = startDate.getTime();
                    endTime = needCorrectDates ? this._correctEndDateByDelta(endDate, deltaTime) : endDate.getTime() + deltaTime;
                    endTime -= _utilsTimeZone2.default.getTimezoneOffsetChangeInMs(startDate, endDate, startDate, endTime)
                }
                return [startTime, endTime]
            },
            _correctEndDateByDelta: function(endDate, deltaTime) {
                var endDayHour = this.invoke("getEndDayHour");
                var startDayHour = this.invoke("getStartDayHour");
                var result = endDate.getTime() + deltaTime;
                var visibleDayDuration = (endDayHour - startDayHour) * toMs("hour");
                var daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration);
                var maxDate = new Date(endDate);
                var minDate = new Date(endDate);
                minDate.setHours(startDayHour, 0, 0, 0);
                maxDate.setHours(endDayHour, 0, 0, 0);
                if (result > maxDate.getTime() || result <= minDate.getTime()) {
                    var tailOfCurrentDay = maxDate.getTime() - endDate.getTime();
                    var tailOfPrevDays = deltaTime - tailOfCurrentDay;
                    var lastDay = new Date(endDate.setDate(endDate.getDate() + daysCount));
                    lastDay.setHours(startDayHour, 0, 0, 0);
                    result = lastDay.getTime() + tailOfPrevDays - visibleDayDuration * (daysCount - 1)
                }
                return result
            },
            _correctStartDateByDelta: function(startDate, deltaTime) {
                var endDayHour = this.invoke("getEndDayHour");
                var startDayHour = this.invoke("getStartDayHour");
                var result = startDate.getTime() - deltaTime;
                var visibleDayDuration = (endDayHour - startDayHour) * toMs("hour");
                var daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration);
                var maxDate = new Date(startDate);
                var minDate = new Date(startDate);
                minDate.setHours(startDayHour, 0, 0, 0);
                maxDate.setHours(endDayHour, 0, 0, 0);
                if (result < minDate.getTime() || result >= maxDate.getTime()) {
                    var tailOfCurrentDay = startDate.getTime() - minDate.getTime();
                    var tailOfPrevDays = deltaTime - tailOfCurrentDay;
                    var firstDay = new Date(startDate.setDate(startDate.getDate() - daysCount));
                    firstDay.setHours(endDayHour, 0, 0, 0);
                    result = firstDay.getTime() - tailOfPrevDays + visibleDayDuration * (daysCount - 1)
                }
                return result
            },
            _tryGetAppointmentColor: function(appointment) {
                var settings = (0, _renderer2.default)(appointment).data(APPOINTMENT_SETTINGS_NAME);
                if (!settings) {
                    return
                }
                return this._getAppointmentColor(appointment, settings.groupIndex)
            },
            _getAppointmentColor: function($appointment, groupIndex) {
                var res = new _deferred.Deferred;
                var response = this.invoke("getAppointmentColor", {
                    itemData: this._getItemData($appointment),
                    groupIndex: groupIndex
                });
                response.done(function(color) {
                    return res.resolve(color)
                });
                return res.promise()
            },
            _calculateBoundOffset: function() {
                return this.invoke("getBoundOffset")
            },
            _virtualAppointments: {},
            _processVirtualAppointment: function(appointmentSetting, $appointment, appointmentData, color) {
                var virtualAppointment = appointmentSetting.virtual;
                var virtualGroupIndex = virtualAppointment.index;
                if (!_type2.default.isDefined(this._virtualAppointments[virtualGroupIndex])) {
                    this._virtualAppointments[virtualGroupIndex] = {
                        coordinates: {
                            top: virtualAppointment.top,
                            left: virtualAppointment.left
                        },
                        items: {
                            data: [],
                            colors: [],
                            settings: []
                        },
                        isAllDay: virtualAppointment.isAllDay ? true : false,
                        buttonColor: color
                    }
                }
                appointmentSetting.targetedAppointmentData = this.invoke("getTargetedAppointmentData", appointmentData, $appointment);
                this._virtualAppointments[virtualGroupIndex].items.settings.push(appointmentSetting);
                this._virtualAppointments[virtualGroupIndex].items.data.push(appointmentData);
                this._virtualAppointments[virtualGroupIndex].items.colors.push(color);
                $appointment.remove()
            },
            _renderContentImpl: function() {
                this.callBase();
                this._renderDropDownAppointments()
            },
            _renderDropDownAppointments: function() {
                (0, _iterator.each)(this._virtualAppointments, function(groupIndex) {
                    var virtualGroup = this._virtualAppointments[groupIndex];
                    var virtualItems = virtualGroup.items;
                    var virtualCoordinates = virtualGroup.coordinates;
                    var $container = virtualGroup.isAllDay ? this.option("allDayContainer") : this.$element();
                    var left = virtualCoordinates.left;
                    var buttonWidth = this.invoke("getDropDownAppointmentWidth", virtualGroup.isAllDay);
                    var buttonHeight = this.invoke("getDropDownAppointmentHeight");
                    var rtlOffset = this.option("rtlEnabled") ? buttonWidth : 0;
                    this.notifyObserver("renderCompactAppointments", {
                        $container: $container,
                        coordinates: {
                            top: virtualCoordinates.top,
                            left: left + rtlOffset
                        },
                        items: virtualItems,
                        buttonColor: virtualGroup.buttonColor,
                        width: buttonWidth - this.option("_collectorOffset"),
                        height: buttonHeight,
                        onAppointmentClick: this.option("onItemClick"),
                        allowDrag: this.option("allowDrag"),
                        cellWidth: this.invoke("getCellWidth"),
                        isCompact: this.invoke("isAdaptive") || this._isGroupCompact(virtualGroup),
                        applyOffset: !virtualGroup.isAllDay && this.invoke("isApplyCompactAppointmentOffset")
                    })
                }.bind(this))
            },
            _isGroupCompact: function(virtualGroup) {
                return !virtualGroup.isAllDay && this.invoke("supportCompactDropDownAppointments")
            },
            _sortAppointmentsByStartDate: function(appointments) {
                appointments.sort(function(a, b) {
                    var result = 0;
                    var firstDate = new Date(this.invoke("getField", "startDate", a.settings || a)).getTime();
                    var secondDate = new Date(this.invoke("getField", "startDate", b.settings || b)).getTime();
                    if (firstDate < secondDate) {
                        result = -1
                    }
                    if (firstDate > secondDate) {
                        result = 1
                    }
                    return result
                }.bind(this))
            },
            _processRecurrenceAppointment: function(appointment, index, skipLongAppointments) {
                var recurrenceRule = this.invoke("getField", "recurrenceRule", appointment);
                var result = {
                    parts: [],
                    indexes: []
                };
                if (recurrenceRule) {
                    var dates = appointment.settings || appointment;
                    var startDate = new Date(this.invoke("getField", "startDate", dates));
                    var endDate = new Date(this.invoke("getField", "endDate", dates));
                    var appointmentDuration = endDate.getTime() - startDate.getTime();
                    var recurrenceException = this.invoke("getField", "recurrenceException", appointment);
                    var startViewDate = this.invoke("getStartViewDate");
                    var endViewDate = this.invoke("getEndViewDate");
                    var recurrentDates = _utils2.default.getDatesByRecurrence({
                        rule: recurrenceRule,
                        exception: recurrenceException,
                        start: startDate,
                        end: endDate,
                        min: startViewDate,
                        max: endViewDate
                    });
                    var recurrentDateCount = appointment.settings ? 1 : recurrentDates.length;
                    for (var i = 0; i < recurrentDateCount; i++) {
                        var appointmentPart = (0, _extend.extend)({}, appointment, true);
                        if (recurrentDates[i]) {
                            var appointmentSettings = this._applyStartDateToObj(recurrentDates[i], {});
                            this._applyEndDateToObj(new Date(recurrentDates[i].getTime() + appointmentDuration), appointmentSettings);
                            appointmentPart.settings = appointmentSettings
                        } else {
                            appointmentPart.settings = dates
                        }
                        result.parts.push(appointmentPart);
                        if (!skipLongAppointments) {
                            this._processLongAppointment(appointmentPart, result)
                        }
                    }
                    result.indexes.push(index)
                }
                return result
            },
            _processLongAppointment: function(appointment, result) {
                var parts = this.splitAppointmentByDay(appointment);
                var partCount = parts.length;
                var endViewDate = this.invoke("getEndViewDate").getTime();
                var startViewDate = this.invoke("getStartViewDate").getTime();
                var startDateTimeZone = this.invoke("getField", "startDateTimeZone", appointment);
                result = result || {
                    parts: []
                };
                if (partCount > 1) {
                    (0, _extend.extend)(appointment, parts[0]);
                    for (var i = 1; i < partCount; i++) {
                        var startDate = this.invoke("getField", "startDate", parts[i].settings).getTime();
                        startDate = this.invoke("convertDateByTimezone", startDate, startDateTimeZone);
                        if (startDate < endViewDate && startDate > startViewDate) {
                            result.parts.push(parts[i])
                        }
                    }
                }
                return result
            },
            _reduceRecurrenceAppointments: function(recurrenceIndexes, appointments) {
                (0, _iterator.each)(recurrenceIndexes, function(i, index) {
                    appointments.splice(index - i, 1)
                })
            },
            _combineAppointments: function(appointments, additionalAppointments) {
                if (additionalAppointments.length) {
                    _array2.default.merge(appointments, additionalAppointments)
                }
                this._sortAppointmentsByStartDate(appointments)
            },
            _applyStartDateToObj: function(startDate, obj) {
                this.invoke("setField", "startDate", obj, startDate);
                return obj
            },
            _applyEndDateToObj: function(endDate, obj) {
                this.invoke("setField", "endDate", obj, endDate);
                return obj
            },
            moveAppointmentBack: function(dragEvent) {
                var $appointment = this._$currentAppointment;
                var size = this._initialSize;
                var coords = this._initialCoordinates;
                if (dragEvent) {
                    if (_type2.default.isDeferred(dragEvent.cancel)) {
                        dragEvent.cancel.resolve(true)
                    } else {
                        dragEvent.cancel = true
                    }
                }
                this.notifyObserver("moveBack");
                if ($appointment && !dragEvent) {
                    if (coords) {
                        _translator2.default.move($appointment, coords);
                        delete this._initialSize
                    }
                    if (size) {
                        $appointment.outerWidth(size.width);
                        $appointment.outerHeight(size.height);
                        delete this._initialCoordinates
                    }
                }
            },
            focus: function() {
                if (this._$currentAppointment) {
                    var focusedElement = (0, _dom.getPublicElement)(this._$currentAppointment);
                    this.option("focusedElement", focusedElement);
                    _events_engine2.default.trigger(focusedElement, "focus")
                }
            },
            splitAppointmentByDay: function(appointment) {
                var dates = appointment.settings || appointment;
                var originalStartDate = new Date(this.invoke("getField", "startDate", dates));
                var startDate = _date2.default.makeDate(originalStartDate);
                var endDate = _date2.default.makeDate(this.invoke("getField", "endDate", dates));
                var startDateTimeZone = this.invoke("getField", "startDateTimeZone", appointment);
                var endDateTimeZone = this.invoke("getField", "endDateTimeZone", appointment);
                var maxAllowedDate = this.invoke("getEndViewDate");
                var startDayHour = this.invoke("getStartDayHour");
                var endDayHour = this.invoke("getEndDayHour");
                var appointmentIsLong = this.invoke("appointmentTakesSeveralDays", appointment);
                var result = [];
                startDate = this.invoke("convertDateByTimezone", startDate, startDateTimeZone);
                endDate = this.invoke("convertDateByTimezone", endDate, endDateTimeZone);
                if (startDate.getHours() <= endDayHour && startDate.getHours() >= startDayHour && !appointmentIsLong) {
                    result.push(this._applyStartDateToObj(new Date(startDate), {
                        appointmentData: appointment
                    }));
                    startDate.setDate(startDate.getDate() + 1)
                }
                while (appointmentIsLong && startDate.getTime() < endDate.getTime() - 1 && startDate < maxAllowedDate) {
                    var currentStartDate = new Date(startDate);
                    var currentEndDate = new Date(startDate);
                    this._checkStartDate(currentStartDate, originalStartDate, startDayHour);
                    this._checkEndDate(currentEndDate, endDate, endDayHour);
                    var appointmentData = _object2.default.deepExtendArraySafe({}, appointment, true);
                    var appointmentSettings = {};
                    this._applyStartDateToObj(currentStartDate, appointmentSettings);
                    this._applyEndDateToObj(currentEndDate, appointmentSettings);
                    appointmentData.settings = appointmentSettings;
                    result.push(appointmentData);
                    startDate.setDate(startDate.getDate() + 1);
                    startDate.setHours(startDayHour)
                }
                return result
            },
            _checkStartDate: function(currentDate, originalDate, startDayHour) {
                if (!_date2.default.sameDate(currentDate, originalDate) || currentDate.getHours() <= startDayHour) {
                    currentDate.setHours(startDayHour, 0, 0, 0)
                } else {
                    currentDate.setHours(originalDate.getHours(), originalDate.getMinutes(), originalDate.getSeconds(), originalDate.getMilliseconds())
                }
            },
            _checkEndDate: function(currentDate, originalDate, endDayHour) {
                if (!_date2.default.sameDate(currentDate, originalDate) || currentDate.getHours() > endDayHour) {
                    currentDate.setHours(endDayHour, 0, 0, 0)
                } else {
                    currentDate.setHours(originalDate.getHours(), originalDate.getMinutes(), originalDate.getSeconds(), originalDate.getMilliseconds())
                }
            }
        }).include(_uiScheduler2.default);
        (0, _component_registrator2.default)("dxSchedulerAppointments", SchedulerAppointments);
        module.exports = SchedulerAppointments
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.appointment.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _utils = __webpack_require__( /*! ./utils.recurrence */ 147);
        var _utils2 = _interopRequireDefault(_utils);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _ui = __webpack_require__( /*! ../tooltip/ui.tooltip */ 243);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiScheduler = __webpack_require__( /*! ./ui.scheduler.publisher_mixin */ 123);
        var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
        var _utils3 = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils3);
        var _pointer = __webpack_require__( /*! ../../events/pointer */ 23);
        var _pointer2 = _interopRequireDefault(_pointer);
        var _dom_component = __webpack_require__( /*! ../../core/dom_component */ 68);
        var _dom_component2 = _interopRequireDefault(_dom_component);
        var _resizable = __webpack_require__( /*! ../resizable */ 181);
        var _resizable2 = _interopRequireDefault(_resizable);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);
        var _constants = __webpack_require__( /*! ./constants */ 171);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DEFAULT_HORIZONTAL_HANDLES = "left right";
        var DEFAULT_VERTICAL_HANDLES = "top bottom";
        var REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME = eventUtils.addNamespace(_pointer2.default.enter, "dxSchedulerAppointment");
        var REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME = eventUtils.addNamespace(_pointer2.default.leave, "dxSchedulerAppointment");
        var Appointment = _dom_component2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    data: {},
                    geometry: {
                        top: 0,
                        left: 0,
                        width: 0,
                        height: 0
                    },
                    allowDrag: true,
                    allowResize: true,
                    reduced: null,
                    isCompact: false,
                    direction: "vertical",
                    resizableConfig: {},
                    cellHeight: 0,
                    cellWidth: 0
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "data":
                    case "geometry":
                    case "allowDrag":
                    case "allowResize":
                    case "reduced":
                    case "sortedIndex":
                    case "isCompact":
                    case "direction":
                    case "resizableConfig":
                    case "cellHeight":
                    case "cellWidth":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getHorizontalResizingRule: function() {
                var reducedHandles = {
                    head: this.option("rtlEnabled") ? "right" : "left",
                    body: "",
                    tail: this.option("rtlEnabled") ? "left" : "right"
                };
                return {
                    handles: this.option("reduced") ? reducedHandles[this.option("reduced")] : DEFAULT_HORIZONTAL_HANDLES,
                    minHeight: 0,
                    minWidth: this.invoke("getCellWidth"),
                    step: this.invoke("getResizableStep")
                }
            },
            _getVerticalResizingRule: function() {
                var height = this.invoke("getCellHeight");
                return {
                    handles: DEFAULT_VERTICAL_HANDLES,
                    minWidth: 0,
                    minHeight: height,
                    step: height
                }
            },
            _render: function() {
                this.callBase();
                this._renderAppointmentGeometry();
                this._renderEmptyClass();
                this._renderReducedAppointment();
                this._renderAllDayClass();
                this._renderDirection();
                this.$element().data("dxAppointmentStartDate", this.option("startDate"));
                this.$element().attr("title", this.invoke("getField", "text", this.option("data")));
                this.$element().attr("role", "button");
                this._renderRecurrenceClass();
                this._renderResizable()
            },
            _renderAppointmentGeometry: function() {
                var geometry = this.option("geometry");
                var $element = this.$element();
                _translator2.default.move($element, {
                    top: geometry.top,
                    left: geometry.left
                });
                $element.css({
                    width: geometry.width < 0 ? 0 : geometry.width,
                    height: geometry.height < 0 ? 0 : geometry.height
                })
            },
            _renderEmptyClass: function() {
                var geometry = this.option("geometry");
                if (geometry.empty || this.option("isCompact")) {
                    this.$element().addClass(_constants.EMPTY_APPOINTMENT_CLASS)
                }
            },
            _renderReducedAppointment: function() {
                var reducedPart = this.option("reduced");
                if (!reducedPart) {
                    return
                }
                this.$element().toggleClass(_constants.REDUCED_APPOINTMENT_CLASS, true).toggleClass(_constants.REDUCED_APPOINTMENT_PARTS_CLASSES[reducedPart], true);
                this._renderAppointmentReducedIcon()
            },
            _renderAppointmentReducedIcon: function() {
                var $icon = (0, _renderer2.default)("<div>").addClass(_constants.REDUCED_APPOINTMENT_ICON).appendTo(this.$element());
                var endDate = this._getEndDate();
                var tooltipLabel = _message2.default.format("dxScheduler-editorLabelEndDate");
                var tooltipText = [tooltipLabel, ": ", _date2.default.format(endDate, "monthAndDay"), ", ", _date2.default.format(endDate, "year")].join("");
                _events_engine2.default.off($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME);
                _events_engine2.default.on($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME, function() {
                    _ui2.default.show({
                        target: $icon,
                        content: tooltipText
                    })
                });
                _events_engine2.default.off($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME);
                _events_engine2.default.on($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME, function() {
                    _ui2.default.hide()
                })
            },
            _getEndDate: function() {
                var result = this.invoke("getField", "endDate", this.option("data"));
                if (result) {
                    return new Date(result)
                }
                return result
            },
            _renderAllDayClass: function() {
                this.$element().toggleClass(_constants.ALL_DAY_APPOINTMENT_CLASS, !!this.option("allDay"))
            },
            _renderRecurrenceClass: function() {
                var rule = this.invoke("getField", "recurrenceRule", this.option("data"));
                if (_utils2.default.getRecurrenceRule(rule).isValid) {
                    this.$element().addClass(_constants.RECURRENCE_APPOINTMENT_CLASS)
                }
            },
            _renderDirection: function() {
                this.$element().addClass(_constants.DIRECTION_APPOINTMENT_CLASSES[this.option("direction")])
            },
            _createResizingConfig: function() {
                var config = "vertical" === this.option("direction") ? this._getVerticalResizingRule() : this._getHorizontalResizingRule();
                config.roundStepValue = true;
                if (!this.invoke("isGroupedByDate")) {
                    config.stepPrecision = "strict"
                }
                return config
            },
            _renderResizable: function() {
                if (this.option("allowResize")) {
                    this._createComponent(this.$element(), _resizable2.default, (0, _extend.extend)(this._createResizingConfig(), this.option("resizableConfig")))
                }
            },
            _useTemplates: function() {
                return false
            }
        }).include(_uiScheduler2.default);
        (0, _component_registrator2.default)("dxSchedulerAppointment", Appointment);
        module.exports = Appointment
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/ui.scheduler.appointments.layout_manager.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./rendering_strategies/ui.scheduler.appointments.strategy.vertical */ 750);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);
        var _uiSchedulerAppointmentsStrategy3 = __webpack_require__( /*! ./rendering_strategies/ui.scheduler.appointments.strategy.horizontal */ 407);
        var _uiSchedulerAppointmentsStrategy4 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy3);
        var _uiSchedulerAppointmentsStrategy5 = __webpack_require__( /*! ./rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month_line */ 408);
        var _uiSchedulerAppointmentsStrategy6 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy5);
        var _uiSchedulerAppointmentsStrategy7 = __webpack_require__( /*! ./rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month */ 752);
        var _uiSchedulerAppointmentsStrategy8 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy7);
        var _uiSchedulerAppointmentsStrategy9 = __webpack_require__( /*! ./rendering_strategies/ui.scheduler.appointments.strategy.agenda */ 753);
        var _uiSchedulerAppointmentsStrategy10 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy9);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var RENDERING_STRATEGIES = {
            horizontal: _uiSchedulerAppointmentsStrategy4.default,
            horizontalMonth: _uiSchedulerAppointmentsStrategy8.default,
            horizontalMonthLine: _uiSchedulerAppointmentsStrategy6.default,
            vertical: _uiSchedulerAppointmentsStrategy2.default,
            agenda: _uiSchedulerAppointmentsStrategy10.default
        };
        var AppointmentLayoutManager = function() {
            function AppointmentLayoutManager(instance, renderingStrategy) {
                _classCallCheck(this, AppointmentLayoutManager);
                this.instance = instance;
                renderingStrategy && this.initRenderingStrategy(renderingStrategy)
            }
            _createClass(AppointmentLayoutManager, [{
                key: "getCellDimensions",
                value: function(options) {
                    if (this.instance._workSpace) {
                        return {
                            width: this.instance._workSpace.getCellWidth(),
                            height: this.instance._workSpace.getCellHeight(),
                            allDayHeight: this.instance._workSpace.getAllDayHeight()
                        }
                    }
                }
            }, {
                key: "getGroupOrientation",
                value: function(options) {
                    if (this.instance._workSpace) {
                        options.callback(this.instance._workSpace._getRealGroupOrientation())
                    }
                }
            }, {
                key: "initRenderingStrategy",
                value: function(renderingStrategy) {
                    var Strategy = RENDERING_STRATEGIES[renderingStrategy];
                    this._renderingStrategyInstance = new Strategy(this.instance);
                    this.renderingStrategy = renderingStrategy
                }
            }, {
                key: "createAppointmentsMap",
                value: function(items) {
                    var _this = this;
                    var _this$getCellDimensio = this.getCellDimensions(),
                        width = _this$getCellDimensio.width,
                        height = _this$getCellDimensio.height,
                        allDayHeight = _this$getCellDimensio.allDayHeight;
                    this.instance._cellWidth = width;
                    this.instance._cellHeight = height;
                    this.instance._allDayCellHeight = allDayHeight;
                    this.getGroupOrientation({
                        callback: function(groupOrientation) {
                            return _this.instance._groupOrientation = groupOrientation
                        }
                    });
                    this._positionMap = this._renderingStrategyInstance.createTaskPositionMap(items);
                    return this._createAppointmentsMapCore(items || [], this._positionMap)
                }
            }, {
                key: "_createAppointmentsMapCore",
                value: function(list, positionMap) {
                    var _this2 = this;
                    return list.map(function(data, index) {
                        if (!_this2._renderingStrategyInstance.keepAppointmentSettings()) {
                            delete data.settings
                        }
                        var appointmentSettings = positionMap[index];
                        appointmentSettings.forEach(function(settings) {
                            settings.direction = "vertical" === _this2.renderingStrategy && !settings.allDay ? "vertical" : "horizontal"
                        });
                        return {
                            itemData: data,
                            settings: appointmentSettings,
                            needRepaint: true,
                            needRemove: false
                        }
                    })
                }
            }, {
                key: "_hasChangesInData",
                value: function(data) {
                    var updatedData = this.instance.getUpdatedAppointment();
                    return updatedData === data || this.instance.getUpdatedAppointmentKeys().some(function(item) {
                        return data[item.key] === item.value
                    })
                }
            }, {
                key: "_hasChangesInSettings",
                value: function(settingList, oldSettingList) {
                    if (settingList.length !== oldSettingList.length) {
                        return true
                    }
                    for (var i = 0; i < settingList.length; i++) {
                        var newSettings = settingList[i];
                        var oldSettings = oldSettingList[i];
                        if (oldSettings) {
                            oldSettings.sortedIndex = newSettings.sortedIndex
                        }
                        if (!(0, _common.equalByValue)(newSettings, oldSettings)) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_getEqualAppointmentFromList",
                value: function(appointment, list) {
                    for (var i = 0; i < list.length; i++) {
                        var item = list[i];
                        if (item.itemData === appointment.itemData) {
                            return item
                        }
                    }
                    return null
                }
            }, {
                key: "_getDeletedAppointments",
                value: function(appointmentList, oldAppointmentList) {
                    var result = [];
                    for (var i = 0; i < oldAppointmentList.length; i++) {
                        var oldAppointment = oldAppointmentList[i];
                        var appointment = this._getEqualAppointmentFromList(oldAppointment, appointmentList);
                        if (!appointment) {
                            oldAppointment.needRemove = true;
                            result.push(oldAppointment)
                        }
                    }
                    return result
                }
            }, {
                key: "getRepaintedAppointments",
                value: function(appointmentList, oldAppointmentList) {
                    if (0 === oldAppointmentList.length || "agenda" === this.renderingStrategy) {
                        return appointmentList
                    }
                    for (var i = 0; i < appointmentList.length; i++) {
                        var appointment = appointmentList[i];
                        var oldAppointment = this._getEqualAppointmentFromList(appointment, oldAppointmentList);
                        if (oldAppointment) {
                            appointment.needRepaint = this._hasChangesInData(appointment.itemData) || this._hasChangesInSettings(appointment.settings, oldAppointment.settings)
                        }
                    }
                    return appointmentList.concat(this._getDeletedAppointments(appointmentList, oldAppointmentList))
                }
            }, {
                key: "getRenderingStrategyInstance",
                value: function() {
                    return this._renderingStrategyInstance
                }
            }]);
            return AppointmentLayoutManager
        }();
        module.exports = AppointmentLayoutManager
    },
    /*!***************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.vertical.js ***!
      \***************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./ui.scheduler.appointments.strategy.base */ 252);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _utils = __webpack_require__( /*! ./../utils.timeZone */ 148);
        var _utils2 = _interopRequireDefault(_utils);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var ALLDAY_APPOINTMENT_MIN_VERTICAL_OFFSET = 5;
        var ALLDAY_APPOINTMENT_MAX_VERTICAL_OFFSET = 20;
        var toMs = _date2.default.dateToMilliseconds;
        var VerticalRenderingStrategy = function(_BaseAppointmentsStra) {
            _inherits(VerticalRenderingStrategy, _BaseAppointmentsStra);
            var _super = _createSuper(VerticalRenderingStrategy);

            function VerticalRenderingStrategy() {
                _classCallCheck(this, VerticalRenderingStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(VerticalRenderingStrategy, [{
                key: "getDeltaTime",
                value: function(args, initialSize, appointment) {
                    var deltaTime = 0;
                    if (this.isAllDay(appointment)) {
                        deltaTime = this._getDeltaWidth(args, initialSize) * toMs("day")
                    } else {
                        var deltaHeight = args.height - initialSize.height;
                        deltaTime = toMs("minute") * Math.round(deltaHeight / this.getDefaultCellHeight() * this.instance.getAppointmentDurationInMinutes())
                    }
                    return deltaTime
                }
            }, {
                key: "_correctCollectorCoordinatesInAdaptive",
                value: function(coordinates, isAllDay) {
                    if (isAllDay) {
                        _get(_getPrototypeOf(VerticalRenderingStrategy.prototype), "_correctCollectorCoordinatesInAdaptive", this).call(this, coordinates, isAllDay)
                    } else {
                        if (0 === this._getMaxAppointmentCountPerCellByType()) {
                            var cellHeight = this.getDefaultCellHeight();
                            var cellWidth = this.getDefaultCellWidth();
                            coordinates.top += (cellHeight - this.getDropDownButtonAdaptiveSize()) / 2;
                            coordinates.left += (cellWidth - this.getDropDownButtonAdaptiveSize()) / 2
                        }
                    }
                }
            }, {
                key: "getAppointmentGeometry",
                value: function(coordinates) {
                    var geometry = null;
                    if (coordinates.allDay) {
                        geometry = this._getAllDayAppointmentGeometry(coordinates)
                    } else {
                        geometry = this._isAdaptive() && coordinates.isCompact ? this._getAdaptiveGeometry(coordinates) : this._getVerticalAppointmentGeometry(coordinates)
                    }
                    return _get(_getPrototypeOf(VerticalRenderingStrategy.prototype), "getAppointmentGeometry", this).call(this, geometry)
                }
            }, {
                key: "_getAdaptiveGeometry",
                value: function(coordinates) {
                    var config = this._calculateGeometryConfig(coordinates);
                    return this._customizeCoordinates(coordinates, config.height, config.appointmentCountPerCell, config.offset)
                }
            }, {
                key: "_getItemPosition",
                value: function(item) {
                    var allDay = this.isAllDay(item);
                    var isRecurring = !!this.instance.fire("getField", "recurrenceRule", item);
                    var appointmentStartDate = this.startDate(item, true);
                    var appointmentEndDate = this.endDate(item);
                    var isAppointmentTakesSeveralDays = !_utils2.default.isSameAppointmentDates(appointmentStartDate, appointmentEndDate);
                    if (allDay) {
                        return _get(_getPrototypeOf(VerticalRenderingStrategy.prototype), "_getItemPosition", this).call(this, item)
                    }
                    var position = this._getAppointmentCoordinates(item);
                    var result = [];
                    for (var j = 0; j < position.length; j++) {
                        var height = this.calculateAppointmentHeight(item, position[j], isRecurring);
                        var width = this.calculateAppointmentWidth(item, position[j], isRecurring);
                        var resultHeight = height;
                        var appointmentReduced = null;
                        var multiDaysAppointmentParts = [];
                        var currentMaxAllowedPosition = position[j].vMax;
                        if (this._isMultiDayAppointment(position[j], height) || isAppointmentTakesSeveralDays && !isRecurring) {
                            if (_date2.default.sameDate(appointmentStartDate, position[j].startDate) || isRecurring) {
                                appointmentReduced = "head";
                                resultHeight = this._reduceMultiDayAppointment(height, {
                                    top: position[j].top,
                                    bottom: currentMaxAllowedPosition
                                });
                                multiDaysAppointmentParts = this._getAppointmentParts({
                                    sourceAppointmentHeight: height,
                                    reducedHeight: resultHeight,
                                    width: width
                                }, position[j])
                            } else {
                                appointmentReduced = "tail"
                            }
                        }(0, _extend.extend)(position[j], {
                            height: resultHeight,
                            width: width,
                            allDay: allDay,
                            originalAppointmentStartDate: appointmentStartDate,
                            originalAppointmentEndDate: appointmentEndDate,
                            endDate: this.endDate(item, position[j], isRecurring),
                            appointmentReduced: appointmentReduced
                        });
                        result = this._getAppointmentPartsPosition(multiDaysAppointmentParts, position[j], result)
                    }
                    return result
                }
            }, {
                key: "_isMultiDayAppointment",
                value: function(position, height) {
                    var maxTop = position.vMax;
                    var result = height > maxTop - position.top;
                    return result
                }
            }, {
                key: "_reduceMultiDayAppointment",
                value: function(sourceAppointmentHeight, bound) {
                    sourceAppointmentHeight = bound.bottom - Math.floor(bound.top);
                    return sourceAppointmentHeight
                }
            }, {
                key: "_getAppointmentParts",
                value: function(appointmentGeometry, appointmentSettings) {
                    var tailHeight = appointmentGeometry.sourceAppointmentHeight - appointmentGeometry.reducedHeight;
                    var width = appointmentGeometry.width;
                    var result = [];
                    var currentPartTop = this.instance.fire("getGroupTop", appointmentSettings.groupIndex);
                    var offset = this.instance.fire("isGroupedByDate") ? this.getDefaultCellWidth() * this.instance.fire("getGroupCount") : this.getDefaultCellWidth();
                    var left = appointmentSettings.left + offset;
                    if (tailHeight) {
                        var minHeight = this.getAppointmentMinSize();
                        if (tailHeight < minHeight) {
                            tailHeight = minHeight
                        }
                        currentPartTop += this.instance.fire("getOffsetByAllDayPanel", appointmentSettings.groupIndex);
                        result.push((0, _extend.extend)(true, {}, appointmentSettings, {
                            top: currentPartTop,
                            left: left,
                            height: tailHeight,
                            width: width,
                            appointmentReduced: "tail",
                            rowIndex: ++appointmentSettings.rowIndex
                        }))
                    }
                    return result
                }
            }, {
                key: "_getMinuteHeight",
                value: function() {
                    return this.getDefaultCellHeight() / this.instance.getAppointmentDurationInMinutes()
                }
            }, {
                key: "_getCompactLeftCoordinate",
                value: function(itemLeft, index) {
                    var cellBorderSize = 1;
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    return itemLeft + (cellBorderSize + cellWidth) * index
                }
            }, {
                key: "_getVerticalAppointmentGeometry",
                value: function(coordinates) {
                    var config = this._calculateVerticalGeometryConfig(coordinates);
                    return this._customizeVerticalCoordinates(coordinates, config.width, config.appointmentCountPerCell, config.offset)
                }
            }, {
                key: "_customizeVerticalCoordinates",
                value: function(coordinates, width, appointmentCountPerCell, topOffset, isAllDay) {
                    var appointmentWidth = Math.max(width / appointmentCountPerCell, width / coordinates.count);
                    var height = coordinates.height;
                    var appointmentLeft = coordinates.left + coordinates.index * appointmentWidth;
                    var top = coordinates.top;
                    if (coordinates.isCompact) {
                        this._markAppointmentAsVirtual(coordinates, isAllDay)
                    }
                    return {
                        height: height,
                        width: appointmentWidth,
                        top: top,
                        left: appointmentLeft,
                        empty: this._isAppointmentEmpty(height, width)
                    }
                }
            }, {
                key: "_calculateVerticalGeometryConfig",
                value: function(coordinates) {
                    var overlappingMode = this.instance.fire("getMaxAppointmentsPerCell");
                    var offsets = this._getOffsets();
                    var appointmentDefaultOffset = this._getAppointmentDefaultOffset();
                    var appointmentCountPerCell = this._getAppointmentCount(overlappingMode, coordinates);
                    var ratio = this._getDefaultRatio(coordinates, appointmentCountPerCell);
                    var maxWidth = this._getMaxWidth();
                    if (!appointmentCountPerCell) {
                        appointmentCountPerCell = coordinates.count;
                        ratio = (maxWidth - offsets.unlimited) / maxWidth
                    }
                    var topOffset = (1 - ratio) * maxWidth;
                    if ("auto" === overlappingMode || (0, _type.isNumeric)(overlappingMode)) {
                        ratio = 1;
                        maxWidth -= appointmentDefaultOffset;
                        topOffset = 0
                    }
                    return {
                        width: ratio * maxWidth,
                        appointmentCountPerCell: appointmentCountPerCell,
                        offset: topOffset
                    }
                }
            }, {
                key: "_getMaxWidth",
                value: function() {
                    return this.getDefaultCellWidth() || this.invoke("getCellWidth")
                }
            }, {
                key: "isAllDay",
                value: function(appointmentData) {
                    var allDay = this.instance.fire("getField", "allDay", appointmentData);
                    if (allDay) {
                        return true
                    }
                    return this.instance.appointmentTakesAllDay(appointmentData)
                }
            }, {
                key: "_getAppointmentMaxWidth",
                value: function() {
                    return this.getDefaultCellWidth() - this._getAppointmentDefaultOffset()
                }
            }, {
                key: "calculateAppointmentWidth",
                value: function(appointment, position, isRecurring) {
                    if (!this.isAllDay(appointment)) {
                        return 0
                    }
                    var startDate = new Date(this.startDate(appointment, false, position));
                    var endDate = this.endDate(appointment, position, isRecurring);
                    var cellWidth = this.getDefaultCellWidth() || this.getAppointmentMinSize();
                    startDate = _date2.default.trimTime(startDate);
                    var durationInHours = (endDate.getTime() - startDate.getTime()) / toMs("hour");
                    var width = Math.ceil(durationInHours / 24) * cellWidth;
                    width = this.cropAppointmentWidth(width, cellWidth);
                    return width
                }
            }, {
                key: "calculateAppointmentHeight",
                value: function(appointment, position, isRecurring) {
                    var endDate = this.endDate(appointment, position, isRecurring);
                    var startDate = this.startDate(appointment, false, position);
                    var allDay = this.instance.fire("getField", "allDay", appointment);
                    if (this.isAllDay(appointment)) {
                        return 0
                    }
                    var fullDuration = this._getAppointmentDurationInMs(startDate, endDate, allDay);
                    var durationInMinutes = this._adjustDurationByDaylightDiff(fullDuration, startDate, endDate) / toMs("minute");
                    var height = durationInMinutes * this._getMinuteHeight();
                    return height
                }
            }, {
                key: "getDirection",
                value: function() {
                    return "vertical"
                }
            }, {
                key: "_sortCondition",
                value: function(a, b) {
                    var allDayCondition = a.allDay - b.allDay;
                    var isAllDay = a.allDay && b.allDay;
                    var condition = "vertical" === this.instance._groupOrientation && isAllDay ? this._columnCondition(a, b) : this._rowCondition(a, b);
                    return allDayCondition ? allDayCondition : condition
                }
            }, {
                key: "hasAllDayAppointments",
                value: function() {
                    return true
                }
            }, {
                key: "_getAllDayAppointmentGeometry",
                value: function(coordinates) {
                    var config = this._calculateGeometryConfig(coordinates);
                    return this._customizeCoordinates(coordinates, config.height, config.appointmentCountPerCell, config.offset, true)
                }
            }, {
                key: "_calculateGeometryConfig",
                value: function(coordinates) {
                    if (!this.instance._allowResizing() || !this.instance._allowAllDayResizing()) {
                        coordinates.skipResizing = true
                    }
                    var config = _get(_getPrototypeOf(VerticalRenderingStrategy.prototype), "_calculateGeometryConfig", this).call(this, coordinates);
                    if (coordinates.count <= this._getDynamicAppointmentCountPerCell().allDay) {
                        config.offset = 0
                    }
                    return config
                }
            }, {
                key: "_getAppointmentCount",
                value: function(overlappingMode, coordinates) {
                    return "auto" !== overlappingMode && 1 === coordinates.count && !(0, _type.isNumeric)(overlappingMode) ? coordinates.count : this._getMaxAppointmentCountPerCellByType(coordinates.allDay)
                }
            }, {
                key: "_getDefaultRatio",
                value: function(coordinates, appointmentCountPerCell) {
                    return coordinates.count > this.instance.option("_appointmentCountPerCell") ? .65 : 1
                }
            }, {
                key: "_getOffsets",
                value: function() {
                    return {
                        unlimited: ALLDAY_APPOINTMENT_MIN_VERTICAL_OFFSET,
                        auto: ALLDAY_APPOINTMENT_MAX_VERTICAL_OFFSET
                    }
                }
            }, {
                key: "_getMaxHeight",
                value: function() {
                    return this.getDefaultAllDayCellHeight() || this.getAppointmentMinSize()
                }
            }, {
                key: "_needVerticalGroupBounds",
                value: function(allDay) {
                    return !allDay
                }
            }, {
                key: "_needHorizontalGroupBounds",
                value: function() {
                    return false
                }
            }]);
            return VerticalRenderingStrategy
        }(_uiSchedulerAppointmentsStrategy2.default);
        module.exports = VerticalRenderingStrategy
    },
    /*!**************************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointmentsPositioning.strategy.adaptive.js ***!
      \**************************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsPositioningStrategy = __webpack_require__( /*! ./ui.scheduler.appointmentsPositioning.strategy.base */ 406);
        var _uiSchedulerAppointmentsPositioningStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsPositioningStrategy);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var COLLECTOR_ADAPTIVE_SIZE = 28;
        var COLLECTOR_ADAPTIVE_BOTTOM_OFFSET = 40;
        var ADAPTIVE_APPOINTMENT_DEFAULT_OFFSET = 35;
        var ADAPTIVE_APPOINTMENT_DEFAULT_WIDTH = 30;
        var AdaptivePositioningStrategy = function(_BasePositioningStrat) {
            _inherits(AdaptivePositioningStrategy, _BasePositioningStrat);
            var _super = _createSuper(AdaptivePositioningStrategy);

            function AdaptivePositioningStrategy() {
                _classCallCheck(this, AdaptivePositioningStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(AdaptivePositioningStrategy, [{
                key: "getDropDownAppointmentWidth",
                value: function(intervalCount, isAllDay) {
                    return this.getDropDownButtonAdaptiveSize()
                }
            }, {
                key: "getDropDownButtonAdaptiveSize",
                value: function() {
                    return COLLECTOR_ADAPTIVE_SIZE
                }
            }, {
                key: "getCollectorTopOffset",
                value: function(allDay) {
                    var renderingStrategy = this.getRenderingStrategy();
                    if (renderingStrategy.hasAllDayAppointments() && allDay) {
                        return (renderingStrategy.getDefaultAllDayCellHeight() - renderingStrategy.getDropDownButtonAdaptiveSize()) / 2
                    } else {
                        return this.getRenderingStrategy().getDefaultCellHeight() - COLLECTOR_ADAPTIVE_BOTTOM_OFFSET
                    }
                }
            }, {
                key: "getCollectorLeftOffset",
                value: function() {
                    return (this.getRenderingStrategy().getDefaultCellWidth() - COLLECTOR_ADAPTIVE_SIZE) / 2
                }
            }, {
                key: "getAppointmentDefaultOffset",
                value: function() {
                    return ADAPTIVE_APPOINTMENT_DEFAULT_OFFSET
                }
            }, {
                key: "getDynamicAppointmentCountPerCell",
                value: function() {
                    var renderingStrategy = this.getRenderingStrategy();
                    if (renderingStrategy.hasAllDayAppointments()) {
                        return {
                            allDay: 0,
                            simple: this._calculateDynamicAppointmentCountPerCell() || this._getAppointmentMinCount()
                        }
                    } else {
                        return 0
                    }
                }
            }, {
                key: "getDropDownAppointmentHeight",
                value: function() {
                    return COLLECTOR_ADAPTIVE_SIZE
                }
            }, {
                key: "_getAppointmentMinCount",
                value: function() {
                    return 0
                }
            }, {
                key: "_getAppointmentDefaultWidth",
                value: function() {
                    var renderingStrategy = this.getRenderingStrategy();
                    if (renderingStrategy.hasAllDayAppointments()) {
                        return ADAPTIVE_APPOINTMENT_DEFAULT_WIDTH
                    }
                    return _get(_getPrototypeOf(AdaptivePositioningStrategy.prototype), "_getAppointmentDefaultWidth", this).call(this)
                }
            }, {
                key: "_calculateDynamicAppointmentCountPerCell",
                value: function() {
                    return Math.floor(this.getRenderingStrategy()._getAppointmentMaxWidth() / this.getRenderingStrategy()._getAppointmentDefaultWidth())
                }
            }]);
            return AdaptivePositioningStrategy
        }(_uiSchedulerAppointmentsPositioningStrategy2.default);
        module.exports = AdaptivePositioningStrategy
    },
    /*!***********************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month.js ***!
      \***********************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./ui.scheduler.appointments.strategy.horizontal_month_line */ 408);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var MONTH_APPOINTMENT_HEIGHT_RATIO = .6;
        var MONTH_APPOINTMENT_MIN_OFFSET = 26;
        var MONTH_APPOINTMENT_MAX_OFFSET = 30;
        var MONTH_DROPDOWN_APPOINTMENT_MIN_RIGHT_OFFSET = 36;
        var MONTH_DROPDOWN_APPOINTMENT_MAX_RIGHT_OFFSET = 60;
        var HorizontalMonthRenderingStrategy = function(_HorizontalMonthLineA) {
            _inherits(HorizontalMonthRenderingStrategy, _HorizontalMonthLineA);
            var _super = _createSuper(HorizontalMonthRenderingStrategy);

            function HorizontalMonthRenderingStrategy() {
                _classCallCheck(this, HorizontalMonthRenderingStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(HorizontalMonthRenderingStrategy, [{
                key: "_getAppointmentParts",
                value: function(appointmentGeometry, appointmentSettings, startDate) {
                    var deltaWidth = appointmentGeometry.sourceAppointmentWidth - appointmentGeometry.reducedWidth;
                    var height = appointmentGeometry.height;
                    var fullWeekAppointmentWidth = this._getFullWeekAppointmentWidth(appointmentSettings.groupIndex);
                    var maxAppointmentWidth = this._getMaxAppointmentWidth(startDate);
                    var longPartCount = Math.ceil(deltaWidth / fullWeekAppointmentWidth) - 1;
                    var realTailWidth = Math.floor(deltaWidth % fullWeekAppointmentWidth);
                    var tailWidth = longPartCount ? realTailWidth : realTailWidth || fullWeekAppointmentWidth;
                    var result = [];
                    var totalWidth = appointmentGeometry.reducedWidth + tailWidth;
                    var currentPartTop = appointmentSettings.top + this.getDefaultCellHeight();
                    var left = this._calculateMultiWeekAppointmentLeftOffset(appointmentSettings.hMax, fullWeekAppointmentWidth);
                    if ("vertical" === this.instance._groupOrientation) {
                        left += this.instance.fire("getWorkSpaceDateTableOffset")
                    }
                    for (var i = 0; i < longPartCount; i++) {
                        if (totalWidth > maxAppointmentWidth) {
                            break
                        }
                        result.push((0, _extend.extend)(true, {}, appointmentSettings, {
                            top: currentPartTop,
                            left: left,
                            height: height,
                            width: fullWeekAppointmentWidth,
                            appointmentReduced: "body",
                            rowIndex: ++appointmentSettings.rowIndex,
                            cellIndex: 0
                        }));
                        currentPartTop += this.getDefaultCellHeight();
                        totalWidth += fullWeekAppointmentWidth
                    }
                    if (tailWidth) {
                        if (this._isRtl()) {
                            left += fullWeekAppointmentWidth - tailWidth
                        }
                        result.push((0, _extend.extend)(true, {}, appointmentSettings, {
                            top: currentPartTop,
                            left: left,
                            height: height,
                            width: tailWidth,
                            appointmentReduced: "tail",
                            rowIndex: ++appointmentSettings.rowIndex,
                            cellIndex: 0
                        }))
                    }
                    return result
                }
            }, {
                key: "_calculateMultiWeekAppointmentLeftOffset",
                value: function(max, width) {
                    return this._isRtl() ? max : max - width
                }
            }, {
                key: "_getFullWeekAppointmentWidth",
                value: function(groupIndex) {
                    this._maxFullWeekAppointmentWidth = this.instance.fire("getFullWeekAppointmentWidth", {
                        groupIndex: groupIndex
                    });
                    return this._maxFullWeekAppointmentWidth
                }
            }, {
                key: "_getAppointmentDefaultHeight",
                value: function() {
                    return this._getAppointmentHeightByTheme()
                }
            }, {
                key: "_getAppointmentMinHeight",
                value: function() {
                    return this._getAppointmentDefaultHeight()
                }
            }, {
                key: "_columnCondition",
                value: function(a, b) {
                    var conditions = this._getConditions(a, b);
                    return conditions.rowCondition || conditions.columnCondition || conditions.cellPositionCondition
                }
            }, {
                key: "createTaskPositionMap",
                value: function(items) {
                    return _get(_getPrototypeOf(HorizontalMonthRenderingStrategy.prototype), "createTaskPositionMap", this).call(this, items, true)
                }
            }, {
                key: "_getSortedPositions",
                value: function(map) {
                    return _get(_getPrototypeOf(HorizontalMonthRenderingStrategy.prototype), "_getSortedPositions", this).call(this, map, true)
                }
            }, {
                key: "_getDefaultRatio",
                value: function() {
                    return MONTH_APPOINTMENT_HEIGHT_RATIO
                }
            }, {
                key: "_getOffsets",
                value: function() {
                    return {
                        unlimited: MONTH_APPOINTMENT_MIN_OFFSET,
                        auto: MONTH_APPOINTMENT_MAX_OFFSET
                    }
                }
            }, {
                key: "getDropDownAppointmentWidth",
                value: function(intervalCount) {
                    if (this.instance.fire("isAdaptive")) {
                        return this.getDropDownButtonAdaptiveSize()
                    }
                    var offset = intervalCount > 1 ? MONTH_DROPDOWN_APPOINTMENT_MAX_RIGHT_OFFSET : MONTH_DROPDOWN_APPOINTMENT_MIN_RIGHT_OFFSET;
                    return this.getDefaultCellWidth() - offset
                }
            }, {
                key: "needCorrectAppointmentDates",
                value: function() {
                    return false
                }
            }, {
                key: "_needVerticalGroupBounds",
                value: function() {
                    return false
                }
            }, {
                key: "_needHorizontalGroupBounds",
                value: function() {
                    return true
                }
            }]);
            return HorizontalMonthRenderingStrategy
        }(_uiSchedulerAppointmentsStrategy2.default);
        module.exports = HorizontalMonthRenderingStrategy
    },
    /*!*************************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/rendering_strategies/ui.scheduler.appointments.strategy.agenda.js ***!
      \*************************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _date = __webpack_require__( /*! ../../../core/utils/date */ 24);
        var _date2 = _interopRequireDefault(_date);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 4);
        var _array = __webpack_require__( /*! ../../../core/utils/array */ 14);
        var _array2 = _interopRequireDefault(_array);
        var _uiSchedulerAppointmentsStrategy = __webpack_require__( /*! ./ui.scheduler.appointments.strategy.base */ 252);
        var _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(_uiSchedulerAppointmentsStrategy);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var AgendaRenderingStrategy = function(_BaseAppointmentsStra) {
            _inherits(AgendaRenderingStrategy, _BaseAppointmentsStra);
            var _super = _createSuper(AgendaRenderingStrategy);

            function AgendaRenderingStrategy() {
                _classCallCheck(this, AgendaRenderingStrategy);
                return _super.apply(this, arguments)
            }
            _createClass(AgendaRenderingStrategy, [{
                key: "getAppointmentMinSize",
                value: function() {}
            }, {
                key: "getDeltaTime",
                value: function() {}
            }, {
                key: "keepAppointmentSettings",
                value: function() {
                    return true
                }
            }, {
                key: "getAppointmentGeometry",
                value: function(geometry) {
                    return geometry
                }
            }, {
                key: "createTaskPositionMap",
                value: function(appointments) {
                    var height;
                    var appointmentsByResources;
                    if (appointments.length) {
                        height = this.instance.fire("getAgendaVerticalStepHeight");
                        appointmentsByResources = this.instance.fire("groupAppointmentsByResources", appointments);
                        var groupedAppts = [];
                        (0, _iterator.each)(appointmentsByResources, function(i, appts) {
                            var additionalAppointments = [];
                            var recurrentIndexes = [];
                            (0, _iterator.each)(appts, function(index, appointment) {
                                var recurrenceBatch = this.instance.getAppointmentsInstance()._processRecurrenceAppointment(appointment, index);
                                var appointmentBatch = null;
                                if (!recurrenceBatch.indexes.length) {
                                    appointmentBatch = {
                                        parts: []
                                    };
                                    appointmentBatch = this.instance.getAppointmentsInstance()._processLongAppointment(appointment);
                                    additionalAppointments = additionalAppointments.concat(appointmentBatch.parts)
                                }
                                additionalAppointments = additionalAppointments.concat(recurrenceBatch.parts);
                                recurrentIndexes = recurrentIndexes.concat(recurrenceBatch.indexes)
                            }.bind(this));
                            this.instance.getAppointmentsInstance()._reduceRecurrenceAppointments(recurrentIndexes, appts);
                            this.instance.getAppointmentsInstance()._combineAppointments(appts, additionalAppointments);
                            groupedAppts = groupedAppts.concat(appts)
                        }.bind(this));
                        Array.prototype.splice.apply(appointments, [0, appointments.length].concat(groupedAppts))
                    }
                    var result = [];
                    var sortedIndex = 0;
                    appointments.forEach(function(appt, index) {
                        result.push([{
                            height: height,
                            width: "100%",
                            sortedIndex: sortedIndex++,
                            groupIndex: this._calculateGroupIndex(index, appointmentsByResources)
                        }])
                    }.bind(this));
                    return result
                }
            }, {
                key: "_calculateGroupIndex",
                value: function(apptIndex, appointmentsByResources) {
                    var resultInd;
                    var counter = 0;
                    for (var i in appointmentsByResources) {
                        var countApptInGroup = appointmentsByResources[i].length;
                        if (apptIndex >= counter && apptIndex < counter + countApptInGroup) {
                            resultInd = Number(i);
                            break
                        }
                        counter += countApptInGroup
                    }
                    return resultInd
                }
            }, {
                key: "_getDeltaWidth",
                value: function() {}
            }, {
                key: "_getAppointmentMaxWidth",
                value: function() {
                    return this.getDefaultCellWidth()
                }
            }, {
                key: "_needVerifyItemSize",
                value: function() {
                    return false
                }
            }, {
                key: "_isRtl",
                value: function() {
                    return this.instance.option("rtlEnabled")
                }
            }, {
                key: "_getAppointmentParts",
                value: function() {}
            }, {
                key: "_reduceMultiWeekAppointment",
                value: function() {}
            }, {
                key: "calculateAppointmentHeight",
                value: function() {
                    return 0
                }
            }, {
                key: "calculateAppointmentWidth",
                value: function() {
                    return 0
                }
            }, {
                key: "isAppointmentGreaterThan",
                value: function() {}
            }, {
                key: "isAllDay",
                value: function() {
                    return false
                }
            }, {
                key: "_sortCondition",
                value: function() {}
            }, {
                key: "_rowCondition",
                value: function() {}
            }, {
                key: "_columnCondition",
                value: function() {}
            }, {
                key: "_findIndexByKey",
                value: function() {}
            }, {
                key: "_markAppointmentAsVirtual",
                value: function() {}
            }, {
                key: "getDropDownAppointmentWidth",
                value: function() {}
            }, {
                key: "getDefaultCellWidth",
                value: function() {
                    return this._defaultWidth
                }
            }, {
                key: "getCollectorLeftOffset",
                value: function() {}
            }, {
                key: "getCollectorTopOffset",
                value: function() {}
            }, {
                key: "calculateRows",
                value: function(appointments, agendaDuration, currentDate, needClearSettings) {
                    this._rows = [];
                    var groupedAppointments = this.instance.fire("groupAppointmentsByResources", appointments);
                    currentDate = _date2.default.trimTime(new Date(currentDate));
                    (0, _iterator.each)(groupedAppointments, function(groupIndex, currentAppointments) {
                        var groupResult = [];
                        var appts = {
                            indexes: [],
                            parts: []
                        };
                        if (!currentAppointments.length) {
                            this._rows.push([]);
                            return true
                        }(0, _iterator.each)(currentAppointments, function(index, appointment) {
                            var startDate = this.instance.fire("getField", "startDate", appointment);
                            var endDate = this.instance.fire("getField", "endDate", appointment);
                            this.instance.fire("fixWrongEndDate", appointment, startDate, endDate);
                            needClearSettings && delete appointment.settings;
                            var result = this.instance.getAppointmentsInstance()._processRecurrenceAppointment(appointment, index, false);
                            appts.parts = appts.parts.concat(result.parts);
                            appts.indexes = appts.indexes.concat(result.indexes)
                        }.bind(this));
                        this.instance.getAppointmentsInstance()._reduceRecurrenceAppointments(appts.indexes, currentAppointments);
                        _array2.default.merge(currentAppointments, appts.parts);
                        var appointmentCount = currentAppointments.length;
                        for (var i = 0; i < agendaDuration; i++) {
                            var day = new Date(currentDate);
                            day.setMilliseconds(day.getMilliseconds() + 864e5 * i);
                            if (void 0 === groupResult[i]) {
                                groupResult[i] = 0
                            }
                            for (var j = 0; j < appointmentCount; j++) {
                                var appointmentData = currentAppointments[j].settings || currentAppointments[j];
                                var appointmentIsLong = this.instance.fire("appointmentTakesSeveralDays", currentAppointments[j]);
                                var appointmentIsRecurrence = this.instance.fire("getField", "recurrenceRule", currentAppointments[j]);
                                if (this.instance.fire("dayHasAppointment", day, appointmentData, true) || !appointmentIsRecurrence && appointmentIsLong && this.instance.fire("dayHasAppointment", day, currentAppointments[j], true)) {
                                    groupResult[i] += 1
                                }
                            }
                        }
                        this._rows.push(groupResult)
                    }.bind(this));
                    return this._rows
                }
            }, {
                key: "_iterateRow",
                value: function(row, obj, index) {
                    for (var i = 0; i < row.length; i++) {
                        obj.counter = obj.counter + row[i];
                        if (obj.counter >= index) {
                            obj.indexInRow = i;
                            break
                        }
                    }
                }
            }, {
                key: "getDateByIndex",
                value: function(index, rows, startViewDate) {
                    var obj = {
                        counter: 0,
                        indexInRow: 0
                    };
                    index++;
                    for (var i = 0; i < rows.length; i++) {
                        this._iterateRow(rows[i], obj, index);
                        if (obj.indexInRow) {
                            break
                        }
                    }
                    return new Date(new Date(startViewDate).setDate(startViewDate.getDate() + obj.indexInRow))
                }
            }, {
                key: "getAppointmentDataCalculator",
                value: function() {
                    return function($appointment, originalStartDate) {
                        var apptIndex = $appointment.index();
                        var startViewDate = this.instance.getStartViewDate();
                        var calculatedStartDate = this.getDateByIndex(apptIndex, this._rows, startViewDate);
                        var wrappedOriginalStartDate = new Date(originalStartDate);
                        return {
                            startDate: new Date(calculatedStartDate.setHours(wrappedOriginalStartDate.getHours(), wrappedOriginalStartDate.getMinutes(), wrappedOriginalStartDate.getSeconds(), wrappedOriginalStartDate.getMilliseconds()))
                        }
                    }.bind(this)
                }
            }]);
            return AgendaRenderingStrategy
        }(_uiSchedulerAppointmentsStrategy2.default);
        module.exports = AgendaRenderingStrategy
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/scheduler/compactAppointmentsHelper.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.CompactAppointmentsHelper = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 28);
        var _translator2 = _interopRequireDefault(_translator);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _function_template = __webpack_require__( /*! ../../core/templates/function_template */ 113);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _deferred2 = _interopRequireDefault(_deferred);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _constants = __webpack_require__( /*! ./constants */ 171);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var APPOINTMENT_COLLECTOR_CLASS = "dx-scheduler-appointment-collector";
        var COMPACT_APPOINTMENT_COLLECTOR_CLASS = APPOINTMENT_COLLECTOR_CLASS + "-compact";
        var APPOINTMENT_COLLECTOR_CONTENT_CLASS = APPOINTMENT_COLLECTOR_CLASS + "-content";
        var WEEK_VIEW_COLLECTOR_OFFSET = 5;
        var COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET = 1;
        exports.CompactAppointmentsHelper = function() {
            function CompactAppointmentsHelper(instance) {
                _classCallCheck(this, CompactAppointmentsHelper);
                this.instance = instance;
                this.elements = []
            }
            _createClass(CompactAppointmentsHelper, [{
                key: "render",
                value: function(options) {
                    var isCompact = options.isCompact,
                        items = options.items,
                        buttonColor = options.buttonColor;
                    var template = this._createTemplate(items.data.length, isCompact);
                    var button = this._createCompactButton(template, options);
                    var $button = button.$element();
                    this._makeBackgroundColor($button, items.colors, buttonColor);
                    this._makeBackgroundDarker($button);
                    this.elements.push($button);
                    $button.data("items", this._createAppointmentsData(items));
                    return $button
                }
            }, {
                key: "clear",
                value: function() {
                    this.elements.forEach(function(button) {
                        button.detach();
                        button.remove()
                    });
                    this.elements = []
                }
            }, {
                key: "_createAppointmentsData",
                value: function(items) {
                    return items.data.map(function(item, index) {
                        return {
                            data: item,
                            color: items.colors[index],
                            settings: items.settings[index]
                        }
                    })
                }
            }, {
                key: "_onButtonClick",
                value: function(e, options) {
                    var $button = (0, _renderer2.default)(e.element);
                    this.instance.showAppointmentTooltipCore($button, $button.data("items"), this._getExtraOptionsForTooltip(options))
                }
            }, {
                key: "_getExtraOptionsForTooltip",
                value: function(options) {
                    return {
                        clickEvent: this._clickEvent(options.onAppointmentClick).bind(this),
                        dragBehavior: options.allowDrag && this._createTooltipDragBehavior(options).bind(this),
                        dropDownAppointmentTemplate: this.instance.option().dropDownAppointmentTemplate,
                        isButtonClick: true
                    }
                }
            }, {
                key: "_clickEvent",
                value: function(onAppointmentClick) {
                    var _this = this;
                    return function(e) {
                        var config = {
                            itemData: e.itemData.data,
                            itemElement: e.itemElement
                        };
                        var createClickEvent = (0, _extend.extendFromObject)(_this.instance.fire("mapAppointmentFields", config), e, false);
                        delete createClickEvent.itemData;
                        delete createClickEvent.itemIndex;
                        delete createClickEvent.itemElement;
                        onAppointmentClick(createClickEvent)
                    }
                }
            }, {
                key: "_createTooltipDragBehavior",
                value: function(options) {
                    var _this2 = this;
                    return function(e) {
                        var dragElement;
                        var $element = (0, _renderer2.default)(e.element);
                        var dragBehavior = _this2.instance.getWorkSpace().dragBehavior;
                        dragBehavior.addTo($element, {
                            filter: ".".concat(_constants.LIST_ITEM_CLASS),
                            container: _this2.instance.$element().find(".".concat(_constants.FIXED_CONTAINER_CLASS)),
                            cursorOffset: function() {
                                var $dragElement = (0, _renderer2.default)(dragElement);
                                return {
                                    x: $dragElement.width() / 2,
                                    y: $dragElement.height() / 2
                                }
                            },
                            dragTemplate: function() {
                                return dragElement
                            },
                            onDragStart: function(e) {
                                var event = e.event;
                                var itemData = (0, _renderer2.default)(e.itemElement).data(_constants.LIST_ITEM_DATA_KEY);
                                if (itemData && !itemData.data.disabled) {
                                    event.data = event.data || {};
                                    event.data.itemElement = dragElement = _this2._createDragAppointment(itemData.data, itemData.settings);
                                    dragBehavior.onDragStart(event.data);
                                    _translator2.default.resetPosition((0, _renderer2.default)(dragElement))
                                }
                            },
                            onDragEnd: function(e) {
                                var itemData = (0, _renderer2.default)(e.itemElement).data(_constants.LIST_ITEM_DATA_KEY);
                                if (itemData && !itemData.data.disabled) {
                                    dragBehavior.onDragEnd(e)
                                }
                            }
                        })
                    }
                }
            }, {
                key: "_createDragAppointment",
                value: function(itemData, settings) {
                    var appointments = this.instance.getAppointmentsInstance();
                    var appointmentIndex = appointments.option("items").length;
                    settings.isCompact = false;
                    settings.virtual = false;
                    appointments._renderItem(appointmentIndex, {
                        itemData: itemData,
                        settings: [settings]
                    });
                    return appointments._findItemElementByItem(itemData)[0]
                }
            }, {
                key: "_getCollectorOffset",
                value: function(width, cellWidth) {
                    return cellWidth - width - this._getCollectorRightOffset()
                }
            }, {
                key: "_getCollectorRightOffset",
                value: function() {
                    return this.instance.getRenderingStrategyInstance()._isCompactTheme() ? COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET : WEEK_VIEW_COLLECTOR_OFFSET
                }
            }, {
                key: "_makeBackgroundDarker",
                value: function(button) {
                    button.css("boxShadow", "inset ".concat((0, _position.getBoundingRect)(button.get(0)).width, "px 0 0 0 rgba(0, 0, 0, 0.3)"))
                }
            }, {
                key: "_makeBackgroundColor",
                value: function($button, colors, color) {
                    _deferred2.default.when.apply(null, colors).done(function() {
                        this._makeBackgroundColorCore($button, color, arguments)
                    }.bind(this))
                }
            }, {
                key: "_makeBackgroundColorCore",
                value: function($button, color, itemsColors) {
                    var paintButton = true;
                    var currentItemColor;
                    color && color.done(function(color) {
                        if (itemsColors.length) {
                            currentItemColor = itemsColors[0];
                            for (var i = 1; i < itemsColors.length; i++) {
                                if (currentItemColor !== itemsColors[i]) {
                                    paintButton = false;
                                    break
                                }
                                currentItemColor = color
                            }
                        }
                        color && paintButton && $button.css("backgroundColor", color)
                    }.bind(this))
                }
            }, {
                key: "_setPosition",
                value: function(element, position) {
                    _translator2.default.move(element, {
                        top: position.top,
                        left: position.left
                    })
                }
            }, {
                key: "_createCompactButton",
                value: function(template, options) {
                    var _this3 = this;
                    var $button = this._createCompactButtonElement(options);
                    return this.instance._createComponent($button, _button2.default, {
                        type: "default",
                        width: options.width,
                        height: options.height,
                        onClick: function(e) {
                            return _this3._onButtonClick(e, options)
                        },
                        template: this._renderTemplate(template, options.items, options.isCompact)
                    })
                }
            }, {
                key: "_createCompactButtonElement",
                value: function(_ref) {
                    var isCompact = _ref.isCompact,
                        $container = _ref.$container,
                        width = _ref.width,
                        coordinates = _ref.coordinates,
                        applyOffset = _ref.applyOffset,
                        cellWidth = _ref.cellWidth;
                    var result = (0, _renderer2.default)("<div>").addClass(APPOINTMENT_COLLECTOR_CLASS).toggleClass(COMPACT_APPOINTMENT_COLLECTOR_CLASS, isCompact).appendTo($container);
                    var offset = applyOffset ? this._getCollectorOffset(width, cellWidth) : 0;
                    this._setPosition(result, {
                        top: coordinates.top,
                        left: coordinates.left + offset
                    });
                    return result
                }
            }, {
                key: "_renderTemplate",
                value: function(template, items, isCompact) {
                    return new _function_template.FunctionTemplate(function(options) {
                        return template.render({
                            model: {
                                appointmentCount: items.data.length,
                                isCompact: isCompact
                            },
                            container: options.container
                        })
                    })
                }
            }, {
                key: "_createTemplate",
                value: function(count, isCompact) {
                    this._initButtonTemplate(count, isCompact);
                    return this.instance._getAppointmentTemplate("appointmentCollectorTemplate")
                }
            }, {
                key: "_initButtonTemplate",
                value: function(count, isCompact) {
                    var _this4 = this;
                    this.instance._templateManager.addDefaultTemplates({
                        appointmentCollector: new _function_template.FunctionTemplate(function(options) {
                            return _this4._createButtonTemplate(count, (0, _renderer2.default)(options.container), isCompact)
                        })
                    })
                }
            }, {
                key: "_createButtonTemplate",
                value: function(appointmentCount, element, isCompact) {
                    var text = isCompact ? appointmentCount : _message2.default.getFormatter("dxScheduler-moreAppointments")(appointmentCount);
                    return element.append((0, _renderer2.default)("<span>").text(text)).addClass(APPOINTMENT_COLLECTOR_CONTENT_CLASS)
                }
            }]);
            return CompactAppointmentsHelper
        }()
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./file_manager/ui.file_manager */ 756)
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _notify = __webpack_require__( /*! ../notify */ 307);
        var _notify2 = _interopRequireDefault(_notify);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _file_items_controller = __webpack_require__( /*! ./file_items_controller */ 757);
        var _file_items_controller2 = _interopRequireDefault(_file_items_controller);
        var _uiFile_manager2 = __webpack_require__( /*! ./ui.file_manager.command_manager */ 758);
        var _uiFile_manager3 = __webpack_require__( /*! ./ui.file_manager.context_menu */ 759);
        var _uiFile_manager4 = _interopRequireDefault(_uiFile_manager3);
        var _uiFile_manager5 = __webpack_require__( /*! ./ui.file_manager.files_tree_view */ 409);
        var _uiFile_manager6 = _interopRequireDefault(_uiFile_manager5);
        var _uiFile_managerItem_list = __webpack_require__( /*! ./ui.file_manager.item_list.details */ 760);
        var _uiFile_managerItem_list2 = _interopRequireDefault(_uiFile_managerItem_list);
        var _uiFile_managerItem_list3 = __webpack_require__( /*! ./ui.file_manager.item_list.thumbnails */ 761);
        var _uiFile_managerItem_list4 = _interopRequireDefault(_uiFile_managerItem_list3);
        var _uiFile_manager7 = __webpack_require__( /*! ./ui.file_manager.toolbar */ 763);
        var _uiFile_manager8 = _interopRequireDefault(_uiFile_manager7);
        var _uiFile_manager9 = __webpack_require__( /*! ./ui.file_manager.notification */ 764);
        var _uiFile_manager10 = _interopRequireDefault(_uiFile_manager9);
        var _uiFile_manager11 = __webpack_require__( /*! ./ui.file_manager.editing */ 766);
        var _uiFile_manager12 = _interopRequireDefault(_uiFile_manager11);
        var _uiFile_manager13 = __webpack_require__( /*! ./ui.file_manager.breadcrumbs */ 773);
        var _uiFile_manager14 = _interopRequireDefault(_uiFile_manager13);
        var _uiFile_manager15 = __webpack_require__( /*! ./ui.file_manager.adaptivity */ 774);
        var _uiFile_manager16 = _interopRequireDefault(_uiFile_manager15);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_CLASS = "dx-filemanager";
        var FILE_MANAGER_WRAPPER_CLASS = FILE_MANAGER_CLASS + "-wrapper";
        var FILE_MANAGER_CONTAINER_CLASS = FILE_MANAGER_CLASS + "-container";
        var FILE_MANAGER_DIRS_PANEL_CLASS = FILE_MANAGER_CLASS + "-dirs-panel";
        var FILE_MANAGER_INACTIVE_AREA_CLASS = FILE_MANAGER_CLASS + "-inactive-area";
        var FILE_MANAGER_EDITING_CONTAINER_CLASS = FILE_MANAGER_CLASS + "-editing-container";
        var FILE_MANAGER_ITEMS_PANEL_CLASS = FILE_MANAGER_CLASS + "-items-panel";
        var FILE_MANAGER_ITEM_CUSTOM_THUMBNAIL_CLASS = FILE_MANAGER_CLASS + "-item-custom-thumbnail";
        var PARENT_DIRECTORY_KEY_PREFIX = "[*DXPDK*]$40F96F03-FBD8-43DF-91BE-F55F4B8BA871$";
        var FileManager = function(_Widget) {
            _inherits(FileManager, _Widget);
            var _super = _createSuper(FileManager);

            function FileManager() {
                _classCallCheck(this, FileManager);
                return _super.apply(this, arguments)
            }
            _createClass(FileManager, [{
                key: "_initTemplates",
                value: function() {}
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileManager.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    this._firstItemViewLoad = true;
                    this._lockSelectionProcessing = false;
                    this._lockFocusedItemProcessing = false;
                    this._itemKeyToFocus = void 0;
                    this._controller = new _file_items_controller2.default({
                        currentPath: this.option("currentPath"),
                        currentPathKeys: this.option("currentPathKeys"),
                        rootText: this.option("rootFolderName"),
                        fileProvider: this.option("fileSystemProvider"),
                        allowedFileExtensions: this.option("allowedFileExtensions"),
                        uploadMaxFileSize: this.option("upload").maxFileSize,
                        uploadChunkSize: this.option("upload").chunkSize,
                        onInitialized: this._onControllerInitialized.bind(this),
                        onDataLoading: this._onDataLoading.bind(this),
                        onSelectedDirectoryChanged: this._onSelectedDirectoryChanged.bind(this)
                    });
                    this._commandManager = new _uiFile_manager2.FileManagerCommandManager(this.option("permissions"));
                    this.$element().addClass(FILE_MANAGER_CLASS);
                    this._createNotificationControl();
                    this._initCommandManager();
                    this._setItemsViewAreaActive(false)
                }
            }, {
                key: "_createNotificationControl",
                value: function() {
                    var _this = this;
                    var $notificationControl = (0, _renderer2.default)("<div>").addClass("dx-filemanager-notification-container").appendTo(this.$element());
                    this._notificationControl = this._createComponent($notificationControl, _uiFile_manager10.default, {
                        progressPanelContainer: this.$element(),
                        contentTemplate: function(container) {
                            return _this._createWrapper(container)
                        },
                        onActionProgress: function(e) {
                            return _this._onActionProgress(e)
                        },
                        positionTarget: ".".concat(FILE_MANAGER_CONTAINER_CLASS)
                    });
                    this._editing.option("notificationControl", this._notificationControl)
                }
            }, {
                key: "_createWrapper",
                value: function(container) {
                    var _this2 = this;
                    this._$wrapper = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_WRAPPER_CLASS).appendTo(container);
                    this._createEditing();
                    var $toolbar = (0, _renderer2.default)("<div>").appendTo(this._$wrapper);
                    this._toolbar = this._createComponent($toolbar, _uiFile_manager8.default, {
                        commandManager: this._commandManager,
                        generalItems: this.option("toolbar.items"),
                        fileItems: this.option("toolbar.fileSelectionItems"),
                        itemViewMode: this.option("itemView").mode,
                        onItemClick: function(args) {
                            return _this2._actions.onToolbarItemClick(args)
                        }
                    });
                    this._createAdaptivityControl()
                }
            }, {
                key: "_createAdaptivityControl",
                value: function() {
                    var _this3 = this;
                    var $container = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_CONTAINER_CLASS).appendTo(this._$wrapper);
                    this._adaptivityControl = this._createComponent($container, _uiFile_manager16.default, {
                        drawerTemplate: function(container) {
                            return _this3._createFilesTreeView(container)
                        },
                        contentTemplate: function(container) {
                            return _this3._createItemsPanel(container)
                        },
                        onAdaptiveStateChanged: function(e) {
                            return _this3._onAdaptiveStateChanged(e)
                        }
                    })
                }
            }, {
                key: "_createEditing",
                value: function() {
                    var _this4 = this;
                    var $editingContainer = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_EDITING_CONTAINER_CLASS).appendTo(this.$element());
                    this._editing = this._createComponent($editingContainer, _uiFile_manager12.default, {
                        controller: this._controller,
                        model: {
                            getMultipleSelectedItems: this._getMultipleSelectedItems.bind(this)
                        },
                        getItemThumbnail: this._getItemThumbnailInfo.bind(this),
                        onSuccess: function(_ref) {
                            var updatedOnlyFiles = _ref.updatedOnlyFiles;
                            return _this4._redrawComponent(updatedOnlyFiles)
                        },
                        onCreating: function() {
                            return _this4._setItemsViewAreaActive(false)
                        },
                        onError: function(e) {
                            return _this4._onEditingError(e)
                        }
                    })
                }
            }, {
                key: "_createItemsPanel",
                value: function($container) {
                    this._$itemsPanel = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_ITEMS_PANEL_CLASS).appendTo($container);
                    this._createBreadcrumbs(this._$itemsPanel);
                    this._createItemView(this._$itemsPanel)
                }
            }, {
                key: "_createFilesTreeView",
                value: function(container) {
                    var _this5 = this;
                    this._filesTreeViewContextMenu = this._createContextMenu();
                    var $filesTreeView = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_DIRS_PANEL_CLASS).appendTo(container);
                    this._filesTreeView = this._createComponent($filesTreeView, _uiFile_manager6.default, {
                        storeExpandedState: true,
                        contextMenu: this._filesTreeViewContextMenu,
                        getDirectories: this.getDirectories.bind(this),
                        getCurrentDirectory: this._getCurrentDirectory.bind(this),
                        onDirectoryClick: this._onFilesTreeViewDirectoryClick.bind(this),
                        onClick: function() {
                            return _this5._setItemsViewAreaActive(false)
                        }
                    })
                }
            }, {
                key: "_createItemView",
                value: function($container, viewMode) {
                    var _this6 = this;
                    this._itemViewContextMenu = this._createContextMenu(true);
                    var itemViewOptions = this.option("itemView");
                    var options = {
                        selectionMode: this.option("selectionMode"),
                        selectedItemKeys: this.option("selectedItemKeys"),
                        focusedItemKey: this.option("focusedItemKey"),
                        contextMenu: this._itemViewContextMenu,
                        getItems: this._getItemViewItems.bind(this),
                        onError: function(_ref2) {
                            var error = _ref2.error;
                            return _this6._showError(error)
                        },
                        onSelectionChanged: this._onItemViewSelectionChanged.bind(this),
                        onFocusedItemChanged: this._onItemViewFocusedItemChanged.bind(this),
                        onSelectedItemOpened: this._onSelectedItemOpened.bind(this),
                        getItemThumbnail: this._getItemThumbnailInfo.bind(this),
                        customizeDetailColumns: this.option("customizeDetailColumns"),
                        detailColumns: this.option("itemView.details.columns")
                    };
                    var $itemView = (0, _renderer2.default)("<div>").appendTo($container);
                    viewMode = viewMode || itemViewOptions.mode;
                    var widgetClass = "thumbnails" === viewMode ? _uiFile_managerItem_list4.default : _uiFile_managerItem_list2.default;
                    this._itemView = this._createComponent($itemView, widgetClass, options);
                    _events_engine2.default.on($itemView, "click", this._onItemViewClick.bind(this))
                }
            }, {
                key: "_createBreadcrumbs",
                value: function($container) {
                    var _this7 = this;
                    var $breadcrumbs = (0, _renderer2.default)("<div>").appendTo($container);
                    this._breadcrumbs = this._createComponent($breadcrumbs, _uiFile_manager14.default, {
                        rootFolderDisplayName: this.option("rootFolderName"),
                        onCurrentDirectoryChanging: function(_ref3) {
                            var currentDirectory = _ref3.currentDirectory;
                            return _this7._setCurrentDirectory(currentDirectory)
                        },
                        onOutsideClick: function() {
                            return _this7._clearSelection()
                        }
                    });
                    this._breadcrumbs.setCurrentDirectory(this._getCurrentDirectory())
                }
            }, {
                key: "_createContextMenu",
                value: function(isolateCreationItemCommands) {
                    var _this8 = this;
                    var $contextMenu = (0, _renderer2.default)("<div>").appendTo(this._$wrapper);
                    return this._createComponent($contextMenu, _uiFile_manager4.default, {
                        commandManager: this._commandManager,
                        items: this.option("contextMenu.items"),
                        onItemClick: function(args) {
                            return _this8._actions.onContextMenuItemClick(args)
                        },
                        isolateCreationItemCommands: isolateCreationItemCommands
                    })
                }
            }, {
                key: "_initCommandManager",
                value: function() {
                    var _this9 = this;
                    var actions = (0, _extend.extend)(this._editing.getCommandActions(), {
                        refresh: function() {
                            return _this9._refreshAndShowProgress()
                        },
                        thumbnails: function() {
                            return _this9.option("itemView.mode", "thumbnails")
                        },
                        details: function() {
                            return _this9.option("itemView.mode", "details")
                        },
                        clearSelection: function() {
                            return _this9._clearSelection()
                        },
                        showNavPane: function() {
                            return _this9._adaptivityControl.toggleDrawer()
                        }
                    });
                    this._commandManager.registerActions(actions)
                }
            }, {
                key: "_onFilesTreeViewDirectoryClick",
                value: function(_ref4) {
                    var itemData = _ref4.itemData;
                    this._setCurrentDirectory(itemData);
                    this._setItemsViewAreaActive(false)
                }
            }, {
                key: "_onItemViewSelectionChanged",
                value: function(_ref5) {
                    var selectedItemInfos = _ref5.selectedItemInfos,
                        selectedItems = _ref5.selectedItems,
                        selectedItemKeys = _ref5.selectedItemKeys,
                        currentSelectedItemKeys = _ref5.currentSelectedItemKeys,
                        currentDeselectedItemKeys = _ref5.currentDeselectedItemKeys;
                    this._updateToolbar(selectedItemInfos);
                    this._lockSelectionProcessing = true;
                    this.option("selectedItemKeys", selectedItemKeys);
                    this._lockSelectionProcessing = false;
                    this._actions.onSelectionChanged({
                        selectedItems: selectedItems,
                        selectedItemKeys: selectedItemKeys,
                        currentSelectedItemKeys: currentSelectedItemKeys,
                        currentDeselectedItemKeys: currentDeselectedItemKeys
                    })
                }
            }, {
                key: "_onItemViewFocusedItemChanged",
                value: function(e) {
                    this._lockFocusedItemProcessing = true;
                    this.option("focusedItemKey", e.itemKey);
                    this._lockFocusedItemProcessing = false;
                    this._actions.onFocusedItemChanged({
                        item: e.item,
                        itemElement: e.itemElement
                    })
                }
            }, {
                key: "_onAdaptiveStateChanged",
                value: function(_ref6) {
                    var enabled = _ref6.enabled;
                    this._commandManager.setCommandEnabled("showNavPane", enabled);
                    this._updateToolbar()
                }
            }, {
                key: "_onActionProgress",
                value: function(_ref7) {
                    var message = _ref7.message,
                        status = _ref7.status;
                    this._toolbar.updateRefreshItem(message, status);
                    this._updateToolbar()
                }
            }, {
                key: "_onEditingError",
                value: function(e) {
                    var args = (0, _uiFile_manager.extendAttributes)({}, e, ["errorCode", "errorText", "fileSystemItem"]);
                    this._actions.onErrorOccurred(args);
                    e.errorText = args.errorText
                }
            }, {
                key: "_refreshAndShowProgress",
                value: function() {
                    var _this10 = this;
                    return (0, _deferred.when)(this._notificationControl.tryShowProgressPanel(), this._controller.refresh()).then(function() {
                        return _this10._filesTreeView.refresh()
                    })
                }
            }, {
                key: "_updateToolbar",
                value: function(selectedItems) {
                    var items = selectedItems || this._getSelectedItemInfos();
                    this._toolbar.update(items)
                }
            }, {
                key: "_setItemsViewAreaActive",
                value: function(active) {
                    if (this._itemsViewAreaActive === active) {
                        return
                    }
                    this._itemsViewAreaActive = active;
                    var $activeArea = null;
                    var $inactiveArea = null;
                    if (active) {
                        $activeArea = this._itemView.$element();
                        $inactiveArea = this._filesTreeView.$element()
                    } else {
                        $activeArea = this._filesTreeView.$element();
                        $inactiveArea = this._itemView.$element()
                    }
                    $activeArea.removeClass(FILE_MANAGER_INACTIVE_AREA_CLASS);
                    $inactiveArea.addClass(FILE_MANAGER_INACTIVE_AREA_CLASS)
                }
            }, {
                key: "_switchView",
                value: function(viewMode) {
                    this._disposeWidget(this._itemView.option("contextMenu"));
                    this._disposeWidget(this._itemView);
                    this._createItemView(this._$itemsPanel, viewMode);
                    this._toolbar.option({
                        itemViewMode: viewMode
                    })
                }
            }, {
                key: "_disposeWidget",
                value: function(widget) {
                    widget.dispose();
                    widget.$element().remove()
                }
            }, {
                key: "_clearSelection",
                value: function() {
                    this._itemView.clearSelection()
                }
            }, {
                key: "_getMultipleSelectedItems",
                value: function() {
                    return this._itemsViewAreaActive ? this._getSelectedItemInfos() : [this._getCurrentDirectory()]
                }
            }, {
                key: "_showError",
                value: function(message) {
                    this._showNotification(message, false)
                }
            }, {
                key: "_showNotification",
                value: function(message, isSuccess) {
                    (0, _notify2.default)({
                        message: message,
                        width: 450
                    }, isSuccess ? "success" : "error", 5e3)
                }
            }, {
                key: "_redrawComponent",
                value: function(onlyFileItemsView) {
                    !onlyFileItemsView && this._filesTreeView.refresh();
                    this._itemView.refresh()
                }
            }, {
                key: "_getItemViewItems",
                value: function() {
                    var _this11 = this;
                    var showFolders = this.option("itemView").showFolders;
                    var result = this._controller.getCurrentItems(!showFolders);
                    this._updateToolbarWithSelectionOnFirstLoad(result);
                    if (this.option("itemView.showParentFolder")) {
                        result = (0, _deferred.when)(result).then(function(items) {
                            return _this11._getPreparedItemViewItems(items)
                        })
                    }
                    return result
                }
            }, {
                key: "_updateToolbarWithSelectionOnFirstLoad",
                value: function(itemsResult) {
                    var _this12 = this;
                    if (!this._firstItemViewLoad) {
                        return
                    }
                    this._firstItemViewLoad = false;
                    var selectedItemKeys = this.option("selectedItemKeys");
                    if (selectedItemKeys.length > 0) {
                        (0, _deferred.when)(itemsResult).done(function(items) {
                            var selectedItems = (0, _uiFile_manager.findItemsByKeys)(items, selectedItemKeys);
                            if (selectedItems.length > 0) {
                                _this12._updateToolbar(selectedItems)
                            }
                        })
                    }
                }
            }, {
                key: "_getPreparedItemViewItems",
                value: function(items) {
                    var selectedDir = this._getCurrentDirectory();
                    if (selectedDir.fileItem.isRoot()) {
                        return items
                    }
                    var parentDirItem = selectedDir.fileItem.createClone();
                    parentDirItem.isParentFolder = true;
                    parentDirItem.name = "..";
                    parentDirItem.relativeName = "..";
                    parentDirItem.key = "".concat(PARENT_DIRECTORY_KEY_PREFIX).concat(selectedDir.fileItem.key);
                    var itemsCopy = _toConsumableArray(items);
                    itemsCopy.unshift({
                        fileItem: parentDirItem,
                        icon: "parentfolder"
                    });
                    return itemsCopy
                }
            }, {
                key: "_onItemViewClick",
                value: function() {
                    this._setItemsViewAreaActive(true)
                }
            }, {
                key: "_getItemThumbnailInfo",
                value: function(fileInfo) {
                    var func = this.option("customizeThumbnail");
                    var thumbnail = _type2.default.isFunction(func) ? func(fileInfo.fileItem) : fileInfo.fileItem.thumbnail;
                    if (thumbnail) {
                        return {
                            thumbnail: thumbnail,
                            cssClass: FILE_MANAGER_ITEM_CUSTOM_THUMBNAIL_CLASS
                        }
                    }
                    return {
                        thumbnail: fileInfo.icon
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManager.prototype), "_getDefaultOptions", this).call(this), {
                        fileSystemProvider: null,
                        currentPath: "",
                        currentPathKeys: [],
                        rootFolderName: _message2.default.format("dxFileManager-rootDirectoryName"),
                        selectionMode: "multiple",
                        selectedItemKeys: [],
                        focusedItemKey: void 0,
                        toolbar: {
                            items: ["showNavPane", "create", "upload", "switchView", {
                                name: "separator",
                                location: "after"
                            }, "refresh"],
                            fileSelectionItems: ["download", "separator", "move", "copy", "rename", "separator", "delete", "clearSelection", {
                                name: "separator",
                                location: "after"
                            }, "refresh"]
                        },
                        contextMenu: {
                            items: ["create", "upload", "rename", "move", "copy", "delete", "refresh", "download"]
                        },
                        itemView: {
                            details: {
                                columns: ["thumbnail", "name", "dateModified", "size"]
                            },
                            mode: "details",
                            showFolders: true,
                            showParentFolder: true
                        },
                        customizeThumbnail: null,
                        customizeDetailColumns: null,
                        onContextMenuItemClick: null,
                        onCurrentDirectoryChanged: null,
                        onSelectedFileOpened: null,
                        onSelectionChanged: null,
                        onFocusedItemChanged: null,
                        onToolbarItemClick: null,
                        onErrorOccurred: null,
                        allowedFileExtensions: [],
                        upload: {
                            maxFileSize: 0,
                            chunkSize: 2e5
                        },
                        permissions: {
                            create: false,
                            copy: false,
                            move: false,
                            "delete": false,
                            rename: false,
                            upload: false,
                            download: false
                        }
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "currentPath":
                            this._controller.setCurrentPath(args.value);
                            break;
                        case "currentPathKeys":
                            this._controller.setCurrentPathByKeys(args.value);
                            break;
                        case "selectedItemKeys":
                            if (!this._lockSelectionProcessing && this._itemView) {
                                this._itemView.option("selectedItemKeys", args.value)
                            }
                            break;
                        case "focusedItemKey":
                            if (!this._lockFocusedItemProcessing && this._itemView) {
                                this._itemView.option("focusedItemKey", args.value)
                            }
                            break;
                        case "fileSystemProvider":
                        case "selectionMode":
                        case "customizeThumbnail":
                        case "customizeDetailColumns":
                        case "rootFolderName":
                        case "allowedFileExtensions":
                        case "permissions":
                        case "upload":
                            this.repaint();
                            break;
                        case "itemView":
                            if ("itemView.mode" === args.fullName) {
                                this._switchView(args.value)
                            } else {
                                this.repaint()
                            }
                            break;
                        case "toolbar":
                            var toolbarOptions = {};
                            if ("toolbar" === args.fullName) {
                                if (args.value.items) {
                                    toolbarOptions.generalItems = args.value.items
                                }
                                if (args.value.fileSelectionItems) {
                                    toolbarOptions.fileItems = args.value.fileSelectionItems
                                }
                            }
                            if ("toolbar.items" === args.fullName) {
                                toolbarOptions.generalItems = args.value
                            }
                            if ("toolbar.fileSelectionItems" === args.fullName) {
                                toolbarOptions.fileItems = args.value
                            }
                            this._toolbar.option(toolbarOptions);
                            break;
                        case "contextMenu":
                            if ("contextMenu" === args.fullName && args.value.items || 0 === args.fullName.indexOf("contextMenu.items")) {
                                var contextMenuItems = this.option("contextMenu.items");
                                this._filesTreeViewContextMenu.option("items", contextMenuItems);
                                this._itemViewContextMenu.option("items", contextMenuItems)
                            }
                            break;
                        case "onContextMenuItemClick":
                        case "onCurrentDirectoryChanged":
                        case "onSelectedFileOpened":
                        case "onSelectionChanged":
                        case "onFocusedItemChanged":
                        case "onToolbarItemClick":
                        case "onErrorOccurred":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManager.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onContextMenuItemClick: this._createActionByOption("onContextMenuItemClick"),
                        onCurrentDirectoryChanged: this._createActionByOption("onCurrentDirectoryChanged"),
                        onSelectedFileOpened: this._createActionByOption("onSelectedFileOpened"),
                        onSelectionChanged: this._createActionByOption("onSelectionChanged"),
                        onFocusedItemChanged: this._createActionByOption("onFocusedItemChanged"),
                        onToolbarItemClick: this._createActionByOption("onToolbarItemClick"),
                        onErrorOccurred: this._createActionByOption("onErrorOccurred")
                    }
                }
            }, {
                key: "executeCommand",
                value: function(commandName) {
                    return this._commandManager.executeCommand(commandName)
                }
            }, {
                key: "_setCurrentDirectory",
                value: function(directoryInfo) {
                    this._controller.setCurrentDirectory(directoryInfo)
                }
            }, {
                key: "_getCurrentDirectory",
                value: function() {
                    return this._controller.getCurrentDirectory()
                }
            }, {
                key: "_onControllerInitialized",
                value: function(_ref8) {
                    var controller = _ref8.controller;
                    this._controller = this._controller || controller;
                    var currentDirectory = controller.getCurrentDirectory();
                    if (!currentDirectory.fileItem.isRoot()) {
                        this._syncToCurrentDirectory()
                    }
                }
            }, {
                key: "_onDataLoading",
                value: function(_ref9) {
                    var operation = _ref9.operation;
                    var options = null;
                    if ("navigation" === operation) {
                        options = {
                            focusedItemKey: this._itemKeyToFocus
                        };
                        this._itemKeyToFocus = void 0
                    }
                    this._itemView.refresh(options)
                }
            }, {
                key: "_onSelectedDirectoryChanged",
                value: function() {
                    var currentDirectory = this._getCurrentDirectory();
                    this._syncToCurrentDirectory();
                    this._actions.onCurrentDirectoryChanged({
                        directory: currentDirectory.fileItem
                    })
                }
            }, {
                key: "_syncToCurrentDirectory",
                value: function() {
                    var currentDirectory = this._getCurrentDirectory();
                    var currentPath = this._controller.getCurrentPath();
                    var currentPathKeys = currentDirectory.fileItem.pathKeys;
                    if (this._filesTreeView) {
                        this._filesTreeView.updateCurrentDirectory()
                    }
                    if (this._breadcrumbs) {
                        this._breadcrumbs.setCurrentDirectory(currentDirectory)
                    }
                    var options = {
                        currentPath: currentPath
                    };
                    if (!(0, _common.equalByValue)(this.option("currentPathKeys"), currentPathKeys)) {
                        options.currentPathKeys = currentPathKeys
                    }
                    this.option(options)
                }
            }, {
                key: "getDirectories",
                value: function(parentDirectoryInfo, skipNavigationOnError) {
                    return this._controller.getDirectories(parentDirectoryInfo, skipNavigationOnError)
                }
            }, {
                key: "_getSelectedItemInfos",
                value: function() {
                    return this._itemView.getSelectedItems()
                }
            }, {
                key: "refresh",
                value: function() {
                    return this.executeCommand("refresh")
                }
            }, {
                key: "getCurrentDirectory",
                value: function() {
                    var directoryInfo = this._getCurrentDirectory();
                    return directoryInfo && directoryInfo.fileItem || null
                }
            }, {
                key: "getSelectedItems",
                value: function() {
                    return this._getSelectedItemInfos().map(function(itemInfo) {
                        return itemInfo.fileItem
                    })
                }
            }, {
                key: "_onSelectedItemOpened",
                value: function(_ref10) {
                    var fileItemInfo = _ref10.fileItemInfo;
                    var fileItem = fileItemInfo.fileItem;
                    if (!fileItem.isDirectory) {
                        this._actions.onSelectedFileOpened({
                            file: fileItem
                        });
                        return
                    }
                    if (fileItem.isParentFolder) {
                        this._itemKeyToFocus = this._getCurrentDirectory().fileItem.key
                    }
                    var newCurrentDirectory = fileItem.isParentFolder ? this._getCurrentDirectory().parentDirectory : fileItemInfo;
                    this._setCurrentDirectory(newCurrentDirectory);
                    if (newCurrentDirectory) {
                        this._filesTreeView.expandDirectory(newCurrentDirectory.parentDirectory)
                    }
                }
            }]);
            return FileManager
        }(_ui2.default);
        (0, _component_registrator2.default)("dxFileManager", FileManager);
        module.exports = FileManager
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/file_items_controller.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _provider_base = __webpack_require__( /*! ../../file_management/provider_base */ 193);
        var _provider_base2 = _interopRequireDefault(_provider_base);
        var _file_system_item = __webpack_require__( /*! ../../file_management/file_system_item */ 295);
        var _file_system_item2 = _interopRequireDefault(_file_system_item);
        var _object_provider = __webpack_require__( /*! ../../file_management/object_provider */ 447);
        var _object_provider2 = _interopRequireDefault(_object_provider);
        var _remote_provider = __webpack_require__( /*! ../../file_management/remote_provider */ 448);
        var _remote_provider2 = _interopRequireDefault(_remote_provider);
        var _custom_provider = __webpack_require__( /*! ../../file_management/custom_provider */ 449);
        var _custom_provider2 = _interopRequireDefault(_custom_provider);
        var _errors = __webpack_require__( /*! ../../file_management/errors */ 222);
        var _errors2 = _interopRequireDefault(_errors);
        var _utils = __webpack_require__( /*! ../../file_management/utils */ 221);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _uiFile_manager2 = _interopRequireDefault(_uiFile_manager);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var DEFAULT_ROOT_FILE_SYSTEM_ITEM_NAME = "Files";
        var FileItemsController = function() {
            function FileItemsController(options) {
                _classCallCheck(this, FileItemsController);
                options = options || {};
                this._options = (0, _extend.extend)({}, options);
                this._isInitialized = false;
                this._dataLoading = false;
                this._dataLoadingDeferred = null;
                this._rootDirectoryInfo = this._createRootDirectoryInfo(options.rootText);
                this._currentDirectoryInfo = this._rootDirectoryInfo;
                this._defaultIconMap = this._createDefaultIconMap();
                this._securityController = new FileSecurityController({
                    allowedFileExtensions: this._options.allowedFileExtensions,
                    maxFileSize: this._options.uploadMaxFileSize
                });
                this._setProvider(options.fileProvider);
                this._initialize()
            }
            _createClass(FileItemsController, [{
                key: "_setProvider",
                value: function(fileProvider) {
                    this._fileProvider = this._createFileProvider(fileProvider);
                    this._resetState()
                }
            }, {
                key: "_createFileProvider",
                value: function(fileProvider) {
                    if (!fileProvider) {
                        fileProvider = []
                    }
                    if (Array.isArray(fileProvider)) {
                        return new _object_provider2.default({
                            data: fileProvider
                        })
                    }
                    if (fileProvider instanceof _provider_base2.default) {
                        return fileProvider
                    }
                    switch (fileProvider.type) {
                        case "remote":
                            return new _remote_provider2.default(fileProvider);
                        case "custom":
                            return new _custom_provider2.default(fileProvider)
                    }
                    return new _object_provider2.default(fileProvider)
                }
            }, {
                key: "setCurrentPath",
                value: function(path) {
                    var pathParts = (0, _utils.getPathParts)(path);
                    var rawPath = _utils.pathCombine.apply(void 0, _toConsumableArray(pathParts));
                    if (this.getCurrentDirectory().fileItem.relativeName === rawPath) {
                        return
                    }
                    return this._setCurrentDirectoryByPathParts(pathParts)
                }
            }, {
                key: "setCurrentPathByKeys",
                value: function(pathKeys) {
                    if ((0, _common.equalByValue)(this.getCurrentDirectory().fileItem.pathKeys, pathKeys, 0, true)) {
                        return
                    }
                    return this._setCurrentDirectoryByPathParts(pathKeys, true)
                }
            }, {
                key: "getCurrentPath",
                value: function() {
                    var currentPath = "";
                    var directory = this.getCurrentDirectory();
                    while (directory && !directory.fileItem.isRoot()) {
                        var escapedName = (0, _utils.getEscapedFileName)(directory.fileItem.name);
                        currentPath = (0, _utils.pathCombine)(escapedName, currentPath);
                        directory = directory.parentDirectory
                    }
                    return currentPath
                }
            }, {
                key: "getCurrentDirectory",
                value: function() {
                    return this._currentDirectoryInfo
                }
            }, {
                key: "setCurrentDirectory",
                value: function(directoryInfo) {
                    if (!directoryInfo) {
                        return
                    }
                    if (this._currentDirectoryInfo && this._currentDirectoryInfo === directoryInfo) {
                        return
                    }
                    var requireRaiseSelectedDirectory = this._currentDirectoryInfo.fileItem.key !== directoryInfo.fileItem.key;
                    this._currentDirectoryInfo = directoryInfo;
                    if (requireRaiseSelectedDirectory && this._isInitialized) {
                        if (!this._dataLoading) {
                            this._raiseDataLoading("navigation")
                        }
                        this._raiseSelectedDirectoryChanged(directoryInfo)
                    }
                }
            }, {
                key: "getCurrentItems",
                value: function(onlyFiles) {
                    var _this = this;
                    return this._dataLoadingDeferred ? this._dataLoadingDeferred.then(function() {
                        return _this._getCurrentItemsInternal(onlyFiles)
                    }) : this._getCurrentItemsInternal(onlyFiles)
                }
            }, {
                key: "_getCurrentItemsInternal",
                value: function(onlyFiles) {
                    var currentDirectory = this.getCurrentDirectory();
                    return onlyFiles ? this.getFiles(currentDirectory) : this.getDirectoryContents(currentDirectory)
                }
            }, {
                key: "getDirectories",
                value: function(parentDirectoryInfo, skipNavigationOnError) {
                    return this.getDirectoryContents(parentDirectoryInfo, skipNavigationOnError).then(function(itemInfos) {
                        return itemInfos.filter(function(info) {
                            return info.fileItem.isDirectory
                        })
                    })
                }
            }, {
                key: "getFiles",
                value: function(parentDirectoryInfo) {
                    return this.getDirectoryContents(parentDirectoryInfo).then(function(itemInfos) {
                        return itemInfos.filter(function(info) {
                            return !info.fileItem.isDirectory
                        })
                    })
                }
            }, {
                key: "getDirectoryContents",
                value: function(parentDirectoryInfo, skipNavigationOnError) {
                    var _this2 = this;
                    if (!parentDirectoryInfo) {
                        return (new _deferred.Deferred).resolve([this._rootDirectoryInfo]).promise()
                    }
                    if (parentDirectoryInfo.itemsLoaded) {
                        return (new _deferred.Deferred).resolve(parentDirectoryInfo.items).promise()
                    }
                    var dirKey = parentDirectoryInfo.getInternalKey();
                    var loadItemsDeferred = this._loadedItems[dirKey];
                    if (loadItemsDeferred) {
                        return loadItemsDeferred
                    }
                    loadItemsDeferred = this._getFileItems(parentDirectoryInfo, skipNavigationOnError).then(function(fileItems) {
                        fileItems = fileItems || [];
                        parentDirectoryInfo.items = fileItems.map(function(fileItem) {
                            return fileItem.isDirectory && _this2._createDirectoryInfo(fileItem, parentDirectoryInfo) || _this2._createFileInfo(fileItem, parentDirectoryInfo)
                        });
                        parentDirectoryInfo.itemsLoaded = true;
                        return parentDirectoryInfo.items
                    });
                    this._loadedItems[dirKey] = loadItemsDeferred;
                    loadItemsDeferred.always(function() {
                        delete _this2._loadedItems[dirKey]
                    });
                    return loadItemsDeferred
                }
            }, {
                key: "_getFileItems",
                value: function(parentDirectoryInfo, skipNavigationOnError) {
                    var _this3 = this;
                    var loadItemsDeferred = null;
                    try {
                        loadItemsDeferred = this._fileProvider.getItems(parentDirectoryInfo.fileItem)
                    } catch (error) {
                        return this._handleItemLoadError(parentDirectoryInfo, error, skipNavigationOnError)
                    }
                    return (0, _deferred.when)(loadItemsDeferred).then(function(fileItems) {
                        return _this3._securityController.getAllowedItems(fileItems)
                    }, function(errorInfo) {
                        return _this3._handleItemLoadError(parentDirectoryInfo, errorInfo, skipNavigationOnError)
                    })
                }
            }, {
                key: "createDirectory",
                value: function(parentDirectoryInfo, name) {
                    var _this4 = this;
                    var actionInfo = this._createEditActionInfo("create", parentDirectoryInfo, parentDirectoryInfo);
                    return this._processEditAction(actionInfo, function() {
                        return _this4._fileProvider.createDirectory(parentDirectoryInfo.fileItem, name)
                    }, function() {
                        return _this4._resetDirectoryState(parentDirectoryInfo)
                    })
                }
            }, {
                key: "renameItem",
                value: function(fileItemInfo, name) {
                    var _this5 = this;
                    var actionInfo = this._createEditActionInfo("rename", fileItemInfo, fileItemInfo.parentDirectory);
                    return this._processEditAction(actionInfo, function() {
                        if (!fileItemInfo.fileItem.isDirectory) {
                            _this5._securityController.validateExtension(name)
                        }
                        return _this5._fileProvider.renameItem(fileItemInfo.fileItem, name)
                    }, function() {
                        _this5._resetDirectoryState(fileItemInfo.parentDirectory);
                        _this5.setCurrentDirectory(fileItemInfo.parentDirectory)
                    })
                }
            }, {
                key: "moveItems",
                value: function(itemInfos, destinationDirectory) {
                    var _this6 = this;
                    var items = itemInfos.map(function(i) {
                        return i.fileItem
                    });
                    var actionInfo = this._createEditActionInfo("move", itemInfos, destinationDirectory);
                    return this._processEditAction(actionInfo, function() {
                        return _this6._fileProvider.moveItems(items, destinationDirectory.fileItem)
                    }, function() {
                        itemInfos.forEach(function(itemInfo) {
                            return _this6._resetDirectoryState(itemInfo.parentDirectory)
                        });
                        _this6._resetDirectoryState(destinationDirectory);
                        _this6.setCurrentDirectory(destinationDirectory)
                    })
                }
            }, {
                key: "copyItems",
                value: function(itemInfos, destinationDirectory) {
                    var _this7 = this;
                    var items = itemInfos.map(function(i) {
                        return i.fileItem
                    });
                    var actionInfo = this._createEditActionInfo("copy", itemInfos, destinationDirectory);
                    return this._processEditAction(actionInfo, function() {
                        return _this7._fileProvider.copyItems(items, destinationDirectory.fileItem)
                    }, function() {
                        _this7._resetDirectoryState(destinationDirectory);
                        _this7.setCurrentDirectory(destinationDirectory);
                        destinationDirectory.expanded = true
                    })
                }
            }, {
                key: "deleteItems",
                value: function(itemInfos) {
                    var _this8 = this;
                    var items = itemInfos.map(function(i) {
                        return i.fileItem
                    });
                    var directory = itemInfos.length > 0 ? itemInfos[0].parentDirectory : null;
                    var actionInfo = this._createEditActionInfo("delete", itemInfos, directory);
                    return this._processEditAction(actionInfo, function() {
                        return _this8._fileProvider.deleteItems(items)
                    }, function() {
                        itemInfos.forEach(function(itemInfo) {
                            var parentDir = itemInfo.parentDirectory;
                            _this8._resetDirectoryState(parentDir);
                            _this8.setCurrentDirectory(parentDir)
                        })
                    })
                }
            }, {
                key: "processUploadSession",
                value: function(sessionInfo, uploadDirectoryInfo) {
                    var _this9 = this;
                    var itemInfos = this._getItemInfosForUploaderFiles(sessionInfo.files, uploadDirectoryInfo);
                    var actionInfo = this._createEditActionInfo("upload", itemInfos, uploadDirectoryInfo, {
                        sessionInfo: sessionInfo
                    });
                    return this._processEditAction(actionInfo, function() {
                        return sessionInfo.deferreds
                    }, function() {
                        return _this9._resetDirectoryState(uploadDirectoryInfo)
                    })
                }
            }, {
                key: "uploadFileChunk",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    this._securityController.validateMaxFileSize(fileData.size);
                    this._securityController.validateExtension(fileData.name);
                    return (0, _deferred.when)(this._fileProvider.uploadFileChunk(fileData, chunksInfo, destinationDirectory))
                }
            }, {
                key: "abortFileUpload",
                value: function(fileData, chunksInfo, destinationDirectory) {
                    return (0, _deferred.when)(this._fileProvider.abortFileUpload(fileData, chunksInfo, destinationDirectory))
                }
            }, {
                key: "getFileUploadChunkSize",
                value: function() {
                    var chunkSize = this._options.uploadChunkSize;
                    if (chunkSize && chunkSize > 0) {
                        return chunkSize
                    }
                    return this._fileProvider.getFileUploadChunkSize()
                }
            }, {
                key: "downloadItems",
                value: function(itemInfos) {
                    var items = itemInfos.map(function(i) {
                        return i.fileItem
                    });
                    this._fileProvider.downloadItems(items)
                }
            }, {
                key: "getItemContent",
                value: function(itemInfos) {
                    var items = itemInfos.map(function(i) {
                        return i.fileItem
                    });
                    return (0, _deferred.when)(this._fileProvider.getItemsContent(items))
                }
            }, {
                key: "_handleItemLoadError",
                value: function(parentDirectoryInfo, errorInfo, skipNavigationOnError) {
                    var actionInfo = this._createEditActionInfo("getItems", parentDirectoryInfo, parentDirectoryInfo);
                    this._raiseEditActionStarting(actionInfo);
                    this._raiseEditActionResultAcquired(actionInfo);
                    this._raiseEditActionError(actionInfo, {
                        errorId: errorInfo.errorId,
                        fileItem: parentDirectoryInfo.fileItem,
                        index: 0
                    });
                    this._resetDirectoryState(parentDirectoryInfo);
                    parentDirectoryInfo.expanded = false;
                    if (!skipNavigationOnError) {
                        this.setCurrentDirectory(parentDirectoryInfo.parentDirectory)
                    }
                    return (new _deferred.Deferred).reject().promise()
                }
            }, {
                key: "_processEditAction",
                value: function(actionInfo, action, completeAction) {
                    var _this10 = this;
                    var actionResult = null;
                    this._raiseEditActionStarting(actionInfo);
                    try {
                        actionResult = action()
                    } catch (error) {
                        this._raiseEditActionError(actionInfo, error);
                        return (new _deferred.Deferred).reject().promise()
                    }
                    if (!Array.isArray(actionResult)) {
                        actionResult = [actionResult]
                    } else {
                        if (actionResult.length > 1) {
                            actionInfo.singleRequest = false
                        }
                    }
                    this._raiseEditActionResultAcquired(actionInfo);
                    return (0, _uiFile_manager2.default)(actionResult, function(info) {
                        return _this10._raiseCompleteEditActionItem(actionInfo, info)
                    }, function(info) {
                        return _this10._raiseEditActionItemError(actionInfo, info)
                    }).then(function() {
                        completeAction();
                        _this10._raiseCompleteEditAction(actionInfo)
                    })
                }
            }, {
                key: "_createEditActionInfo",
                value: function(name, itemInfos, directory, customData) {
                    itemInfos = Array.isArray(itemInfos) ? itemInfos : [itemInfos];
                    customData = customData || {};
                    var items = itemInfos.map(function(itemInfo) {
                        return itemInfo.fileItem
                    });
                    return {
                        name: name,
                        itemInfos: itemInfos,
                        items: items,
                        directory: directory,
                        customData: customData,
                        singleRequest: true
                    }
                }
            }, {
                key: "_getItemInfosForUploaderFiles",
                value: function(files, parentDirectoryInfo) {
                    var pathInfo = this._getPathInfo(parentDirectoryInfo);
                    var result = [];
                    for (var i = 0; i < files.length; i++) {
                        var file = files[i];
                        var item = new _file_system_item2.default(pathInfo, file.name, false);
                        var itemInfo = this._createFileInfo(item, parentDirectoryInfo);
                        result.push(itemInfo)
                    }
                    return result
                }
            }, {
                key: "refresh",
                value: function() {
                    var _this11 = this;
                    if (this._lockRefresh) {
                        return this._refreshDeferred
                    }
                    this._lockRefresh = true;
                    return this._executeDataLoad(function() {
                        return _this11._refreshDeferred = _this11._refreshInternal()
                    }, "refresh")
                }
            }, {
                key: "_refreshInternal",
                value: function() {
                    var _this12 = this;
                    var cachedRootInfo = {
                        items: this._rootDirectoryInfo.items
                    };
                    var selectedKeyParts = this._getDirectoryPathKeyParts(this.getCurrentDirectory());
                    this._resetDirectoryState(this._rootDirectoryInfo);
                    return this._loadItemsRecursive(this._rootDirectoryInfo, cachedRootInfo).then(function() {
                        var dirInfo = _this12._findSelectedDirectoryByPathKeyParts(selectedKeyParts);
                        _this12.setCurrentDirectory(dirInfo);
                        delete _this12._lockRefresh
                    })
                }
            }, {
                key: "_loadItemsRecursive",
                value: function(directoryInfo, cachedDirectoryInfo) {
                    var _this13 = this;
                    return this.getDirectories(directoryInfo).then(function(dirInfos) {
                        var itemDeferreds = [];
                        var _loop = function(i) {
                            var cachedItem = (0, _array.find)(cachedDirectoryInfo.items, function(cache) {
                                return dirInfos[i].fileItem.key === cache.fileItem.key
                            });
                            if (!cachedItem) {
                                return "continue"
                            }
                            dirInfos[i].expanded = cachedItem.expanded;
                            if (dirInfos[i].expanded) {
                                itemDeferreds.push(_this13._loadItemsRecursive(dirInfos[i], cachedItem))
                            }
                        };
                        for (var i = 0; i < dirInfos.length; i++) {
                            var _ret = _loop(i);
                            if ("continue" === _ret) {
                                continue
                            }
                        }
                        return (0, _uiFile_manager2.default)(itemDeferreds)
                    }, function() {
                        return null
                    })
                }
            }, {
                key: "_initialize",
                value: function() {
                    var _this14 = this;
                    var result = this._options.currentPathKeys && this._options.currentPathKeys.length ? this.setCurrentPathByKeys(this._options.currentPathKeys) : this.setCurrentPath(this._options.currentPath);
                    var completeInitialization = function() {
                        _this14._isInitialized = true;
                        _this14._raiseInitialized()
                    };
                    if (result) {
                        (0, _deferred.when)(result).always(completeInitialization)
                    } else {
                        completeInitialization()
                    }
                }
            }, {
                key: "_setCurrentDirectoryByPathParts",
                value: function(pathParts, useKeys) {
                    var _this15 = this;
                    return this._executeDataLoad(function() {
                        return _this15._setCurrentDirectoryByPathPartsInternal(pathParts, useKeys)
                    }, "navigation")
                }
            }, {
                key: "_setCurrentDirectoryByPathPartsInternal",
                value: function(pathParts, useKeys) {
                    var _this16 = this;
                    return this._getDirectoryByPathParts(this._rootDirectoryInfo, pathParts, useKeys).then(function(directoryInfo) {
                        for (var info = directoryInfo.parentDirectory; info; info = info.parentDirectory) {
                            info.expanded = true
                        }
                        _this16.setCurrentDirectory(directoryInfo)
                    })
                }
            }, {
                key: "_executeDataLoad",
                value: function(action, operation) {
                    var _this17 = this;
                    this._dataLoading = true;
                    this._dataLoadingDeferred = new _deferred.Deferred;
                    if (this._isInitialized) {
                        this._raiseDataLoading(operation)
                    }
                    return action().always(function() {
                        _this17._dataLoadingDeferred.resolve();
                        _this17._dataLoadingDeferred = null;
                        _this17._dataLoading = false
                    })
                }
            }, {
                key: "_getDirectoryByPathParts",
                value: function(parentDirectoryInfo, pathParts, useKeys) {
                    var _this18 = this;
                    if (pathParts.length < 1) {
                        return (new _deferred.Deferred).resolve(parentDirectoryInfo).promise()
                    }
                    var fieldName = useKeys ? "key" : "name";
                    return this.getDirectories(parentDirectoryInfo).then(function(dirInfos) {
                        var subDirInfo = (0, _array.find)(dirInfos, function(d) {
                            return d.fileItem[fieldName] === pathParts[0]
                        });
                        if (!subDirInfo) {
                            return (new _deferred.Deferred).reject().promise()
                        }
                        var restPathParts = _toConsumableArray(pathParts).splice(1);
                        return _this18._getDirectoryByPathParts(subDirInfo, restPathParts, useKeys)
                    })
                }
            }, {
                key: "_getDirectoryPathKeyParts",
                value: function(directoryInfo) {
                    var pathParts = [];
                    while (directoryInfo && directoryInfo.parentDirectory) {
                        pathParts.unshift(directoryInfo.fileItem.key);
                        directoryInfo = directoryInfo.parentDirectory
                    }
                    return pathParts
                }
            }, {
                key: "_findSelectedDirectoryByPathKeyParts",
                value: function(keyParts) {
                    var selectedDirInfo = this._rootDirectoryInfo;
                    if (0 === keyParts.length) {
                        return selectedDirInfo
                    }
                    var i = 0;
                    var newSelectedDir = selectedDirInfo;
                    while (newSelectedDir && i < keyParts.length) {
                        newSelectedDir = (0, _array.find)(selectedDirInfo.items, function(info) {
                            return info.fileItem.key === keyParts[i]
                        });
                        if (newSelectedDir) {
                            selectedDirInfo = newSelectedDir
                        }
                        i++
                    }
                    return selectedDirInfo
                }
            }, {
                key: "_createDirectoryInfo",
                value: function(fileItem, parentDirectoryInfo) {
                    return (0, _extend.extend)(this._createFileInfo(fileItem, parentDirectoryInfo), {
                        icon: "folder",
                        expanded: fileItem.isRoot(),
                        items: []
                    })
                }
            }, {
                key: "_createFileInfo",
                value: function(fileItem, parentDirectoryInfo) {
                    return {
                        fileItem: fileItem,
                        parentDirectory: parentDirectoryInfo,
                        icon: this._getFileItemDefaultIcon(fileItem),
                        getInternalKey: function() {
                            return "FIK_".concat(this.fileItem.key)
                        },
                        getDisplayName: function() {
                            return this.displayName || this.fileItem.name
                        }
                    }
                }
            }, {
                key: "_resetDirectoryState",
                value: function(directoryInfo) {
                    directoryInfo.itemsLoaded = false;
                    directoryInfo.items = []
                }
            }, {
                key: "_getFileItemDefaultIcon",
                value: function(fileItem) {
                    if (fileItem.isDirectory) {
                        return "folder"
                    }
                    var extension = fileItem.getFileExtension();
                    var icon = this._defaultIconMap[extension];
                    return icon || "doc"
                }
            }, {
                key: "_createDefaultIconMap",
                value: function() {
                    var result = {
                        ".txt": "txtfile",
                        ".rtf": "rtffile",
                        ".doc": "docfile",
                        ".docx": "docxfile",
                        ".xls": "xlsfile",
                        ".xlsx": "xlsxfile",
                        ".ppt": "pptfile",
                        ".pptx": "pptxfile",
                        ".pdf": "pdffile"
                    };
                    [".png", ".gif", ".jpg", ".jpeg", ".ico", ".bmp"].forEach(function(extension) {
                        result[extension] = "image"
                    });
                    return result
                }
            }, {
                key: "_createRootDirectoryInfo",
                value: function(text) {
                    var rootDirectory = new _file_system_item2.default(null, "", true);
                    var result = this._createDirectoryInfo(rootDirectory, null);
                    result.displayName = text || DEFAULT_ROOT_FILE_SYSTEM_ITEM_NAME;
                    return result
                }
            }, {
                key: "_raiseInitialized",
                value: function() {
                    var e = {
                        controller: this
                    };
                    if (this._options.onInitialized) {
                        this._options.onInitialized(e)
                    }
                }
            }, {
                key: "_raiseDataLoading",
                value: function(operation) {
                    if (this._options.onDataLoading) {
                        this._options.onDataLoading({
                            operation: operation
                        })
                    }
                }
            }, {
                key: "_raiseSelectedDirectoryChanged",
                value: function(directoryInfo) {
                    var e = {
                        selectedDirectoryInfo: directoryInfo
                    };
                    if (this._options.onSelectedDirectoryChanged) {
                        this._options.onSelectedDirectoryChanged(e)
                    }
                }
            }, {
                key: "_raiseEditActionStarting",
                value: function(actionInfo) {
                    if (this._options.onEditActionStarting) {
                        this._options.onEditActionStarting(actionInfo)
                    }
                }
            }, {
                key: "_raiseEditActionResultAcquired",
                value: function(actionInfo) {
                    if (this._options.onEditActionResultAcquired) {
                        this._options.onEditActionResultAcquired(actionInfo)
                    }
                }
            }, {
                key: "_raiseEditActionError",
                value: function(actionInfo, error) {
                    if (this._options.onEditActionError) {
                        this._options.onEditActionError(actionInfo, error)
                    }
                }
            }, {
                key: "_raiseEditActionItemError",
                value: function(actionInfo, info) {
                    if (this._options.onEditActionItemError) {
                        this._options.onEditActionItemError(actionInfo, info)
                    }
                }
            }, {
                key: "_raiseCompleteEditActionItem",
                value: function(actionInfo, info) {
                    if (this._options.onCompleteEditActionItem) {
                        this._options.onCompleteEditActionItem(actionInfo, info)
                    }
                }
            }, {
                key: "_raiseCompleteEditAction",
                value: function(actionInfo) {
                    if (this._options.onCompleteEditAction) {
                        this._options.onCompleteEditAction(actionInfo)
                    }
                }
            }, {
                key: "_resetState",
                value: function() {
                    this._selectedDirectory = null;
                    this._rootDirectoryInfo.items = [];
                    this._loadedItems = {}
                }
            }, {
                key: "_getPathInfo",
                value: function(directoryInfo) {
                    var pathInfo = [];
                    for (var dirInfo = directoryInfo; dirInfo && !dirInfo.fileItem.isRoot(); dirInfo = dirInfo.parentDirectory) {
                        pathInfo.unshift({
                            key: dirInfo.fileItem.key,
                            name: dirInfo.fileItem.name
                        })
                    }
                    return pathInfo
                }
            }, {
                key: "on",
                value: function(eventName, eventHandler) {
                    var finalEventName = "on".concat(eventName);
                    this._options[finalEventName] = eventHandler
                }
            }]);
            return FileItemsController
        }();
        exports.default = FileItemsController;
        var FileSecurityController = function() {
            function FileSecurityController(options) {
                var _this19 = this;
                _classCallCheck(this, FileSecurityController);
                var defaultOptions = {
                    allowedFileExtensions: [],
                    maxFileSize: 0
                };
                this._options = (0, _extend.extend)(defaultOptions, options);
                this._extensionsMap = {};
                this._allowedFileExtensions.forEach(function(extension) {
                    _this19._extensionsMap[extension.toUpperCase()] = true
                })
            }
            _createClass(FileSecurityController, [{
                key: "getAllowedItems",
                value: function(items) {
                    var _this20 = this;
                    if (0 === this._allowedFileExtensions.length) {
                        return items
                    }
                    return items.filter(function(item) {
                        return item.isDirectory || _this20._isValidExtension(item.name)
                    })
                }
            }, {
                key: "validateExtension",
                value: function(name) {
                    if (!this._isValidExtension(name)) {
                        this._throwError(_errors2.default.WrongFileExtension)
                    }
                }
            }, {
                key: "validateMaxFileSize",
                value: function(size) {
                    if (this._maxFileSize && size > this._maxFileSize) {
                        this._throwError(_errors2.default.MaxFileSizeExceeded)
                    }
                }
            }, {
                key: "_isValidExtension",
                value: function(name) {
                    if (0 === this._allowedFileExtensions.length) {
                        return true
                    }
                    var extension = (0, _utils.getFileExtension)(name).toUpperCase();
                    return this._extensionsMap[extension]
                }
            }, {
                key: "_throwError",
                value: function(errorId) {
                    throw {
                        errorId: errorId
                    }
                }
            }, {
                key: "_allowedFileExtensions",
                get: function() {
                    return this._options.allowedFileExtensions
                }
            }, {
                key: "_maxFileSize",
                get: function() {
                    return this._options.maxFileSize
                }
            }]);
            return FileSecurityController
        }()
    },
    /*!*********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.command_manager.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.FileManagerCommandManager = void 0;
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.FileManagerCommandManager = function() {
            function FileManagerCommandManager(permissions) {
                _classCallCheck(this, FileManagerCommandManager);
                this._actions = {};
                this._permissions = permissions || {};
                this._initCommands()
            }
            _createClass(FileManagerCommandManager, [{
                key: "_initCommands",
                value: function() {
                    var _this = this;
                    this._commands = [{
                        name: "create",
                        text: _message2.default.format("dxFileManager-commandCreate"),
                        icon: "newfolder",
                        enabled: this._permissions.create,
                        noFileItemRequired: true
                    }, {
                        name: "rename",
                        text: _message2.default.format("dxFileManager-commandRename"),
                        icon: "rename",
                        enabled: this._permissions.rename,
                        isSingleFileItemCommand: true
                    }, {
                        name: "move",
                        text: _message2.default.format("dxFileManager-commandMove"),
                        icon: "movetofolder",
                        enabled: this._permissions.move
                    }, {
                        name: "copy",
                        text: _message2.default.format("dxFileManager-commandCopy"),
                        icon: "copy",
                        enabled: this._permissions.copy
                    }, {
                        name: "delete",
                        text: _message2.default.format("dxFileManager-commandDelete"),
                        icon: "trash",
                        enabled: this._permissions.delete
                    }, {
                        name: "download",
                        text: _message2.default.format("dxFileManager-commandDownload"),
                        icon: "download",
                        enabled: this._permissions.download
                    }, {
                        name: "upload",
                        text: _message2.default.format("dxFileManager-commandUpload"),
                        icon: "upload",
                        enabled: this._permissions.upload,
                        noFileItemRequired: true
                    }, {
                        name: "refresh",
                        text: _message2.default.format("dxFileManager-commandRefresh"),
                        icon: "dx-filemanager-i dx-filemanager-i-refresh",
                        enabled: true,
                        noFileItemRequired: true
                    }, {
                        name: "thumbnails",
                        text: _message2.default.format("dxFileManager-commandThumbnails"),
                        icon: "mediumiconslayout",
                        enabled: true,
                        noFileItemRequired: true
                    }, {
                        name: "details",
                        text: _message2.default.format("dxFileManager-commandDetails"),
                        icon: "detailslayout",
                        enabled: true,
                        noFileItemRequired: true
                    }, {
                        name: "clearSelection",
                        text: _message2.default.format("dxFileManager-commandClearSelection"),
                        icon: "remove",
                        enabled: true
                    }, {
                        name: "showNavPane",
                        icon: "menu",
                        enabled: false,
                        noFileItemRequired: true
                    }];
                    this._commandMap = {};
                    this._commands.forEach(function(command) {
                        _this._commandMap[command.name] = command
                    })
                }
            }, {
                key: "registerActions",
                value: function(actions) {
                    this._actions = (0, _extend.extend)(this._actions, actions)
                }
            }, {
                key: "executeCommand",
                value: function(command, arg) {
                    var commandName = (0, _type.isString)(command) ? command : command.name;
                    var action = this._actions[commandName];
                    if (action) {
                        return action(arg)
                    }
                }
            }, {
                key: "setCommandEnabled",
                value: function(commandName, enabled) {
                    var command = this.getCommandByName(commandName);
                    if (command) {
                        command.enabled = enabled
                    }
                }
            }, {
                key: "getCommandByName",
                value: function(name) {
                    return this._commandMap[name]
                }
            }, {
                key: "isCommandAvailable",
                value: function(commandName, itemInfos) {
                    var command = this.getCommandByName(commandName);
                    if (!command || !command.enabled) {
                        return false
                    }
                    if (command.noFileItemRequired) {
                        return true
                    }
                    var itemsLength = itemInfos && itemInfos.length || 0;
                    if (0 === itemsLength || itemInfos.some(function(item) {
                            return item.fileItem.isRoot() || item.fileItem.isParentFolder
                        })) {
                        return false
                    }
                    if ("download" === commandName) {
                        return itemInfos.every(function(itemInfo) {
                            return !itemInfo.fileItem.isDirectory
                        })
                    }
                    return !command.isSingleFileItemCommand || 1 === itemsLength
                }
            }]);
            return FileManagerCommandManager
        }()
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.context_menu.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _ui3 = __webpack_require__( /*! ../context_menu/ui.context_menu */ 343);
        var _ui4 = _interopRequireDefault(_ui3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

        function _defineProperty(obj, key, value) {
            if (key in obj) {
                Object.defineProperty(obj, key, {
                    value: value,
                    enumerable: true,
                    configurable: true,
                    writable: true
                })
            } else {
                obj[key] = value
            }
            return obj
        }

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILEMANAGER_CONTEXT_MEMU_CLASS = "dx-filemanager-context-menu";
        var DEFAULT_CONTEXT_MENU_ITEMS = {
            create: {},
            upload: {},
            download: {},
            rename: {},
            move: {},
            copy: {},
            "delete": {},
            refresh: {
                beginGroup: true
            }
        };
        var FileManagerContextMenu = function(_Widget) {
            _inherits(FileManagerContextMenu, _Widget);
            var _super = _createSuper(FileManagerContextMenu);

            function FileManagerContextMenu() {
                _classCallCheck(this, FileManagerContextMenu);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerContextMenu, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    this._initActions();
                    this._isVisible = false;
                    var $menu = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._contextMenu = this._createComponent($menu, _ui4.default, {
                        cssClass: FILEMANAGER_CONTEXT_MEMU_CLASS,
                        showEvent: "",
                        onItemClick: function(args) {
                            return _this._onContextMenuItemClick(args.itemData.name, args)
                        },
                        onHidden: function() {
                            return _this._onContextMenuHidden()
                        }
                    });
                    _get(_getPrototypeOf(FileManagerContextMenu.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "showAt",
                value: function(fileItems, element, offset) {
                    if (this._isVisible) {
                        this._raiseContextMenuHidden()
                    }
                    this._isVisible = true;
                    var items = this.createContextMenuItems(fileItems);
                    var position = {
                        of: element,
                        at: "top left",
                        my: "top left",
                        offset: ""
                    };
                    if (offset) {
                        position.offset = offset.offsetX + " " + offset.offsetY
                    } else {
                        position.my = "left top";
                        position.at = "left bottom";
                        position.boundaryOffset = "1"
                    }
                    this._contextMenu.option({
                        dataSource: items,
                        target: element,
                        position: position
                    });
                    this._contextMenu.show()
                }
            }, {
                key: "createContextMenuItems",
                value: function(fileItems, contextMenuItems) {
                    var _this2 = this;
                    this._targetFileItems = fileItems;
                    var result = [];
                    var itemArray = contextMenuItems || this.option("items");
                    itemArray.forEach(function(srcItem) {
                        var commandName = (0, _type.isString)(srcItem) ? srcItem : srcItem.name;
                        var item = _this2._configureItemByCommandName(commandName, srcItem, fileItems);
                        if (_this2._isContextMenuItemAvailable(item, fileItems)) {
                            result.push(item)
                        }
                    });
                    return result
                }
            }, {
                key: "_isContextMenuItemAvailable",
                value: function(menuItem, fileItems) {
                    if (!this._isDefaultItem(menuItem.name) || !menuItem._autoHide) {
                        return (0, _common.ensureDefined)(menuItem.visible, true)
                    }
                    if (this._isIsolatedCreationItemCommand(menuItem.name) && fileItems && fileItems.length) {
                        return false
                    }
                    return this._commandManager.isCommandAvailable(menuItem.name, fileItems)
                }
            }, {
                key: "_isIsolatedCreationItemCommand",
                value: function(commandName) {
                    return ("create" === commandName || "upload" === commandName) && this.option("isolateCreationItemCommands")
                }
            }, {
                key: "_isDefaultItem",
                value: function(commandName) {
                    return !!DEFAULT_CONTEXT_MENU_ITEMS[commandName]
                }
            }, {
                key: "_extendAttributes",
                value: function(targetObject, sourceObject, objectKeysArray) {
                    objectKeysArray.forEach(function(objectKey) {
                        (0, _extend.extend)(targetObject, sourceObject[objectKey] ? _defineProperty({}, objectKey, sourceObject[objectKey]) : {})
                    })
                }
            }, {
                key: "_configureItemByCommandName",
                value: function(commandName, item, fileItems) {
                    if (!this._isDefaultItem(commandName)) {
                        var res = (0, _extend.extend)(true, {}, item);
                        res.originalItemData = item;
                        this._addItemClickHandler(commandName, res);
                        if (Array.isArray(item.items)) {
                            res.items = this.createContextMenuItems(fileItems, item.items)
                        }
                        return res
                    }
                    var result = this._createMenuItemByCommandName(commandName);
                    var defaultConfig = DEFAULT_CONTEXT_MENU_ITEMS[commandName];
                    (0, _extend.extend)(result, defaultConfig);
                    result.originalItemData = item;
                    this._extendAttributes(result, item, ["visible", "beginGroup", "text", "icon"]);
                    if (!(0, _type.isDefined)(result.visible)) {
                        result._autoHide = true
                    } else {
                        this._extendAttributes(result, item, ["visible", "disabled"])
                    }
                    if (commandName && !result.name) {
                        (0, _extend.extend)(result, {
                            name: commandName
                        })
                    }
                    return result
                }
            }, {
                key: "_createMenuItemByCommandName",
                value: function(commandName) {
                    var _this$_commandManager = this._commandManager.getCommandByName(commandName),
                        text = _this$_commandManager.text,
                        icon = _this$_commandManager.icon;
                    var menuItem = {
                        name: commandName,
                        text: text,
                        icon: icon
                    };
                    this._addItemClickHandler(commandName, menuItem);
                    return menuItem
                }
            }, {
                key: "_addItemClickHandler",
                value: function(commandName, contextMenuItem) {
                    var _this3 = this;
                    contextMenuItem.onItemClick = function(args) {
                        return _this3._onContextMenuItemClick(commandName, args)
                    }
                }
            }, {
                key: "_onContextMenuItemClick",
                value: function(commandName, args) {
                    var changedArgs = (0, _extend.extend)(true, {}, args);
                    changedArgs.itemData = args.itemData.originalItemData;
                    this._actions.onItemClick(changedArgs);
                    if (this._isDefaultItem(commandName)) {
                        var targetFileItems = this._isIsolatedCreationItemCommand(commandName) ? null : this._targetFileItems;
                        this._commandManager.executeCommand(commandName, targetFileItems)
                    }
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onContextMenuHidden: this._createActionByOption("onContextMenuHidden"),
                        onItemClick: this._createActionByOption("onItemClick")
                    }
                }
            }, {
                key: "_onContextMenuHidden",
                value: function() {
                    this._isVisible = false;
                    this._raiseContextMenuHidden()
                }
            }, {
                key: "_raiseContextMenuHidden",
                value: function() {
                    this._actions.onContextMenuHidden()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerContextMenu.prototype), "_getDefaultOptions", this).call(this), {
                        commandManager: null,
                        onContextMenuHidden: null,
                        onItemClick: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "commandManager":
                            this.repaint();
                            break;
                        case "items":
                            if (this._isVisible) {
                                var items = this.createContextMenuItems(this._targetFileItems);
                                this._contextMenu.option("dataSource", items)
                            }
                            break;
                        case "onItemClick":
                        case "onContextMenuHidden":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerContextMenu.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_commandManager",
                get: function() {
                    return this.option("commandManager")
                }
            }]);
            return FileManagerContextMenu
        }(_ui2.default);
        module.exports = FileManagerContextMenu
    },
    /*!***********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.item_list.details.js ***!
      \***********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ../data_grid/ui.data_grid */ 346);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiFile_manager2 = __webpack_require__( /*! ./ui.file_manager.item_list */ 411);
        var _uiFile_manager3 = _interopRequireDefault(_uiFile_manager2);
        var _uiFile_manager4 = __webpack_require__( /*! ./ui.file_manager.file_actions_button */ 410);
        var _uiFile_manager5 = _interopRequireDefault(_uiFile_manager4);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DETAILS_ITEM_LIST_CLASS = "dx-filemanager-details";
        var FILE_MANAGER_DETAILS_ITEM_THUMBNAIL_CLASS = "dx-filemanager-details-item-thumbnail";
        var FILE_MANAGER_DETAILS_ITEM_NAME_CLASS = "dx-filemanager-details-item-name";
        var FILE_MANAGER_DETAILS_ITEM_NAME_WRAPPER_CLASS = "dx-filemanager-details-item-name-wrapper";
        var FILE_MANAGER_DETAILS_ITEM_IS_DIRECTORY_CLASS = "dx-filemanager-details-item-is-directory";
        var FILE_MANAGER_PARENT_DIRECTORY_ITEM = "dx-filemanager-parent-directory-item";
        var DATA_GRID_DATA_ROW_CLASS = "dx-data-row";
        var DEFAULT_COLUMN_CONFIGS = {
            thumbnail: {
                caption: "",
                calculateSortValue: "isDirectory",
                width: 36,
                alignment: "center",
                cssClass: FILE_MANAGER_DETAILS_ITEM_IS_DIRECTORY_CLASS
            },
            name: {
                caption: _message2.default.format("dxFileManager-listDetailsColumnCaptionName")
            },
            dateModified: {
                caption: _message2.default.format("dxFileManager-listDetailsColumnCaptionDateModified"),
                width: 110,
                hidingPriority: 1
            },
            size: {
                caption: _message2.default.format("dxFileManager-listDetailsColumnCaptionFileSize"),
                width: 90,
                alignment: "right",
                hidingPriority: 0
            },
            isParentFolder: {
                caption: "isParentFolder",
                visible: false,
                sortIndex: 0,
                sortOrder: "asc"
            }
        };
        var FileManagerDetailsItemList = function(_FileManagerItemListB) {
            _inherits(FileManagerDetailsItemList, _FileManagerItemListB);
            var _super = _createSuper(FileManagerDetailsItemList);

            function FileManagerDetailsItemList() {
                _classCallCheck(this, FileManagerDetailsItemList);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerDetailsItemList, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    this._itemCount = 0;
                    this._focusedItem = null;
                    this._hasParentDirectoryItem = false;
                    this._parentDirectoryItemKey = null;
                    this._selectAllCheckBox = null;
                    this._selectAllCheckBoxUpdating = false;
                    this.$element().addClass(FILE_MANAGER_DETAILS_ITEM_LIST_CLASS);
                    this._createFilesView();
                    this._contextMenu.option("onContextMenuHidden", function() {
                        return _this._onContextMenuHidden()
                    });
                    _get(_getPrototypeOf(FileManagerDetailsItemList.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_createFilesView",
                value: function() {
                    var $filesView = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var selectionMode = this._isMultipleSelectionMode() ? "multiple" : "none";
                    this._filesView = this._createComponent($filesView, _ui2.default, {
                        dataSource: this._createDataSource(),
                        hoverStateEnabled: true,
                        selection: {
                            mode: selectionMode,
                            showCheckBoxesMode: this._isDesktop() ? "onClick" : "none"
                        },
                        selectedRowKeys: this.option("selectedItemKeys"),
                        focusedRowKey: this.option("focusedItemKey"),
                        focusedRowEnabled: true,
                        allowColumnResizing: true,
                        scrolling: {
                            mode: "virtual"
                        },
                        sorting: {
                            mode: "single",
                            showSortIndexes: false
                        },
                        showColumnLines: false,
                        showRowLines: false,
                        columnHidingEnabled: true,
                        columns: this._createColumns(),
                        onEditorPreparing: this._onEditorPreparing.bind(this),
                        onRowPrepared: this._onRowPrepared.bind(this),
                        onContextMenuPreparing: this._onContextMenuPreparing.bind(this),
                        onSelectionChanged: this._onFilesViewSelectionChanged.bind(this),
                        onFocusedRowChanged: this._onFocusedRowChanged.bind(this),
                        onOptionChanged: this._onFilesViewOptionChanged.bind(this)
                    })
                }
            }, {
                key: "_createColumns",
                value: function() {
                    var _this2 = this;
                    var columns = this.option("detailColumns");
                    columns = columns.slice(0);
                    columns = columns.map(function(column) {
                        var extendedItem = column;
                        if ((0, _type.isString)(column)) {
                            extendedItem = {
                                dataField: column
                            }
                        }
                        return _this2._getPreparedColumn(extendedItem)
                    });
                    var customizeDetailColumns = this.option("customizeDetailColumns");
                    if ((0, _type.isFunction)(customizeDetailColumns)) {
                        columns = customizeDetailColumns(columns)
                    }
                    columns.push(this._getPreparedColumn({
                        dataField: "isParentFolder"
                    }));
                    columns.forEach(function(column) {
                        return _this2._updateColumnDataField(column)
                    });
                    return columns
                }
            }, {
                key: "_getPreparedColumn",
                value: function(columnOptions) {
                    var result = {};
                    var resultCssClass = "";
                    if (this._isDefaultColumn(columnOptions.dataField)) {
                        var defaultConfig = (0, _extend.extend)(true, {}, DEFAULT_COLUMN_CONFIGS[columnOptions.dataField]);
                        resultCssClass = defaultConfig.cssClass || "";
                        if ("thumbnail" === columnOptions.dataField) {
                            defaultConfig.cellTemplate = this._createThumbnailColumnCell.bind(this);
                            defaultConfig.calculateSortValue = "fileItem.".concat(defaultConfig.calculateSortValue)
                        }
                        if ("name" === columnOptions.dataField) {
                            defaultConfig.cellTemplate = this._createNameColumnCell.bind(this)
                        }
                        if ("size" === columnOptions.dataField) {
                            defaultConfig.calculateCellValue = this._calculateSizeColumnCellValue.bind(this)
                        }(0, _extend.extend)(true, result, defaultConfig)
                    }(0, _uiFile_manager.extendAttributes)(result, columnOptions, ["alignment", "caption", "dataField", "dataType", "hidingPriority", "sortIndex", "sortOrder", "visible", "visibleIndex", "width"]);
                    if (columnOptions.cssClass) {
                        resultCssClass = resultCssClass ? "".concat(resultCssClass, " ").concat(columnOptions.cssClass) : columnOptions.cssClass
                    }
                    if (resultCssClass) {
                        result.cssClass = resultCssClass
                    }
                    return result
                }
            }, {
                key: "_updateColumnDataField",
                value: function(column) {
                    var dataItemSuffix = this._isDefaultColumn(column.dataField) ? "" : "dataItem.";
                    column.dataField = "fileItem." + dataItemSuffix + column.dataField;
                    return column
                }
            }, {
                key: "_isDefaultColumn",
                value: function(columnDataField) {
                    return !!DEFAULT_COLUMN_CONFIGS[columnDataField]
                }
            }, {
                key: "_onFileItemActionButtonClick",
                value: function(_ref) {
                    var component = _ref.component,
                        element = _ref.element,
                        event = _ref.event;
                    event.stopPropagation();
                    var $row = component.$element().closest(this._getItemSelector());
                    var fileItemInfo = $row.data("item");
                    this._selectItem(fileItemInfo);
                    this._showContextMenu(this._getFileItemsForContextMenu(fileItemInfo), element);
                    this._activeFileActionsButton = component;
                    this._activeFileActionsButton.setActive(true)
                }
            }, {
                key: "_onContextMenuHidden",
                value: function() {
                    if (this._activeFileActionsButton) {
                        this._activeFileActionsButton.setActive(false)
                    }
                }
            }, {
                key: "_getItemThumbnailCssClass",
                value: function() {
                    return FILE_MANAGER_DETAILS_ITEM_THUMBNAIL_CLASS
                }
            }, {
                key: "_getItemSelector",
                value: function() {
                    return ".".concat(DATA_GRID_DATA_ROW_CLASS)
                }
            }, {
                key: "_onItemDblClick",
                value: function(e) {
                    var $row = (0, _renderer2.default)(e.currentTarget);
                    var fileItemInfo = $row.data("item");
                    this._raiseSelectedItemOpened(fileItemInfo)
                }
            }, {
                key: "_isAllItemsSelected",
                value: function() {
                    var selectableItemsCount = this._hasParentDirectoryItem ? this._itemCount - 1 : this._itemCount;
                    var selectedRowKeys = this._filesView.option("selectedRowKeys");
                    if (!selectedRowKeys.length) {
                        return false
                    }
                    return selectedRowKeys.length >= selectableItemsCount ? true : void 0
                }
            }, {
                key: "_onEditorPreparing",
                value: function(_ref2) {
                    var _this3 = this;
                    var component = _ref2.component,
                        command = _ref2.command,
                        row = _ref2.row,
                        parentType = _ref2.parentType,
                        editorOptions = _ref2.editorOptions;
                    if (!this._filesView) {
                        this._filesView = component
                    }
                    if ("select" === command && row) {
                        if (this._isParentDirectoryItem(row.data)) {
                            editorOptions.disabled = true
                        }
                    } else {
                        if ("headerRow" === parentType) {
                            editorOptions.onInitialized = function(_ref3) {
                                var component = _ref3.component;
                                _this3._selectAllCheckBox = component
                            };
                            editorOptions.value = this._isAllItemsSelected();
                            editorOptions.onValueChanged = function(args) {
                                return _this3._onSelectAllCheckBoxValueChanged(args)
                            }
                        }
                    }
                }
            }, {
                key: "_onSelectAllCheckBoxValueChanged",
                value: function(_ref4) {
                    var event = _ref4.event,
                        previousValue = _ref4.previousValue,
                        value = _ref4.value;
                    if (!event) {
                        if (previousValue && !this._selectAllCheckBoxUpdating && this._selectAllCheckBox) {
                            this._selectAllCheckBox.option("value", previousValue)
                        }
                        return
                    }
                    if (this._isAllItemsSelected() === value) {
                        return
                    }
                    if (value) {
                        this._filesView.selectAll()
                    } else {
                        this._filesView.deselectAll()
                    }
                    event.preventDefault()
                }
            }, {
                key: "_onRowPrepared",
                value: function(_ref5) {
                    var rowType = _ref5.rowType,
                        rowElement = _ref5.rowElement,
                        data = _ref5.data;
                    if ("data" === rowType) {
                        var $row = (0, _renderer2.default)(rowElement);
                        $row.data("item", data);
                        if (this._isParentDirectoryItem(data)) {
                            $row.addClass(FILE_MANAGER_PARENT_DIRECTORY_ITEM)
                        }
                    }
                }
            }, {
                key: "_onContextMenuPreparing",
                value: function(e) {
                    if (!this._isDesktop()) {
                        return
                    }
                    var fileItems = null;
                    if (e.row && "data" === e.row.rowType) {
                        var item = e.row.data;
                        this._selectItem(item);
                        fileItems = this._getFileItemsForContextMenu(item)
                    }
                    e.items = this._contextMenu.createContextMenuItems(fileItems)
                }
            }, {
                key: "_onFilesViewSelectionChanged",
                value: function(_ref6) {
                    var component = _ref6.component,
                        selectedRowsData = _ref6.selectedRowsData,
                        selectedRowKeys = _ref6.selectedRowKeys,
                        currentSelectedRowKeys = _ref6.currentSelectedRowKeys,
                        currentDeselectedRowKeys = _ref6.currentDeselectedRowKeys;
                    this._filesView = this._filesView || component;
                    if (this._selectAllCheckBox) {
                        this._selectAllCheckBoxUpdating = true;
                        this._selectAllCheckBox.option("value", this._isAllItemsSelected());
                        this._selectAllCheckBoxUpdating = false
                    }
                    var selectedItems = selectedRowsData.map(function(itemInfo) {
                        return itemInfo.fileItem
                    });
                    this._tryRaiseSelectionChanged({
                        selectedItemInfos: selectedRowsData,
                        selectedItems: selectedItems,
                        selectedItemKeys: selectedRowKeys,
                        currentSelectedItemKeys: currentSelectedRowKeys,
                        currentDeselectedItemKeys: currentDeselectedRowKeys
                    })
                }
            }, {
                key: "_onFocusedRowChanged",
                value: function(e) {
                    var _e$row2;
                    if (!this._isMultipleSelectionMode()) {
                        var _e$row;
                        this._selectItemSingleSelection(null === (_e$row = e.row) || void 0 === _e$row ? void 0 : _e$row.data)
                    }
                    var fileSystemItem = (null === (_e$row2 = e.row) || void 0 === _e$row2 ? void 0 : _e$row2.data.fileItem) || null;
                    this._raiseFocusedItemChanged({
                        item: fileSystemItem,
                        itemKey: null === fileSystemItem || void 0 === fileSystemItem ? void 0 : fileSystemItem.key,
                        itemElement: e.rowElement
                    })
                }
            }, {
                key: "_onFilesViewOptionChanged",
                value: function(_ref7) {
                    var fullName = _ref7.fullName;
                    if (fullName.indexOf("sortOrder") > -1) {
                        this._filesView.columnOption("isParentFolder", {
                            sortOrder: "asc",
                            sortIndex: 0
                        })
                    }
                }
            }, {
                key: "_createThumbnailColumnCell",
                value: function(container, cellInfo) {
                    this._getItemThumbnailContainer(cellInfo.data).appendTo(container)
                }
            }, {
                key: "_createNameColumnCell",
                value: function(container, cellInfo) {
                    var _this4 = this;
                    var $button = (0, _renderer2.default)("<div>");
                    var $name = (0, _renderer2.default)("<span>").text(cellInfo.data.fileItem.name).addClass(FILE_MANAGER_DETAILS_ITEM_NAME_CLASS);
                    var $wrapper = (0, _renderer2.default)("<div>").append($name, $button).addClass(FILE_MANAGER_DETAILS_ITEM_NAME_WRAPPER_CLASS);
                    (0, _renderer2.default)(container).append($wrapper);
                    this._createComponent($button, _uiFile_manager5.default, {
                        onClick: function(e) {
                            return _this4._onFileItemActionButtonClick(e)
                        }
                    })
                }
            }, {
                key: "_calculateSizeColumnCellValue",
                value: function(rowData) {
                    return rowData.fileItem.isDirectory ? "" : (0, _uiFile_manager.getDisplayFileSize)(rowData.fileItem.size)
                }
            }, {
                key: "_selectItem",
                value: function(fileItemInfo) {
                    var selectItemFunc = this._isMultipleSelectionMode() ? this._selectItemMultipleSelection : this._selectItemSingleSelection;
                    selectItemFunc.call(this, fileItemInfo)
                }
            }, {
                key: "_deselectItem",
                value: function(item) {
                    this._filesView.deselectRows([item.fileItem.key])
                }
            }, {
                key: "_selectItemSingleSelection",
                value: function(fileItemInfo) {
                    if (!this._focusedItem || !fileItemInfo || this._focusedItem.fileItem.key !== fileItemInfo.fileItem.key) {
                        var oldFocusedItem = this._focusedItem;
                        this._focusedItem = fileItemInfo;
                        var deselectedKeys = [];
                        if (oldFocusedItem) {
                            deselectedKeys.push(oldFocusedItem.fileItem.key)
                        }
                        var selectedItems = [];
                        var selectedKeys = [];
                        if (fileItemInfo) {
                            selectedItems.push(fileItemInfo.fileItem);
                            selectedKeys.push(fileItemInfo.fileItem.key)
                        }
                        this._raiseSelectionChanged({
                            selectedItems: selectedItems,
                            selectedItemKeys: selectedKeys,
                            currentSelectedItemKeys: [].concat(selectedKeys),
                            currentDeselectedItemKeys: deselectedKeys
                        })
                    }
                }
            }, {
                key: "_selectItemMultipleSelection",
                value: function(_ref8) {
                    var fileItem = _ref8.fileItem;
                    if (!this._filesView.isRowSelected(fileItem.key)) {
                        var selectionController = this._filesView.getController("selection");
                        var preserve = selectionController.isSelectionWithCheckboxes();
                        this._filesView.selectRows([fileItem.key], preserve)
                    }
                }
            }, {
                key: "_setSelectedItemKeys",
                value: function(itemKeys) {
                    this._filesView.option("selectedRowKeys", itemKeys)
                }
            }, {
                key: "_setFocusedItemKey",
                value: function(itemKey) {
                    this._filesView.option("focusedRowKey", itemKey)
                }
            }, {
                key: "clearSelection",
                value: function() {
                    if (this._isMultipleSelectionMode()) {
                        this._filesView.clearSelection()
                    } else {
                        this._filesView.option("focusedRowIndex", -1)
                    }
                }
            }, {
                key: "refresh",
                value: function(options) {
                    var actualOptions = {
                        dataSource: this._createDataSource()
                    };
                    if (options && Object.prototype.hasOwnProperty.call(options, "focusedItemKey")) {
                        if ((0, _type.isDefined)(options.focusedItemKey)) {
                            actualOptions.focusedRowKey = options.focusedItemKey
                        } else {
                            actualOptions.focusedRowIndex = -1
                        }
                    }
                    this._filesView.option(actualOptions)
                }
            }, {
                key: "getSelectedItems",
                value: function() {
                    if (this._isMultipleSelectionMode()) {
                        return this._filesView.getSelectedRowsData()
                    }
                    return this._focusedItem && !this._isParentDirectoryItem(this._focusedItem) ? [this._focusedItem] : []
                }
            }]);
            return FileManagerDetailsItemList
        }(_uiFile_manager3.default);
        module.exports = FileManagerDetailsItemList
    },
    /*!**************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.item_list.thumbnails.js ***!
      \**************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _contextmenu = __webpack_require__( /*! ../../events/contextmenu */ 177);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiFile_managerItems_listThumbnails = __webpack_require__( /*! ./ui.file_manager.items_list.thumbnails.list_box */ 762);
        var _uiFile_managerItems_listThumbnails2 = _interopRequireDefault(_uiFile_managerItems_listThumbnails);
        var _uiFile_manager2 = __webpack_require__( /*! ./ui.file_manager.item_list */ 411);
        var _uiFile_manager3 = _interopRequireDefault(_uiFile_manager2);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_THUMBNAILS_ITEM_LIST_CLASS = "dx-filemanager-thumbnails";
        var FILE_MANAGER_THUMBNAILS_ITEM_CLASS = "dx-filemanager-thumbnails-item";
        var FILE_MANAGER_THUMBNAILS_ITEM_THUMBNAIL_CLASS = "dx-filemanager-thumbnails-item-thumbnail";
        var FILE_MANAGER_THUMBNAILS_EVENT_NAMESPACE = "dxFileManager_thumbnails";
        var FileManagerThumbnailsItemList = function(_FileManagerItemListB) {
            _inherits(FileManagerThumbnailsItemList, _FileManagerItemListB);
            var _super = _createSuper(FileManagerThumbnailsItemList);

            function FileManagerThumbnailsItemList() {
                _classCallCheck(this, FileManagerThumbnailsItemList);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerThumbnailsItemList, [{
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileManagerThumbnailsItemList.prototype), "_initMarkup", this).call(this);
                    this.$element().addClass(FILE_MANAGER_THUMBNAILS_ITEM_LIST_CLASS);
                    var contextMenuEvent = (0, _utils.addNamespace)(_contextmenu.name, FILE_MANAGER_THUMBNAILS_EVENT_NAMESPACE);
                    _events_engine2.default.on(this.$element(), contextMenuEvent, this._onContextMenu.bind(this));
                    this._createItemList()
                }
            }, {
                key: "_createItemList",
                value: function() {
                    var selectionMode = this._isMultipleSelectionMode() ? "multiple" : "single";
                    var $itemListContainer = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._itemList = this._createComponent($itemListContainer, _uiFile_managerItems_listThumbnails2.default, {
                        dataSource: this._createDataSource(),
                        selectionMode: selectionMode,
                        selectedItemKeys: this.option("selectedItemKeys"),
                        focusedItemKey: this.option("focusedItemKey"),
                        activeStateEnabled: true,
                        hoverStateEnabled: true,
                        loopItemFocus: false,
                        focusStateEnabled: true,
                        onItemEnterKeyPressed: this._tryOpen.bind(this),
                        itemThumbnailTemplate: this._getItemThumbnailContainer.bind(this),
                        getTooltipText: this._getTooltipText.bind(this),
                        onSelectionChanged: this._onItemListSelectionChanged.bind(this),
                        onFocusedItemChanged: this._onItemListFocusedItemChanged.bind(this)
                    })
                }
            }, {
                key: "_onContextMenu",
                value: function(e) {
                    e.preventDefault();
                    if (!this._isDesktop()) {
                        return
                    }
                    var items = null;
                    var targetItemElement = (0, _renderer2.default)(e.target).closest(this._getItemSelector());
                    if (targetItemElement.length > 0) {
                        var targetItem = this._itemList.getItemByItemElement(targetItemElement);
                        this._itemList.selectItem(targetItem);
                        items = this._getFileItemsForContextMenu(targetItem)
                    }
                    this._showContextMenu(items, e.target, e)
                }
            }, {
                key: "_getItemThumbnailCssClass",
                value: function() {
                    return FILE_MANAGER_THUMBNAILS_ITEM_THUMBNAIL_CLASS
                }
            }, {
                key: "_getItemSelector",
                value: function() {
                    return ".".concat(FILE_MANAGER_THUMBNAILS_ITEM_CLASS)
                }
            }, {
                key: "_getTooltipText",
                value: function(fileItemInfo) {
                    var item = fileItemInfo.fileItem;
                    if (item.tooltipText) {
                        return item.tooltipText
                    }
                    var text = "".concat(item.name, "\r\n");
                    if (!item.isDirectory) {
                        text += "".concat(_message2.default.format("dxFileManager-listThumbnailsTooltipTextSize"), ": ").concat((0, _uiFile_manager.getDisplayFileSize)(item.size), "\r\n")
                    }
                    text += "".concat(_message2.default.format("dxFileManager-listThumbnailsTooltipTextDateModified"), ": ").concat(item.dateModified);
                    return text
                }
            }, {
                key: "_onItemDblClick",
                value: function(e) {
                    var $item = (0, _renderer2.default)(e.currentTarget);
                    var item = this._itemList.getItemByItemElement($item);
                    this._tryOpen(item)
                }
            }, {
                key: "_tryOpen",
                value: function(item) {
                    if (item) {
                        this._raiseSelectedItemOpened(item)
                    }
                }
            }, {
                key: "_getItemsInternal",
                value: function() {
                    return _get(_getPrototypeOf(FileManagerThumbnailsItemList.prototype), "_getItemsInternal", this).call(this).then(function(items) {
                        var deferred = new _deferred.Deferred;
                        setTimeout(function() {
                            return deferred.resolve(items)
                        });
                        return deferred.promise()
                    })
                }
            }, {
                key: "_disableDragging",
                value: function() {
                    return false
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerThumbnailsItemList.prototype), "_getDefaultOptions", this).call(this), {
                        focusStateEnabled: true
                    })
                }
            }, {
                key: "_onItemListSelectionChanged",
                value: function(_ref) {
                    var addedItemKeys = _ref.addedItemKeys,
                        removedItemKeys = _ref.removedItemKeys;
                    var selectedItemInfos = this.getSelectedItems();
                    var selectedItems = selectedItemInfos.map(function(itemInfo) {
                        return itemInfo.fileItem
                    });
                    var selectedItemKeys = selectedItems.map(function(item) {
                        return item.key
                    });
                    this._tryRaiseSelectionChanged({
                        selectedItemInfos: selectedItemInfos,
                        selectedItems: selectedItems,
                        selectedItemKeys: selectedItemKeys,
                        currentSelectedItemKeys: addedItemKeys,
                        currentDeselectedItemKeys: removedItemKeys
                    })
                }
            }, {
                key: "_onItemListFocusedItemChanged",
                value: function(_ref2) {
                    var item = _ref2.item,
                        itemElement = _ref2.itemElement;
                    if (!this._isMultipleSelectionMode()) {
                        this._selectItemSingleSelection(item)
                    }
                    var fileSystemItem = (null === item || void 0 === item ? void 0 : item.fileItem) || null;
                    this._raiseFocusedItemChanged({
                        item: fileSystemItem,
                        itemKey: null === fileSystemItem || void 0 === fileSystemItem ? void 0 : fileSystemItem.key,
                        itemElement: itemElement || void 0
                    })
                }
            }, {
                key: "_setSelectedItemKeys",
                value: function(itemKeys) {
                    this._itemList.option("selectedItemKeys", itemKeys)
                }
            }, {
                key: "_setFocusedItemKey",
                value: function(itemKey) {
                    this._itemList.option("focusedItemKey", itemKey)
                }
            }, {
                key: "refresh",
                value: function(options) {
                    var actualOptions = {
                        dataSource: this._createDataSource()
                    };
                    if (options && Object.prototype.hasOwnProperty.call(options, "focusedItemKey")) {
                        actualOptions.focusedItemKey = options.focusedItemKey
                    }
                    this._itemList.option(actualOptions)
                }
            }, {
                key: "_deselectItem",
                value: function(item) {
                    var itemElement = this._itemList.getItemElementByItem(item);
                    this._itemList.unselectItem(itemElement)
                }
            }, {
                key: "_selectItemSingleSelection",
                value: function(item) {
                    if (item) {
                        this._itemList.selectItem(item)
                    } else {
                        this._itemList.clearSelection()
                    }
                }
            }, {
                key: "clearSelection",
                value: function() {
                    this._itemList.clearSelection()
                }
            }, {
                key: "getSelectedItems",
                value: function() {
                    return this._itemList.getSelectedItems()
                }
            }]);
            return FileManagerThumbnailsItemList
        }(_uiFile_manager3.default);
        module.exports = FileManagerThumbnailsItemList
    },
    /*!************************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.items_list.thumbnails.list_box.js ***!
      \************************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 14);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _hold = __webpack_require__( /*! ../../events/hold */ 95);
        var _hold2 = _interopRequireDefault(_hold);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _bindable_template = __webpack_require__( /*! ../../core/templates/bindable_template */ 59);
        var _ui = __webpack_require__( /*! ../scroll_view/ui.scroll_view */ 227);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiCollection_widget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 52);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _selection = __webpack_require__( /*! ../selection/selection */ 218);
        var _selection2 = _interopRequireDefault(_selection);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_THUMBNAILS_VIEW_PORT_CLASS = "dx-filemanager-thumbnails-view-port";
        var FILE_MANAGER_THUMBNAILS_ITEM_LIST_CONTAINER_CLASS = "dx-filemanager-thumbnails-container";
        var FILE_MANAGER_THUMBNAILS_ITEM_CLASS = "dx-filemanager-thumbnails-item";
        var FILE_MANAGER_THUMBNAILS_ITEM_NAME_CLASS = "dx-filemanager-thumbnails-item-name";
        var FILE_MANAGER_THUMBNAILS_ITEM_SPACER_CLASS = "dx-filemanager-thumbnails-item-spacer";
        var FILE_MANAGER_THUMBNAILS_ITEM_DATA_KEY = "dxFileManagerItemData";
        var FILE_MANAGER_THUMBNAILS_LIST_BOX_NAMESPACE = "dxFileManagerThumbnailsListBox";
        var FILE_MANAGER_THUMBNAILS_LIST_BOX_HOLD_EVENT_NAME = (0, _utils.addNamespace)(_hold2.default.name, FILE_MANAGER_THUMBNAILS_LIST_BOX_NAMESPACE);
        var FileManagerThumbnailListBox = function(_CollectionWidget) {
            _inherits(FileManagerThumbnailListBox, _CollectionWidget);
            var _super = _createSuper(FileManagerThumbnailListBox);

            function FileManagerThumbnailListBox() {
                _classCallCheck(this, FileManagerThumbnailListBox);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerThumbnailListBox, [{
                key: "_initMarkup",
                value: function() {
                    this._initActions();
                    this._lockFocusedItemProcessing = false;
                    this.$element().addClass(FILE_MANAGER_THUMBNAILS_VIEW_PORT_CLASS);
                    this._renderScrollView();
                    this._renderItemsContainer();
                    this._createScrollViewControl();
                    _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_initMarkup", this).call(this);
                    this.onFocusedItemChanged = this._onFocusedItemChanged.bind(this);
                    this._layoutUtils = new ListBoxLayoutUtils(this._scrollView, this.$element(), this._$itemContainer, this.itemElements().first());
                    this._syncFocusedItemKey()
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onItemEnterKeyPressed: this._createActionByOption("onItemEnterKeyPressed"),
                        onFocusedItemChanged: this._createActionByOption("onFocusedItemChanged")
                    }
                }
            }, {
                key: "_initTemplates",
                value: function() {
                    _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_initTemplates", this).call(this);
                    this._itemThumbnailTemplate = this.option("itemThumbnailTemplate");
                    this._getTooltipText = this.option("getTooltipText");
                    this._templateManager.addDefaultTemplates({
                        item: new _bindable_template.BindableTemplate(function($container, data, itemModel) {
                            var $itemElement = this._getDefaultItemTemplate(itemModel, $container);
                            $container.append($itemElement)
                        }.bind(this), ["fileItem"], this.option("integrationOptions.watchMethod"))
                    })
                }
            }, {
                key: "_createScrollViewControl",
                value: function() {
                    if (!this._scrollView) {
                        this._scrollView = this._createComponent(this._$scrollView, _ui2.default, {
                            scrollByContent: true,
                            scrollByThumb: true,
                            useKeyboard: false,
                            showScrollbar: "onHover"
                        })
                    }
                }
            }, {
                key: "_renderScrollView",
                value: function() {
                    if (!this._$scrollView) {
                        this._$scrollView = (0, _renderer2.default)("<div>").appendTo(this.$element())
                    }
                }
            }, {
                key: "_renderItemsContainer",
                value: function() {
                    if (!this._$itemContainer) {
                        this._$itemContainer = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_THUMBNAILS_ITEM_LIST_CONTAINER_CLASS).appendTo(this._$scrollView)
                    }
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_render", this).call(this);
                    this._detachEventHandlers();
                    this._attachEventHandlers()
                }
            }, {
                key: "_clean",
                value: function() {
                    this._detachEventHandlers();
                    _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_supportedKeys",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_supportedKeys", this).call(this), {
                        upArrow: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processArrowKeys(-1, false, e)
                        },
                        downArrow: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processArrowKeys(1, false, e)
                        },
                        home: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processHomeEndKeys(0, true, e)
                        },
                        end: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processHomeEndKeys(this._getItemsLength() - 1, true, e)
                        },
                        pageUp: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processPageChange(true, e)
                        },
                        pageDown: function(e) {
                            this._beforeKeyProcessing(e);
                            this._processPageChange(false, e)
                        },
                        enter: function(e) {
                            this._beforeKeyProcessing(e);
                            this._actions.onItemEnterKeyPressed(this._getFocusedItem())
                        },
                        A: function(e) {
                            this._beforeKeyProcessing(e);
                            if (e.ctrlKey || e.metaKey) {
                                this.selectAll()
                            }
                        }
                    })
                }
            }, {
                key: "_beforeKeyProcessing",
                value: function(e) {
                    e.preventDefault();
                    this._layoutUtils.reset()
                }
            }, {
                key: "_processArrowKeys",
                value: function(offset, horizontal, eventArgs) {
                    var item = this._getFocusedItem();
                    if (item) {
                        if (!horizontal) {
                            var layout = this._layoutUtils.getLayoutModel();
                            if (!layout) {
                                return
                            }
                            offset *= layout.itemPerRowCount
                        }
                        var newItemIndex = this._getIndexByItem(item) + offset;
                        this._focusItemByIndex(newItemIndex, true, eventArgs)
                    }
                }
            }, {
                key: "_processHomeEndKeys",
                value: function(index, scrollToItem, eventArgs) {
                    this._focusItemByIndex(index, scrollToItem, eventArgs)
                }
            }, {
                key: "_processPageChange",
                value: function(pageUp, eventArgs) {
                    var item = this._getFocusedItem();
                    if (!item) {
                        return
                    }
                    var layout = this._layoutUtils.getLayoutModel();
                    if (!layout) {
                        return
                    }
                    var itemLayout = this._layoutUtils.createItemLayoutModel(this._getIndexByItem(item));
                    var rowOffset = pageUp ? layout.rowPerPageRate : -layout.rowPerPageRate;
                    var newRowRate = itemLayout.itemRowIndex - rowOffset;
                    var roundFunc = pageUp ? Math.ceil : Math.floor;
                    var newRowIndex = roundFunc(newRowRate);
                    var newItemIndex = newRowIndex * layout.itemPerRowCount + itemLayout.itemColumnIndex;
                    if (newItemIndex < 0) {
                        newItemIndex = 0
                    } else {
                        if (newItemIndex >= this._getItemsLength()) {
                            newItemIndex = this._getItemsLength() - 1
                        }
                    }
                    this._focusItemByIndex(newItemIndex, true, eventArgs)
                }
            }, {
                key: "_processLongTap",
                value: function(e) {
                    var $targetItem = this._closestItemElement((0, _renderer2.default)(e.target));
                    var itemIndex = this._getIndexByItemElement($targetItem);
                    this._selection.changeItemSelection(itemIndex, {
                        control: true
                    })
                }
            }, {
                key: "_attachEventHandlers",
                value: function() {
                    var _this = this;
                    if ("multiple" === this.option("selectionMode")) {
                        _events_engine2.default.on(this._itemContainer(), FILE_MANAGER_THUMBNAILS_LIST_BOX_HOLD_EVENT_NAME, ".".concat(this._itemContentClass()), function(e) {
                            _this._processLongTap(e);
                            e.stopPropagation()
                        })
                    }
                    _events_engine2.default.on(this._itemContainer(), "mousedown selectstart", function(e) {
                        if (e.shiftKey) {
                            e.preventDefault()
                        }
                    })
                }
            }, {
                key: "_detachEventHandlers",
                value: function() {
                    _events_engine2.default.off(this._itemContainer(), FILE_MANAGER_THUMBNAILS_LIST_BOX_HOLD_EVENT_NAME);
                    _events_engine2.default.off(this._itemContainer(), "mousedown selectstart")
                }
            }, {
                key: "_itemContainer",
                value: function() {
                    return this._$itemContainer
                }
            }, {
                key: "_itemClass",
                value: function() {
                    return FILE_MANAGER_THUMBNAILS_ITEM_CLASS
                }
            }, {
                key: "_itemDataKey",
                value: function() {
                    return FILE_MANAGER_THUMBNAILS_ITEM_DATA_KEY
                }
            }, {
                key: "_getDefaultItemTemplate",
                value: function(fileItemInfo, $itemElement) {
                    $itemElement.attr("title", this._getTooltipText(fileItemInfo));
                    var $itemThumbnail = this._itemThumbnailTemplate(fileItemInfo);
                    var $itemSpacer = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_THUMBNAILS_ITEM_SPACER_CLASS);
                    var $itemName = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_THUMBNAILS_ITEM_NAME_CLASS).text(fileItemInfo.fileItem.name);
                    $itemElement.append($itemThumbnail, $itemSpacer, $itemName)
                }
            }, {
                key: "_itemSelectHandler",
                value: function(e) {
                    var options = {};
                    if ("multiple" === this.option("selectionMode")) {
                        if (!this._isPreserveSelectionMode) {
                            this._isPreserveSelectionMode = e.ctrlKey || e.metaKey || e.shiftKey
                        }
                        options = {
                            control: this._isPreserveSelectionMode,
                            shift: e.shiftKey
                        }
                    }
                    var index = this._getIndexByItemElement(e.currentTarget);
                    this._selection.changeItemSelection(index, options)
                }
            }, {
                key: "_initSelectionModule",
                value: function() {
                    var _this2 = this;
                    _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_initSelectionModule", this).call(this);
                    var options = (0, _extend.extend)(this._selection.options, {
                        selectedKeys: this.option("selectedItemKeys"),
                        onSelectionChanged: function(args) {
                            _this2.option("selectedItems", _this2._getItemsByKeys(args.selectedItemKeys, args.selectedItems));
                            _this2._updateSelectedItems(args)
                        }
                    });
                    this._selection = new _selection2.default(options)
                }
            }, {
                key: "_updateSelectedItems",
                value: function(args) {
                    var _this3 = this;
                    var addedItemKeys = args.addedItemKeys;
                    var removedItemKeys = args.removedItemKeys;
                    if (this._rendered && (addedItemKeys.length || removedItemKeys.length)) {
                        var selectionChangePromise = this._selectionChangePromise;
                        if (!this._rendering) {
                            var addedSelection = [];
                            var normalizedIndex;
                            var removedSelection = [];
                            this._editStrategy.beginCache();
                            for (var i = 0; i < removedItemKeys.length; i++) {
                                normalizedIndex = this._getIndexByKey(removedItemKeys[i]);
                                removedSelection.push(normalizedIndex);
                                this._removeSelection(normalizedIndex)
                            }
                            for (var _i = 0; _i < addedItemKeys.length; _i++) {
                                normalizedIndex = this._getIndexByKey(addedItemKeys[_i]);
                                addedSelection.push(normalizedIndex);
                                this._addSelection(normalizedIndex)
                            }
                            this._editStrategy.endCache();
                            this._updateSelection(addedSelection, removedSelection)
                        }(0, _deferred.when)(selectionChangePromise).done(function() {
                            return _this3._fireSelectionChangeEvent(args)
                        })
                    }
                }
            }, {
                key: "_fireSelectionChangeEvent",
                value: function(args) {
                    this._createActionByOption("onSelectionChanged", {
                        excludeValidators: ["disabled", "readOnly"]
                    })(args)
                }
            }, {
                key: "_updateSelection",
                value: function(addedSelection, removedSelection) {
                    var selectedItemsCount = this.getSelectedItems().length;
                    if (0 === selectedItemsCount) {
                        this._isPreserveSelectionMode = false
                    }
                }
            }, {
                key: "_normalizeSelectedItems",
                value: function() {
                    var newKeys = this._getKeysByItems(this.option("selectedItems"));
                    var oldKeys = this._selection.getSelectedItemKeys();
                    if (!this._compareKeys(oldKeys, newKeys)) {
                        this._selection.setSelection(newKeys)
                    }
                    return (new _deferred.Deferred).resolve().promise()
                }
            }, {
                key: "_focusOutHandler",
                value: function() {}
            }, {
                key: "_getItems",
                value: function() {
                    return this.option("items") || []
                }
            }, {
                key: "_getItemsLength",
                value: function() {
                    return this._getItems().length
                }
            }, {
                key: "_getIndexByItemElement",
                value: function(itemElement) {
                    return this._editStrategy.getNormalizedIndex(itemElement)
                }
            }, {
                key: "_getItemByIndex",
                value: function(index) {
                    return this._getItems()[index]
                }
            }, {
                key: "_getFocusedItem",
                value: function() {
                    return this.getItemByItemElement(this.option("focusedElement"))
                }
            }, {
                key: "_focusItem",
                value: function(item, scrollToItem) {
                    this.option("focusedElement", this.getItemElementByItem(item));
                    if (scrollToItem) {
                        this._layoutUtils.scrollToItem(this._getIndexByItem(item))
                    }
                }
            }, {
                key: "_focusItemByIndex",
                value: function(index, scrollToItem, eventArgs) {
                    if (index >= 0 && index < this._getItemsLength()) {
                        var item = this._getItemByIndex(index);
                        this._focusItem(item, scrollToItem, eventArgs)
                    }
                }
            }, {
                key: "_syncFocusedItemKey",
                value: function() {
                    var _this4 = this;
                    if (!this._syncFocusedItemKeyDeferred) {
                        this._syncFocusedItemKeyDeferred = new _deferred.Deferred
                    }
                    var deferred = this._syncFocusedItemKeyDeferred;
                    if (this._dataSource && this._dataSource.isLoading()) {
                        return deferred.promise()
                    }
                    var focusedItemKey = this.option("focusedItemKey");
                    if ((0, _type.isDefined)(focusedItemKey)) {
                        var items = this.option("items");
                        var focusedItem = (0, _array.find)(items, function(item) {
                            return _this4.keyOf(item) === focusedItemKey
                        });
                        if (focusedItem) {
                            this._focusItem(focusedItem, true);
                            deferred.resolve()
                        } else {
                            this.option("focusedItemKey", void 0);
                            deferred.reject()
                        }
                    } else {
                        deferred.resolve()
                    }
                    this._syncFocusedItemKeyDeferred = null;
                    return deferred.promise()
                }
            }, {
                key: "_onFocusedItemChanged",
                value: function() {
                    var focusedItem = this._getFocusedItem();
                    var newFocusedItemKey = this.keyOf(focusedItem);
                    var oldFocusedItemKey = this.option("focusedItemKey");
                    if (newFocusedItemKey !== oldFocusedItemKey) {
                        this._lockFocusedItemProcessing = true;
                        this.option("focusedItemKey", newFocusedItemKey);
                        this._lockFocusedItemProcessing = false;
                        this._raiseFocusedItemChanged(focusedItem)
                    }
                }
            }, {
                key: "_raiseFocusedItemChanged",
                value: function(focusedItem) {
                    var args = {
                        item: focusedItem,
                        itemElement: this.option("focusedElement")
                    };
                    this._actions.onFocusedItemChanged(args)
                }
            }, {
                key: "_changeItemSelection",
                value: function(item, select) {
                    if (this.isItemSelected(item) === select) {
                        return
                    }
                    var itemElement = this.getItemElementByItem(item);
                    var index = this._getIndexByItemElement(itemElement);
                    this._selection.changeItemSelection(index, {
                        control: this._isPreserveSelectionMode
                    })
                }
            }, {
                key: "_chooseSelectOption",
                value: function() {
                    return "selectedItemKeys"
                }
            }, {
                key: "getSelectedItems",
                value: function() {
                    return this._selection.getSelectedItems()
                }
            }, {
                key: "getItemElementByItem",
                value: function(item) {
                    return this._editStrategy.getItemElement(item)
                }
            }, {
                key: "getItemByItemElement",
                value: function(itemElement) {
                    return this._getItemByIndex(this._getIndexByItemElement(itemElement))
                }
            }, {
                key: "selectAll",
                value: function() {
                    if ("multiple" !== this.option("selectionMode")) {
                        return
                    }
                    this._selection.selectAll();
                    this._isPreserveSelectionMode = true
                }
            }, {
                key: "selectItem",
                value: function(item) {
                    this._changeItemSelection(item, true)
                }
            }, {
                key: "deselectItem",
                value: function(item) {
                    this._changeItemSelection(item, false)
                }
            }, {
                key: "clearSelection",
                value: function() {
                    this._selection.deselectAll()
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var _this5 = this;
                    switch (args.name) {
                        case "items":
                            if (this._layoutUtils) {
                                this._layoutUtils.updateItems(this.itemElements().first())
                            }
                            _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_optionChanged", this).call(this, args);
                            break;
                        case "focusedItemKey":
                            if (this._lockFocusedItemProcessing) {
                                break
                            }
                            if ((0, _type.isDefined)(args.value)) {
                                this._syncFocusedItemKey().done(function() {
                                    var focusedItem = _this5._getFocusedItem();
                                    _this5._raiseFocusedItemChanged(focusedItem)
                                })
                            } else {
                                this.option("focusedElement", null);
                                this._raiseFocusedItemChanged(null)
                            }
                            break;
                        case "onItemEnterKeyPressed":
                        case "onFocusedItemChanged":
                            this._actions[args.name] = this._createActionByOption(args.name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerThumbnailListBox.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return FileManagerThumbnailListBox
        }(_uiCollection_widget2.default);
        var ListBoxLayoutUtils = function() {
            function ListBoxLayoutUtils(scrollView, $viewPort, $itemContainer, $item) {
                _classCallCheck(this, ListBoxLayoutUtils);
                this._layoutModel = null;
                this._scrollView = scrollView;
                this._$viewPort = $viewPort;
                this._$itemContainer = $itemContainer;
                this._$item = $item
            }
            _createClass(ListBoxLayoutUtils, [{
                key: "updateItems",
                value: function($item) {
                    this._$item = $item
                }
            }, {
                key: "reset",
                value: function() {
                    this._layoutModel = null
                }
            }, {
                key: "getLayoutModel",
                value: function() {
                    if (!this._layoutModel) {
                        this._layoutModel = this._createLayoutModel()
                    }
                    return this._layoutModel
                }
            }, {
                key: "_createLayoutModel",
                value: function() {
                    if (!this._$item) {
                        return null
                    }
                    var itemWidth = this._$item.outerWidth(true);
                    if (0 === itemWidth) {
                        return null
                    }
                    var itemHeight = this._$item.outerHeight(true);
                    var viewPortWidth = this._$itemContainer.innerWidth();
                    var viewPortHeight = this._$viewPort.innerHeight();
                    var viewPortScrollTop = this._scrollView.scrollTop();
                    var viewPortScrollBottom = viewPortScrollTop + viewPortHeight;
                    var itemPerRowCount = Math.floor(viewPortWidth / itemWidth);
                    var rowPerPageRate = viewPortHeight / itemHeight;
                    return {
                        itemWidth: itemWidth,
                        itemHeight: itemHeight,
                        viewPortWidth: viewPortWidth,
                        viewPortHeight: viewPortHeight,
                        viewPortScrollTop: viewPortScrollTop,
                        viewPortScrollBottom: viewPortScrollBottom,
                        itemPerRowCount: itemPerRowCount,
                        rowPerPageRate: rowPerPageRate
                    }
                }
            }, {
                key: "createItemLayoutModel",
                value: function(index) {
                    var layout = this.getLayoutModel();
                    if (!layout) {
                        return null
                    }
                    var itemRowIndex = Math.floor(index / layout.itemPerRowCount);
                    var itemColumnIndex = index % layout.itemPerRowCount;
                    var itemTop = itemRowIndex * layout.itemHeight;
                    var itemBottom = itemTop + layout.itemHeight;
                    return {
                        itemRowIndex: itemRowIndex,
                        itemColumnIndex: itemColumnIndex,
                        itemTop: itemTop,
                        itemBottom: itemBottom
                    }
                }
            }, {
                key: "scrollToItem",
                value: function(index) {
                    var layout = this.getLayoutModel();
                    if (!layout) {
                        return
                    }
                    var itemRowIndex = Math.floor(index / layout.itemPerRowCount);
                    var itemTop = itemRowIndex * layout.itemHeight;
                    var itemBottom = itemTop + layout.itemHeight;
                    var newScrollTop = layout.viewPortScrollTop;
                    if (itemTop < layout.viewPortScrollTop) {
                        newScrollTop = itemTop
                    } else {
                        if (itemBottom > layout.viewPortScrollBottom) {
                            newScrollTop = itemBottom - layout.viewPortHeight
                        }
                    }
                    this._scrollView.scrollTo(newScrollTop)
                }
            }]);
            return ListBoxLayoutUtils
        }();
        module.exports = FileManagerThumbnailListBox
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.toolbar.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _toolbar = __webpack_require__( /*! ../toolbar */ 145);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        __webpack_require__( /*! ../drop_down_button */ 320);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_TOOLBAR_CLASS = "dx-filemanager-toolbar";
        var FILE_MANAGER_GENERAL_TOOLBAR_CLASS = "dx-filemanager-general-toolbar";
        var FILE_MANAGER_FILE_TOOLBAR_CLASS = "dx-filemanager-file-toolbar";
        var FILE_MANAGER_TOOLBAR_SEPARATOR_ITEM_CLASS = FILE_MANAGER_TOOLBAR_CLASS + "-separator-item";
        var FILE_MANAGER_TOOLBAR_VIEWMODE_ITEM_CLASS = FILE_MANAGER_TOOLBAR_CLASS + "-viewmode-item";
        var FILE_MANAGER_TOOLBAR_HAS_LARGE_ICON_CLASS = FILE_MANAGER_TOOLBAR_CLASS + "-has-large-icon";
        var FILE_MANAGER_VIEW_SWITCHER_POPUP_CLASS = "dx-filemanager-view-switcher-popup";
        var DEFAULT_ITEM_CONFIGS = {
            showNavPane: {
                location: "before"
            },
            create: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            upload: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            refresh: {
                location: "after",
                showText: "inMenu",
                cssClass: FILE_MANAGER_TOOLBAR_HAS_LARGE_ICON_CLASS,
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            switchView: {
                location: "after"
            },
            download: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            move: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            copy: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            rename: {
                location: "before",
                compactMode: {
                    showText: "inMenu",
                    locateInMenu: "auto"
                }
            },
            "delete": {
                location: "before",
                compactMode: {
                    showText: "inMenu"
                }
            },
            clearSelection: {
                location: "after",
                locateInMenu: "never",
                compactMode: {
                    showText: "inMenu"
                }
            },
            separator: {
                location: "before"
            }
        };
        var ALWAYS_VISIBLE_TOOLBAR_ITEMS = ["separator", "switchView"];
        var REFRESH_ICON_MAP = {
            "default": "dx-filemanager-i dx-filemanager-i-refresh",
            progress: "dx-filemanager-i dx-filemanager-i-progress",
            success: "dx-filemanager-i dx-filemanager-i-done",
            error: "dx-filemanager-i dx-filemanager-i-danger"
        };
        var REFRESH_ITEM_PROGRESS_MESSAGE_DELAY = 500;
        var FileManagerToolbar = function(_Widget) {
            _inherits(FileManagerToolbar, _Widget);
            var _super = _createSuper(FileManagerToolbar);

            function FileManagerToolbar() {
                _classCallCheck(this, FileManagerToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerToolbar, [{
                key: "_initMarkup",
                value: function() {
                    this._commandManager = this.option("commandManager");
                    this._createItemClickedAction();
                    this._generalToolbarVisible = true;
                    this._$viewSwitcherPopup = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_VIEW_SWITCHER_POPUP_CLASS);
                    this._generalToolbar = this._createToolbar(this.option("generalItems"));
                    this._fileToolbar = this._createToolbar(this.option("fileItems"), true);
                    this._$viewSwitcherPopup.appendTo(this.$element());
                    this.$element().addClass(FILE_MANAGER_TOOLBAR_CLASS + " " + FILE_MANAGER_GENERAL_TOOLBAR_CLASS)
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(FileManagerToolbar.prototype), "_render", this).call(this);
                    var toolbar = this._getVisibleToolbar();
                    this._checkCompactMode(toolbar)
                }
            }, {
                key: "_dimensionChanged",
                value: function(dimension) {
                    if (!dimension || "height" !== dimension) {
                        var toolbar = this._getVisibleToolbar();
                        this._checkCompactMode(toolbar)
                    }
                }
            }, {
                key: "_getVisibleToolbar",
                value: function() {
                    return this._generalToolbarVisible ? this._generalToolbar : this._fileToolbar
                }
            }, {
                key: "_createToolbar",
                value: function(items, hidden) {
                    var _this = this;
                    var toolbarItems = this._getPreparedItems(items);
                    var $toolbar = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var result = this._createComponent($toolbar, _toolbar2.default, {
                        items: toolbarItems,
                        visible: !hidden,
                        onItemClick: function(args) {
                            return _this._raiseItemClicked(args)
                        }
                    });
                    result.compactMode = false;
                    return result
                }
            }, {
                key: "_getPreparedItems",
                value: function(items) {
                    var _this2 = this;
                    items = items.map(function(item) {
                        var extendedItem = item;
                        if ((0, _type.isString)(item)) {
                            extendedItem = {
                                name: item
                            }
                        }
                        var commandName = extendedItem.name;
                        var preparedItem = _this2._configureItemByCommandName(commandName, extendedItem);
                        preparedItem.originalItemData = item;
                        if ("separator" !== commandName) {
                            preparedItem.available = _this2._isToolbarItemAvailable(preparedItem);
                            var itemVisible = preparedItem.available;
                            preparedItem.visible = itemVisible
                        }
                        return preparedItem
                    });
                    this._updateSeparatorsVisibility(items);
                    return items
                }
            }, {
                key: "_updateSeparatorsVisibility",
                value: function(items, toolbar) {
                    var _this3 = this;
                    var hasModifications = false;
                    var menuItems = this._getMenuItems(toolbar);
                    var hasItemsBefore = {
                        before: false,
                        center: false,
                        after: false
                    };
                    var itemGroups = {
                        before: this._getItemsInGroup(items, menuItems, "before"),
                        center: this._getItemsInGroup(items, menuItems, "center"),
                        after: this._getItemsInGroup(items, menuItems, "after")
                    };
                    items.forEach(function(item, i) {
                        var itemLocation = item.location;
                        if ("separator" === item.name) {
                            var isSeparatorVisible = hasItemsBefore[itemLocation] && _this3._groupHasItemsAfter(itemGroups[itemLocation]);
                            if (item.visible !== isSeparatorVisible) {
                                hasModifications = true;
                                item.visible = isSeparatorVisible
                            }
                            hasItemsBefore[itemLocation] = false
                        } else {
                            if (!_this3._isItemInMenu(menuItems, item)) {
                                hasItemsBefore[itemLocation] = hasItemsBefore[itemLocation] || item.visible
                            }
                            itemGroups[itemLocation].shift()
                        }
                    });
                    if (toolbar && hasModifications) {
                        toolbar.repaint()
                    }
                    return hasModifications
                }
            }, {
                key: "_getMenuItems",
                value: function(toolbar) {
                    var result = toolbar ? toolbar._getMenuItems() : [];
                    return result.map(function(menuItem) {
                        return menuItem.originalItemData
                    })
                }
            }, {
                key: "_isItemInMenu",
                value: function(menuItems, item) {
                    return !!menuItems.length && "never" !== (0, _common.ensureDefined)(item.locateInMenu, "never") && menuItems.indexOf(item.originalItemData) !== -1
                }
            }, {
                key: "_getItemsInGroup",
                value: function(items, menuItems, groupName) {
                    var _this4 = this;
                    return items.filter(function(item) {
                        return item.location === groupName && !_this4._isItemInMenu(menuItems, item)
                    })
                }
            }, {
                key: "_groupHasItemsAfter",
                value: function(items) {
                    for (var i = 0; i < items.length; i++) {
                        if ("separator" !== items[i].name && items[i].visible) {
                            return true
                        }
                    }
                    return false
                }
            }, {
                key: "_configureItemByCommandName",
                value: function(commandName, item) {
                    var result = {};
                    var command = this._commandManager.getCommandByName(commandName);
                    if (command) {
                        result = this._createCommandItem(command)
                    }
                    switch (commandName) {
                        case "separator":
                            result = this._createSeparatorItem();
                            break;
                        case "switchView":
                            result = this._createViewModeItem()
                    }
                    if (this._isDefaultItem(commandName)) {
                        var defaultConfig = DEFAULT_ITEM_CONFIGS[commandName];
                        (0, _extend.extend)(true, result, defaultConfig);
                        (0, _uiFile_manager.extendAttributes)(result, item, ["visible", "location", "locateInMenu"]);
                        if (!(0, _type.isDefined)(item.visible)) {
                            result._autoHide = true
                        } else {
                            (0, _uiFile_manager.extendAttributes)(result, item, ["disabled"])
                        }(0, _uiFile_manager.extendAttributes)(result.options, item, ["text", "icon"])
                    } else {
                        (0, _extend.extend)(true, result, item);
                        if (!result.widget) {
                            result.widget = "dxButton"
                        }
                        if ("dxButton" === result.widget && !result.compactMode && !result.showText && result.options.icon && result.options.text) {
                            result.compactMode = {
                                showText: "inMenu"
                            }
                        }
                    }
                    if (commandName && !result.name) {
                        (0, _extend.extend)(result, {
                            name: commandName
                        })
                    }
                    result.location = (0, _common.ensureDefined)(result.location, "before");
                    if ("dxButton" === result.widget) {
                        (0, _extend.extend)(true, result, {
                            options: {
                                stylingMode: "text"
                            }
                        })
                    }
                    if ("dxSelectBox" === result.widget) {
                        (0, _extend.extend)(true, result, {
                            options: {
                                stylingMode: "filled"
                            }
                        })
                    }
                    return result
                }
            }, {
                key: "_isDefaultItem",
                value: function(commandName) {
                    return !!DEFAULT_ITEM_CONFIGS[commandName]
                }
            }, {
                key: "_createCommandItem",
                value: function(command) {
                    var _this5 = this;
                    return {
                        widget: "dxButton",
                        options: {
                            text: command.text,
                            commandText: command.text,
                            icon: command.icon,
                            stylingMode: "text",
                            onClick: function(e) {
                                return _this5._executeCommand(command)
                            }
                        }
                    }
                }
            }, {
                key: "_createSeparatorItem",
                value: function() {
                    return {
                        template: function(data, index, element) {
                            (0, _renderer2.default)(element).addClass(FILE_MANAGER_TOOLBAR_SEPARATOR_ITEM_CLASS)
                        }
                    }
                }
            }, {
                key: "_createViewModeItem",
                value: function() {
                    var _this6 = this;
                    var commandItems = ["details", "thumbnails"].map(function(name) {
                        var _this6$_commandManage = _this6._commandManager.getCommandByName(name),
                            text = _this6$_commandManage.text,
                            icon = _this6$_commandManage.icon;
                        return {
                            name: name,
                            text: text,
                            icon: icon
                        }
                    });
                    var selectedIndex = "thumbnails" === this.option("itemViewMode") ? 1 : 0;
                    return {
                        cssClass: FILE_MANAGER_TOOLBAR_VIEWMODE_ITEM_CLASS,
                        widget: "dxDropDownButton",
                        options: {
                            items: commandItems,
                            keyExpr: "name",
                            selectedItemKey: this.option("itemViewMode"),
                            displayExpr: " ",
                            hint: commandItems[selectedIndex].text,
                            stylingMode: "text",
                            showArrowIcon: false,
                            useSelectMode: true,
                            dropDownOptions: {
                                container: this._$viewSwitcherPopup
                            },
                            onItemClick: function(e) {
                                return _this6._executeCommand(e.itemData.name)
                            }
                        }
                    }
                }
            }, {
                key: "_checkCompactMode",
                value: function(toolbar) {
                    if (toolbar.compactMode) {
                        this._toggleCompactMode(toolbar, false)
                    }
                    var toolbarWidth = toolbar.$element().width();
                    var itemsWidth = toolbar._getItemsWidth();
                    var useCompactMode = toolbarWidth < itemsWidth;
                    if (toolbar.compactMode !== useCompactMode) {
                        if (!toolbar.compactMode) {
                            this._toggleCompactMode(toolbar, useCompactMode)
                        }
                        toolbar.compactMode = useCompactMode
                    } else {
                        if (toolbar.compactMode) {
                            this._toggleCompactMode(toolbar, true)
                        }
                    }
                }
            }, {
                key: "_toggleCompactMode",
                value: function(toolbar, useCompactMode) {
                    var _this7 = this;
                    var hasModifications = false;
                    var items = toolbar.option("items");
                    items.forEach(function(item) {
                        if (item.compactMode) {
                            var optionsSource = null;
                            if (useCompactMode) {
                                item.saved = _this7._getCompactModeOptions(item, item.available);
                                optionsSource = item.compactMode
                            } else {
                                optionsSource = item.saved
                            }
                            var options = _this7._getCompactModeOptions(optionsSource, item.available);
                            (0, _extend.extend)(true, item, options);
                            hasModifications = true
                        }
                    });
                    hasModifications = this._updateSeparatorsVisibility(items) || hasModifications;
                    if (hasModifications) {
                        toolbar.repaint()
                    }
                    this._updateSeparatorsVisibility(items, toolbar)
                }
            }, {
                key: "_getCompactModeOptions",
                value: function(_ref, available) {
                    var showText = _ref.showText,
                        locateInMenu = _ref.locateInMenu;
                    return {
                        visible: available,
                        showText: (0, _common.ensureDefined)(showText, "always"),
                        locateInMenu: (0, _common.ensureDefined)(locateInMenu, "never")
                    }
                }
            }, {
                key: "_ensureAvailableCommandsVisible",
                value: function(toolbar, fileItems) {
                    var _this8 = this;
                    var hasModifications = false;
                    var items = toolbar.option("items");
                    items.forEach(function(item) {
                        if ("separator" !== item.name) {
                            var itemVisible = item.available;
                            item.available = _this8._isToolbarItemAvailable(item, fileItems);
                            if (item.available !== itemVisible) {
                                item.visible = item.available;
                                hasModifications = true
                            }
                        }
                    });
                    hasModifications = this._updateSeparatorsVisibility(items) || hasModifications;
                    if (hasModifications) {
                        toolbar.repaint()
                    }
                    this._updateSeparatorsVisibility(items, toolbar)
                }
            }, {
                key: "_fileToolbarHasEffectiveItems",
                value: function(fileItems) {
                    var _this9 = this;
                    var items = this._fileToolbar.option("items");
                    return items.some(function(item) {
                        return _this9._isFileToolbarItemAvailable(item, fileItems)
                    })
                }
            }, {
                key: "_executeCommand",
                value: function(command) {
                    this._commandManager.executeCommand(command)
                }
            }, {
                key: "_isToolbarItemAvailable",
                value: function(toolbarItem, fileItems) {
                    if (!this._isDefaultItem(toolbarItem.name) || !toolbarItem._autoHide) {
                        return (0, _common.ensureDefined)(toolbarItem.visible, true)
                    }
                    if ("refresh" === toolbarItem.name) {
                        return this._generalToolbarVisible || !!this._isRefreshVisibleInFileToolbar
                    }
                    if (ALWAYS_VISIBLE_TOOLBAR_ITEMS.indexOf(toolbarItem.name) > -1) {
                        return true
                    }
                    return this._commandManager.isCommandAvailable(toolbarItem.name, fileItems)
                }
            }, {
                key: "_isFileToolbarItemAvailable",
                value: function(_ref2, fileItems) {
                    var name = _ref2.name,
                        visible = _ref2.visible;
                    return !this._isDefaultItem(name) && (0, _common.ensureDefined)(visible, true) || "clearSelection" !== name && "refresh" !== name && this._commandManager.isCommandAvailable(name, fileItems)
                }
            }, {
                key: "_updateItemInToolbar",
                value: function(toolbar, commandName, options) {
                    toolbar.beginUpdate();
                    var items = toolbar.option("items");
                    for (var i = 0; i < items.length; i++) {
                        var item = items[i];
                        if (item.name === commandName) {
                            toolbar.option("items[".concat(i, "]"), options);
                            break
                        }
                    }
                    toolbar.endUpdate()
                }
            }, {
                key: "_raiseItemClicked",
                value: function(args) {
                    var changedArgs = (0, _extend.extend)(true, {}, args);
                    changedArgs.itemData = args.itemData.originalItemData;
                    this._itemClickedAction(changedArgs)
                }
            }, {
                key: "_createItemClickedAction",
                value: function() {
                    this._itemClickedAction = this._createActionByOption("onItemClick")
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerToolbar.prototype), "_getDefaultOptions", this).call(this), {
                        commandManager: null,
                        generalItems: [],
                        fileItems: [],
                        itemViewMode: "details",
                        onItemClick: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "commandManager":
                        case "itemViewMode":
                        case "generalItems":
                        case "fileItems":
                            this.repaint();
                            break;
                        case "onItemClick":
                            this._itemClickedAction = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerToolbar.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "updateRefreshItem",
                value: function(message, status) {
                    var generalToolbarOptions = null;
                    var text = _message2.default.format("dxFileManager-commandRefresh");
                    var showText = "inMenu";
                    this._isRefreshVisibleInFileToolbar = false;
                    if ("default" === status) {
                        generalToolbarOptions = {
                            options: {
                                icon: REFRESH_ICON_MAP.default
                            }
                        }
                    } else {
                        generalToolbarOptions = {
                            options: {
                                icon: REFRESH_ICON_MAP[status]
                            }
                        };
                        this._isRefreshVisibleInFileToolbar = true;
                        text = message;
                        showText = "always"
                    }
                    var fileToolbarOptions = (0, _extend.extend)({}, generalToolbarOptions, {
                        visible: this._isRefreshVisibleInFileToolbar
                    });
                    this._applyRefreshItemOptions(generalToolbarOptions, fileToolbarOptions);
                    this._refreshItemTextTimeout = this._updateRefreshItemText("progress" === status, text, showText)
                }
            }, {
                key: "_updateRefreshItemText",
                value: function(isDeferredUpdate, text, showText) {
                    var _this10 = this;
                    var options = {
                        showText: showText,
                        options: {
                            text: text
                        }
                    };
                    if (isDeferredUpdate) {
                        return setTimeout(function() {
                            _this10._applyRefreshItemOptions(options);
                            _this10._refreshItemTextTimeout = void 0
                        }, REFRESH_ITEM_PROGRESS_MESSAGE_DELAY)
                    } else {
                        if (this._refreshItemTextTimeout) {
                            clearTimeout(this._refreshItemTextTimeout)
                        }
                        this._applyRefreshItemOptions(options);
                        return
                    }
                }
            }, {
                key: "_applyRefreshItemOptions",
                value: function(generalToolbarOptions, fileToolbarOptions) {
                    if (!fileToolbarOptions) {
                        fileToolbarOptions = (0, _extend.extend)({}, generalToolbarOptions)
                    }
                    this._updateItemInToolbar(this._generalToolbar, "refresh", generalToolbarOptions);
                    this._updateItemInToolbar(this._fileToolbar, "refresh", fileToolbarOptions)
                }
            }, {
                key: "update",
                value: function(fileItems) {
                    fileItems = (0, _common.ensureDefined)(fileItems, []);
                    var showGeneralToolbar = 0 === fileItems.length || !this._fileToolbarHasEffectiveItems(fileItems);
                    if (this._generalToolbarVisible !== showGeneralToolbar) {
                        this._generalToolbar.option("visible", showGeneralToolbar);
                        this._fileToolbar.option("visible", !showGeneralToolbar);
                        this._generalToolbarVisible = showGeneralToolbar;
                        this.$element().toggleClass(FILE_MANAGER_GENERAL_TOOLBAR_CLASS, showGeneralToolbar);
                        this.$element().toggleClass(FILE_MANAGER_FILE_TOOLBAR_CLASS, !showGeneralToolbar)
                    }
                    var toolbar = this._getVisibleToolbar();
                    this._ensureAvailableCommandsVisible(toolbar, fileItems);
                    this._checkCompactMode(toolbar)
                }
            }]);
            return FileManagerToolbar
        }(_ui2.default);
        module.exports = FileManagerToolbar
    },
    /*!******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.notification.js ***!
      \******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.default = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _ui3 = __webpack_require__( /*! ../drawer/ui.drawer */ 235);
        var _ui4 = _interopRequireDefault(_ui3);
        var _uiFile_managerNotification = __webpack_require__( /*! ./ui.file_manager.notification.progress_panel */ 765);
        var _uiFile_managerNotification2 = _interopRequireDefault(_uiFile_managerNotification);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var window = (0, _window.getWindow)();
        var ADAPTIVE_STATE_SCREEN_WIDTH = 1e3;
        var FILE_MANAGER_NOTIFICATION_CLASS = "dx-filemanager-notification";
        var FILE_MANAGER_NOTIFICATION_DRAWER_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-drawer");
        var FILE_MANAGER_NOTIFICATION_DRAWER_PANEL_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_DRAWER_CLASS, "-panel");
        var FILE_MANAGER_NOTIFICATION_POPUP_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-popup");
        var FILE_MANAGER_NOTIFICATION_POPUP_ERROR_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-popup-error");
        var FILE_MANAGER_NOTIFICATION_COMMON_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-common");
        var FILE_MANAGER_NOTIFICATION_SEPARATOR_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-separator");
        var FILE_MANAGER_NOTIFICATION_DETAILS_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-details");
        var FILE_MANAGER_NOTIFICATION_COMMON_NO_ITEM_CLASS = "".concat(FILE_MANAGER_NOTIFICATION_CLASS, "-common-no-item");
        var FileManagerNotificationControl = function(_Widget) {
            _inherits(FileManagerNotificationControl, _Widget);
            var _super = _createSuper(FileManagerNotificationControl);

            function FileManagerNotificationControl() {
                _classCallCheck(this, FileManagerNotificationControl);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerNotificationControl, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(FileManagerNotificationControl.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    this._actionProgressStatus = "default";
                    this._operationInProgressCount = 0;
                    this._failedOperationCount = 0;
                    this._isInAdaptiveState = this._isSmallScreen();
                    var $progressPanelContainer = this.option("progressPanelContainer");
                    var $progressDrawer = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_DRAWER_CLASS).appendTo($progressPanelContainer);
                    (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_DRAWER_PANEL_CLASS).appendTo($progressDrawer);
                    var drawerOptions = (0, _extend.extend)({
                        opened: false,
                        position: "right",
                        template: function(container) {
                            return _this._ensureProgressPanelCreated(container)
                        }
                    }, this._getProgressDrawerAdaptiveOptions());
                    this._progressDrawer = this._createComponent($progressDrawer, _ui4.default, drawerOptions);
                    var $drawerContent = $progressDrawer.find(".".concat(FILE_MANAGER_NOTIFICATION_DRAWER_PANEL_CLASS)).first();
                    var contentRenderer = this.option("contentTemplate");
                    if ((0, _type.isFunction)(contentRenderer)) {
                        contentRenderer($drawerContent)
                    }
                }
            }, {
                key: "tryShowProgressPanel",
                value: function() {
                    var _this2 = this;
                    var promise = new _deferred.Deferred;
                    if ("default" === this._actionProgressStatus || this._isProgressDrawerOpened()) {
                        return promise.resolve().promise()
                    }
                    setTimeout(function() {
                        _this2._progressDrawer.show().done(promise.resolve);
                        _this2._getNotificationPopup().hide();
                        _this2._tryHideActionProgress()
                    });
                    return promise.promise()
                }
            }, {
                key: "addOperation",
                value: function(processingMessage, allowCancel, allowProgressAutoUpdate) {
                    this._operationInProgressCount++;
                    var operationInfo = this._progressPanel.addOperation(processingMessage, allowCancel, allowProgressAutoUpdate);
                    this._updateActionProgress(processingMessage, "progress");
                    return operationInfo
                }
            }, {
                key: "addOperationDetails",
                value: function(info, details, showCloseButton) {
                    this._progressPanel.addOperationDetails(info, details, showCloseButton)
                }
            }, {
                key: "updateOperationItemProgress",
                value: function(operationInfo, itemIndex, itemProgress, commonProgress) {
                    this._progressPanel.updateOperationItemProgress(operationInfo, itemIndex, itemProgress, commonProgress)
                }
            }, {
                key: "completeOperationItem",
                value: function(operationInfo, itemIndex, commonProgress) {
                    this._progressPanel.completeOperationItem(operationInfo, itemIndex, commonProgress)
                }
            }, {
                key: "completeOperation",
                value: function(info, commonText, isError, statusText) {
                    this._operationInProgressCount--;
                    if (isError) {
                        this._failedOperationCount++
                    } else {
                        this._showPopup(commonText)
                    }
                    this._progressPanel.completeOperation(info, commonText, isError, statusText);
                    if (!this._isProgressDrawerOpened() || !this._tryHideActionProgress()) {
                        var status = 0 === this._failedOperationCount ? "success" : "error";
                        this._updateActionProgress("", status)
                    }
                }
            }, {
                key: "completeSingleOperationWithError",
                value: function(operationInfo, errorInfo) {
                    this._progressPanel.completeSingleOperationWithError(operationInfo, errorInfo.detailErrorText);
                    this._notifyError(errorInfo)
                }
            }, {
                key: "addOperationDetailsError",
                value: function(operationInfo, errorInfo) {
                    this._progressPanel.addOperationDetailsError(operationInfo, errorInfo.itemIndex, errorInfo.detailErrorText);
                    this._notifyError(errorInfo)
                }
            }, {
                key: "_hideProgressPanel",
                value: function() {
                    var _this3 = this;
                    setTimeout(function() {
                        return _this3._progressDrawer.hide()
                    })
                }
            }, {
                key: "_tryHideActionProgress",
                value: function() {
                    if (0 === this._operationInProgressCount && 0 === this._failedOperationCount) {
                        this._updateActionProgress("", "default");
                        return true
                    }
                    return false
                }
            }, {
                key: "_updateActionProgress",
                value: function(message, status) {
                    this._actionProgressStatus = status;
                    this._raiseActionProgress(message, status)
                }
            }, {
                key: "_isSmallScreen",
                value: function() {
                    if (!(0, _window.hasWindow)()) {
                        return false
                    }
                    return (0, _renderer2.default)(window).width() <= ADAPTIVE_STATE_SCREEN_WIDTH
                }
            }, {
                key: "_dimensionChanged",
                value: function(dimension) {
                    if (!dimension || "height" !== dimension) {
                        this._checkAdaptiveState()
                    }
                }
            }, {
                key: "_checkAdaptiveState",
                value: function() {
                    var oldState = this._isInAdaptiveState;
                    this._isInAdaptiveState = this._isSmallScreen();
                    if (this._progressDrawer && oldState !== this._isInAdaptiveState) {
                        if (this._progressPanel) {
                            this._progressPanel.$element().detach()
                        }
                        var options = this._getProgressDrawerAdaptiveOptions();
                        this._progressDrawer.option(options)
                    }
                }
            }, {
                key: "_getProgressDrawerAdaptiveOptions",
                value: function() {
                    if (this._isInAdaptiveState) {
                        return {
                            openedStateMode: "overlap",
                            shading: true,
                            closeOnOutsideClick: true
                        }
                    } else {
                        return {
                            openedStateMode: "shrink",
                            shading: false,
                            closeOnOutsideClick: false
                        }
                    }
                }
            }, {
                key: "_ensureProgressPanelCreated",
                value: function(container) {
                    var _this4 = this;
                    if (!this._progressPanel) {
                        var $progressPanelElement = (0, _renderer2.default)("<div>").appendTo(container);
                        this._progressPanel = this._createComponent($progressPanelElement, this._getProgressPanelComponent(), {
                            onOperationClosed: function(_ref) {
                                var info = _ref.info;
                                return _this4._onProgressPanelOperationClosed(info)
                            },
                            onOperationCanceled: function(_ref2) {
                                var info = _ref2.info;
                                return _this4._raiseOperationCanceled(info)
                            },
                            onOperationItemCanceled: function(_ref3) {
                                var item = _ref3.item,
                                    itemIndex = _ref3.itemIndex;
                                return _this4._raiseOperationItemCanceled(item, itemIndex)
                            },
                            onPanelClosed: function() {
                                return _this4._hideProgressPanel()
                            }
                        })
                    } else {
                        this._progressPanel.$element().appendTo(container)
                    }
                }
            }, {
                key: "_getProgressPanelComponent",
                value: function() {
                    return _uiFile_managerNotification2.default
                }
            }, {
                key: "_notifyError",
                value: function(errorInfo) {
                    this._showPopupError(errorInfo);
                    this._updateActionProgress(errorInfo.commonErrorText, "error")
                }
            }, {
                key: "_onProgressPanelOperationClosed",
                value: function(info) {
                    if (info.hasError) {
                        this._failedOperationCount--;
                        this._tryHideActionProgress()
                    }
                }
            }, {
                key: "_isProgressDrawerOpened",
                value: function() {
                    return this._progressDrawer.option("opened")
                }
            }, {
                key: "_showPopup",
                value: function(content, errorMode) {
                    if (this._isProgressDrawerOpened()) {
                        return
                    }
                    this._getNotificationPopup()._wrapper().toggleClass(FILE_MANAGER_NOTIFICATION_POPUP_ERROR_CLASS, !!errorMode);
                    this._getNotificationPopup().option("contentTemplate", content);
                    if (!this._getNotificationPopup().option("visible")) {
                        this._getNotificationPopup().show()
                    }
                }
            }, {
                key: "_showPopupError",
                value: function(errorInfo) {
                    var $content = (0, _renderer2.default)("<div>");
                    var $message = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_COMMON_CLASS).text(errorInfo.commonErrorText);
                    var $separator = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_SEPARATOR_CLASS);
                    (0, _renderer2.default)("<div>").appendTo($separator);
                    var $details = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_DETAILS_CLASS);
                    if (errorInfo.item) {
                        this._progressPanel.createErrorDetailsProgressBox($details, errorInfo.item, errorInfo.detailErrorText)
                    } else {
                        $message.addClass(FILE_MANAGER_NOTIFICATION_COMMON_NO_ITEM_CLASS);
                        this._progressPanel.renderError($details, $separator, errorInfo.detailErrorText)
                    }
                    $content.append($message, $separator, $details);
                    this._showPopup($content, true)
                }
            }, {
                key: "_getNotificationPopup",
                value: function() {
                    if (!this._notificationPopup) {
                        var $popup = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_NOTIFICATION_POPUP_CLASS).appendTo(this.$element());
                        this._notificationPopup = this._createComponent($popup, _popup2.default, {
                            container: this.$element(),
                            width: "auto",
                            height: "auto",
                            showTitle: false,
                            dragEnabled: false,
                            shading: false,
                            visible: false,
                            closeOnOutsideClick: true,
                            animation: {
                                duration: 0
                            },
                            position: {
                                my: "right top",
                                at: "right top",
                                of: this.option("positionTarget"),
                                offset: "-10 -5"
                            }
                        })
                    }
                    return this._notificationPopup
                }
            }, {
                key: "_raiseActionProgress",
                value: function(message, status) {
                    this._actions.onActionProgress({
                        message: message,
                        status: status
                    })
                }
            }, {
                key: "_raiseOperationCanceled",
                value: function(info) {
                    this._actions.onOperationCanceled({
                        info: info
                    })
                }
            }, {
                key: "_raiseOperationItemCanceled",
                value: function(item, index) {
                    this._actions.onOperationItemCanceled({
                        item: item,
                        itemIndex: index
                    })
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onActionProgress: this._createActionByOption("onActionProgress"),
                        onOperationCanceled: this._createActionByOption("onOperationCanceled"),
                        onOperationItemCanceled: this._createActionByOption("onOperationItemCanceled")
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerNotificationControl.prototype), "_getDefaultOptions", this).call(this), {
                        progressPanelContainer: null,
                        contentTemplate: null,
                        onActionProgress: null,
                        onOperationCanceled: null,
                        onOperationItemCanceled: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "progressPanelContainer":
                        case "contentTemplate":
                            break;
                        case "onActionProgress":
                        case "onOperationCanceled":
                        case "onOperationItemCanceled":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerNotificationControl.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return FileManagerNotificationControl
        }(_ui2.default);
        exports.default = FileManagerNotificationControl
    },
    /*!*********************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.notification.progress_panel.js ***!
      \*********************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 3);
        var _icon = __webpack_require__( /*! ../../core/utils/icon */ 53);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _progress_bar = __webpack_require__( /*! ../progress_bar */ 238);
        var _progress_bar2 = _interopRequireDefault(_progress_bar);
        var _button = __webpack_require__( /*! ../button */ 37);
        var _button2 = _interopRequireDefault(_button);
        var _ui3 = __webpack_require__( /*! ../scroll_view/ui.scroll_view */ 227);
        var _ui4 = _interopRequireDefault(_ui3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_PROGRESS_PANEL_CLASS = "dx-filemanager-progress-panel";
        var FILE_MANAGER_PROGRESS_PANEL_CONTAINER_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-container");
        var FILE_MANAGER_PROGRESS_PANEL_TITLE_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-title");
        var FILE_MANAGER_PROGRESS_PANEL_TITLE_TEXT_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-title-text");
        var FILE_MANAGER_PROGRESS_PANEL_CLOSE_BUTTON_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-close-button");
        var FILE_MANAGER_PROGRESS_PANEL_INFOS_CONTAINER_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-infos-container");
        var FILE_MANAGER_PROGRESS_PANEL_SEPARATOR_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-separator");
        var FILE_MANAGER_PROGRESS_PANEL_INFO_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-info");
        var FILE_MANAGER_PROGRESS_PANEL_COMMON_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-common");
        var FILE_MANAGER_PROGRESS_PANEL_INFO_WITH_DETAILS_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-info-with-details");
        var FILE_MANAGER_PROGRESS_PANEL_DETAILS_CLASS = "".concat(FILE_MANAGER_PROGRESS_PANEL_CLASS, "-details");
        var FILE_MANAGER_PROGRESS_BOX_CLASS = "dx-filemanager-progress-box";
        var FILE_MANAGER_PROGRESS_BOX_ERROR_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-error");
        var FILE_MANAGER_PROGRESS_BOX_WITHOUT_CLOSE_BUTTON_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-without-close-button");
        var FILE_MANAGER_PROGRESS_BOX_IMAGE_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-image");
        var FILE_MANAGER_PROGRESS_BOX_WRAPPER_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-wrapper");
        var FILE_MANAGER_PROGRESS_BOX_COMMON_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-common");
        var FILE_MANAGER_PROGRESS_BOX_PROGRESS_BAR_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-progress-bar");
        var FILE_MANAGER_PROGRESS_BOX_CLOSE_BUTTON_CLASS = "".concat(FILE_MANAGER_PROGRESS_BOX_CLASS, "-close-button");
        var DX_CARD_CLASS = "dx-card";
        var FileManagerProgressPanel = function(_Widget) {
            _inherits(FileManagerProgressPanel, _Widget);
            var _super = _createSuper(FileManagerProgressPanel);

            function FileManagerProgressPanel() {
                _classCallCheck(this, FileManagerProgressPanel);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerProgressPanel, [{
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(FileManagerProgressPanel.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    this._operationCount = 0;
                    this.$element().addClass(FILE_MANAGER_PROGRESS_PANEL_CLASS);
                    var $scrollView = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var $container = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_CONTAINER_CLASS).appendTo($scrollView);
                    this._scrollView = this._createComponent($scrollView, _ui4.default, {
                        scrollByContent: true,
                        scrollByThumb: true,
                        showScrollbar: "onScroll"
                    });
                    var $title = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_TITLE_CLASS).appendTo($container);
                    (0, _renderer2.default)("<div>").text(_message2.default.format("dxFileManager-notificationProgressPanelTitle")).addClass(FILE_MANAGER_PROGRESS_PANEL_TITLE_TEXT_CLASS).appendTo($title);
                    var $closeButton = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_CLOSE_BUTTON_CLASS).appendTo($title);
                    this._createComponent($closeButton, _button2.default, {
                        icon: "close",
                        stylingMode: "text",
                        onClick: function() {
                            return _this._raisePanelClosed()
                        }
                    });
                    this._$infosContainer = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_INFOS_CONTAINER_CLASS).appendTo($container);
                    this._renderEmptyListText()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerProgressPanel.prototype), "_getDefaultOptions", this).call(this), {
                        onOperationClosed: null,
                        onOperationCanceled: null,
                        onOperationItemCanceled: null,
                        onPanelClosed: null
                    })
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onOperationClosed: this._createActionByOption("onOperationClosed"),
                        onOperationCanceled: this._createActionByOption("onOperationCanceled"),
                        onOperationItemCanceled: this._createActionByOption("onOperationItemCanceled"),
                        onPanelClosed: this._createActionByOption("onPanelClosed")
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "test":
                            break;
                        case "onOperationClosed":
                        case "onOperationCanceled":
                        case "onOperationItemCanceled":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerProgressPanel.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "addOperation",
                value: function(commonText, showCloseButtonAlways, allowProgressAutoUpdate) {
                    var _this2 = this;
                    if (this._operationCount) {
                        (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_SEPARATOR_CLASS).prependTo(this._$infosContainer)
                    } else {
                        this._$infosContainer.empty()
                    }
                    this._operationCount++;
                    var info = {
                        customCloseHandling: showCloseButtonAlways,
                        allowProgressAutoUpdate: (0, _common.ensureDefined)(allowProgressAutoUpdate, true)
                    };
                    var $info = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_INFO_CLASS).prependTo(this._$infosContainer);
                    info.$info = $info;
                    var $common = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_COMMON_CLASS).appendTo($info);
                    info.common = this._createProgressBox($common, {
                        commonText: commonText,
                        showCloseButton: true,
                        showCloseButtonAlways: showCloseButtonAlways,
                        onCloseButtonClick: function() {
                            return _this2._closeOperation(info)
                        }
                    });
                    return info
                }
            }, {
                key: "addOperationDetails",
                value: function(info, details, showCloseButton) {
                    var _this3 = this;
                    info.$info.addClass(FILE_MANAGER_PROGRESS_PANEL_INFO_WITH_DETAILS_CLASS);
                    var $details = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_PANEL_DETAILS_CLASS).appendTo(info.$info);
                    info.details = details.map(function(itemInfo, index) {
                        itemInfo.info = info;
                        return _this3._createDetailsItem($details, itemInfo, index, false, showCloseButton)
                    })
                }
            }, {
                key: "_createDetailsItem",
                value: function($container, item, itemIndex, skipProgressBox, showCloseButton) {
                    var _this4 = this;
                    var $detailsItem = (0, _renderer2.default)("<div>").appendTo($container);
                    if (itemIndex !== -1) {
                        $detailsItem.addClass(DX_CARD_CLASS)
                    }
                    return this._createProgressBox($detailsItem, {
                        commonText: item.commonText,
                        imageUrl: item.imageUrl,
                        skipProgressBox: skipProgressBox,
                        showCloseButton: showCloseButton,
                        showCloseButtonAlways: showCloseButton,
                        onCloseButtonClick: function() {
                            return _this4._cancelOperationItem(item, itemIndex)
                        }
                    })
                }
            }, {
                key: "completeOperationItem",
                value: function(operationInfo, itemIndex, commonProgress) {
                    if (operationInfo.allowProgressAutoUpdate) {
                        this.updateOperationItemProgress(operationInfo, itemIndex, 100, commonProgress)
                    }
                    this._setCloseButtonVisible(operationInfo.details[itemIndex], false)
                }
            }, {
                key: "updateOperationItemProgress",
                value: function(operationInfo, itemIndex, itemProgress, commonProgress) {
                    operationInfo.common.progressBar.option("value", commonProgress);
                    if (operationInfo.details) {
                        var detailsItem = operationInfo.details[itemIndex];
                        detailsItem.progressBar.option("value", itemProgress)
                    }
                }
            }, {
                key: "completeOperation",
                value: function(info, commonText, isError, statusText) {
                    info.completed = true;
                    info.common.$commonText.text(commonText);
                    if (isError) {
                        this._removeProgressBar(info.common)
                    } else {
                        if (info.allowProgressAutoUpdate) {
                            info.common.progressBar.option("value", 100)
                        }
                    }
                    if (statusText) {
                        this._setProgressBarText(info.common, statusText)
                    }
                    this._setCloseButtonVisible(info.common, true)
                }
            }, {
                key: "completeSingleOperationWithError",
                value: function(info, errorText) {
                    info.completed = true;
                    this._renderOperationError(info.details ? info.details[0] : info.common, errorText);
                    this._setCloseButtonVisible(info.common, true)
                }
            }, {
                key: "addOperationDetailsError",
                value: function(info, index, errorText) {
                    var detailsItem = info.details[index];
                    this._renderOperationError(detailsItem, errorText);
                    this._setCloseButtonVisible(detailsItem, false)
                }
            }, {
                key: "renderError",
                value: function($container, $target, errorText) {
                    (0, _renderer2.default)("<div>").text(errorText).addClass(FILE_MANAGER_PROGRESS_BOX_ERROR_CLASS).appendTo($container)
                }
            }, {
                key: "createErrorDetailsProgressBox",
                value: function($container, item, errorText) {
                    var detailsItem = this._createDetailsItem($container, item, -1, true);
                    this._renderOperationError(detailsItem, errorText)
                }
            }, {
                key: "_renderEmptyListText",
                value: function() {
                    this._$infosContainer.text(_message2.default.format("dxFileManager-notificationProgressPanelEmptyListText"))
                }
            }, {
                key: "_renderOperationError",
                value: function(info, errorText) {
                    this._removeProgressBar(info);
                    this.renderError(info.$wrapper, info.$commonText, errorText)
                }
            }, {
                key: "_removeProgressBar",
                value: function(progressBox) {
                    if (progressBox.progressBar) {
                        progressBox.progressBar.dispose();
                        progressBox.progressBar.$element().remove();
                        progressBox.progressBar = null
                    }
                }
            }, {
                key: "_createProgressBox",
                value: function($container, options) {
                    var _this5 = this;
                    $container.addClass(FILE_MANAGER_PROGRESS_BOX_CLASS);
                    if (!options.showCloseButtonAlways) {
                        $container.addClass(FILE_MANAGER_PROGRESS_BOX_WITHOUT_CLOSE_BUTTON_CLASS)
                    }
                    if (options.imageUrl) {
                        (0, _icon.getImageContainer)(options.imageUrl).addClass(FILE_MANAGER_PROGRESS_BOX_IMAGE_CLASS).appendTo($container)
                    }
                    var $wrapper = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_BOX_WRAPPER_CLASS).appendTo($container);
                    var $commonText = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_BOX_COMMON_CLASS).text(options.commonText).appendTo($wrapper);
                    var progressBar = null;
                    if (!options.skipProgressBox) {
                        var $progressBar = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_BOX_PROGRESS_BAR_CLASS).appendTo($wrapper);
                        progressBar = this._createComponent($progressBar, _progress_bar2.default, {
                            min: 0,
                            max: 100,
                            width: "100%",
                            validationMessageMode: "always",
                            statusFormat: function(ratio, value) {
                                return _this5._getStatusString(ratio, value)
                            }
                        })
                    }
                    var closeButton = null;
                    if (options.showCloseButton) {
                        var $button = (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_PROGRESS_BOX_CLOSE_BUTTON_CLASS).appendTo($container);
                        closeButton = this._createComponent($button, _button2.default, {
                            icon: "dx-filemanager-i dx-filemanager-i-cancel",
                            stylingMode: "text",
                            visible: options.showCloseButtonAlways,
                            onClick: options.onCloseButtonClick
                        })
                    }
                    return {
                        $commonText: $commonText,
                        progressBar: progressBar,
                        $element: $container,
                        $wrapper: $wrapper,
                        closeButton: closeButton
                    }
                }
            }, {
                key: "_setCloseButtonVisible",
                value: function(progressBox, visible) {
                    if (progressBox.closeButton) {
                        progressBox.$element.toggleClass(FILE_MANAGER_PROGRESS_BOX_WITHOUT_CLOSE_BUTTON_CLASS, !visible);
                        progressBox.closeButton.option("visible", visible)
                    }
                }
            }, {
                key: "_setProgressBarText",
                value: function(progressBox, text) {
                    progressBox.progressBar.option("statusFormat", function() {
                        return text
                    })
                }
            }, {
                key: "_closeOperation",
                value: function(info) {
                    var _this6 = this;
                    if (info.customCloseHandling && !info.completed) {
                        this._raiseOperationCanceled(info);
                        this._setCloseButtonVisible(info.common, false);
                        info.details.forEach(function(item) {
                            return _this6._displayClosedOperationItem(item)
                        })
                    } else {
                        this._raiseOperationClosed(info);
                        info.$info.next(".".concat(FILE_MANAGER_PROGRESS_PANEL_SEPARATOR_CLASS)).remove();
                        info.$info.remove();
                        this._operationCount--;
                        if (!this._operationCount) {
                            this._renderEmptyListText()
                        }
                    }
                }
            }, {
                key: "_cancelOperationItem",
                value: function(item, itemIndex) {
                    this._raiseOperationItemCanceled(item, itemIndex);
                    var itemInfo = item.info.details[itemIndex];
                    this._displayClosedOperationItem(itemInfo)
                }
            }, {
                key: "_displayClosedOperationItem",
                value: function(itemInfo) {
                    this._setProgressBarText(itemInfo, _message2.default.format("dxFileManager-notificationProgressPanelOperationCanceled"));
                    this._setCloseButtonVisible(itemInfo, false)
                }
            }, {
                key: "_getStatusString",
                value: function(ratio, value) {
                    return 1 === ratio ? _message2.default.format("Done") : Math.round(100 * ratio) + "%"
                }
            }, {
                key: "_raiseOperationClosed",
                value: function(info) {
                    this._actions.onOperationClosed({
                        info: info
                    })
                }
            }, {
                key: "_raiseOperationCanceled",
                value: function(info) {
                    this._actions.onOperationCanceled({
                        info: info
                    })
                }
            }, {
                key: "_raiseOperationItemCanceled",
                value: function(item, itemIndex) {
                    this._actions.onOperationItemCanceled({
                        item: item,
                        itemIndex: itemIndex
                    })
                }
            }, {
                key: "_raisePanelClosed",
                value: function() {
                    this._actions.onPanelClosed()
                }
            }]);
            return FileManagerProgressPanel
        }(_ui2.default);
        module.exports = FileManagerProgressPanel
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.editing.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 4);
        var _string = __webpack_require__( /*! ../../core/utils/string */ 43);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.dialog_manager */ 767);
        var _uiFile_manager2 = _interopRequireDefault(_uiFile_manager);
        var _uiFile_manager3 = __webpack_require__( /*! ./ui.file_manager.file_uploader */ 771);
        var _uiFile_manager4 = _interopRequireDefault(_uiFile_manager3);
        var _uiFile_manager5 = __webpack_require__( /*! ./ui.file_manager.messages */ 772);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()
        }

        function _nonIterableSpread() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
        }

        function _unsupportedIterableToArray(o, minLen) {
            if (!o) {
                return
            }
            if ("string" === typeof o) {
                return _arrayLikeToArray(o, minLen)
            }
            var n = Object.prototype.toString.call(o).slice(8, -1);
            if ("Object" === n && o.constructor) {
                n = o.constructor.name
            }
            if ("Map" === n || "Set" === n) {
                return Array.from(o)
            }
            if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {
                return _arrayLikeToArray(o, minLen)
            }
        }

        function _iterableToArray(iter) {
            if ("undefined" !== typeof Symbol && Symbol.iterator in Object(iter)) {
                return Array.from(iter)
            }
        }

        function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
                return _arrayLikeToArray(arr)
            }
        }

        function _arrayLikeToArray(arr, len) {
            if (null == len || len > arr.length) {
                len = arr.length
            }
            for (var i = 0, arr2 = new Array(len); i < len; i++) {
                arr2[i] = arr[i]
            }
            return arr2
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FileManagerEditingControl = function(_Widget) {
            _inherits(FileManagerEditingControl, _Widget);
            var _super = _createSuper(FileManagerEditingControl);

            function FileManagerEditingControl() {
                _classCallCheck(this, FileManagerEditingControl);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerEditingControl, [{
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileManagerEditingControl.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    this._controller = this.option("controller");
                    this._controller.on("EditActionStarting", this._onEditActionStarting.bind(this));
                    this._controller.on("EditActionResultAcquired", this._onEditActionResultAcquired.bind(this));
                    this._controller.on("EditActionItemError", this._onEditActionItemError.bind(this));
                    this._controller.on("EditActionError", this._onEditActionError.bind(this));
                    this._controller.on("CompleteEditActionItem", this._onCompleteEditActionItem.bind(this));
                    this._controller.on("CompleteEditAction", this._onCompleteEditAction.bind(this));
                    this._model = this.option("model");
                    this._uploadOperationInfoMap = {};
                    this._dialogManager = new _uiFile_manager2.default(this.$element(), {
                        chooseDirectoryDialog: {
                            provider: this._controller._fileProvider,
                            getDirectories: this._controller.getDirectories.bind(this._controller),
                            getCurrentDirectory: this._controller.getCurrentDirectory.bind(this._controller)
                        },
                        onDialogClosed: this._onDialogClosed.bind(this)
                    });
                    this._fileUploader = this._createFileUploader();
                    this._createMetadataMap()
                }
            }, {
                key: "_initNotificationControl",
                value: function(notificationControl) {
                    var _this = this;
                    this._notificationControl = notificationControl;
                    this._notificationControl.option({
                        onOperationCanceled: function(_ref) {
                            var info = _ref.info;
                            return _this._onCancelUploadSession(info)
                        },
                        onOperationItemCanceled: function(_ref2) {
                            var item = _ref2.item,
                                itemIndex = _ref2.itemIndex;
                            return _this._onCancelFileUpload(item, itemIndex)
                        }
                    })
                }
            }, {
                key: "_getFileUploaderComponent",
                value: function() {
                    return _uiFile_manager4.default
                }
            }, {
                key: "_createFileUploader",
                value: function() {
                    var _this2 = this;
                    var $fileUploader = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    return this._createComponent($fileUploader, this._getFileUploaderComponent(), {
                        getController: this._getFileUploaderController.bind(this),
                        onUploadSessionStarted: function(e) {
                            return _this2._onUploadSessionStarted(e)
                        },
                        onUploadProgress: function(e) {
                            return _this2._onUploadProgress(e)
                        }
                    })
                }
            }, {
                key: "_getFileUploaderController",
                value: function() {
                    var _this3 = this;
                    var uploadDirectory = this._uploadDirectoryInfo && this._uploadDirectoryInfo.fileItem;
                    return {
                        chunkSize: this._controller.getFileUploadChunkSize(),
                        uploadFileChunk: function(fileData, chunksInfo) {
                            return _this3._controller.uploadFileChunk(fileData, chunksInfo, uploadDirectory)
                        },
                        abortFileUpload: function(fileData, chunksInfo) {
                            return _this3._controller.abortFileUpload(fileData, chunksInfo, uploadDirectory)
                        }
                    }
                }
            }, {
                key: "_createMetadataMap",
                value: function() {
                    var _this4 = this;
                    this._metadataMap = {
                        create: {
                            action: function(arg) {
                                return _this4._tryCreate(arg)
                            },
                            affectsAllItems: true,
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingCreateSingleItemProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingCreateSingleItemSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingCreateSingleItemErrorMessage"),
                            commonErrorMessage: _message2.default.format("dxFileManager-editingCreateCommonErrorMessage")
                        },
                        rename: {
                            action: function(arg) {
                                return _this4._tryRename(arg)
                            },
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingRenameSingleItemProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingRenameSingleItemSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingRenameSingleItemErrorMessage"),
                            commonErrorMessage: _message2.default.format("dxFileManager-editingRenameCommonErrorMessage")
                        },
                        "delete": {
                            action: function(arg) {
                                return _this4._tryDelete(arg)
                            },
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingDeleteSingleItemProcessingMessage"),
                            multipleItemsProcessingMessage: _message2.default.format("dxFileManager-editingDeleteMultipleItemsProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingDeleteSingleItemSuccessMessage"),
                            multipleItemsSuccessMessage: _message2.default.format("dxFileManager-editingDeleteMultipleItemsSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingDeleteSingleItemErrorMessage"),
                            multipleItemsErrorMessage: _message2.default.format("dxFileManager-editingDeleteMultipleItemsErrorMessage"),
                            commonErrorMessage: _message2.default.format("dxFileManager-editingDeleteCommonErrorMessage")
                        },
                        move: {
                            action: function(arg) {
                                return _this4._tryMove(arg)
                            },
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingMoveSingleItemProcessingMessage"),
                            multipleItemsProcessingMessage: _message2.default.format("dxFileManager-editingMoveMultipleItemsProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingMoveSingleItemSuccessMessage"),
                            multipleItemsSuccessMessage: _message2.default.format("dxFileManager-editingMoveMultipleItemsSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingMoveSingleItemErrorMessage"),
                            multipleItemsErrorMessage: _message2.default.format("dxFileManager-editingMoveMultipleItemsErrorMessage"),
                            commonErrorMessage: _message2.default.format("dxFileManager-editingMoveCommonErrorMessage")
                        },
                        copy: {
                            action: function(arg) {
                                return _this4._tryCopy(arg)
                            },
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingCopySingleItemProcessingMessage"),
                            multipleItemsProcessingMessage: _message2.default.format("dxFileManager-editingCopyMultipleItemsProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingCopySingleItemSuccessMessage"),
                            multipleItemsSuccessMessage: _message2.default.format("dxFileManager-editingCopyMultipleItemsSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingCopySingleItemErrorMessage"),
                            multipleItemsErrorMessage: _message2.default.format("dxFileManager-editingCopyMultipleItemsErrorMessage"),
                            commonErrorMessage: _message2.default.format("dxFileManager-editingCopyCommonErrorMessage")
                        },
                        upload: {
                            action: function(arg) {
                                return _this4._tryUpload(arg)
                            },
                            allowCancel: true,
                            allowItemProgress: true,
                            singleItemProcessingMessage: _message2.default.format("dxFileManager-editingUploadSingleItemProcessingMessage"),
                            multipleItemsProcessingMessage: _message2.default.format("dxFileManager-editingUploadMultipleItemsProcessingMessage"),
                            singleItemSuccessMessage: _message2.default.format("dxFileManager-editingUploadSingleItemSuccessMessage"),
                            multipleItemsSuccessMessage: _message2.default.format("dxFileManager-editingUploadMultipleItemsSuccessMessage"),
                            singleItemErrorMessage: _message2.default.format("dxFileManager-editingUploadSingleItemErrorMessage"),
                            multipleItemsErrorMessage: _message2.default.format("dxFileManager-editingUploadMultipleItemsErrorMessage"),
                            canceledMessage: _message2.default.format("dxFileManager-editingUploadCanceledMessage")
                        },
                        download: {
                            action: function(arg) {
                                return _this4._download(arg)
                            }
                        },
                        getItemContent: {
                            action: function(arg) {
                                return _this4._getItemContent(arg)
                            }
                        },
                        getItems: {
                            singleItemProcessingMessage: "",
                            singleItemErrorMessage: _message2.default.format("dxFileManager-errorDirectoryOpenFailed"),
                            commonErrorMessage: _message2.default.format("dxFileManager-errorDirectoryOpenFailed")
                        }
                    }
                }
            }, {
                key: "getCommandActions",
                value: function() {
                    var _this5 = this;
                    var result = {};
                    (0, _iterator.each)(this._metadataMap, function(name) {
                        if (Object.prototype.hasOwnProperty.call(_this5._metadataMap, name)) {
                            result[name] = function(arg) {
                                return _this5._executeAction(name, arg)
                            }
                        }
                    });
                    return result
                }
            }, {
                key: "_executeAction",
                value: function(actionName, arg) {
                    var actionMetadata = this._metadataMap[actionName];
                    return actionMetadata ? actionMetadata.action(arg) : null
                }
            }, {
                key: "_onCancelUploadSession",
                value: function(info) {
                    this._fileUploader.cancelUpload(info.uploadSessionId)
                }
            }, {
                key: "_onCancelFileUpload",
                value: function(item, itemIndex) {
                    this._fileUploader.cancelFileUpload(item.info.uploadSessionId, itemIndex)
                }
            }, {
                key: "_onUploadProgress",
                value: function(_ref3) {
                    var sessionId = _ref3.sessionId,
                        fileIndex = _ref3.fileIndex,
                        commonValue = _ref3.commonValue,
                        fileValue = _ref3.fileValue;
                    var operationInfo = this._uploadOperationInfoMap[sessionId];
                    this._notificationControl.updateOperationItemProgress(operationInfo, fileIndex, 100 * fileValue, 100 * commonValue)
                }
            }, {
                key: "_onUploadSessionStarted",
                value: function(_ref4) {
                    var sessionInfo = _ref4.sessionInfo;
                    this._controller.processUploadSession(sessionInfo, this._uploadDirectoryInfo)
                }
            }, {
                key: "_onEditActionStarting",
                value: function(actionInfo) {
                    var actionMetadata = this._metadataMap[actionInfo.name];
                    var context = new FileManagerActionContext(actionMetadata, actionInfo.itemInfos, actionInfo.directory);
                    var operationInfo = this._notificationControl.addOperation(context.processingMessage, actionMetadata.allowCancel, !actionMetadata.allowItemProgress);
                    (0, _extend.extend)(actionInfo.customData, {
                        context: context,
                        operationInfo: operationInfo
                    });
                    if ("upload" === actionInfo.name) {
                        var sessionId = actionInfo.customData.sessionInfo.sessionId;
                        operationInfo.uploadSessionId = sessionId;
                        this._uploadOperationInfoMap[sessionId] = operationInfo
                    }
                }
            }, {
                key: "_onEditActionResultAcquired",
                value: function(actionInfo) {
                    var _this6 = this;
                    var _actionInfo$customDat = actionInfo.customData,
                        context = _actionInfo$customDat.context,
                        operationInfo = _actionInfo$customDat.operationInfo;
                    context.singleRequest = actionInfo.singleRequest;
                    var details = context.itemInfos.map(function(itemInfo) {
                        return _this6._getItemProgressDisplayInfo(itemInfo)
                    });
                    this._notificationControl.addOperationDetails(operationInfo, details, context.actionMetadata.allowCancel)
                }
            }, {
                key: "_onEditActionError",
                value: function(actionInfo, error) {
                    var _actionInfo$customDat2 = actionInfo.customData,
                        context = _actionInfo$customDat2.context,
                        operationInfo = _actionInfo$customDat2.operationInfo;
                    context.singleRequest = actionInfo.singleRequest;
                    this._handleActionError(operationInfo, context, error);
                    this._completeAction(operationInfo, context)
                }
            }, {
                key: "_onEditActionItemError",
                value: function(actionInfo, info) {
                    var _actionInfo$customDat3 = actionInfo.customData,
                        context = _actionInfo$customDat3.context,
                        operationInfo = _actionInfo$customDat3.operationInfo;
                    this._handleActionError(operationInfo, context, info)
                }
            }, {
                key: "_onCompleteEditActionItem",
                value: function(actionInfo, info) {
                    var _actionInfo$customDat4 = actionInfo.customData,
                        context = _actionInfo$customDat4.context,
                        operationInfo = _actionInfo$customDat4.operationInfo;
                    if (!info.result || !info.result.canceled) {
                        context.completeOperationItem(info.index);
                        this._notificationControl.completeOperationItem(operationInfo, info.index, context.commonProgress)
                    }
                }
            }, {
                key: "_onCompleteEditAction",
                value: function(actionInfo) {
                    var _actionInfo$customDat5 = actionInfo.customData,
                        context = _actionInfo$customDat5.context,
                        operationInfo = _actionInfo$customDat5.operationInfo;
                    this._completeAction(operationInfo, context);
                    if ("upload" === actionInfo.name) {
                        delete this._uploadOperationInfoMap[actionInfo.customData.sessionInfo.sessionId]
                    }
                }
            }, {
                key: "_tryCreate",
                value: function(parentDirectories) {
                    var _this7 = this;
                    var parentDirectoryInfo = parentDirectories && parentDirectories[0] || this._getCurrentDirectory();
                    var newDirName = _message2.default.format("dxFileManager-newDirectoryName");
                    return this._showDialog(this._dialogManager.getCreateItemDialog(), newDirName).then(function(_ref5) {
                        var name = _ref5.name;
                        return _this7._controller.createDirectory(parentDirectoryInfo, name)
                    })
                }
            }, {
                key: "_tryRename",
                value: function(itemInfos) {
                    var _this8 = this;
                    var itemInfo = itemInfos && itemInfos[0] || this._model.getMultipleSelectedItems()[0];
                    return this._showDialog(this._dialogManager.getRenameItemDialog(), itemInfo.fileItem.name).then(function(_ref6) {
                        var name = _ref6.name;
                        return _this8._controller.renameItem(itemInfo, name)
                    })
                }
            }, {
                key: "_tryDelete",
                value: function(itemInfos) {
                    var _this9 = this;
                    itemInfos = itemInfos || this._model.getMultipleSelectedItems();
                    var itemName = itemInfos[0].fileItem.name;
                    var itemCount = itemInfos.length;
                    return this._showDialog(this._dialogManager.getDeleteItemDialog(), {
                        itemName: itemName,
                        itemCount: itemCount
                    }).then(function() {
                        return _this9._controller.deleteItems(itemInfos)
                    })
                }
            }, {
                key: "_tryMove",
                value: function(itemInfos) {
                    var _this10 = this;
                    itemInfos = itemInfos || this._model.getMultipleSelectedItems();
                    return this._showDialog(this._dialogManager.getMoveDialog()).then(function(_ref7) {
                        var folder = _ref7.folder;
                        return _this10._controller.moveItems(itemInfos, folder)
                    })
                }
            }, {
                key: "_tryCopy",
                value: function(itemInfos) {
                    var _this11 = this;
                    itemInfos = itemInfos || this._model.getMultipleSelectedItems();
                    return this._showDialog(this._dialogManager.getCopyDialog()).then(function(_ref8) {
                        var folder = _ref8.folder;
                        return _this11._controller.copyItems(itemInfos, folder)
                    })
                }
            }, {
                key: "_tryUpload",
                value: function(destinationFolder) {
                    this._uploadDirectoryInfo = destinationFolder && destinationFolder[0] || this._getCurrentDirectory();
                    this._fileUploader.tryUpload()
                }
            }, {
                key: "_download",
                value: function(itemInfos) {
                    itemInfos = itemInfos || this._model.getMultipleSelectedItems();
                    return this._controller.downloadItems(itemInfos)
                }
            }, {
                key: "_getItemContent",
                value: function(itemInfos) {
                    itemInfos = itemInfos || this._model.getMultipleSelectedItems();
                    return this._controller.getItemContent(itemInfos)
                }
            }, {
                key: "_completeAction",
                value: function(operationInfo, context) {
                    this._notificationControl.completeOperation(operationInfo, context.completionMessage, !context.success, context.statusText);
                    if (context.hasModifiedItems()) {
                        this._raiseOnSuccess(context.onlyFiles)
                    }
                }
            }, {
                key: "_handleActionError",
                value: function(operationInfo, context, errorInfo) {
                    operationInfo.hasError = true;
                    if (context.singleRequest) {
                        this._handleSingleRequestActionError(operationInfo, context, errorInfo)
                    } else {
                        this._handleMultipleRequestActionError(operationInfo, context, errorInfo)
                    }
                }
            }, {
                key: "_handleSingleRequestActionError",
                value: function(operationInfo, context, errorInfo) {
                    var itemInfo = context.getItemForSingleRequestError();
                    var errorText = this._getErrorText(errorInfo, itemInfo);
                    context.processSingleRequestError(errorText);
                    var operationErrorInfo = this._getOperationErrorInfo(context);
                    this._notificationControl.completeSingleOperationWithError(operationInfo, operationErrorInfo);
                    if (context.multipleItems) {
                        this._raiseOnSuccess(context.onlyFiles)
                    }
                }
            }, {
                key: "_handleMultipleRequestActionError",
                value: function(operationInfo, context, errorInfo) {
                    var itemInfo = context.getItemForMultipleRequestError(errorInfo.index);
                    var errorText = this._getErrorText(errorInfo, itemInfo);
                    context.processMultipleRequestError(errorInfo.index, errorText);
                    var operationErrorInfo = this._getOperationErrorInfo(context);
                    this._notificationControl.addOperationDetailsError(operationInfo, operationErrorInfo)
                }
            }, {
                key: "_getOperationErrorInfo",
                value: function(context) {
                    var detailError = context.errorState.currentDetailError;
                    return {
                        commonErrorText: context.errorState.commonErrorText,
                        item: detailError.itemInfo ? this._getItemProgressDisplayInfo(detailError.itemInfo) : null,
                        itemIndex: detailError.itemIndex,
                        detailErrorText: detailError.errorText
                    }
                }
            }, {
                key: "_getErrorText",
                value: function(errorInfo, itemInfo) {
                    var itemName = itemInfo ? itemInfo.fileItem.name : null;
                    var errorText = _uiFile_manager5.FileManagerMessages.get(errorInfo.errorId, itemName);
                    var errorArgs = {
                        fileSystemItem: itemInfo ? itemInfo.fileItem : null,
                        errorCode: errorInfo.errorId,
                        errorText: errorText
                    };
                    this._raiseOnError(errorArgs);
                    return errorArgs.errorText
                }
            }, {
                key: "_getItemProgressDisplayInfo",
                value: function(itemInfo) {
                    return {
                        commonText: itemInfo.fileItem.name,
                        imageUrl: this._getItemThumbnail(itemInfo)
                    }
                }
            }, {
                key: "_showDialog",
                value: function(dialog, dialogArgument) {
                    this._dialogDeferred = new _deferred.Deferred;
                    dialog.show(dialogArgument);
                    return this._dialogDeferred.promise()
                }
            }, {
                key: "_onDialogClosed",
                value: function(e) {
                    var result = e.dialogResult;
                    if (result) {
                        this._dialogDeferred.resolve(result)
                    } else {
                        this._dialogDeferred.reject()
                    }
                }
            }, {
                key: "_getItemThumbnail",
                value: function(item) {
                    var itemThumbnailGetter = this.option("getItemThumbnail");
                    if (!itemThumbnailGetter) {
                        return null
                    }
                    var info = itemThumbnailGetter(item);
                    return info ? info.thumbnail : null
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onSuccess: this._createActionByOption("onSuccess"),
                        onError: this._createActionByOption("onError"),
                        onCreating: this._createActionByOption("onCreating")
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerEditingControl.prototype), "_getDefaultOptions", this).call(this), {
                        model: {
                            getMultipleSelectedItems: null
                        },
                        notificationControl: null,
                        getItemThumbnail: null,
                        onSuccess: null,
                        onError: null,
                        onCreating: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "model":
                            this.repaint();
                            break;
                        case "notificationControl":
                            this._initNotificationControl(args.value);
                            break;
                        case "getItemThumbnail":
                            break;
                        case "onSuccess":
                        case "onError":
                        case "onCreating":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerEditingControl.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_raiseOnSuccess",
                value: function(updatedOnlyFiles) {
                    this._actions.onSuccess({
                        updatedOnlyFiles: updatedOnlyFiles
                    })
                }
            }, {
                key: "_raiseOnError",
                value: function(args) {
                    this._actions.onError(args)
                }
            }, {
                key: "_getCurrentDirectory",
                value: function() {
                    return this._controller.getCurrentDirectory()
                }
            }]);
            return FileManagerEditingControl
        }(_ui2.default);
        var FileManagerActionContext = function() {
            function FileManagerActionContext(actionMetadata, itemInfos, directoryInfo) {
                _classCallCheck(this, FileManagerActionContext);
                this._actionMetadata = actionMetadata;
                this._itemInfos = itemInfos;
                this._onlyFiles = !this._actionMetadata.affectsAllItems && this._itemInfos.every(function(info) {
                    return !info.fileItem.isDirectory
                });
                this._items = this._itemInfos.map(function(itemInfo) {
                    return itemInfo.fileItem
                });
                this._multipleItems = this._items.length > 1;
                this._location = directoryInfo.getDisplayName();
                this._singleRequest = true;
                this._completedItems = [];
                this._commonProgress = 0;
                this._errorState = {
                    failedCount: 0
                }
            }
            _createClass(FileManagerActionContext, [{
                key: "completeOperationItem",
                value: function(itemIndex) {
                    if (this._singleRequest) {
                        this._completedItems = _toConsumableArray(this._items)
                    } else {
                        var item = this._items[itemIndex];
                        this._completedItems.push(item)
                    }
                    if (!this._actionMetadata.allowItemProgress) {
                        this._commonProgress = this._completedItems.length / this._items.length * 100
                    }
                }
            }, {
                key: "processSingleRequestError",
                value: function(errorText) {
                    this._errorState.failedCount = 1;
                    this._errorState.commonErrorText = this._multipleItems ? this._actionMetadata.commonErrorMessage : this._actionMetadata.singleItemErrorMessage;
                    var itemIndex = this._multipleItems ? -1 : 1;
                    var itemInfo = this.getItemForSingleRequestError();
                    this._setCurrentDetailError(itemIndex, itemInfo, errorText)
                }
            }, {
                key: "processMultipleRequestError",
                value: function(itemIndex, errorText) {
                    this._errorState.failedCount++;
                    this._errorState.commonErrorText = this._errorState.failedCount > 1 ? (0, _string.format)(this._actionMetadata.multipleItemsErrorMessage, this._errorState.failedCount) : this._actionMetadata.singleItemErrorMessage;
                    var itemInfo = this.getItemForMultipleRequestError(itemIndex);
                    this._setCurrentDetailError(itemIndex, itemInfo, errorText)
                }
            }, {
                key: "hasModifiedItems",
                value: function() {
                    return this._hasCompletedItems() || this._singleRequest && !this.success && this._multipleItems
                }
            }, {
                key: "getItemForSingleRequestError",
                value: function() {
                    return this._multipleItems ? null : this._itemInfos[0]
                }
            }, {
                key: "getItemForMultipleRequestError",
                value: function(itemIndex) {
                    return this._itemInfos[itemIndex]
                }
            }, {
                key: "_setCurrentDetailError",
                value: function(itemIndex, itemInfo, errorText) {
                    this._errorState.currentDetailError = {
                        itemIndex: itemIndex,
                        itemInfo: itemInfo,
                        errorText: errorText
                    }
                }
            }, {
                key: "_hasCompletedItems",
                value: function() {
                    return this._completedItems.length > 0
                }
            }, {
                key: "actionMetadata",
                get: function() {
                    return this._actionMetadata
                }
            }, {
                key: "itemInfos",
                get: function() {
                    return this._itemInfos
                }
            }, {
                key: "errorState",
                get: function() {
                    return this._errorState
                }
            }, {
                key: "singleRequest",
                get: function() {
                    return this._singleRequest
                },
                set: function(value) {
                    this._singleRequest = value
                }
            }, {
                key: "multipleItems",
                get: function() {
                    return this._multipleItems
                }
            }, {
                key: "onlyFiles",
                get: function() {
                    return this._onlyFiles
                }
            }, {
                key: "processingMessage",
                get: function() {
                    return this._multipleItems ? (0, _string.format)(this._actionMetadata.multipleItemsProcessingMessage, this._items.length, this._location) : (0, _string.format)(this._actionMetadata.singleItemProcessingMessage, this._location)
                }
            }, {
                key: "successMessage",
                get: function() {
                    if (this._hasCompletedItems()) {
                        return this._multipleItems ? (0, _string.format)(this._actionMetadata.multipleItemsSuccessMessage, this._completedItems.length, this._location) : (0, _string.format)(this._actionMetadata.singleItemSuccessMessage, this._location)
                    } else {
                        return this._multipleItems ? (0, _string.format)(this._actionMetadata.multipleItemsErrorMessage, this._items.length) : this._actionMetadata.singleItemErrorMessage
                    }
                }
            }, {
                key: "completionMessage",
                get: function() {
                    return this.success ? this.successMessage : this.errorState.commonErrorText
                }
            }, {
                key: "statusText",
                get: function() {
                    return this.success && !this._hasCompletedItems() ? this._actionMetadata.canceledMessage : void 0
                }
            }, {
                key: "commonProgress",
                get: function() {
                    return this._commonProgress
                }
            }, {
                key: "success",
                get: function() {
                    return !this._errorState.failedCount
                }
            }]);
            return FileManagerActionContext
        }();
        module.exports = FileManagerEditingControl
    },
    /*!********************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.dialog_manager.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiFile_managerDialog = __webpack_require__( /*! ./ui.file_manager.dialog.name_editor */ 768);
        var _uiFile_managerDialog2 = _interopRequireDefault(_uiFile_managerDialog);
        var _uiFile_managerDialog3 = __webpack_require__( /*! ./ui.file_manager.dialog.folder_chooser */ 769);
        var _uiFile_managerDialog4 = _interopRequireDefault(_uiFile_managerDialog3);
        var _uiFile_managerDialog5 = __webpack_require__( /*! ./ui.file_manager.dialog.delete_item */ 770);
        var _uiFile_managerDialog6 = _interopRequireDefault(_uiFile_managerDialog5);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var FileManagerDialogManager = function() {
            function FileManagerDialogManager($element, options) {
                _classCallCheck(this, FileManagerDialogManager);
                this._$element = $element;
                this._options = options;
                var $chooseFolderDialog = (0, _renderer2.default)("<div>").appendTo(this._$element);
                this._chooseDirectoryDialog = new _uiFile_managerDialog4.default($chooseFolderDialog, (0, _extend.extend)(this._options.chooseDirectoryDialog, {
                    onClosed: this._options.onDialogClosed
                }));
                var $renameDialog = (0, _renderer2.default)("<div>").appendTo(this._$element);
                this._renameItemDialog = new _uiFile_managerDialog2.default($renameDialog, {
                    title: _message2.default.format("dxFileManager-dialogRenameItemTitle"),
                    buttonText: _message2.default.format("dxFileManager-dialogRenameItemButtonText"),
                    onClosed: this._options.onDialogClosed
                });
                var $createDialog = (0, _renderer2.default)("<div>").appendTo(this._$element);
                this._createItemDialog = new _uiFile_managerDialog2.default($createDialog, {
                    title: _message2.default.format("dxFileManager-dialogCreateDirectoryTitle"),
                    buttonText: _message2.default.format("dxFileManager-dialogCreateDirectoryButtonText"),
                    onClosed: this._options.onDialogClosed
                });
                var $deleteItemDialog = (0, _renderer2.default)("<div>").appendTo(this._$element);
                this._deleteItemDialog = new _uiFile_managerDialog6.default($deleteItemDialog, {
                    onClosed: this._options.onDialogClosed
                })
            }
            _createClass(FileManagerDialogManager, [{
                key: "getCopyDialog",
                value: function() {
                    this._chooseDirectoryDialog.switchToCopyDialog();
                    return this._chooseDirectoryDialog
                }
            }, {
                key: "getMoveDialog",
                value: function() {
                    this._chooseDirectoryDialog.switchToMoveDialog();
                    return this._chooseDirectoryDialog
                }
            }, {
                key: "getRenameItemDialog",
                value: function() {
                    return this._renameItemDialog
                }
            }, {
                key: "getCreateItemDialog",
                value: function() {
                    return this._createItemDialog
                }
            }, {
                key: "getDeleteItemDialog",
                value: function() {
                    return this._deleteItemDialog
                }
            }]);
            return FileManagerDialogManager
        }();
        module.exports = FileManagerDialogManager
    },
    /*!************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.dialog.name_editor.js ***!
      \************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _text_box = __webpack_require__( /*! ../text_box */ 88);
        var _text_box2 = _interopRequireDefault(_text_box);
        var _uiFile_managerDialog = __webpack_require__( /*! ./ui.file_manager.dialog.js */ 253);
        var _uiFile_managerDialog2 = _interopRequireDefault(_uiFile_managerDialog);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DIALOG_NAME_EDITOR = "dx-filemanager-dialog-name-editor";
        var FILE_MANAGER_DIALOG_NAME_EDITOR_POPUP = "dx-filemanager-dialog-name-editor-popup";
        var FileManagerNameEditorDialog = function(_FileManagerDialogBas) {
            _inherits(FileManagerNameEditorDialog, _FileManagerDialogBas);
            var _super = _createSuper(FileManagerNameEditorDialog);

            function FileManagerNameEditorDialog() {
                _classCallCheck(this, FileManagerNameEditorDialog);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerNameEditorDialog, [{
                key: "show",
                value: function(name) {
                    name = name || "";
                    if (this._nameTextBox) {
                        this._nameTextBox.option("value", name)
                    } else {
                        this._initialNameValue = name
                    }
                    _get(_getPrototypeOf(FileManagerNameEditorDialog.prototype), "show", this).call(this)
                }
            }, {
                key: "_onPopupShown",
                value: function() {
                    if (!this._nameTextBox) {
                        return
                    }
                    var $textBoxInput = this._nameTextBox._input();
                    $textBoxInput.length && $textBoxInput[0].select();
                    this._nameTextBox.focus()
                }
            }, {
                key: "_getDialogOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerNameEditorDialog.prototype), "_getDialogOptions", this).call(this), {
                        title: this.option("title"),
                        buttonText: this.option("buttonText"),
                        contentCssClass: FILE_MANAGER_DIALOG_NAME_EDITOR,
                        popupCssClass: FILE_MANAGER_DIALOG_NAME_EDITOR_POPUP
                    })
                }
            }, {
                key: "_createContentTemplate",
                value: function(element) {
                    _get(_getPrototypeOf(FileManagerNameEditorDialog.prototype), "_createContentTemplate", this).call(this, element);
                    this._nameTextBox = this._createComponent((0, _renderer2.default)("<div>"), _text_box2.default, {
                        value: this._initialNameValue,
                        onEnterKey: this._applyDialogChanges.bind(this)
                    });
                    this._$contentElement.append(this._nameTextBox.$element())
                }
            }, {
                key: "_getDialogResult",
                value: function() {
                    var nameValue = this._nameTextBox.option("value");
                    return nameValue ? {
                        name: nameValue
                    } : null
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerNameEditorDialog.prototype), "_getDefaultOptions", this).call(this), {
                        title: "",
                        buttonText: ""
                    })
                }
            }]);
            return FileManagerNameEditorDialog
        }(_uiFile_managerDialog2.default);
        module.exports = FileManagerNameEditorDialog
    },
    /*!***************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.dialog.folder_chooser.js ***!
      \***************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiFile_managerDialog = __webpack_require__( /*! ./ui.file_manager.dialog.js */ 253);
        var _uiFile_managerDialog2 = _interopRequireDefault(_uiFile_managerDialog);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.files_tree_view */ 409);
        var _uiFile_manager2 = _interopRequireDefault(_uiFile_manager);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DIALOG_FOLDER_CHOOSER = "dx-filemanager-dialog-folder-chooser";
        var FILE_MANAGER_DIALOG_FOLDER_CHOOSER_POPUP = "dx-filemanager-dialog-folder-chooser-popup";
        var FileManagerFolderChooserDialog = function(_FileManagerDialogBas) {
            _inherits(FileManagerFolderChooserDialog, _FileManagerDialogBas);
            var _super = _createSuper(FileManagerFolderChooserDialog);

            function FileManagerFolderChooserDialog() {
                _classCallCheck(this, FileManagerFolderChooserDialog);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerFolderChooserDialog, [{
                key: "show",
                value: function() {
                    this._filesTreeView && this._filesTreeView.refresh();
                    _get(_getPrototypeOf(FileManagerFolderChooserDialog.prototype), "show", this).call(this)
                }
            }, {
                key: "switchToCopyDialog",
                value: function() {
                    this._setTitle(_message2.default.format("dxFileManager-dialogDirectoryChooserCopyTitle"));
                    this._setButtonText(_message2.default.format("dxFileManager-dialogDirectoryChooserCopyButtonText"))
                }
            }, {
                key: "switchToMoveDialog",
                value: function() {
                    this._setTitle(_message2.default.format("dxFileManager-dialogDirectoryChooserMoveTitle"));
                    this._setButtonText(_message2.default.format("dxFileManager-dialogDirectoryChooserMoveButtonText"))
                }
            }, {
                key: "_getDialogOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerFolderChooserDialog.prototype), "_getDialogOptions", this).call(this), {
                        contentCssClass: FILE_MANAGER_DIALOG_FOLDER_CHOOSER,
                        popupCssClass: FILE_MANAGER_DIALOG_FOLDER_CHOOSER_POPUP
                    })
                }
            }, {
                key: "_createContentTemplate",
                value: function(element) {
                    _get(_getPrototypeOf(FileManagerFolderChooserDialog.prototype), "_createContentTemplate", this).call(this, element);
                    this._filesTreeView = this._createComponent((0, _renderer2.default)("<div>"), _uiFile_manager2.default, {
                        getDirectories: this.option("getDirectories"),
                        getCurrentDirectory: this._getDialogSelectedDirectory.bind(this),
                        onDirectoryClick: this._onFilesTreeViewDirectoryClick.bind(this)
                    });
                    this._$contentElement.append(this._filesTreeView.$element())
                }
            }, {
                key: "_getDialogResult",
                value: function() {
                    return {
                        folder: this._getDialogSelectedDirectory()
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerFolderChooserDialog.prototype), "_getDefaultOptions", this).call(this), {
                        getItems: null
                    })
                }
            }, {
                key: "_getDialogSelectedDirectory",
                value: function() {
                    return this._selectedDirectoryInfo || this.option("getCurrentDirectory")()
                }
            }, {
                key: "_onFilesTreeViewDirectoryClick",
                value: function(_ref) {
                    var itemData = _ref.itemData;
                    this._selectedDirectoryInfo = itemData;
                    this._filesTreeView.updateCurrentDirectory()
                }
            }]);
            return FileManagerFolderChooserDialog
        }(_uiFile_managerDialog2.default);
        module.exports = FileManagerFolderChooserDialog
    },
    /*!************************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.dialog.delete_item.js ***!
      \************************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _uiFile_managerDialog = __webpack_require__( /*! ./ui.file_manager.dialog.js */ 253);
        var _uiFile_managerDialog2 = _interopRequireDefault(_uiFile_managerDialog);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_DIALOG_DELETE_ITEM = "dx-filemanager-dialog-delete-item";
        var FILE_MANAGER_DIALOG_DELETE_ITEM_POPUP = "dx-filemanager-dialog-delete-item-popup";
        var FileManagerDeleteItemDialog = function(_FileManagerDialogBas) {
            _inherits(FileManagerDeleteItemDialog, _FileManagerDialogBas);
            var _super = _createSuper(FileManagerDeleteItemDialog);

            function FileManagerDeleteItemDialog() {
                _classCallCheck(this, FileManagerDeleteItemDialog);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerDeleteItemDialog, [{
                key: "show",
                value: function(_ref) {
                    var itemName = _ref.itemName,
                        itemCount = _ref.itemCount;
                    var text = 1 === itemCount ? _message2.default.format("dxFileManager-dialogDeleteItemSingleItemConfirmation", itemName) : _message2.default.format("dxFileManager-dialogDeleteItemMultipleItemsConfirmation", itemCount);
                    if (this._$text) {
                        this._$text.text(text)
                    } else {
                        this._initialText = text
                    }
                    _get(_getPrototypeOf(FileManagerDeleteItemDialog.prototype), "show", this).call(this)
                }
            }, {
                key: "_getDialogOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerDeleteItemDialog.prototype), "_getDialogOptions", this).call(this), {
                        title: _message2.default.format("dxFileManager-dialogDeleteItemTitle"),
                        buttonText: _message2.default.format("dxFileManager-dialogDeleteItemButtonText"),
                        contentCssClass: FILE_MANAGER_DIALOG_DELETE_ITEM,
                        popupCssClass: FILE_MANAGER_DIALOG_DELETE_ITEM_POPUP
                    })
                }
            }, {
                key: "_createContentTemplate",
                value: function(element) {
                    _get(_getPrototypeOf(FileManagerDeleteItemDialog.prototype), "_createContentTemplate", this).call(this, element);
                    this._$text = (0, _renderer2.default)("<div>").text(this._initialText).appendTo(this._$contentElement)
                }
            }, {
                key: "_getDialogResult",
                value: function() {
                    return {}
                }
            }]);
            return FileManagerDeleteItemDialog
        }(_uiFile_managerDialog2.default);
        module.exports = FileManagerDeleteItemDialog
    },
    /*!*******************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.file_uploader.js ***!
      \*******************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _guid = __webpack_require__( /*! ../../core/guid */ 36);
        var _guid2 = _interopRequireDefault(_guid);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _file_uploader = __webpack_require__( /*! ../file_uploader */ 237);
        var _file_uploader2 = _interopRequireDefault(_file_uploader);
        var _uiFile_manager = __webpack_require__( /*! ./ui.file_manager.common */ 149);
        var _uiFile_manager2 = _interopRequireDefault(_uiFile_manager);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_FILE_UPLOADER_CLASS = "dx-filemanager-fileuploader";
        var FileManagerFileUploader = function(_Widget) {
            _inherits(FileManagerFileUploader, _Widget);
            var _super = _createSuper(FileManagerFileUploader);

            function FileManagerFileUploader() {
                _classCallCheck(this, FileManagerFileUploader);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerFileUploader, [{
                key: "_initMarkup",
                value: function() {
                    this._initActions();
                    this.$element().addClass(FILE_MANAGER_FILE_UPLOADER_CLASS);
                    this._uploaderInfos = [];
                    this._createInternalFileUploader();
                    _get(_getPrototypeOf(FileManagerFileUploader.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_createInternalFileUploader",
                value: function() {
                    var _this = this;
                    var chunkSize = this._getController().chunkSize;
                    var $fileUploader = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var fileUploader = this._createComponent($fileUploader, _file_uploader2.default, {
                        name: "file",
                        multiple: true,
                        showFileList: false,
                        activeStateEnabled: false,
                        focusStateEnabled: false,
                        hoverStateEnabled: false,
                        labelText: "",
                        readyToUploadMessage: "",
                        accept: "*",
                        chunkSize: chunkSize,
                        onValueChanged: function(e) {
                            return _this._onFileUploaderValueChanged(e)
                        },
                        onProgress: function(e) {
                            return _this._onFileUploaderProgress(e)
                        },
                        onUploaded: function(e) {
                            return _this._onFileUploaderUploaded(e)
                        },
                        onUploadAborted: function(e) {
                            return _this._onFileUploaderUploadAborted(e)
                        },
                        onUploadError: function(e) {
                            return _this._onFileUploaderUploadError(e)
                        }
                    });
                    fileUploader.option({
                        uploadChunk: function(file, chunksData) {
                            return _this._fileUploaderUploadChunk(fileUploader, file, chunksData)
                        },
                        abortUpload: function(file, chunksData) {
                            return _this._fileUploaderAbortUpload(fileUploader, file, chunksData)
                        }
                    });
                    var uploaderInfo = {
                        fileUploader: fileUploader
                    };
                    this._uploaderInfos.push(uploaderInfo)
                }
            }, {
                key: "tryUpload",
                value: function() {
                    var info = this._findAvailableUploaderInfo();
                    if (info) {
                        info.fileUploader._selectButtonClickHandler()
                    }
                }
            }, {
                key: "cancelUpload",
                value: function(sessionId) {
                    this._cancelUpload(sessionId)
                }
            }, {
                key: "cancelFileUpload",
                value: function(sessionId, fileIndex) {
                    this._cancelUpload(sessionId, fileIndex)
                }
            }, {
                key: "_cancelUpload",
                value: function(sessionId, fileIndex) {
                    var _this$_findUploaderIn = this._findUploaderInfoBySessionId(sessionId),
                        fileUploader = _this$_findUploaderIn.fileUploader;
                    var files = (0, _type.isDefined)(fileIndex) ? [fileUploader._files[fileIndex]] : fileUploader._files;
                    fileUploader._preventFilesUploading(files)
                }
            }, {
                key: "_fileUploaderUploadChunk",
                value: function(fileUploader, file, chunksInfo) {
                    var _this$_findSessionByF = this._findSessionByFile(fileUploader, file),
                        session = _this$_findSessionByF.session,
                        fileIndex = _this$_findSessionByF.fileIndex;
                    var controller = session.controller;
                    chunksInfo.fileIndex = fileIndex;
                    return controller.uploadFileChunk(file, chunksInfo)
                }
            }, {
                key: "_fileUploaderAbortUpload",
                value: function(fileUploader, file, chunksInfo) {
                    var _this$_findSessionByF2 = this._findSessionByFile(fileUploader, file),
                        session = _this$_findSessionByF2.session,
                        fileIndex = _this$_findSessionByF2.fileIndex;
                    var controller = session.controller;
                    chunksInfo.fileIndex = fileIndex;
                    return controller.abortFileUpload(file, chunksInfo)
                }
            }, {
                key: "_onFileUploaderValueChanged",
                value: function(_ref) {
                    var _this2 = this;
                    var component = _ref.component,
                        value = _ref.value;
                    if (0 === value.length) {
                        return
                    }
                    var files = value.slice();
                    var uploaderInfo = this._findUploaderInfo(component);
                    this._uploadFiles(uploaderInfo, files);
                    setTimeout(function() {
                        if (!_this2._findAvailableUploaderInfo()) {
                            _this2._createInternalFileUploader()
                        }
                    })
                }
            }, {
                key: "_onFileUploaderProgress",
                value: function(_ref2) {
                    var component = _ref2.component,
                        file = _ref2.file,
                        bytesLoaded = _ref2.bytesLoaded,
                        bytesTotal = _ref2.bytesTotal;
                    var _this$_findSessionByF3 = this._findSessionByFile(component, file),
                        session = _this$_findSessionByF3.session,
                        fileIndex = _this$_findSessionByF3.fileIndex;
                    var fileValue = 0 !== bytesTotal ? bytesLoaded / bytesTotal : 1;
                    var commonValue = component.option("progress") / 100;
                    var args = {
                        sessionId: session.id,
                        fileIndex: fileIndex,
                        commonValue: commonValue,
                        fileValue: fileValue
                    };
                    this._raiseUploadProgress(args)
                }
            }, {
                key: "_onFileUploaderUploaded",
                value: function(_ref3) {
                    var component = _ref3.component,
                        file = _ref3.file;
                    var deferred = this._getDeferredForFile(component, file);
                    deferred.resolve()
                }
            }, {
                key: "_onFileUploaderUploadAborted",
                value: function(_ref4) {
                    var component = _ref4.component,
                        file = _ref4.file;
                    var deferred = this._getDeferredForFile(component, file);
                    deferred.resolve({
                        canceled: true
                    })
                }
            }, {
                key: "_onFileUploaderUploadError",
                value: function(_ref5) {
                    var component = _ref5.component,
                        file = _ref5.file,
                        error = _ref5.error;
                    var deferred = this._getDeferredForFile(component, file);
                    deferred.reject(error)
                }
            }, {
                key: "_uploadFiles",
                value: function(uploaderInfo, files) {
                    var sessionId = (new _guid2.default).toString();
                    var controller = this._getController();
                    var deferreds = files.map(function() {
                        return new _deferred.Deferred
                    });
                    var session = {
                        id: sessionId,
                        controller: controller,
                        files: files,
                        deferreds: deferreds
                    };
                    uploaderInfo.session = session;
                    var sessionInfo = {
                        sessionId: sessionId,
                        deferreds: deferreds,
                        files: files
                    };
                    this._raiseUploadSessionStarted(sessionInfo);
                    return (0, _uiFile_manager2.default)(deferreds).always(function() {
                        return setTimeout(function() {
                            uploaderInfo.fileUploader.option("value", []);
                            uploaderInfo.session = null
                        })
                    })
                }
            }, {
                key: "_getDeferredForFile",
                value: function(fileUploader, file) {
                    var _this$_findSessionByF4 = this._findSessionByFile(fileUploader, file),
                        session = _this$_findSessionByF4.session,
                        fileIndex = _this$_findSessionByF4.fileIndex;
                    return session.deferreds[fileIndex]
                }
            }, {
                key: "_findSessionByFile",
                value: function(fileUploader, file) {
                    var uploaderInfo = this._findUploaderInfo(fileUploader);
                    var session = uploaderInfo.session;
                    var fileIndex = session.files.indexOf(file);
                    return {
                        session: session,
                        fileIndex: fileIndex
                    }
                }
            }, {
                key: "_findUploaderInfoBySessionId",
                value: function(sessionId) {
                    for (var i = 0; i < this._uploaderInfos.length; i++) {
                        var uploaderInfo = this._uploaderInfos[i];
                        var session = uploaderInfo.session;
                        if (session && session.id === sessionId) {
                            return uploaderInfo
                        }
                    }
                    return null
                }
            }, {
                key: "_findAvailableUploaderInfo",
                value: function() {
                    for (var i = 0; i < this._uploaderInfos.length; i++) {
                        var info = this._uploaderInfos[i];
                        if (!info.session) {
                            return info
                        }
                    }
                    return null
                }
            }, {
                key: "_findUploaderInfo",
                value: function(fileUploader) {
                    for (var i = 0; i < this._uploaderInfos.length; i++) {
                        var info = this._uploaderInfos[i];
                        if (info.fileUploader === fileUploader) {
                            return info
                        }
                    }
                    return null
                }
            }, {
                key: "_getController",
                value: function() {
                    var controllerGetter = this.option("getController");
                    return controllerGetter()
                }
            }, {
                key: "_raiseUploadSessionStarted",
                value: function(sessionInfo) {
                    this._actions.onUploadSessionStarted({
                        sessionInfo: sessionInfo
                    })
                }
            }, {
                key: "_raiseUploadProgress",
                value: function(args) {
                    this._actions.onUploadProgress(args)
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onUploadSessionStarted: this._createActionByOption("onUploadSessionStarted"),
                        onUploadProgress: this._createActionByOption("onUploadProgress")
                    }
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerFileUploader.prototype), "_getDefaultOptions", this).call(this), {
                        getController: null,
                        onUploadSessionStarted: null,
                        onUploadProgress: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "getController":
                            this.repaint();
                            break;
                        case "onUploadSessionStarted":
                        case "onUploadProgress":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerFileUploader.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return FileManagerFileUploader
        }(_ui2.default);
        module.exports = FileManagerFileUploader
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.messages.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.FileManagerMessages = void 0;
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _errors = __webpack_require__( /*! ../../file_management/errors */ 222);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        exports.FileManagerMessages = {
            get: function(errorId, args) {
                switch (errorId) {
                    case _errors2.default.NoAccess:
                        return _message2.default.format("dxFileManager-errorNoAccess");
                    case _errors2.default.FileExists:
                        return _message2.default.format("dxFileManager-errorFileExistsFormat", args);
                    case _errors2.default.FileNotFound:
                        return _message2.default.format("dxFileManager-errorFileNotFoundFormat", args);
                    case _errors2.default.DirectoryExists:
                        return _message2.default.format("dxFileManager-errorDirectoryExistsFormat", args);
                    case _errors2.default.DirectoryNotFound:
                        return _message2.default.format("dxFileManager-errorDirectoryNotFoundFormat", args);
                    case _errors2.default.WrongFileExtension:
                        return _message2.default.format("dxFileManager-errorWrongFileExtension");
                    case _errors2.default.MaxFileSizeExceeded:
                        return _message2.default.format("dxFileManager-errorMaxFileSizeExceeded");
                    case _errors2.default.InvalidSymbols:
                        return _message2.default.format("dxFileManager-errorInvalidSymbols")
                }
                return _message2.default.format("dxFileManager-errorDefault")
            }
        };
        module.exports.ErrorCode = _errors2.default
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.breadcrumbs.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _ui3 = __webpack_require__( /*! ../menu/ui.menu */ 374);
        var _ui4 = _interopRequireDefault(_ui3);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var FILE_MANAGER_BREADCRUMBS_CLASS = "dx-filemanager-breadcrumbs";
        var FILE_MANAGER_BREADCRUMBS_PARENT_FOLDER_ITEM_CLASS = FILE_MANAGER_BREADCRUMBS_CLASS + "-parent-folder-item";
        var FILE_MANAGER_BREADCRUMBS_SEPARATOR_ITEM_CLASS = FILE_MANAGER_BREADCRUMBS_CLASS + "-separator-item";
        var FILE_MANAGER_BREADCRUMBS_PATH_SEPARATOR_ITEM_CLASS = FILE_MANAGER_BREADCRUMBS_CLASS + "-path-separator-item";
        var MENU_ITEMS_CONTAINER_CLASS = "dx-menu-items-container";
        var FILE_MANAGER_BREADCRUMBS_EVENT_NAMESPACE = "dxFileManager_breadcrubms";
        var FileManagerBreadcrumbs = function(_Widget) {
            _inherits(FileManagerBreadcrumbs, _Widget);
            var _super = _createSuper(FileManagerBreadcrumbs);

            function FileManagerBreadcrumbs() {
                _classCallCheck(this, FileManagerBreadcrumbs);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerBreadcrumbs, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(FileManagerBreadcrumbs.prototype), "_init", this).call(this);
                    this._currentDirectory = null
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileManagerBreadcrumbs.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    if (this._currentDirectory) {
                        this._renderMenu()
                    }
                    this.$element().addClass(FILE_MANAGER_BREADCRUMBS_CLASS)
                }
            }, {
                key: "setCurrentDirectory",
                value: function(directory) {
                    if (!this._areDirsEqual(this._currentDirectory, directory)) {
                        this._currentDirectory = directory;
                        this.repaint()
                    }
                }
            }, {
                key: "_renderMenu",
                value: function() {
                    var $menu = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._menu = this._createComponent($menu, _ui4.default, {
                        dataSource: this._getMenuItems(),
                        onItemClick: this._onItemClick.bind(this),
                        onItemRendered: this._onItemRendered.bind(this)
                    });
                    var clickEvent = (0, _utils.addNamespace)("click", FILE_MANAGER_BREADCRUMBS_EVENT_NAMESPACE);
                    _events_engine2.default.on($menu, clickEvent, this._onClick.bind(this))
                }
            }, {
                key: "_getMenuItems",
                value: function() {
                    var dirLine = this._getParentDirsLine();
                    var result = [{
                        icon: "arrowup",
                        directory: this._currentDirectory.parentDirectory,
                        isPathItem: true,
                        cssClass: FILE_MANAGER_BREADCRUMBS_PARENT_FOLDER_ITEM_CLASS
                    }, {
                        text: "\xa0",
                        cssClass: FILE_MANAGER_BREADCRUMBS_SEPARATOR_ITEM_CLASS
                    }];
                    dirLine.forEach(function(dir, index) {
                        result.push({
                            text: dir.getDisplayName(),
                            directory: dir,
                            isPathItem: true
                        });
                        if (index !== dirLine.length - 1) {
                            result.push({
                                icon: "spinnext",
                                cssClass: FILE_MANAGER_BREADCRUMBS_PATH_SEPARATOR_ITEM_CLASS
                            })
                        }
                    });
                    return result
                }
            }, {
                key: "_onItemClick",
                value: function(_ref) {
                    var itemData = _ref.itemData;
                    if (!itemData.isPathItem) {
                        return
                    }
                    var newDir = itemData.directory;
                    if (!this._areDirsEqual(newDir, this._currentDirectory)) {
                        this._raiseCurrentDirectoryChanged(newDir)
                    }
                }
            }, {
                key: "_onClick",
                value: function(_ref2) {
                    var target = _ref2.target;
                    var $item = (0, _renderer2.default)(target).closest(".".concat(MENU_ITEMS_CONTAINER_CLASS));
                    if (0 === $item.length) {
                        this._raiseOutsideClick()
                    }
                }
            }, {
                key: "_onItemRendered",
                value: function(_ref3) {
                    var itemElement = _ref3.itemElement,
                        itemData = _ref3.itemData;
                    if (itemData.cssClass) {
                        (0, _renderer2.default)(itemElement).addClass(itemData.cssClass)
                    }
                }
            }, {
                key: "_getParentDirsLine",
                value: function() {
                    var currentDirectory = this._currentDirectory;
                    var result = [];
                    while (currentDirectory) {
                        result.unshift(currentDirectory);
                        currentDirectory = currentDirectory.parentDirectory
                    }
                    return result
                }
            }, {
                key: "_areDirsEqual",
                value: function(dir1, dir2) {
                    return dir1 && dir2 && dir1 === dir2 && dir1.fileItem.key === dir2.fileItem.key
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onCurrentDirectoryChanging: this._createActionByOption("onCurrentDirectoryChanging"),
                        onOutsideClick: this._createActionByOption("onOutsideClick")
                    }
                }
            }, {
                key: "_raiseCurrentDirectoryChanged",
                value: function(currentDirectory) {
                    this._actions.onCurrentDirectoryChanging({
                        currentDirectory: currentDirectory
                    })
                }
            }, {
                key: "_raiseOutsideClick",
                value: function() {
                    this._actions.onOutsideClick()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerBreadcrumbs.prototype), "_getDefaultOptions", this).call(this), {
                        rootFolderDisplayName: "Files",
                        onCurrentDirectoryChanging: null,
                        onOutsideClick: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "rootFolderDisplayName":
                            this.repaint();
                            break;
                        case "onCurrentDirectoryChanging":
                        case "onOutsideClick":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerBreadcrumbs.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return FileManagerBreadcrumbs
        }(_ui2.default);
        module.exports = FileManagerBreadcrumbs
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/file_manager/ui.file_manager.adaptivity.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _ui3 = __webpack_require__( /*! ../drawer/ui.drawer */ 235);
        var _ui4 = _interopRequireDefault(_ui3);
        var _splitter = __webpack_require__( /*! ../splitter */ 412);
        var _splitter2 = _interopRequireDefault(_splitter);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var window = (0, _window.getWindow)();
        var ADAPTIVE_STATE_SCREEN_WIDTH = 573;
        var FILE_MANAGER_ADAPTIVITY_DRAWER_PANEL_CLASS = "dx-filemanager-adaptivity-drawer-panel";
        var DRAWER_PANEL_CONTENT_INITIAL = "dx-drawer-panel-content-initial";
        var FileManagerAdaptivityControl = function(_Widget) {
            _inherits(FileManagerAdaptivityControl, _Widget);
            var _super = _createSuper(FileManagerAdaptivityControl);

            function FileManagerAdaptivityControl() {
                _classCallCheck(this, FileManagerAdaptivityControl);
                return _super.apply(this, arguments)
            }
            _createClass(FileManagerAdaptivityControl, [{
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(FileManagerAdaptivityControl.prototype), "_initMarkup", this).call(this);
                    this._initActions();
                    this._isInAdaptiveState = false;
                    var $drawer = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    (0, _renderer2.default)("<div>").addClass(FILE_MANAGER_ADAPTIVITY_DRAWER_PANEL_CLASS).appendTo($drawer);
                    this._drawer = this._createComponent($drawer, _ui4.default);
                    this._drawer.option({
                        opened: true,
                        template: this._createDrawerTemplate.bind(this)
                    });
                    (0, _renderer2.default)(this._drawer.content()).addClass(DRAWER_PANEL_CONTENT_INITIAL);
                    var $drawerContent = $drawer.find(".".concat(FILE_MANAGER_ADAPTIVITY_DRAWER_PANEL_CLASS)).first();
                    var contentRenderer = this.option("contentTemplate");
                    if ((0, _type.isFunction)(contentRenderer)) {
                        contentRenderer($drawerContent)
                    }
                }
            }, {
                key: "_createDrawerTemplate",
                value: function(container) {
                    this.option("drawerTemplate")(container);
                    this._splitter = this._createComponent("<div>", _splitter2.default, {
                        container: this.$element(),
                        leftElement: (0, _renderer2.default)(this._drawer.content()),
                        rightElement: (0, _renderer2.default)(this._drawer.viewContent()),
                        onApplyPanelSize: this._onApplyPanelSize.bind(this)
                    });
                    this._splitter.$element().appendTo(container)
                }
            }, {
                key: "_render",
                value: function() {
                    _get(_getPrototypeOf(FileManagerAdaptivityControl.prototype), "_render", this).call(this);
                    this._checkAdaptiveState()
                }
            }, {
                key: "_onApplyPanelSize",
                value: function(e) {
                    if (!(0, _window.hasWindow)()) {
                        return
                    }
                    if (!this._splitter.isSplitterMoved()) {
                        this._updateDrawerDimensions();
                        return
                    }(0, _renderer2.default)(this._drawer.content()).removeClass(DRAWER_PANEL_CONTENT_INITIAL);
                    (0, _renderer2.default)(this._drawer.content()).css("width", e.leftPanelWidth);
                    this._drawer._initSize();
                    this._drawer.resizeContent()
                }
            }, {
                key: "_updateDrawerDimensions",
                value: function() {
                    (0, _renderer2.default)(this._drawer.content()).css("width", "");
                    this._drawer._initSize();
                    this._drawer._strategy.setPanelSize(true)
                }
            }, {
                key: "_dimensionChanged",
                value: function(dimension) {
                    if (!dimension || "height" !== dimension) {
                        this._checkAdaptiveState()
                    }
                }
            }, {
                key: "_checkAdaptiveState",
                value: function() {
                    var oldState = this._isInAdaptiveState;
                    this._isInAdaptiveState = this._isSmallScreen();
                    if (oldState !== this._isInAdaptiveState) {
                        this.toggleDrawer(!this._isInAdaptiveState, true);
                        this._raiseAdaptiveStateChanged(this._isInAdaptiveState)
                    }
                }
            }, {
                key: "_isSmallScreen",
                value: function() {
                    return (0, _renderer2.default)(window).width() <= ADAPTIVE_STATE_SCREEN_WIDTH
                }
            }, {
                key: "_initActions",
                value: function() {
                    this._actions = {
                        onAdaptiveStateChanged: this._createActionByOption("onAdaptiveStateChanged")
                    }
                }
            }, {
                key: "_raiseAdaptiveStateChanged",
                value: function(enabled) {
                    this._actions.onAdaptiveStateChanged({
                        enabled: enabled
                    })
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(FileManagerAdaptivityControl.prototype), "_getDefaultOptions", this).call(this), {
                        drawerTemplate: null,
                        contentTemplate: null,
                        onAdaptiveStateChanged: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    var name = args.name;
                    switch (name) {
                        case "drawerTemplate":
                        case "contentTemplate":
                            this.repaint();
                            break;
                        case "onAdaptiveStateChanged":
                            this._actions[name] = this._createActionByOption(name);
                            break;
                        default:
                            _get(_getPrototypeOf(FileManagerAdaptivityControl.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "isInAdaptiveState",
                value: function() {
                    return this._isInAdaptiveState
                }
            }, {
                key: "toggleDrawer",
                value: function(showing, skipAnimation) {
                    this._drawer.option("animationEnabled", !skipAnimation);
                    this._drawer.toggle(showing);
                    var isSplitterActive = this._drawer.option("opened") && !this.isInAdaptiveState();
                    this._splitter.toggleState(isSplitterActive)
                }
            }]);
            return FileManagerAdaptivityControl
        }(_ui2.default);
        module.exports = FileManagerAdaptivityControl
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/diagram.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./diagram/ui.diagram */ 776)
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _load_indicator = __webpack_require__( /*! ../load_indicator */ 72);
        var _load_indicator2 = _interopRequireDefault(_load_indicator);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _position = __webpack_require__( /*! ../../animation/position */ 74);
        var _position2 = _interopRequireDefault(_position);
        var _resize_callbacks = __webpack_require__( /*! ../../core/utils/resize_callbacks */ 114);
        var _resize_callbacks2 = _interopRequireDefault(_resize_callbacks);
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 11);
        var _dom2 = _interopRequireDefault(_dom);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../events/utils */ 8);
        var eventUtils = _interopRequireWildcard(_utils);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _number = __webpack_require__( /*! ../../localization/number */ 49);
        var _number2 = _interopRequireDefault(_number);
        var _z_index = __webpack_require__( /*! ../overlay/z_index */ 182);
        var zIndexPool = _interopRequireWildcard(_z_index);
        var _ui3 = __webpack_require__( /*! ../overlay/ui.overlay */ 301);
        var _ui4 = _interopRequireDefault(_ui3);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.toolbar */ 172);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _uiDiagram3 = __webpack_require__( /*! ./ui.diagram.main_toolbar */ 778);
        var _uiDiagram4 = _interopRequireDefault(_uiDiagram3);
        var _uiDiagram5 = __webpack_require__( /*! ./ui.diagram.history_toolbar */ 779);
        var _uiDiagram6 = _interopRequireDefault(_uiDiagram5);
        var _uiDiagram7 = __webpack_require__( /*! ./ui.diagram.view_toolbar */ 780);
        var _uiDiagram8 = _interopRequireDefault(_uiDiagram7);
        var _uiDiagram9 = __webpack_require__( /*! ./ui.diagram.properties_toolbar */ 781);
        var _uiDiagram10 = _interopRequireDefault(_uiDiagram9);
        var _uiDiagram11 = __webpack_require__( /*! ./ui.diagram.context_menu */ 782);
        var _uiDiagram12 = __webpack_require__( /*! ./ui.diagram.context_toolbox */ 783);
        var _uiDiagram13 = _interopRequireDefault(_uiDiagram12);
        var _uiDiagram14 = __webpack_require__( /*! ./ui.diagram.dialogs */ 784);
        var _uiDiagram15 = _interopRequireDefault(_uiDiagram14);
        var _uiDiagram16 = __webpack_require__( /*! ./ui.diagram.scroll_view */ 785);
        var _uiDiagram17 = _interopRequireDefault(_uiDiagram16);
        var _diagram2 = __webpack_require__( /*! ./diagram.toolbox_manager */ 786);
        var _diagram3 = _interopRequireDefault(_diagram2);
        var _uiDiagram18 = __webpack_require__( /*! ./ui.diagram.toolbox */ 787);
        var _uiDiagram19 = _interopRequireDefault(_uiDiagram18);
        var _uiDiagram20 = __webpack_require__( /*! ./ui.diagram.properties_panel */ 788);
        var _uiDiagram21 = _interopRequireDefault(_uiDiagram20);
        var _diagram4 = __webpack_require__( /*! ./diagram.options_update */ 789);
        var _diagram5 = _interopRequireDefault(_diagram4);
        var _uiDiagram22 = __webpack_require__( /*! ./ui.diagram.dialog_manager */ 790);
        var _uiDiagram23 = _interopRequireDefault(_uiDiagram22);
        var _diagram6 = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram7 = _interopRequireDefault(_diagram6);
        var _diagram8 = __webpack_require__( /*! ./diagram.nodes_option */ 791);
        var _diagram9 = _interopRequireDefault(_diagram8);
        var _diagram10 = __webpack_require__( /*! ./diagram.edges_option */ 792);
        var _diagram11 = _interopRequireDefault(_diagram10);

        function _getRequireWildcardCache() {
            if ("function" !== typeof WeakMap) {
                return null
            }
            var cache = new WeakMap;
            _getRequireWildcardCache = function() {
                return cache
            };
            return cache
        }

        function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
                return obj
            }
            if (null === obj || "object" !== _typeof(obj) && "function" !== typeof obj) {
                return {
                    "default": obj
                }
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
                return cache.get(obj)
            }
            var newObj = {};
            var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
                    if (desc && (desc.get || desc.set)) {
                        Object.defineProperty(newObj, key, desc)
                    } else {
                        newObj[key] = obj[key]
                    }
                }
            }
            newObj.default = obj;
            if (cache) {
                cache.set(obj, newObj)
            }
            return newObj
        }

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_CLASS = "dx-diagram";
        var DIAGRAM_FULLSCREEN_CLASS = "dx-diagram-fullscreen";
        var DIAGRAM_TOOLBAR_WRAPPER_CLASS = DIAGRAM_CLASS + "-toolbar-wrapper";
        var DIAGRAM_CONTENT_WRAPPER_CLASS = DIAGRAM_CLASS + "-content-wrapper";
        var DIAGRAM_CONTENT_CLASS = DIAGRAM_CLASS + "-content";
        var DIAGRAM_SCROLL_VIEW_CLASS = DIAGRAM_CLASS + "-scroll-view";
        var DIAGRAM_FLOATING_TOOLBAR_CONTAINER_CLASS = DIAGRAM_CLASS + "-floating-toolbar-container";
        var DIAGRAM_PROPERTIES_PANEL_TOOLBAR_CONTAINER_CLASS = DIAGRAM_CLASS + "-properties-panel-toolbar-container";
        var DIAGRAM_LOADING_INDICATOR_CLASS = DIAGRAM_CLASS + "-loading-indicator";
        var DIAGRAM_FLOATING_PANEL_OFFSET = 12;
        var DIAGRAM_DEFAULT_UNIT = "in";
        var DIAGRAM_DEFAULT_ZOOMLEVEL = 1;
        var DIAGRAM_DEFAULT_AUTOZOOM_MODE = "disabled";
        var DIAGRAM_DEFAULT_PAGE_ORIENTATION = "portrait";
        var DIAGRAM_DEFAULT_PAGE_COLOR = "#ffffff";
        var DIAGRAM_MAX_MOBILE_WINDOW_WIDTH = 576;
        var DIAGRAM_TOOLBOX_ITEM_SPACING = 12;
        var DIAGRAM_TOOLBOX_ITEM_COUNT_IN_ROW = 3;
        var DIAGRAM_CONTEXT_TOOLBOX_ITEM_COUNT_IN_ROW = 4;
        var DIAGRAM_NAMESPACE = "dxDiagramEvent";
        var FULLSCREEN_CHANGE_EVENT_NAME = eventUtils.addNamespace("fullscreenchange", DIAGRAM_NAMESPACE);
        var IE_FULLSCREEN_CHANGE_EVENT_NAME = eventUtils.addNamespace("msfullscreenchange", DIAGRAM_NAMESPACE);
        var WEBKIT_FULLSCREEN_CHANGE_EVENT_NAME = eventUtils.addNamespace("webkitfullscreenchange", DIAGRAM_NAMESPACE);
        var MOZ_FULLSCREEN_CHANGE_EVENT_NAME = eventUtils.addNamespace("mozfullscreenchange", DIAGRAM_NAMESPACE);
        var Diagram = function(_Widget) {
            _inherits(Diagram, _Widget);
            var _super = _createSuper(Diagram);

            function Diagram() {
                _classCallCheck(this, Diagram);
                return _super.apply(this, arguments)
            }
            _createClass(Diagram, [{
                key: "_init",
                value: function() {
                    this._updateDiagramLockCount = 0;
                    this._browserResizeTimer = -1;
                    this._toolbars = [];
                    _get(_getPrototypeOf(Diagram.prototype), "_init", this).call(this);
                    this._initDiagram();
                    this._createCustomCommand()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(Diagram.prototype), "_initMarkup", this).call(this);
                    this._toolbars = [];
                    delete this._isMobileScreenSize;
                    var isServerSide = !(0, _window.hasWindow)();
                    this.$element().addClass(DIAGRAM_CLASS);
                    delete this._mainToolbar;
                    if (this.option("mainToolbar.visible")) {
                        this._renderMainToolbar()
                    }
                    var $contentWrapper = (0, _renderer2.default)("<div>").addClass(DIAGRAM_CONTENT_WRAPPER_CLASS).appendTo(this.$element());
                    delete this._historyToolbar;
                    delete this._historyToolbarResizeCallback;
                    if (this._isHistoryToolbarVisible()) {
                        this._renderHistoryToolbar($contentWrapper)
                    }
                    delete this._propertiesToolbar;
                    delete this._propertiesToolbarResizeCallback;
                    if (this._isPropertiesPanelEnabled()) {
                        this._renderPropertiesToolbar($contentWrapper)
                    }
                    delete this._viewToolbar;
                    delete this._viewToolbarResizeCallback;
                    if (this.option("viewToolbar.visible")) {
                        this._renderViewToolbar($contentWrapper)
                    }
                    delete this._toolbox;
                    delete this._toolboxResizeCallback;
                    if (this._isToolboxEnabled()) {
                        this._renderToolbox($contentWrapper)
                    }
                    delete this._propertiesPanel;
                    delete this._propertiesPanelResizeCallback;
                    if (this._isPropertiesPanelEnabled()) {
                        this._renderPropertiesPanel($contentWrapper)
                    }
                    this._$content = (0, _renderer2.default)("<div>").addClass(DIAGRAM_CONTENT_CLASS).appendTo($contentWrapper);
                    delete this._contextMenu;
                    if (this.option("contextMenu.enabled")) {
                        this._renderContextMenu($contentWrapper)
                    }
                    delete this._contextToolbox;
                    if (this.option("contextToolbox.enabled")) {
                        this._renderContextToolbox($contentWrapper)
                    }
                    this._renderDialog($contentWrapper);
                    if (!isServerSide) {
                        var $scrollViewWrapper = (0, _renderer2.default)("<div>").addClass(DIAGRAM_SCROLL_VIEW_CLASS).appendTo(this._$content);
                        this._createComponent($scrollViewWrapper, _uiDiagram17.default, {
                            onCreateDiagram: function(e) {
                                _this._diagramInstance.createDocument(e.$parent[0], e.scrollView)
                            }
                        })
                    }
                    if ((0, _window.hasWindow)()) {
                        _resize_callbacks2.default.add(function() {
                            _this._killBrowserResizeTimer();
                            _this._browserResizeTimer = setTimeout(function() {
                                return _this._processBrowserResize()
                            }, 100)
                        })
                    }
                    this._setCustomCommandChecked(_diagram7.default.SHOW_PROPERTIES_PANEL_COMMAND_NAME, this._isPropertiesPanelVisible());
                    this._setCustomCommandChecked(_diagram7.default.SHOW_TOOLBOX_COMMAND_NAME, this._isToolboxVisible())
                }
            }, {
                key: "_processBrowserResize",
                value: function() {
                    this._isMobileScreenSize = void 0;
                    this._processDiagramResize();
                    this._killBrowserResizeTimer()
                }
            }, {
                key: "_processDiagramResize",
                value: function() {
                    if (this._historyToolbarResizeCallback) {
                        this._historyToolbarResizeCallback.call(this)
                    }
                    if (this._propertiesToolbarResizeCallback) {
                        this._propertiesToolbarResizeCallback.call(this)
                    }
                    if (this._propertiesPanelResizeCallback) {
                        this._propertiesPanelResizeCallback.call(this)
                    }
                    if (this._viewToolbarResizeCallback) {
                        this._viewToolbarResizeCallback.call(this)
                    }
                    if (this._toolboxResizeCallback) {
                        this._toolboxResizeCallback.call(this)
                    }
                }
            }, {
                key: "_killBrowserResizeTimer",
                value: function() {
                    if (this._browserResizeTimer > -1) {
                        clearTimeout(this._browserResizeTimer)
                    }
                    this._browserResizeTimer = -1
                }
            }, {
                key: "isMobileScreenSize",
                value: function() {
                    if (void 0 === this._isMobileScreenSize) {
                        this._isMobileScreenSize = (0, _window.hasWindow)() && this.$element().outerWidth() < DIAGRAM_MAX_MOBILE_WINDOW_WIDTH
                    }
                    return this._isMobileScreenSize
                }
            }, {
                key: "_diagramCaptureFocus",
                value: function() {
                    if (this._diagramInstance) {
                        this._diagramInstance.captureFocus()
                    }
                }
            }, {
                key: "notifyBarCommandExecuted",
                value: function() {
                    this._diagramCaptureFocus()
                }
            }, {
                key: "_registerToolbar",
                value: function(component) {
                    this._registerBar(component);
                    this._toolbars.push(component)
                }
            }, {
                key: "_registerBar",
                value: function(component) {
                    component.bar.onChanged.add(this);
                    this._diagramInstance.registerBar(component.bar)
                }
            }, {
                key: "_getExcludeCommands",
                value: function() {
                    var excludeCommands = [];
                    if (!this._isToolboxEnabled()) {
                        excludeCommands.push(_diagram7.default.SHOW_TOOLBOX_COMMAND_NAME)
                    }
                    if (!this._isPropertiesPanelEnabled()) {
                        excludeCommands.push(_diagram7.default.SHOW_PROPERTIES_PANEL_COMMAND_NAME)
                    }
                    return excludeCommands
                }
            }, {
                key: "_getToolbarBaseOptions",
                value: function() {
                    var _this2 = this;
                    return {
                        onContentReady: function(_ref) {
                            var component = _ref.component;
                            return _this2._registerToolbar(component)
                        },
                        onSubMenuVisibilityChanging: function(_ref2) {
                            var component = _ref2.component;
                            return _this2._diagramInstance.updateBarItemsState(component.bar)
                        },
                        onPointerUp: this._onPanelPointerUp.bind(this),
                        "export": this.option("export"),
                        excludeCommands: this._getExcludeCommands(),
                        onInternalCommand: this._onInternalCommand.bind(this),
                        onCustomCommand: this._onCustomCommand.bind(this),
                        isMobileView: this.isMobileScreenSize()
                    }
                }
            }, {
                key: "_onInternalCommand",
                value: function(e) {
                    switch (e.command) {
                        case _diagram7.default.SHOW_TOOLBOX_COMMAND_NAME:
                            if (this._toolbox) {
                                this._toolbox.toggle()
                            }
                            break;
                        case _diagram7.default.SHOW_PROPERTIES_PANEL_COMMAND_NAME:
                            if (this._propertiesPanel) {
                                this._propertiesPanel.toggle()
                            }
                    }
                }
            }, {
                key: "_onCustomCommand",
                value: function(e) {
                    this._customCommandAction({
                        name: e.name
                    })
                }
            }, {
                key: "_renderMainToolbar",
                value: function() {
                    var $toolbarWrapper = (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOOLBAR_WRAPPER_CLASS).appendTo(this.$element());
                    this._mainToolbar = this._createComponent($toolbarWrapper, _uiDiagram4.default, (0, _extend.extend)(this._getToolbarBaseOptions(), {
                        commands: this.option("mainToolbar.commands"),
                        skipAdjustSize: true
                    }))
                }
            }, {
                key: "_isHistoryToolbarVisible",
                value: function() {
                    return this.option("historyToolbar.visible") && !this.isReadOnlyMode()
                }
            }, {
                key: "_renderHistoryToolbar",
                value: function($parent) {
                    var _this3 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var $container = (0, _renderer2.default)("<div>").addClass(DIAGRAM_FLOATING_TOOLBAR_CONTAINER_CLASS).appendTo($parent);
                    this._historyToolbar = this._createComponent($container, _uiDiagram6.default, (0, _extend.extend)(this._getToolbarBaseOptions(), {
                        commands: this.option("historyToolbar.commands"),
                        locateInMenu: "never"
                    }));
                    this._updateHistoryToolbarPosition($container, $parent, isServerSide);
                    this._historyToolbarResizeCallback = function() {
                        _this3._historyToolbar.option("isMobileView", _this3.isMobileScreenSize())
                    }
                }
            }, {
                key: "_updateHistoryToolbarPosition",
                value: function($container, $parent, isServerSide) {
                    if (isServerSide) {
                        return
                    }
                    _position2.default.setup($container, {
                        my: "left top",
                        at: "left top",
                        of: $parent,
                        offset: DIAGRAM_FLOATING_PANEL_OFFSET + " " + DIAGRAM_FLOATING_PANEL_OFFSET
                    })
                }
            }, {
                key: "_isToolboxEnabled",
                value: function() {
                    return "disabled" !== this.option("toolbox.visibility") && !this.isReadOnlyMode()
                }
            }, {
                key: "_isToolboxVisible",
                value: function() {
                    return "visible" === this.option("toolbox.visibility") || "auto" === this.option("toolbox.visibility") && !this.isMobileScreenSize()
                }
            }, {
                key: "_renderToolbox",
                value: function($parent) {
                    var _this4 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var $toolBox = (0, _renderer2.default)("<div>").appendTo($parent);
                    var bounds = this._getToolboxBounds($parent, isServerSide);
                    this._toolbox = this._createComponent($toolBox, _uiDiagram19.default, {
                        isMobileView: this.isMobileScreenSize(),
                        isVisible: this._isToolboxVisible(),
                        container: this.$element(),
                        height: bounds.height,
                        offsetParent: $parent,
                        offsetX: bounds.offsetX,
                        offsetY: bounds.offsetY,
                        toolboxGroups: this._getToolboxGroups(),
                        onShapeCategoryRendered: function(e) {
                            if (isServerSide) {
                                return
                            }
                            _this4._diagramInstance.createToolbox(e.$element[0], "texts" === e.displayMode, e.shapes || e.category, {
                                shapeIconSpacing: DIAGRAM_TOOLBOX_ITEM_SPACING,
                                shapeIconCountInRow: DIAGRAM_TOOLBOX_ITEM_COUNT_IN_ROW,
                                shapeIconAttributes: {
                                    "data-toggle": e.dataToggle
                                }
                            })
                        },
                        onFilterChanged: function(e) {
                            if (isServerSide) {
                                return
                            }
                            _this4._diagramInstance.applyToolboxFilter(e.text, e.filteringToolboxes)
                        },
                        onVisibilityChanging: function(e) {
                            if (isServerSide) {
                                return
                            }
                            _this4._setCustomCommandChecked(_diagram7.default.SHOW_TOOLBOX_COMMAND_NAME, e.visible);
                            if (_this4._propertiesPanel) {
                                if (e.visible && _this4.isMobileScreenSize()) {
                                    _this4._propertiesPanel.hide()
                                }
                            }
                            if (_this4._historyToolbar) {
                                if (e.visible && _this4.isMobileScreenSize()) {
                                    _this4._historyToolbarZIndex = zIndexPool.create(_ui4.default.baseZIndex());
                                    _this4._historyToolbar.$element().css("zIndex", _this4._historyToolbarZIndex);
                                    _this4._historyToolbar.$element().css("boxShadow", "none")
                                }
                            }
                            if (_this4._viewToolbar) {
                                _this4._viewToolbar.$element().css("opacity", e.visible && _this4.isMobileScreenSize() ? "0" : "1")
                            }
                        },
                        onVisibilityChanged: function(e) {
                            if (!e.visible && !_this4._textInputStarted) {
                                _this4._diagramCaptureFocus()
                            }
                            if (!isServerSide) {
                                if (_this4._historyToolbar) {
                                    if (!e.visible && _this4.isMobileScreenSize() && _this4._historyToolbarZIndex) {
                                        zIndexPool.remove(_this4._historyToolbarZIndex);
                                        _this4._historyToolbar.$element().css("zIndex", "");
                                        _this4._historyToolbar.$element().css("boxShadow", "");
                                        _this4._historyToolbarZIndex = void 0
                                    }
                                }
                            }
                        },
                        onPointerUp: this._onPanelPointerUp.bind(this)
                    });
                    this._toolboxResizeCallback = function() {
                        var bounds = _this4._getToolboxBounds($parent, isServerSide);
                        _this4._toolbox.option("height", bounds.height);
                        var prevIsMobileView = _this4._toolbox.option("isMobileView");
                        if (prevIsMobileView !== _this4.isMobileScreenSize()) {
                            _this4._toolbox.option({
                                isMobileView: _this4.isMobileScreenSize(),
                                isVisible: _this4._isToolboxVisible()
                            });
                            _this4._setCustomCommandChecked(_diagram7.default.SHOW_TOOLBOX_COMMAND_NAME, _this4._isToolboxVisible())
                        }
                        _this4._toolbox.updateMaxHeight()
                    }
                }
            }, {
                key: "_getToolboxBounds",
                value: function($parent, isServerSide) {
                    var result = {
                        offsetX: DIAGRAM_FLOATING_PANEL_OFFSET,
                        offsetY: DIAGRAM_FLOATING_PANEL_OFFSET,
                        height: !isServerSide ? $parent.height() - 2 * DIAGRAM_FLOATING_PANEL_OFFSET : 0
                    };
                    if (this._historyToolbar && !isServerSide) {
                        result.offsetY += this._historyToolbar.$element().outerHeight() + DIAGRAM_FLOATING_PANEL_OFFSET;
                        result.height -= this._historyToolbar.$element().outerHeight() + DIAGRAM_FLOATING_PANEL_OFFSET
                    }
                    if (this._viewToolbar && !isServerSide) {
                        result.height -= this._viewToolbar.$element().outerHeight() + this._getViewToolbarYOffset(isServerSide)
                    }
                    return result
                }
            }, {
                key: "_renderViewToolbar",
                value: function($parent) {
                    var _this5 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var $container = (0, _renderer2.default)("<div>").addClass(DIAGRAM_FLOATING_TOOLBAR_CONTAINER_CLASS).appendTo($parent);
                    this._viewToolbar = this._createComponent($container, _uiDiagram8.default, (0, _extend.extend)(this._getToolbarBaseOptions(), {
                        commands: this.option("viewToolbar.commands"),
                        locateInMenu: "never"
                    }));
                    this._updateViewToolbarPosition($container, $parent, isServerSide);
                    this._viewToolbarResizeCallback = function() {
                        _this5._updateViewToolbarPosition($container, $parent, isServerSide)
                    }
                }
            }, {
                key: "_getViewToolbarYOffset",
                value: function(isServerSide) {
                    if (isServerSide) {
                        return
                    }
                    var result = DIAGRAM_FLOATING_PANEL_OFFSET;
                    if (this._viewToolbar && this._propertiesToolbar) {
                        result += (this._propertiesToolbar.$element().outerHeight() - this._viewToolbar.$element().outerHeight()) / 2
                    }
                    return result
                }
            }, {
                key: "_updateViewToolbarPosition",
                value: function($container, $parent, isServerSide) {
                    if (isServerSide) {
                        return
                    }
                    _position2.default.setup($container, {
                        my: "left bottom",
                        at: "left bottom",
                        of: $parent,
                        offset: DIAGRAM_FLOATING_PANEL_OFFSET + " -" + this._getViewToolbarYOffset(isServerSide)
                    })
                }
            }, {
                key: "_isPropertiesPanelEnabled",
                value: function() {
                    return "disabled" !== this.option("propertiesPanel.visibility") && !this.isReadOnlyMode()
                }
            }, {
                key: "_isPropertiesPanelVisible",
                value: function() {
                    return "visible" === this.option("propertiesPanel.visibility")
                }
            }, {
                key: "_renderPropertiesToolbar",
                value: function($parent) {
                    var _this6 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var $container = (0, _renderer2.default)("<div>").addClass(DIAGRAM_FLOATING_TOOLBAR_CONTAINER_CLASS).addClass(DIAGRAM_PROPERTIES_PANEL_TOOLBAR_CONTAINER_CLASS).appendTo($parent);
                    this._propertiesToolbar = this._createComponent($container, _uiDiagram10.default, (0, _extend.extend)(this._getToolbarBaseOptions(), {
                        buttonStylingMode: "contained",
                        buttonType: "default",
                        locateInMenu: "never"
                    }));
                    this._updatePropertiesToolbarPosition($container, $parent, isServerSide);
                    this._propertiesToolbarResizeCallback = function() {
                        _this6._updatePropertiesToolbarPosition($container, $parent, isServerSide)
                    }
                }
            }, {
                key: "_updatePropertiesToolbarPosition",
                value: function($container, $parent, isServerSide) {
                    if (isServerSide) {
                        return
                    }
                    _position2.default.setup($container, {
                        my: "right bottom",
                        at: "right bottom",
                        of: $parent,
                        offset: "-" + DIAGRAM_FLOATING_PANEL_OFFSET + " -" + DIAGRAM_FLOATING_PANEL_OFFSET
                    })
                }
            }, {
                key: "_renderPropertiesPanel",
                value: function($parent) {
                    var _this7 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var $propertiesPanel = (0, _renderer2.default)("<div>").appendTo($parent);
                    var offsetX = DIAGRAM_FLOATING_PANEL_OFFSET;
                    var offsetY = 2 * DIAGRAM_FLOATING_PANEL_OFFSET + (!isServerSide ? this._propertiesToolbar.$element().outerHeight() : 0);
                    this._propertiesPanel = this._createComponent($propertiesPanel, _uiDiagram21.default, {
                        isMobileView: this.isMobileScreenSize(),
                        isVisible: this._isPropertiesPanelVisible(),
                        container: this.$element(),
                        offsetParent: $parent,
                        offsetX: offsetX,
                        offsetY: offsetY,
                        propertyTabs: this.option("propertiesPanel.tabs"),
                        onCreateToolbar: function(e) {
                            e.toolbar = _this7._createComponent(e.$parent, _uiDiagram2.default, (0, _extend.extend)(_this7._getToolbarBaseOptions(), {
                                commands: e.commands,
                                locateInMenu: "never",
                                editorStylingMode: "outlined"
                            }))
                        },
                        onVisibilityChanging: function(e) {
                            if (isServerSide) {
                                return
                            }
                            _this7._updatePropertiesPanelGroupBars(e.component);
                            _this7._setCustomCommandChecked(_diagram7.default.SHOW_PROPERTIES_PANEL_COMMAND_NAME, e.visible);
                            if (_this7._toolbox) {
                                if (e.visible && _this7.isMobileScreenSize()) {
                                    _this7._toolbox.hide()
                                }
                            }
                        },
                        onVisibilityChanged: function(e) {
                            if (!e.visible && !_this7._textInputStarted) {
                                _this7._diagramCaptureFocus()
                            }
                        },
                        onSelectedGroupChanged: function(_ref3) {
                            var component = _ref3.component;
                            return _this7._updatePropertiesPanelGroupBars(component)
                        },
                        onPointerUp: this._onPanelPointerUp.bind(this)
                    });
                    this._propertiesPanelResizeCallback = function() {
                        var prevIsMobileView = _this7._propertiesPanel.option("isMobileView");
                        if (prevIsMobileView !== _this7.isMobileScreenSize()) {
                            _this7._propertiesPanel.option({
                                isMobileView: _this7.isMobileScreenSize(),
                                isVisible: _this7._isPropertiesPanelVisible()
                            });
                            _this7._setCustomCommandChecked(_diagram7.default.SHOW_PROPERTIES_PANEL_COMMAND_NAME, _this7._isPropertiesPanelVisible())
                        }
                    }
                }
            }, {
                key: "_updatePropertiesPanelGroupBars",
                value: function(component) {
                    var _this8 = this;
                    component.getActiveToolbars().forEach(function(toolbar) {
                        _this8._diagramInstance.updateBarItemsState(toolbar.bar)
                    })
                }
            }, {
                key: "_onPanelPointerUp",
                value: function() {
                    var _this9 = this;
                    this._captureFocusTimeout = setTimeout(function() {
                        _this9._diagramCaptureFocus();
                        delete _this9._captureFocusTimeout
                    }, 100)
                }
            }, {
                key: "_killCaptureFocusTimeout",
                value: function() {
                    if (this._captureFocusTimeout) {
                        clearTimeout(this._captureFocusTimeout);
                        delete this._captureFocusTimeout
                    }
                }
            }, {
                key: "_renderContextMenu",
                value: function($parent) {
                    var _this10 = this;
                    var $contextMenu = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._contextMenu = this._createComponent($contextMenu, _uiDiagram11.DiagramContextMenuWrapper, {
                        commands: this.option("contextMenu.commands"),
                        onContentReady: function(_ref4) {
                            var component = _ref4.component;
                            return _this10._registerBar(component)
                        },
                        onVisibilityChanging: function(_ref5) {
                            var component = _ref5.component;
                            return _this10._diagramInstance.updateBarItemsState(component.bar)
                        },
                        onItemClick: function(itemData) {
                            return _this10._onBeforeCommandExecuted(itemData.command)
                        },
                        "export": this.option("export"),
                        excludeCommands: this._getExcludeCommands(),
                        onInternalCommand: this._onInternalCommand.bind(this),
                        onCustomCommand: this._onCustomCommand.bind(this)
                    })
                }
            }, {
                key: "_renderContextToolbox",
                value: function($parent) {
                    var _this11 = this;
                    var isServerSide = !(0, _window.hasWindow)();
                    var category = this.option("contextToolbox.category");
                    var displayMode = this.option("contextToolbox.displayMode");
                    var shapes = this.option("contextToolbox.shapes");
                    var $contextToolbox = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._contextToolbox = this._createComponent($contextToolbox, _uiDiagram13.default, {
                        onShown: function(e) {
                            if (isServerSide) {
                                return
                            }
                            var $toolboxContainer = (0, _renderer2.default)(e.$element);
                            var isTextGroup = "texts" === displayMode;
                            if (!shapes && !category && !isTextGroup) {
                                var group = _this11._getToolboxGroups().filter(function(g) {
                                    return g.category === e.category
                                })[0];
                                if (group) {
                                    isTextGroup = "texts" === group.displayMode
                                }
                            }
                            _this11._diagramInstance.createContextToolbox($toolboxContainer[0], isTextGroup, shapes || category || e.category, {
                                shapeIconSpacing: DIAGRAM_TOOLBOX_ITEM_SPACING,
                                shapeIconCountInRow: DIAGRAM_CONTEXT_TOOLBOX_ITEM_COUNT_IN_ROW
                            }, function(shapeType) {
                                e.callback(shapeType);
                                _this11._diagramCaptureFocus();
                                e.hide()
                            })
                        }
                    })
                }
            }, {
                key: "_setCustomCommandChecked",
                value: function(command, checked) {
                    this._toolbars.forEach(function(tb) {
                        tb.setCommandChecked(command, checked)
                    })
                }
            }, {
                key: "_onBeforeCommandExecuted",
                value: function(command) {
                    var dialogParameters = _uiDiagram23.default.getDialogParameters(command);
                    if (dialogParameters) {
                        this._showDialog(dialogParameters)
                    }
                    return !!dialogParameters
                }
            }, {
                key: "_renderDialog",
                value: function($parent) {
                    var $dialogElement = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._dialogInstance = this._createComponent($dialogElement, _uiDiagram15.default, {})
                }
            }, {
                key: "_showDialog",
                value: function(dialogParameters) {
                    if (this._dialogInstance) {
                        this._dialogInstance.option("onGetContent", dialogParameters.onGetContent);
                        this._dialogInstance.option("onHidden", function() {
                            this._diagramCaptureFocus()
                        }.bind(this));
                        this._dialogInstance.option("command", this._diagramInstance.getCommand(dialogParameters.command));
                        this._dialogInstance.option("title", dialogParameters.title);
                        this._dialogInstance._show()
                    }
                }
            }, {
                key: "_showLoadingIndicator",
                value: function() {
                    this._loadingIndicator = (0, _renderer2.default)("<div>").addClass(DIAGRAM_LOADING_INDICATOR_CLASS);
                    this._createComponent(this._loadingIndicator, _load_indicator2.default, {});
                    var $parent = this._$content || this.$element();
                    $parent.append(this._loadingIndicator)
                }
            }, {
                key: "_hideLoadingIndicator",
                value: function() {
                    if (!this._loadingIndicator) {
                        return
                    }
                    this._loadingIndicator.remove();
                    this._loadingIndicator = null
                }
            }, {
                key: "_initDiagram",
                value: function() {
                    var _getDiagram = (0, _diagram.getDiagram)(),
                        DiagramControl = _getDiagram.DiagramControl;
                    this._diagramInstance = new DiagramControl;
                    this._diagramInstance.onChanged = this._raiseDataChangeAction.bind(this);
                    this._diagramInstance.onEdgeInserted = this._raiseEdgeInsertedAction.bind(this);
                    this._diagramInstance.onEdgeUpdated = this._raiseEdgeUpdatedAction.bind(this);
                    this._diagramInstance.onEdgeRemoved = this._raiseEdgeRemovedAction.bind(this);
                    this._diagramInstance.onNodeInserted = this._raiseNodeInsertedAction.bind(this);
                    this._diagramInstance.onNodeUpdated = this._raiseNodeUpdatedAction.bind(this);
                    this._diagramInstance.onNodeRemoved = this._raiseNodeRemovedAction.bind(this);
                    this._diagramInstance.onToolboxDragStart = this._raiseToolboxDragStart.bind(this);
                    this._diagramInstance.onToolboxDragEnd = this._raiseToolboxDragEnd.bind(this);
                    this._diagramInstance.onTextInputStart = this._raiseTextInputStart.bind(this);
                    this._diagramInstance.onTextInputEnd = this._raiseTextInputEnd.bind(this);
                    this._diagramInstance.onToggleFullscreen = this._onToggleFullScreen.bind(this);
                    this._diagramInstance.onShowContextMenu = this._onShowContextMenu.bind(this);
                    this._diagramInstance.onHideContextMenu = this._onHideContextMenu.bind(this);
                    this._diagramInstance.onShowContextToolbox = this._onShowContextToolbox.bind(this);
                    this._diagramInstance.onHideContextToolbox = this._onHideContextToolbox.bind(this);
                    this._diagramInstance.onNativeAction.add({
                        notifyItemClick: this._raiseItemClickAction.bind(this),
                        notifyItemDblClick: this._raiseItemDblClickAction.bind(this),
                        notifySelectionChanged: this._raiseSelectionChanged.bind(this)
                    });
                    this._updateEventSubscriptionMethods();
                    this._updateDefaultItemProperties();
                    this._updateShapeTexts();
                    this._updateUnitItems();
                    this._updateFormatUnitsMethod();
                    if (this.option("units") !== DIAGRAM_DEFAULT_UNIT) {
                        this._updateUnitsState()
                    }
                    if (this.isReadOnlyMode()) {
                        this._updateReadOnlyState()
                    }
                    if (this.option("pageSize")) {
                        if (this.option("pageSize.items")) {
                            this._updatePageSizeItemsState()
                        }
                        if (this.option("pageSize.width") && this.option("pageSize.height")) {
                            this._updatePageSizeState()
                        }
                    }
                    if (this.option("pageOrientation") !== DIAGRAM_DEFAULT_PAGE_ORIENTATION) {
                        this._updatePageOrientationState()
                    }
                    if (this.option("pageColor") !== DIAGRAM_DEFAULT_PAGE_COLOR) {
                        this._updatePageColorState()
                    }
                    if (this.option("viewUnits") !== DIAGRAM_DEFAULT_UNIT) {
                        this._updateViewUnitsState()
                    }
                    if (!this.option("showGrid")) {
                        this._updateShowGridState()
                    }
                    if (!this.option("snapToGrid")) {
                        this._updateSnapToGridState()
                    }
                    if (this.option("gridSize")) {
                        if (this.option("gridSize.items")) {
                            this._updateGridSizeItemsState()
                        }
                        this._updateGridSizeState()
                    }
                    if (this.option("zoomLevel.items")) {
                        this._updateZoomLevelItemsState()
                    }
                    if (this.option("simpleView")) {
                        this._updateSimpleViewState()
                    }
                    if (this.option("zoomLevel") !== DIAGRAM_DEFAULT_ZOOMLEVEL) {
                        this._updateZoomLevelState()
                    }
                    if (this.option("autoZoomMode") !== DIAGRAM_DEFAULT_AUTOZOOM_MODE) {
                        this._updateAutoZoomState()
                    }
                    if (this.option("fullScreen")) {
                        this._updateFullscreenState()
                    }
                    this.optionsUpdateBar = new _diagram5.default(this);
                    this._diagramInstance.registerBar(this.optionsUpdateBar);
                    this._updateCustomShapes(this._getCustomShapes());
                    this._refreshDataSources()
                }
            }, {
                key: "_clean",
                value: function() {
                    if (this._diagramInstance) {
                        this._diagramInstance.cleanMarkup()
                    }
                    _get(_getPrototypeOf(Diagram.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_dispose",
                value: function() {
                    this._killCaptureFocusTimeout();
                    _get(_getPrototypeOf(Diagram.prototype), "_dispose", this).call(this);
                    this._diagramInstance = void 0
                }
            }, {
                key: "_executeDiagramCommand",
                value: function(command, parameter) {
                    this._diagramInstance.getCommand(command).execute(parameter)
                }
            }, {
                key: "getNodeDataSource",
                value: function() {
                    return this._nodesOption && this._nodesOption.getDataSource()
                }
            }, {
                key: "getEdgeDataSource",
                value: function() {
                    return this._edgesOption && this._edgesOption.getDataSource()
                }
            }, {
                key: "_refreshDataSources",
                value: function() {
                    this._beginUpdateDiagram();
                    this._refreshNodesDataSource();
                    this._refreshEdgesDataSource();
                    this._endUpdateDiagram()
                }
            }, {
                key: "_refreshNodesDataSource",
                value: function() {
                    if (this._nodesOption) {
                        this._nodesOption._disposeDataSource();
                        delete this._nodesOption
                    }
                    if (this.option("nodes.dataSource")) {
                        this._nodesOption = new _diagram9.default(this);
                        this._nodesOption.option("dataSource", this.option("nodes.dataSource"));
                        this._nodesOption._refreshDataSource()
                    }
                    this.option("hasChanges", false)
                }
            }, {
                key: "_refreshEdgesDataSource",
                value: function() {
                    if (this._edgesOption) {
                        this._edgesOption._disposeDataSource();
                        delete this._edgesOption
                    }
                    if (this.option("edges.dataSource")) {
                        this._edgesOption = new _diagram11.default(this);
                        this._edgesOption.option("dataSource", this.option("edges.dataSource"));
                        this._edgesOption._refreshDataSource()
                    }
                    this.option("hasChanges", false)
                }
            }, {
                key: "_getDiagramData",
                value: function() {
                    var value;
                    var _getDiagram2 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram2.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.Export, function(data) {
                        value = data
                    });
                    return value
                }
            }, {
                key: "_setDiagramData",
                value: function(data, keepExistingItems) {
                    var _getDiagram3 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram3.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.Import, {
                        data: data,
                        keepExistingItems: keepExistingItems
                    })
                }
            }, {
                key: "isReadOnlyMode",
                value: function() {
                    return this.option("readOnly") || this.option("disabled")
                }
            }, {
                key: "_onDataSourceChanged",
                value: function() {
                    this._bindDiagramData()
                }
            }, {
                key: "_createOptionGetter",
                value: function(optionName) {
                    var expr = this.option(optionName);
                    return expr && _data2.default.compileGetter(expr)
                }
            }, {
                key: "_createOptionSetter",
                value: function(optionName) {
                    var expr = this.option(optionName);
                    if (_type2.default.isFunction(expr)) {
                        return expr
                    }
                    return expr && _data2.default.compileSetter(expr)
                }
            }, {
                key: "_bindDiagramData",
                value: function() {
                    if (this._updateDiagramLockCount || !this._isBindingMode()) {
                        return
                    }
                    var _getDiagram4 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram4.DiagramCommand,
                        ConnectorLineOption = _getDiagram4.ConnectorLineOption,
                        ConnectorLineEnding = _getDiagram4.ConnectorLineEnding;
                    var lineOptionGetter;
                    var lineOptionSetter;
                    var startLineEndingGetter;
                    var startLineEndingSetter;
                    var endLineEndingGetter;
                    var endLineEndingSetter;
                    var containerKeyGetter;
                    var containerKeySetter;
                    var data = {
                        nodeDataSource: this._nodesOption && this._nodesOption.getItems(),
                        edgeDataSource: this._edgesOption && this._edgesOption.getItems(),
                        nodeDataImporter: {
                            getKey: this._createOptionGetter("nodes.keyExpr"),
                            setKey: this._createOptionSetter("nodes.keyExpr"),
                            getLocked: this._createOptionGetter("nodes.lockedExpr"),
                            setLocked: this._createOptionSetter("nodes.lockedExpr"),
                            getStyle: this._createOptionGetter("nodes.styleExpr"),
                            setStyle: this._createOptionSetter("nodes.styleExpr"),
                            getStyleText: this._createOptionGetter("nodes.textStyleExpr"),
                            setStyleText: this._createOptionSetter("nodes.textStyleExpr"),
                            getZIndex: this._createOptionGetter("nodes.zIndexExpr"),
                            setZIndex: this._createOptionSetter("nodes.zIndexExpr"),
                            getType: this._createOptionGetter("nodes.typeExpr"),
                            setType: this._createOptionSetter("nodes.typeExpr"),
                            getText: this._createOptionGetter("nodes.textExpr"),
                            setText: this._createOptionSetter("nodes.textExpr"),
                            getImage: this._createOptionGetter("nodes.imageUrlExpr"),
                            setImage: this._createOptionSetter("nodes.imageUrlExpr"),
                            getLeft: this._createOptionGetter("nodes.leftExpr"),
                            setLeft: this._createOptionSetter("nodes.leftExpr"),
                            getTop: this._createOptionGetter("nodes.topExpr"),
                            setTop: this._createOptionSetter("nodes.topExpr"),
                            getWidth: this._createOptionGetter("nodes.widthExpr"),
                            setWidth: this._createOptionSetter("nodes.widthExpr"),
                            getHeight: this._createOptionGetter("nodes.heightExpr"),
                            setHeight: this._createOptionSetter("nodes.heightExpr"),
                            getParentKey: this._createOptionGetter("nodes.parentKeyExpr"),
                            setParentKey: this._createOptionSetter("nodes.parentKeyExpr"),
                            getItems: this._createOptionGetter("nodes.itemsExpr"),
                            setItems: this._createOptionSetter("nodes.itemsExpr"),
                            getContainerKey: containerKeyGetter = this._createOptionGetter("nodes.containerKeyExpr"),
                            setContainerKey: containerKeySetter = this._createOptionSetter("nodes.containerKeyExpr"),
                            getChildren: !containerKeyGetter && !containerKeySetter && this._createOptionGetter("nodes.containerChildrenExpr"),
                            setChildren: !containerKeyGetter && !containerKeySetter && this._createOptionSetter("nodes.containerChildrenExpr")
                        },
                        edgeDataImporter: {
                            getKey: this._createOptionGetter("edges.keyExpr"),
                            setKey: this._createOptionSetter("edges.keyExpr"),
                            getLocked: this._createOptionGetter("edges.lockedExpr"),
                            setLocked: this._createOptionSetter("edges.lockedExpr"),
                            getStyle: this._createOptionGetter("edges.styleExpr"),
                            setStyle: this._createOptionSetter("edges.styleExpr"),
                            getStyleText: this._createOptionGetter("edges.textStyleExpr"),
                            setStyleText: this._createOptionSetter("edges.textStyleExpr"),
                            getZIndex: this._createOptionGetter("edges.zIndexExpr"),
                            setZIndex: this._createOptionSetter("edges.zIndexExpr"),
                            getFrom: this._createOptionGetter("edges.fromExpr"),
                            setFrom: this._createOptionSetter("edges.fromExpr"),
                            getFromPointIndex: this._createOptionGetter("edges.fromPointIndexExpr"),
                            setFromPointIndex: this._createOptionSetter("edges.fromPointIndexExpr"),
                            getTo: this._createOptionGetter("edges.toExpr"),
                            setTo: this._createOptionSetter("edges.toExpr"),
                            getToPointIndex: this._createOptionGetter("edges.toPointIndexExpr"),
                            setToPointIndex: this._createOptionSetter("edges.toPointIndexExpr"),
                            getPoints: this._createOptionGetter("edges.pointsExpr"),
                            setPoints: this._createOptionSetter("edges.pointsExpr"),
                            getText: this._createOptionGetter("edges.textExpr"),
                            setText: this._createOptionSetter("edges.textExpr"),
                            getLineOption: (lineOptionGetter = this._createOptionGetter("edges.lineTypeExpr")) && function(obj) {
                                var lineType = lineOptionGetter(obj);
                                return this._getConnectorLineOption(lineType)
                            }.bind(this),
                            setLineOption: (lineOptionSetter = this._createOptionSetter("edges.lineTypeExpr")) && function(obj, value) {
                                switch (value) {
                                    case ConnectorLineOption.Straight:
                                        value = "straight";
                                        break;
                                    case ConnectorLineOption.Orthogonal:
                                        value = "orthogonal"
                                }
                                lineOptionSetter(obj, value)
                            }.bind(this),
                            getStartLineEnding: (startLineEndingGetter = this._createOptionGetter("edges.fromLineEndExpr")) && function(obj) {
                                var lineEnd = startLineEndingGetter(obj);
                                return this._getConnectorLineEnding(lineEnd)
                            }.bind(this),
                            setStartLineEnding: (startLineEndingSetter = this._createOptionSetter("edges.fromLineEndExpr")) && function(obj, value) {
                                switch (value) {
                                    case ConnectorLineEnding.Arrow:
                                        value = "arrow";
                                        break;
                                    case ConnectorLineEnding.OutlinedTriangle:
                                        value = "outlinedTriangle";
                                        break;
                                    case ConnectorLineEnding.FilledTriangle:
                                        value = "filledTriangle";
                                        break;
                                    case ConnectorLineEnding.None:
                                        value = "none"
                                }
                                startLineEndingSetter(obj, value)
                            }.bind(this),
                            getEndLineEnding: (endLineEndingGetter = this._createOptionGetter("edges.toLineEndExpr")) && function(obj) {
                                var lineEnd = endLineEndingGetter(obj);
                                return this._getConnectorLineEnding(lineEnd)
                            }.bind(this),
                            setEndLineEnding: (endLineEndingSetter = this._createOptionSetter("edges.toLineEndExpr")) && function(obj, value) {
                                switch (value) {
                                    case ConnectorLineEnding.Arrow:
                                        value = "arrow";
                                        break;
                                    case ConnectorLineEnding.OutlinedTriangle:
                                        value = "outlinedTriangle";
                                        break;
                                    case ConnectorLineEnding.FilledTriangle:
                                        value = "filledTriangle";
                                        break;
                                    case ConnectorLineEnding.None:
                                        value = "none"
                                }
                                endLineEndingSetter(obj, value)
                            }.bind(this)
                        },
                        layoutParameters: this._getDataBindingLayoutParameters()
                    };
                    this._executeDiagramCommand(DiagramCommand.BindDocument, data)
                }
            }, {
                key: "_getConnectorLineOption",
                value: function(lineType) {
                    var _getDiagram5 = (0, _diagram.getDiagram)(),
                        ConnectorLineOption = _getDiagram5.ConnectorLineOption;
                    switch (lineType) {
                        case "straight":
                            return ConnectorLineOption.Straight;
                        default:
                            return ConnectorLineOption.Orthogonal
                    }
                }
            }, {
                key: "_getConnectorLineEnding",
                value: function(lineEnd) {
                    var _getDiagram6 = (0, _diagram.getDiagram)(),
                        ConnectorLineEnding = _getDiagram6.ConnectorLineEnding;
                    switch (lineEnd) {
                        case "arrow":
                            return ConnectorLineEnding.Arrow;
                        case "outlinedTriangle":
                            return ConnectorLineEnding.OutlinedTriangle;
                        case "filledTriangle":
                            return ConnectorLineEnding.FilledTriangle;
                        default:
                            return ConnectorLineEnding.None
                    }
                }
            }, {
                key: "_getDataBindingLayoutParameters",
                value: function() {
                    var _getDiagram7 = (0, _diagram.getDiagram)(),
                        DataLayoutType = _getDiagram7.DataLayoutType,
                        DataLayoutOrientation = _getDiagram7.DataLayoutOrientation;
                    var layoutParametersOption = this.option("nodes.autoLayout") || "off";
                    var layoutType = layoutParametersOption.type || layoutParametersOption;
                    if ("off" === layoutType || "auto" === layoutType && this._hasNodePositionExprs()) {
                        return
                    } else {
                        var parameters = {};
                        switch (layoutType) {
                            case "tree":
                                parameters.type = DataLayoutType.Tree;
                                break;
                            default:
                                parameters.type = DataLayoutType.Sugiyama
                        }
                        switch (layoutParametersOption.orientation) {
                            case "vertical":
                                parameters.orientation = DataLayoutOrientation.Vertical;
                                break;
                            case "horizontal":
                                parameters.orientation = DataLayoutOrientation.Horizontal
                        }
                        if (this.option("edges.fromPointIndexExpr") || this.option("edges.toPointIndexExpr")) {
                            parameters.skipPointIndices = true
                        }
                        return parameters
                    }
                }
            }, {
                key: "_hasNodePositionExprs",
                value: function() {
                    return this.option("nodes.topExpr") && this.option("nodes.leftExpr")
                }
            }, {
                key: "_getAutoZoomValue",
                value: function(option) {
                    var _getDiagram8 = (0, _diagram.getDiagram)(),
                        AutoZoomMode = _getDiagram8.AutoZoomMode;
                    switch (option) {
                        case "fitContent":
                            return AutoZoomMode.FitContent;
                        case "fitWidth":
                            return AutoZoomMode.FitToWidth;
                        default:
                            return AutoZoomMode.Disabled
                    }
                }
            }, {
                key: "_isBindingMode",
                value: function() {
                    return this._nodesOption && this._nodesOption.hasItems() || this._edgesOption && this._nodesOption.hasItems()
                }
            }, {
                key: "_beginUpdateDiagram",
                value: function() {
                    this._updateDiagramLockCount++
                }
            }, {
                key: "_endUpdateDiagram",
                value: function() {
                    this._updateDiagramLockCount = Math.max(this._updateDiagramLockCount - 1, 0);
                    if (!this._updateDiagramLockCount) {
                        this._bindDiagramData()
                    }
                }
            }, {
                key: "_getCustomShapes",
                value: function() {
                    return this.option("customShapes") || []
                }
            }, {
                key: "_getToolboxGroups",
                value: function() {
                    return _diagram3.default.getGroups(this.option("toolbox.groups"))
                }
            }, {
                key: "_updateCustomShapes",
                value: function(customShapes, prevCustomShapes) {
                    var _this12 = this;
                    if (Array.isArray(prevCustomShapes)) {
                        this._diagramInstance.removeCustomShapes(prevCustomShapes.map(function(s) {
                            return s.type
                        }))
                    }
                    if (Array.isArray(customShapes)) {
                        this._diagramInstance.addCustomShapes(customShapes.map(function(s) {
                            var templateOption = s.template || _this12.option("customShapeTemplate");
                            var template = templateOption && _this12._getTemplate(templateOption);
                            return {
                                category: s.category,
                                type: s.type,
                                baseType: s.baseType,
                                title: s.title,
                                svgUrl: s.backgroundImageUrl,
                                svgToolboxUrl: s.backgroundImageToolboxUrl,
                                svgLeft: s.backgroundImageLeft,
                                svgTop: s.backgroundImageTop,
                                svgWidth: s.backgroundImageWidth,
                                svgHeight: s.backgroundImageHeight,
                                defaultWidth: s.defaultWidth,
                                defaultHeight: s.defaultHeight,
                                minWidth: s.minWidth,
                                minHeight: s.minHeight,
                                maxWidth: s.maxWidth,
                                maxHeight: s.maxHeight,
                                allowResize: s.allowResize,
                                defaultText: s.defaultText,
                                allowEditText: s.allowEditText,
                                textLeft: s.textLeft,
                                textTop: s.textTop,
                                textWidth: s.textWidth,
                                textHeight: s.textHeight,
                                defaultImageUrl: s.defaultImageUrl,
                                allowEditImage: s.allowEditImage,
                                imageLeft: s.imageLeft,
                                imageTop: s.imageTop,
                                imageWidth: s.imageWidth,
                                imageHeight: s.imageHeight,
                                connectionPoints: s.connectionPoints && s.connectionPoints.map(function(pt) {
                                    return {
                                        x: pt.x,
                                        y: pt.y
                                    }
                                }),
                                createTemplate: template && function(container, item) {
                                    template.render({
                                        model: _this12._nativeItemToDiagramItem(item),
                                        container: _dom2.default.getPublicElement((0, _renderer2.default)(container))
                                    })
                                },
                                templateLeft: s.templateLeft,
                                templateTop: s.templateTop,
                                templateWidth: s.templateWidth,
                                templateHeight: s.templateHeight
                            }
                        }))
                    }
                }
            }, {
                key: "_onToggleFullScreen",
                value: function(fullScreen) {
                    this._changeNativeFullscreen(fullScreen);
                    this.$element().toggleClass(DIAGRAM_FULLSCREEN_CLASS, fullScreen);
                    this._diagramInstance.updateLayout(true);
                    this._processDiagramResize();
                    if (this._toolbox) {
                        this._toolbox.repaint()
                    }
                    if (this._propertiesPanel) {
                        this._propertiesPanel.repaint()
                    }
                }
            }, {
                key: "_changeNativeFullscreen",
                value: function(setModeOn) {
                    var window = (0, _window.getWindow)();
                    if (window.self === window.top || setModeOn === this._inNativeFullscreen()) {
                        return
                    }
                    if (setModeOn) {
                        this._subscribeFullscreenNativeChanged()
                    } else {
                        this._unsubscribeFullscreenNativeChanged()
                    }
                    this._setNativeFullscreen(setModeOn)
                }
            }, {
                key: "_setNativeFullscreen",
                value: function(on) {
                    var window = (0, _window.getWindow)();
                    var document = window.self.document;
                    var body = window.self.document.body;
                    if (on) {
                        if (body.requestFullscreen) {
                            body.requestFullscreen()
                        } else {
                            if (body.mozRequestFullscreen) {
                                body.mozRequestFullscreen()
                            } else {
                                if (body.webkitRequestFullscreen) {
                                    body.webkitRequestFullscreen()
                                } else {
                                    if (body.msRequestFullscreen) {
                                        body.msRequestFullscreen()
                                    }
                                }
                            }
                        }
                    } else {
                        if (document.exitFullscreen) {
                            document.exitFullscreen()
                        } else {
                            if (document.mozCancelFullscreen) {
                                document.mozCancelFullscreen()
                            } else {
                                if (document.webkitExitFullscreen) {
                                    document.webkitExitFullscreen()
                                } else {
                                    if (document.msExitFullscreen) {
                                        document.msExitFullscreen()
                                    }
                                }
                            }
                        }
                    }
                }
            }, {
                key: "_inNativeFullscreen",
                value: function() {
                    var document = (0, _window.getWindow)().document;
                    var fullscreenElement = document.fullscreenElement || document.msFullscreenElement || document.webkitFullscreenElement;
                    var isInFullscreen = fullscreenElement === document.body || document.webkitIsFullscreen;
                    return !!isInFullscreen
                }
            }, {
                key: "_subscribeFullscreenNativeChanged",
                value: function() {
                    var document = (0, _window.getWindow)().document;
                    var handler = this._onNativeFullscreenChangeHandler.bind(this);
                    _events_engine2.default.on(document, FULLSCREEN_CHANGE_EVENT_NAME, handler);
                    _events_engine2.default.on(document, IE_FULLSCREEN_CHANGE_EVENT_NAME, handler);
                    _events_engine2.default.on(document, WEBKIT_FULLSCREEN_CHANGE_EVENT_NAME, handler);
                    _events_engine2.default.on(document, MOZ_FULLSCREEN_CHANGE_EVENT_NAME, handler)
                }
            }, {
                key: "_unsubscribeFullscreenNativeChanged",
                value: function() {
                    var document = (0, _window.getWindow)().document;
                    _events_engine2.default.off(document, FULLSCREEN_CHANGE_EVENT_NAME);
                    _events_engine2.default.off(document, IE_FULLSCREEN_CHANGE_EVENT_NAME);
                    _events_engine2.default.off(document, WEBKIT_FULLSCREEN_CHANGE_EVENT_NAME);
                    _events_engine2.default.off(document, MOZ_FULLSCREEN_CHANGE_EVENT_NAME)
                }
            }, {
                key: "_onNativeFullscreenChangeHandler",
                value: function() {
                    if (!this._inNativeFullscreen()) {
                        this._unsubscribeFullscreenNativeChanged();
                        this._onToggleFullScreen(false)
                    }
                }
            }, {
                key: "_onShowContextMenu",
                value: function(x, y, selection) {
                    if (this._contextMenu) {
                        this._contextMenu._show(x, y, selection)
                    }
                }
            }, {
                key: "_onHideContextMenu",
                value: function() {
                    if (this._contextMenu) {
                        this._contextMenu._hide()
                    }
                }
            }, {
                key: "_onShowContextToolbox",
                value: function(x, y, side, category, callback) {
                    if (this._contextToolbox) {
                        this._contextToolbox._show(x, y, side, category, callback)
                    }
                }
            }, {
                key: "_onHideContextToolbox",
                value: function() {
                    if (this._contextToolbox) {
                        this._contextToolbox._hide()
                    }
                }
            }, {
                key: "_getDiagramUnitValue",
                value: function(value) {
                    var _getDiagram9 = (0, _diagram.getDiagram)(),
                        DiagramUnit = _getDiagram9.DiagramUnit;
                    switch (value) {
                        case "in":
                            return DiagramUnit.In;
                        case "cm":
                            return DiagramUnit.Cm;
                        case "px":
                            return DiagramUnit.Px;
                        default:
                            return DiagramUnit.In
                    }
                }
            }, {
                key: "_updateReadOnlyState",
                value: function() {
                    var _getDiagram10 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram10.DiagramCommand;
                    var readOnly = this.isReadOnlyMode();
                    this._executeDiagramCommand(DiagramCommand.ToggleReadOnly, readOnly)
                }
            }, {
                key: "_updateZoomLevelState",
                value: function() {
                    var zoomLevel = this.option("zoomLevel.value");
                    if (!zoomLevel) {
                        zoomLevel = this.option("zoomLevel")
                    }
                    var _getDiagram11 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram11.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.ZoomLevel, zoomLevel)
                }
            }, {
                key: "_updateZoomLevelItemsState",
                value: function() {
                    var zoomLevelItems = this.option("zoomLevel.items");
                    if (!Array.isArray(zoomLevelItems)) {
                        return
                    }
                    var _getDiagram12 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram12.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.ZoomLevelItems, zoomLevelItems)
                }
            }, {
                key: "_updateAutoZoomState",
                value: function() {
                    var _getDiagram13 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram13.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.SwitchAutoZoom, this._getAutoZoomValue(this.option("autoZoomMode")))
                }
            }, {
                key: "_updateSimpleViewState",
                value: function() {
                    var _getDiagram14 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram14.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.ToggleSimpleView, this.option("simpleView"))
                }
            }, {
                key: "_updateFullscreenState",
                value: function() {
                    var _getDiagram15 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram15.DiagramCommand;
                    var fullScreen = this.option("fullScreen");
                    this._executeDiagramCommand(DiagramCommand.Fullscreen, fullScreen);
                    this._onToggleFullScreen(fullScreen)
                }
            }, {
                key: "_updateShowGridState",
                value: function() {
                    var _getDiagram16 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram16.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.ShowGrid, this.option("showGrid"))
                }
            }, {
                key: "_updateSnapToGridState",
                value: function() {
                    var _getDiagram17 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram17.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.SnapToGrid, this.option("snapToGrid"))
                }
            }, {
                key: "_updateGridSizeState",
                value: function() {
                    var gridSize = this.option("gridSize.value");
                    if (!gridSize) {
                        gridSize = this.option("gridSize")
                    }
                    var _getDiagram18 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram18.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.GridSize, gridSize)
                }
            }, {
                key: "_updateGridSizeItemsState",
                value: function() {
                    var gridSizeItems = this.option("gridSize.items");
                    if (!Array.isArray(gridSizeItems)) {
                        return
                    }
                    var _getDiagram19 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram19.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.GridSizeItems, gridSizeItems)
                }
            }, {
                key: "_updateUnitItems",
                value: function() {
                    var _getDiagram20 = (0, _diagram.getDiagram)(),
                        DiagramLocalizationService = _getDiagram20.DiagramLocalizationService;
                    var items = this._getUnitItems();
                    if (this._unitItems !== items) {
                        this._unitItems = items;
                        DiagramLocalizationService.unitItems = items
                    }
                }
            }, {
                key: "_getUnitItems",
                value: function() {
                    var _getDiagram21 = (0, _diagram.getDiagram)(),
                        DiagramUnit = _getDiagram21.DiagramUnit;
                    var items = {};
                    items[DiagramUnit.In] = _message2.default.format("dxDiagram-unitIn");
                    items[DiagramUnit.Cm] = _message2.default.format("dxDiagram-unitCm");
                    items[DiagramUnit.Px] = _message2.default.format("dxDiagram-unitPx");
                    return items
                }
            }, {
                key: "_updateFormatUnitsMethod",
                value: function() {
                    var _getDiagram22 = (0, _diagram.getDiagram)(),
                        DiagramLocalizationService = _getDiagram22.DiagramLocalizationService;
                    DiagramLocalizationService.formatUnit = function(value) {
                        return _number2.default.format(value)
                    }
                }
            }, {
                key: "_updateViewUnitsState",
                value: function() {
                    var _getDiagram23 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram23.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.ViewUnits, this._getDiagramUnitValue(this.option("viewUnits")))
                }
            }, {
                key: "_updateUnitsState",
                value: function() {
                    var _getDiagram24 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram24.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.Units, this._getDiagramUnitValue(this.option("units")))
                }
            }, {
                key: "_updatePageSizeState",
                value: function() {
                    var pageSize = this.option("pageSize");
                    if (!pageSize || !pageSize.width || !pageSize.height) {
                        return
                    }
                    var _getDiagram25 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram25.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.PageSize, pageSize)
                }
            }, {
                key: "_updatePageSizeItemsState",
                value: function() {
                    var pageSizeItems = this.option("pageSize.items");
                    if (!Array.isArray(pageSizeItems)) {
                        return
                    }
                    var _getDiagram26 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram26.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.PageSizeItems, pageSizeItems)
                }
            }, {
                key: "_updatePageOrientationState",
                value: function() {
                    var _getDiagram27 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram27.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.PageLandscape, "landscape" === this.option("pageOrientation"))
                }
            }, {
                key: "_updatePageColorState",
                value: function() {
                    var _getDiagram28 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram28.DiagramCommand;
                    this._executeDiagramCommand(DiagramCommand.PageColor, this.option("pageColor"))
                }
            }, {
                key: "_updateShapeTexts",
                value: function() {
                    var _getDiagram29 = (0, _diagram.getDiagram)(),
                        DiagramLocalizationService = _getDiagram29.DiagramLocalizationService;
                    var texts = this._getShapeTexts();
                    if (this._shapeTexts !== texts) {
                        this._shapeTexts = texts;
                        DiagramLocalizationService.shapeTexts = texts
                    }
                }
            }, {
                key: "_getShapeTexts",
                value: function() {
                    var _getDiagram30 = (0, _diagram.getDiagram)(),
                        ShapeTypes = _getDiagram30.ShapeTypes;
                    var texts = {};
                    texts[ShapeTypes.Text] = _message2.default.format("dxDiagram-shapeText");
                    texts[ShapeTypes.Rectangle] = _message2.default.format("dxDiagram-shapeRectangle");
                    texts[ShapeTypes.Ellipse] = _message2.default.format("dxDiagram-shapeEllipse");
                    texts[ShapeTypes.Cross] = _message2.default.format("dxDiagram-shapeCross");
                    texts[ShapeTypes.Triangle] = _message2.default.format("dxDiagram-shapeTriangle");
                    texts[ShapeTypes.Diamond] = _message2.default.format("dxDiagram-shapeDiamond");
                    texts[ShapeTypes.Heart] = _message2.default.format("dxDiagram-shapeHeart");
                    texts[ShapeTypes.Pentagon] = _message2.default.format("dxDiagram-shapePentagon");
                    texts[ShapeTypes.Hexagon] = _message2.default.format("dxDiagram-shapeHexagon");
                    texts[ShapeTypes.Octagon] = _message2.default.format("dxDiagram-shapeOctagon");
                    texts[ShapeTypes.Star] = _message2.default.format("dxDiagram-shapeStar");
                    texts[ShapeTypes.ArrowLeft] = _message2.default.format("dxDiagram-shapeArrowLeft");
                    texts[ShapeTypes.ArrowUp] = _message2.default.format("dxDiagram-shapeArrowUp");
                    texts[ShapeTypes.ArrowRight] = _message2.default.format("dxDiagram-shapeArrowRight");
                    texts[ShapeTypes.ArrowDown] = _message2.default.format("dxDiagram-shapeArrowDown");
                    texts[ShapeTypes.ArrowUpDown] = _message2.default.format("dxDiagram-shapeArrowUpDown");
                    texts[ShapeTypes.ArrowLeftRight] = _message2.default.format("dxDiagram-shapeArrowLeftRight");
                    texts[ShapeTypes.Process] = _message2.default.format("dxDiagram-shapeProcess");
                    texts[ShapeTypes.Decision] = _message2.default.format("dxDiagram-shapeDecision");
                    texts[ShapeTypes.Terminator] = _message2.default.format("dxDiagram-shapeTerminator");
                    texts[ShapeTypes.PredefinedProcess] = _message2.default.format("dxDiagram-shapePredefinedProcess");
                    texts[ShapeTypes.Document] = _message2.default.format("dxDiagram-shapeDocument");
                    texts[ShapeTypes.MultipleDocuments] = _message2.default.format("dxDiagram-shapeMultipleDocuments");
                    texts[ShapeTypes.ManualInput] = _message2.default.format("dxDiagram-shapeManualInput");
                    texts[ShapeTypes.Preparation] = _message2.default.format("dxDiagram-shapePreparation");
                    texts[ShapeTypes.Data] = _message2.default.format("dxDiagram-shapeData");
                    texts[ShapeTypes.Database] = _message2.default.format("dxDiagram-shapeDatabase");
                    texts[ShapeTypes.HardDisk] = _message2.default.format("dxDiagram-shapeHardDisk");
                    texts[ShapeTypes.InternalStorage] = _message2.default.format("dxDiagram-shapeInternalStorage");
                    texts[ShapeTypes.PaperTape] = _message2.default.format("dxDiagram-shapePaperTape");
                    texts[ShapeTypes.ManualOperation] = _message2.default.format("dxDiagram-shapeManualOperation");
                    texts[ShapeTypes.Delay] = _message2.default.format("dxDiagram-shapeDelay");
                    texts[ShapeTypes.StoredData] = _message2.default.format("dxDiagram-shapeStoredData");
                    texts[ShapeTypes.Display] = _message2.default.format("dxDiagram-shapeDisplay");
                    texts[ShapeTypes.Merge] = _message2.default.format("dxDiagram-shapeMerge");
                    texts[ShapeTypes.Connector] = _message2.default.format("dxDiagram-shapeConnector");
                    texts[ShapeTypes.Or] = _message2.default.format("dxDiagram-shapeOr");
                    texts[ShapeTypes.SummingJunction] = _message2.default.format("dxDiagram-shapeSummingJunction");
                    texts[ShapeTypes.Container] = _message2.default.format("dxDiagram-shapeContainerDefaultText");
                    texts[ShapeTypes.VerticalContainer] = _message2.default.format("dxDiagram-shapeVerticalContainer");
                    texts[ShapeTypes.HorizontalContainer] = _message2.default.format("dxDiagram-shapeHorizontalContainer");
                    texts[ShapeTypes.Card] = _message2.default.format("dxDiagram-shapeCardDefaultText");
                    texts[ShapeTypes.CardWithImageOnLeft] = _message2.default.format("dxDiagram-shapeCardWithImageOnLeft");
                    texts[ShapeTypes.CardWithImageOnTop] = _message2.default.format("dxDiagram-shapeCardWithImageOnTop");
                    texts[ShapeTypes.CardWithImageOnRight] = _message2.default.format("dxDiagram-shapeCardWithImageOnRight");
                    return texts
                }
            }, {
                key: "_updateEventSubscriptionMethods",
                value: function() {
                    var _getDiagram31 = (0, _diagram.getDiagram)(),
                        RenderHelper = _getDiagram31.RenderHelper;
                    RenderHelper.addEventListener = function(element, eventName, handler) {
                        _events_engine2.default.on(element, eventName, handler)
                    };
                    RenderHelper.removeEventListener = function(element, eventName, handler) {
                        _events_engine2.default.off(element, eventName, handler)
                    }
                }
            }, {
                key: "_updateDefaultItemProperties",
                value: function() {
                    if (this.option("defaultItemProperties.style")) {
                        this._diagramInstance.setInitialStyleProperties(this.option("defaultItemProperties.style"))
                    }
                    if (this.option("defaultItemProperties.textStyle")) {
                        this._diagramInstance.setInitialTextStyleProperties(this.option("defaultItemProperties.textStyle"))
                    }
                    this._diagramInstance.setInitialConnectorProperties({
                        lineOption: this._getConnectorLineOption(this.option("defaultItemProperties.connectorLineType")),
                        startLineEnding: this._getConnectorLineEnding(this.option("defaultItemProperties.connectorLineStart")),
                        endLineEnding: this._getConnectorLineEnding(this.option("defaultItemProperties.connectorLineEnd"))
                    })
                }
            }, {
                key: "focus",
                value: function() {
                    this._diagramCaptureFocus()
                }
            }, {
                key: "export",
                value: function() {
                    return this._getDiagramData()
                }
            }, {
                key: "exportTo",
                value: function(format, callback) {
                    var command = this._getDiagramExportToCommand(format);
                    this._executeDiagramCommand(command, callback)
                }
            }, {
                key: "_getDiagramExportToCommand",
                value: function(format) {
                    var _getDiagram32 = (0, _diagram.getDiagram)(),
                        DiagramCommand = _getDiagram32.DiagramCommand;
                    switch (format) {
                        case "png":
                            return DiagramCommand.ExportPng;
                        case "jpg":
                            return DiagramCommand.ExportJpg;
                        default:
                            return DiagramCommand.ExportSvg
                    }
                }
            }, {
                key: "import",
                value: function(data, updateExistingItemsOnly) {
                    this._setDiagramData(data, updateExistingItemsOnly);
                    this._raiseDataChangeAction()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Diagram.prototype), "_getDefaultOptions", this).call(this), {
                        readOnly: false,
                        zoomLevel: DIAGRAM_DEFAULT_ZOOMLEVEL,
                        simpleView: false,
                        autoZoomMode: DIAGRAM_DEFAULT_AUTOZOOM_MODE,
                        fullScreen: false,
                        showGrid: true,
                        snapToGrid: true,
                        units: DIAGRAM_DEFAULT_UNIT,
                        viewUnits: DIAGRAM_DEFAULT_UNIT,
                        pageOrientation: DIAGRAM_DEFAULT_PAGE_ORIENTATION,
                        pageColor: DIAGRAM_DEFAULT_PAGE_COLOR,
                        hasChanges: false,
                        nodes: {
                            dataSource: null,
                            keyExpr: "id",
                            lockedExpr: void 0,
                            styleExpr: void 0,
                            textStyleExpr: void 0,
                            zIndexExpr: void 0,
                            typeExpr: "type",
                            textExpr: "text",
                            imageUrlExpr: void 0,
                            parentKeyExpr: void 0,
                            itemsExpr: void 0,
                            leftExpr: void 0,
                            topExpr: void 0,
                            widthExpr: void 0,
                            heightExpr: void 0,
                            containerKeyExpr: void 0,
                            containerChildrenExpr: "children",
                            autoLayout: "auto"
                        },
                        edges: {
                            dataSource: null,
                            keyExpr: "id",
                            lockedExpr: void 0,
                            styleExpr: void 0,
                            textStyleExpr: void 0,
                            zIndexExpr: void 0,
                            fromExpr: "from",
                            fromPointIndexExpr: void 0,
                            toExpr: "to",
                            toPointIndexExpr: void 0,
                            pointsExpr: void 0,
                            textExpr: void 0,
                            lineTypeExpr: void 0,
                            fromLineEndExpr: void 0,
                            toLineEndExpr: void 0
                        },
                        customShapes: [],
                        toolbox: {
                            visibility: "auto"
                        },
                        mainToolbar: {
                            visible: false
                        },
                        historyToolbar: {
                            visible: true
                        },
                        viewToolbar: {
                            visible: true
                        },
                        contextMenu: {
                            enabled: true
                        },
                        contextToolbox: {
                            enabled: true
                        },
                        propertiesPanel: {
                            visibility: "auto"
                        },
                        defaultItemProperties: {
                            connectorLineType: "orthogonal",
                            connectorLineStart: "none",
                            connectorLineEnd: "arrow"
                        },
                        "export": {
                            fileName: "Diagram",
                            proxyUrl: void 0
                        },
                        onItemClick: null,
                        onItemDblClick: null,
                        onSelectionChanged: null
                    })
                }
            }, {
                key: "_raiseDataChangeAction",
                value: function() {
                    if (this._initialized) {
                        this.option("hasChanges", true)
                    }
                }
            }, {
                key: "_raiseEdgeInsertedAction",
                value: function(data, callback, errorCallback) {
                    if (this._edgesOption) {
                        this._edgesOption.insert(data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseEdgeUpdatedAction",
                value: function(key, data, callback, errorCallback) {
                    if (this._edgesOption) {
                        this._edgesOption.update(key, data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseEdgeRemovedAction",
                value: function(key, data, callback, errorCallback) {
                    if (this._edgesOption) {
                        this._edgesOption.remove(key, data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseNodeInsertedAction",
                value: function(data, callback, errorCallback) {
                    if (this._nodesOption) {
                        this._nodesOption.insert(data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseNodeUpdatedAction",
                value: function(key, data, callback, errorCallback) {
                    if (this._nodesOption) {
                        this._nodesOption.update(key, data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseNodeRemovedAction",
                value: function(key, data, callback, errorCallback) {
                    if (this._nodesOption) {
                        this._nodesOption.remove(key, data, callback, errorCallback)
                    }
                }
            }, {
                key: "_raiseToolboxDragStart",
                value: function() {
                    if (this._toolbox) {
                        this._toolbox._raiseToolboxDragStart();
                        if (this.isMobileScreenSize()) {
                            this._toolbox.hide();
                            this._toolboxDragHidden = true
                        }
                    }
                }
            }, {
                key: "_raiseToolboxDragEnd",
                value: function() {
                    if (this._toolbox) {
                        this._toolbox._raiseToolboxDragEnd();
                        if (this._toolboxDragHidden) {
                            this._toolbox.show();
                            delete this._toolboxDragHidden
                        }
                    }
                }
            }, {
                key: "_raiseTextInputStart",
                value: function() {
                    this._textInputStarted = true;
                    if (this._propertiesPanel) {
                        if (this.isMobileScreenSize() && this._propertiesPanel.isVisible()) {
                            this._propertiesPanel.hide();
                            this._propertiesPanelTextInputHidden = true
                        }
                    }
                    if (this._toolbox) {
                        if (this.isMobileScreenSize() && this._toolbox.isVisible()) {
                            this._toolbox.hide();
                            this._toolboxTextInputHidden = true
                        }
                    }
                }
            }, {
                key: "_raiseTextInputEnd",
                value: function() {
                    if (this._propertiesPanel) {
                        if (this._propertiesPanelTextInputHidden) {
                            this._propertiesPanel.show();
                            delete this._propertiesPanelTextInputHidden
                        }
                    }
                    if (this._toolbox) {
                        if (this._toolboxTextInputHidden) {
                            this._toolbox.show();
                            delete this._toolboxTextInputHidden
                        }
                    }
                    this._textInputStarted = false
                }
            }, {
                key: "_createItemClickAction",
                value: function() {
                    this._itemClickAction = this._createActionByOption("onItemClick")
                }
            }, {
                key: "_createItemDblClickAction",
                value: function() {
                    this._itemDblClickAction = this._createActionByOption("onItemDblClick")
                }
            }, {
                key: "_createSelectionChangedAction",
                value: function() {
                    this._selectionChangedAction = this._createActionByOption("onSelectionChanged")
                }
            }, {
                key: "_createCustomCommand",
                value: function() {
                    this._customCommandAction = this._createActionByOption("onCustomCommand")
                }
            }, {
                key: "_raiseItemClickAction",
                value: function(nativeItem) {
                    if (!this._itemClickAction) {
                        this._createItemClickAction()
                    }
                    this._itemClickAction({
                        item: this._nativeItemToDiagramItem(nativeItem)
                    })
                }
            }, {
                key: "_raiseItemDblClickAction",
                value: function(nativeItem) {
                    if (!this._itemDblClickAction) {
                        this._createItemDblClickAction()
                    }
                    this._itemDblClickAction({
                        item: this._nativeItemToDiagramItem(nativeItem)
                    })
                }
            }, {
                key: "_raiseSelectionChanged",
                value: function(nativeItems) {
                    if (!this._selectionChangedAction) {
                        this._createSelectionChangedAction()
                    }
                    this._selectionChangedAction({
                        items: nativeItems.map(this._nativeItemToDiagramItem.bind(this))
                    })
                }
            }, {
                key: "_nativeItemToDiagramItem",
                value: function(nativeItem) {
                    var _getDiagram33 = (0, _diagram.getDiagram)(),
                        NativeShape = _getDiagram33.NativeShape;
                    var createMethod = nativeItem instanceof NativeShape ? this._nativeShapeToDiagramShape.bind(this) : this._nativeConnectorToDiagramConnector.bind(this);
                    return (0, _extend.extend)({
                        id: nativeItem.id
                    }, createMethod(nativeItem))
                }
            }, {
                key: "_nativeShapeToDiagramShape",
                value: function(nativeShape) {
                    return {
                        dataItem: this._nodesOption && this._nodesOption.findItem(nativeShape.key),
                        itemType: "shape",
                        text: nativeShape.text,
                        type: nativeShape.type
                    }
                }
            }, {
                key: "_nativeConnectorToDiagramConnector",
                value: function(nativeConnector) {
                    return {
                        dataItem: this._edgesOption && this._edgesOption.findItem(nativeConnector.key),
                        itemType: "connector",
                        texts: nativeConnector.texts,
                        fromKey: nativeConnector.fromKey,
                        toKey: nativeConnector.toKey
                    }
                }
            }, {
                key: "_invalidateContextMenuCommands",
                value: function() {
                    if (this._contextMenu) {
                        this._contextMenu.option({
                            commands: this.option("contextMenu.commands")
                        })
                    }
                }
            }, {
                key: "_invalidatePropertiesPanelTabs",
                value: function() {
                    if (this._propertiesPanel) {
                        this._propertiesPanel.option({
                            propertyTabs: this.option("propertiesPanel.tabs")
                        })
                    }
                }
            }, {
                key: "_invalidateMainToolbarCommands",
                value: function() {
                    if (this._mainToolbar) {
                        this._mainToolbar.option({
                            commands: this.option("mainToolbar.commands")
                        })
                    }
                }
            }, {
                key: "_invalidateHistoryToolbarCommands",
                value: function() {
                    if (this._historyToolbar) {
                        this._historyToolbar.option({
                            commands: this.option("historyToolbar.commands")
                        })
                    }
                }
            }, {
                key: "_invalidateViewToolbarCommands",
                value: function() {
                    if (this._viewToolbar) {
                        this._viewToolbar.option({
                            commands: this.option("viewToolbar.commands")
                        })
                    }
                }
            }, {
                key: "_invalidateToolboxGroups",
                value: function() {
                    if (this._toolbox) {
                        this._toolbox.option({
                            toolboxGroups: this._getToolboxGroups()
                        })
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    if (this.optionsUpdateBar.isUpdateLocked()) {
                        return
                    }
                    this.optionsUpdateBar.beginUpdate();
                    try {
                        this._optionChangedCore(args);
                    } finally {
                        this.optionsUpdateBar.endUpdate()
                    }
                }
            }, {
                key: "_optionChangedCore",
                value: function(args) {
                    switch (args.name) {
                        case "readOnly":
                        case "disabled":
                            this._updateReadOnlyState();
                            this._invalidate();
                            break;
                        case "zoomLevel":
                            if ("zoomLevel" === args.fullName || "zoomLevel.items" === args.fullName) {
                                this._updateZoomLevelItemsState()
                            }
                            if ("zoomLevel" === args.fullName || "zoomLevel.value" === args.fullName) {
                                this._updateZoomLevelState()
                            }
                            break;
                        case "autoZoomMode":
                            this._updateAutoZoomState();
                            break;
                        case "simpleView":
                            this._updateSimpleViewState();
                            break;
                        case "fullScreen":
                            this._updateFullscreenState();
                            break;
                        case "showGrid":
                            this._updateShowGridState();
                            break;
                        case "snapToGrid":
                            this._updateSnapToGridState();
                            break;
                        case "gridSize":
                            if ("gridSize" === args.fullName || "gridSize.items" === args.fullName) {
                                this._updateGridSizeItemsState()
                            }
                            if ("gridSize" === args.fullName || "gridSize.value" === args.fullName) {
                                this._updateGridSizeState()
                            }
                            break;
                        case "viewUnits":
                            this._updateViewUnitsState();
                            break;
                        case "units":
                            this._updateUnitsState();
                            break;
                        case "pageSize":
                            if ("pageSize" === args.fullName || "pageSize.items" === args.fullName) {
                                this._updatePageSizeItemsState()
                            }
                            if ("pageSize" === args.fullName || "pageSize.width" === args.fullName || "pageSize.height" === args.fullName) {
                                this._updatePageSizeState()
                            }
                            break;
                        case "pageOrientation":
                            this._updatePageOrientationState();
                            break;
                        case "pageColor":
                            this._updatePageColorState();
                            break;
                        case "nodes":
                            if ("nodes.autoLayout" === args.fullName) {
                                this._refreshDataSources()
                            } else {
                                this._refreshNodesDataSource()
                            }
                            break;
                        case "edges":
                            this._refreshEdgesDataSource();
                            break;
                        case "customShapes":
                            this._updateCustomShapes(args.value, args.previousValue);
                            this._invalidate();
                            break;
                        case "contextMenu":
                            if ("contextMenu.commands" === args.fullName) {
                                this._invalidateContextMenuCommands()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "contextToolbox":
                            if ("contextToolbox.enabled" === args.fullName) {
                                this._invalidate()
                            }
                            break;
                        case "propertiesPanel":
                            if ("propertiesPanel.tabs" === args.name) {
                                this._invalidatePropertiesPanelTabs()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "toolbox":
                            if ("toolbox.groups" === args.fullName) {
                                this._invalidateToolboxGroups()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "mainToolbar":
                            if ("mainToolbar.commands" === args.fullName) {
                                this._invalidateMainToolbarCommands()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "historyToolbar":
                            if ("historyToolbar.commands" === args.fullName) {
                                this._invalidateHistoryToolbarCommands()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "viewToolbar":
                            if ("viewToolbar.commands" === args.fullName) {
                                this._invalidateViewToolbarCommands()
                            } else {
                                this._invalidate()
                            }
                            break;
                        case "onItemClick":
                            this._createItemClickAction();
                            break;
                        case "onItemDblClick":
                            this._createItemDblClickAction();
                            break;
                        case "onSelectionChanged":
                            this._createSelectionChangedAction();
                            break;
                        case "onCustomCommand":
                            this._createCustomCommand();
                            break;
                        case "defaultItemProperties":
                            this._updateDefaultItemProperties();
                            break;
                        case "export":
                            if (this._mainToolbar) {
                                this._mainToolbar.option("export", args.value)
                            }
                            break;
                        case "hasChanges":
                            break;
                        default:
                            _get(_getPrototypeOf(Diagram.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return Diagram
        }(_ui2.default);
        (0, _component_registrator2.default)("dxDiagram", Diagram);
        module.exports = Diagram
    },
    /*!********************************************!*\
      !*** external "window.DevExpress.diagram" ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.DevExpress.diagram
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.main_toolbar.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.toolbar */ 172);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

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

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

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

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

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramMainToolbar = function(_DiagramToolbar) {
            _inherits(DiagramMainToolbar, _DiagramToolbar);
            var _super = _createSuper(DiagramMainToolbar);

            function DiagramMainToolbar() {
                _classCallCheck(this, DiagramMainToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramMainToolbar, [{
                key: "_getCommands",
                value: function() {
                    return _diagram2.default.getMainToolbarCommands(this.option("commands"), this.option("excludeCommands"))
                }
            }]);
            return DiagramMainToolbar
        }(_uiDiagram2.default);
        module.exports = DiagramMainToolbar
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.history_toolbar.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.toolbar */ 172);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

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

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

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

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

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

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

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramHistoryToolbar = function(_DiagramToolbar) {
            _inherits(DiagramHistoryToolbar, _DiagramToolbar);
            var _super = _createSuper(DiagramHistoryToolbar);

            function DiagramHistoryToolbar() {
                _classCallCheck(this, DiagramHistoryToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramHistoryToolbar, [{
                key: "_getCommands",
                value: function() {
                    return _diagram2.default.getHistoryToolbarCommands(this.option("commands"), this._getExcludeCommands())
                }
            }, {
                key: "_getExcludeCommands",
                value: function() {
                    var commands = [].concat(this.option("excludeCommands"));
                    if (!this.option("isMobileView")) {
                        commands.push(_diagram2.default.SHOW_TOOLBOX_COMMAND_NAME)
                    }
                    return commands
                }
            }]);
            return DiagramHistoryToolbar
        }(_uiDiagram2.default);
        module.exports = DiagramHistoryToolbar
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.view_toolbar.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.toolbar */ 172);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramViewToolbar = function(_DiagramToolbar) {
            _inherits(DiagramViewToolbar, _DiagramToolbar);
            var _super = _createSuper(DiagramViewToolbar);

            function DiagramViewToolbar() {
                _classCallCheck(this, DiagramViewToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramViewToolbar, [{
                key: "_getCommands",
                value: function() {
                    return _diagram2.default.getViewToolbarCommands(this.option("commands"), this.option("excludeCommands"))
                }
            }]);
            return DiagramViewToolbar
        }(_uiDiagram2.default);
        module.exports = DiagramViewToolbar
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.properties_toolbar.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.toolbar */ 172);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramPropertiesToolbar = function(_DiagramToolbar) {
            _inherits(DiagramPropertiesToolbar, _DiagramToolbar);
            var _super = _createSuper(DiagramPropertiesToolbar);

            function DiagramPropertiesToolbar() {
                _classCallCheck(this, DiagramPropertiesToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramPropertiesToolbar, [{
                key: "_getCommands",
                value: function() {
                    return _diagram2.default.getPropertiesToolbarCommands()
                }
            }]);
            return DiagramPropertiesToolbar
        }(_uiDiagram2.default);
        module.exports = DiagramPropertiesToolbar
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.context_menu.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.menu_helper */ 414);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram3 = __webpack_require__( /*! ./diagram.bar */ 254);
        var _diagram4 = _interopRequireDefault(_diagram3);
        var _diagram5 = __webpack_require__( /*! ./diagram.importer */ 90);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_TOUCHBAR_CLASS = "dx-diagram-touchbar";
        var DIAGRAM_TOUCHBAR_OVERLAY_CLASS = "dx-diagram-touchbar-overlay";
        var DIAGRAM_TOUCHBAR_TARGET_CLASS = "dx-diagram-touchbar-target";
        var DIAGRAM_TOUCHBAR_MIN_UNWRAPPED_WIDTH = 800;
        var DIAGRAM_TOUCHBAR_Y_OFFSET = 32;
        var DiagramContextMenuWrapper = function(_Widget) {
            _inherits(DiagramContextMenuWrapper, _Widget);
            var _super = _createSuper(DiagramContextMenuWrapper);

            function DiagramContextMenuWrapper() {
                _classCallCheck(this, DiagramContextMenuWrapper);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramContextMenuWrapper, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramContextMenuWrapper.prototype), "_init", this).call(this);
                    this._createOnVisibilityChangingAction();
                    this._createOnInternalCommand();
                    this._createOnCustomCommand();
                    this._createOnItemClickAction();
                    this._tempState = void 0;
                    this._commands = [];
                    this._commandToIndexMap = {};
                    this.bar = new DiagramContextMenuBar(this)
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(DiagramContextMenuWrapper.prototype), "_initMarkup", this).call(this);
                    this._commands = this._getCommands();
                    this._commandToIndexMap = {};
                    this._fillCommandToIndexMap(this._commands, []);
                    this._$contextMenuTargetElement = (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOUCHBAR_TARGET_CLASS).appendTo(this.$element());
                    var $contextMenu = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._contextMenuInstance = this._createComponent($contextMenu, DiagramContextMenu, {
                        isTouchBarMode: this._isTouchBarMode(),
                        cssClass: this._isTouchBarMode() ? DIAGRAM_TOUCHBAR_CLASS : _uiDiagram2.default.getContextMenuCssClass(),
                        closeOnOutsideClick: false,
                        showEvent: "",
                        focusStateEnabled: false,
                        items: this._commands,
                        position: this._isTouchBarMode() ? {
                            my: {
                                x: "center",
                                y: "bottom"
                            },
                            at: {
                                x: "center",
                                y: "top"
                            },
                            of: this._$contextMenuTargetElement
                        } : {},
                        itemTemplate: function(itemData, itemIndex, itemElement) {
                            _uiDiagram2.default.getContextMenuItemTemplate(this, itemData, itemIndex, itemElement)
                        },
                        onItemClick: function(_ref) {
                            var itemData = _ref.itemData;
                            return _this._onItemClick(itemData)
                        },
                        onShowing: function(e) {
                            if (true === _this._inOnShowing) {
                                return
                            }
                            _this._inOnShowing = true;
                            _this._onVisibilityChangingAction({
                                visible: true,
                                component: _this
                            });
                            e.component.option("items", e.component.option("items"));
                            delete _this._inOnShowing
                        }
                    })
                }
            }, {
                key: "_show",
                value: function(x, y, selection) {
                    this._contextMenuInstance.hide();
                    if (this._isTouchBarMode()) {
                        this._$contextMenuTargetElement.show();
                        if (!selection) {
                            selection = {
                                x: x,
                                y: y,
                                width: 0,
                                height: 0
                            }
                        }
                        var widthCorrection = selection.width > DIAGRAM_TOUCHBAR_MIN_UNWRAPPED_WIDTH ? 0 : (DIAGRAM_TOUCHBAR_MIN_UNWRAPPED_WIDTH - selection.width) / 2;
                        this._$contextMenuTargetElement.css({
                            left: selection.x - widthCorrection,
                            top: selection.y - DIAGRAM_TOUCHBAR_Y_OFFSET,
                            width: selection.width + 2 * widthCorrection,
                            height: selection.height + 2 * DIAGRAM_TOUCHBAR_Y_OFFSET
                        });
                        this._contextMenuInstance.show()
                    } else {
                        this._contextMenuInstance.option("position", {
                            offset: x + " " + y
                        });
                        this._contextMenuInstance.show()
                    }
                }
            }, {
                key: "_hide",
                value: function() {
                    this._$contextMenuTargetElement.hide();
                    this._contextMenuInstance.hide()
                }
            }, {
                key: "_isTouchBarMode",
                value: function() {
                    var _getDiagram = (0, _diagram5.getDiagram)(),
                        Browser = _getDiagram.Browser;
                    return Browser.TouchUI
                }
            }, {
                key: "_onItemClick",
                value: function(itemData) {
                    var processed = false;
                    if (this._onItemClickAction) {
                        processed = this._onItemClickAction(itemData)
                    }
                    if (!processed) {
                        _uiDiagram2.default.onContextMenuItemClick(this, itemData, this._executeCommand.bind(this));
                        this._contextMenuInstance.hide()
                    }
                }
            }, {
                key: "_executeCommand",
                value: function(command, name, value) {
                    if ("number" === typeof command) {
                        this.bar.raiseBarCommandExecuted(command, value)
                    } else {
                        if ("string" === typeof command) {
                            this._onInternalCommandAction({
                                command: command
                            })
                        }
                    }
                    if (void 0 !== name) {
                        this._onCustomCommandAction({
                            name: name
                        })
                    }
                }
            }, {
                key: "_createOnInternalCommand",
                value: function() {
                    this._onInternalCommandAction = this._createActionByOption("onInternalCommand")
                }
            }, {
                key: "_createOnCustomCommand",
                value: function() {
                    this._onCustomCommandAction = this._createActionByOption("onCustomCommand")
                }
            }, {
                key: "_getCommands",
                value: function() {
                    return _diagram2.default.getContextMenuCommands(this.option("commands"))
                }
            }, {
                key: "_fillCommandToIndexMap",
                value: function(commands, indexPath) {
                    var _this2 = this;
                    commands.forEach(function(command, index) {
                        var commandIndexPath = indexPath.concat([index]);
                        if (void 0 !== command.command) {
                            _this2._commandToIndexMap[command.command] = commandIndexPath
                        }
                        if (Array.isArray(command.items)) {
                            _this2._fillCommandToIndexMap(command.items, commandIndexPath)
                        }
                    })
                }
            }, {
                key: "_setItemEnabled",
                value: function(key, enabled) {
                    this._setItemVisible(key, enabled)
                }
            }, {
                key: "_setItemVisible",
                value: function(key, visible) {
                    var itemOptionText = _uiDiagram2.default.getItemOptionText(this._contextMenuInstance, this._commandToIndexMap[key]);
                    _uiDiagram2.default.updateContextMenuItemVisible(this._contextMenuInstance, itemOptionText, visible)
                }
            }, {
                key: "_setItemValue",
                value: function(key, value) {
                    var itemOptionText = _uiDiagram2.default.getItemOptionText(this._contextMenuInstance, this._commandToIndexMap[key]);
                    _uiDiagram2.default.updateContextMenuItemValue(this._contextMenuInstance, itemOptionText, key, value)
                }
            }, {
                key: "_setItemSubItems",
                value: function(key, items) {
                    var itemOptionText = _uiDiagram2.default.getItemOptionText(this._contextMenuInstance, this._commandToIndexMap[key]);
                    _uiDiagram2.default.updateContextMenuItems(this._contextMenuInstance, itemOptionText, key, items)
                }
            }, {
                key: "_setEnabled",
                value: function(enabled) {
                    this._contextMenuInstance.option("disabled", !enabled)
                }
            }, {
                key: "isVisible",
                value: function() {
                    return this._inOnShowing
                }
            }, {
                key: "_createOnVisibilityChangingAction",
                value: function() {
                    this._onVisibilityChangingAction = this._createActionByOption("onVisibilityChanging")
                }
            }, {
                key: "_createOnItemClickAction",
                value: function() {
                    this._onItemClickAction = this._createActionByOption("onItemClick")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onVisibilityChanging":
                            this._createOnVisibilityChangingAction();
                            break;
                        case "onInternalCommand":
                            this._createOnInternalCommand();
                            break;
                        case "onCustomCommand":
                            this._createOnCustomCommand();
                            break;
                        case "onItemClick":
                            this._createOnItemClickAction();
                            break;
                        case "commands":
                            this._invalidate();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramContextMenuWrapper.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return DiagramContextMenuWrapper
        }(_ui2.default);
        var DiagramContextMenu = function(_ContextMenu) {
            _inherits(DiagramContextMenu, _ContextMenu);
            var _super2 = _createSuper(DiagramContextMenu);

            function DiagramContextMenu() {
                _classCallCheck(this, DiagramContextMenu);
                return _super2.apply(this, arguments)
            }
            _createClass(DiagramContextMenu, [{
                key: "_renderContextMenuOverlay",
                value: function() {
                    var _this3 = this;
                    _get(_getPrototypeOf(DiagramContextMenu.prototype), "_renderContextMenuOverlay", this).call(this);
                    if (this._overlay && this.option("isTouchBarMode")) {
                        this._overlay && this._overlay.option("onShown", function() {
                            var $content = (0, _renderer2.default)(_this3._overlay.$content());
                            $content.parent().addClass(DIAGRAM_TOUCHBAR_OVERLAY_CLASS)
                        })
                    }
                }
            }]);
            return DiagramContextMenu
        }(_context_menu2.default);
        var DiagramContextMenuBar = function(_DiagramBar) {
            _inherits(DiagramContextMenuBar, _DiagramBar);
            var _super3 = _createSuper(DiagramContextMenuBar);

            function DiagramContextMenuBar(owner) {
                _classCallCheck(this, DiagramContextMenuBar);
                return _super3.call(this, owner)
            }
            _createClass(DiagramContextMenuBar, [{
                key: "getCommandKeys",
                value: function() {
                    return this._getKeys(this._owner._commands)
                }
            }, {
                key: "setItemValue",
                value: function(key, value) {
                    this._owner._setItemValue(key, value)
                }
            }, {
                key: "setItemEnabled",
                value: function(key, enabled) {
                    this._owner._setItemEnabled(key, enabled)
                }
            }, {
                key: "setItemVisible",
                value: function(key, visible) {
                    this._owner._setItemVisible(key, visible)
                }
            }, {
                key: "setItemSubItems",
                value: function(key, items) {
                    this._owner._setItemSubItems(key, items)
                }
            }, {
                key: "setEnabled",
                value: function(enabled) {
                    this._owner._setEnabled(enabled)
                }
            }, {
                key: "isVisible",
                value: function() {
                    return this._owner.isVisible()
                }
            }]);
            return DiagramContextMenuBar
        }(_diagram4.default);
        module.exports = {
            DiagramContextMenuWrapper: DiagramContextMenuWrapper,
            DiagramContextMenu: DiagramContextMenu
        }
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.context_toolbox.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _popover = __webpack_require__( /*! ../popover */ 119);
        var _popover2 = _interopRequireDefault(_popover);
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_CONTEXT_TOOLBOX_TARGET_CLASS = "dx-diagram-context-toolbox-target";
        var DIAGRAM_CONTEXT_TOOLBOX_CLASS = "dx-diagram-context-toolbox";
        var DIAGRAM_TOUCH_CONTEXT_TOOLBOX_CLASS = "dx-diagram-touch-context-toolbox";
        var DIAGRAM_CONTEXT_TOOLBOX_CONTENT_CLASS = "dx-diagram-context-toolbox-content";
        var DiagramContextToolbox = function(_Widget) {
            _inherits(DiagramContextToolbox, _Widget);
            var _super = _createSuper(DiagramContextToolbox);

            function DiagramContextToolbox() {
                _classCallCheck(this, DiagramContextToolbox);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramContextToolbox, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramContextToolbox.prototype), "_init", this).call(this);
                    this._onShownAction = this._createActionByOption("onShown");
                    this._popoverPositionData = [{
                        my: {
                            x: "center",
                            y: "top"
                        },
                        at: {
                            x: "center",
                            y: "bottom"
                        },
                        offset: {
                            x: 0,
                            y: 5
                        }
                    }, {
                        my: {
                            x: "right",
                            y: "center"
                        },
                        at: {
                            x: "left",
                            y: "center"
                        },
                        offset: {
                            x: -5,
                            y: 0
                        }
                    }, {
                        my: {
                            x: "center",
                            y: "bottom"
                        },
                        at: {
                            x: "center",
                            y: "top"
                        },
                        offset: {
                            x: 0,
                            y: -5
                        }
                    }, {
                        my: {
                            x: "left",
                            y: "center"
                        },
                        at: {
                            x: "right",
                            y: "center"
                        },
                        offset: {
                            x: 5,
                            y: 0
                        }
                    }]
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(DiagramContextToolbox.prototype), "_initMarkup", this).call(this);
                    this._$popoverTargetElement = (0, _renderer2.default)("<div>").addClass(DIAGRAM_CONTEXT_TOOLBOX_TARGET_CLASS).appendTo(this.$element());
                    var $popoverElement = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    var _getDiagram = (0, _diagram.getDiagram)(),
                        Browser = _getDiagram.Browser;
                    var popoverClass = DIAGRAM_CONTEXT_TOOLBOX_CLASS;
                    if (Browser.TouchUI) {
                        popoverClass += " " + DIAGRAM_TOUCH_CONTEXT_TOOLBOX_CLASS
                    }
                    this._popoverInstance = this._createComponent($popoverElement, _popover2.default, {
                        closeOnOutsideClick: false,
                        container: this.$element(),
                        elementAttr: {
                            "class": popoverClass
                        }
                    })
                }
            }, {
                key: "_show",
                value: function(x, y, side, category, callback) {
                    this._popoverInstance.hide();
                    var $content = (0, _renderer2.default)("<div>").addClass(DIAGRAM_CONTEXT_TOOLBOX_CONTENT_CLASS);
                    this._$popoverTargetElement.css({
                        left: x + this._popoverPositionData[side].offset.x,
                        top: y + this._popoverPositionData[side].offset.y
                    }).show();
                    this._popoverInstance.option({
                        position: {
                            my: this._popoverPositionData[side].my,
                            at: this._popoverPositionData[side].at,
                            of: this._$popoverTargetElement
                        },
                        contentTemplate: $content,
                        onContentReady: function() {
                            var _this = this;
                            var $element = this.$element().find("." + DIAGRAM_CONTEXT_TOOLBOX_CONTENT_CLASS);
                            this._onShownAction({
                                category: category,
                                callback: callback,
                                $element: $element,
                                hide: function() {
                                    return _this._popoverInstance.hide()
                                }
                            })
                        }.bind(this)
                    });
                    this._popoverInstance.show()
                }
            }, {
                key: "_hide",
                value: function() {
                    this._$popoverTargetElement.hide();
                    this._popoverInstance.hide()
                }
            }]);
            return DiagramContextToolbox
        }(_ui2.default);
        module.exports = DiagramContextToolbox
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.dialogs.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var Popup = __webpack_require__( /*! ../popup */ 44);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var DiagramDialog = function(_Widget) {
            _inherits(DiagramDialog, _Widget);
            var _super = _createSuper(DiagramDialog);

            function DiagramDialog() {
                _classCallCheck(this, DiagramDialog);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramDialog, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramDialog.prototype), "_init", this).call(this);
                    this._command = void 0;
                    this._isShown = false;
                    this._createOnGetContentOption();
                    this._createOnHiddenOption()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(DiagramDialog.prototype), "_initMarkup", this).call(this);
                    this._command = this.option("command");
                    this._$popupElement = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._popup = this._createComponent(this._$popupElement, Popup, {
                        title: this.option("title"),
                        maxWidth: this.option("maxWidth"),
                        height: this.option("height"),
                        toolbarItems: this.option("toolbarItems"),
                        onHidden: this._onHiddenAction
                    })
                }
            }, {
                key: "_clean",
                value: function() {
                    delete this._popup;
                    this._$popupElement && this._$popupElement.remove()
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return extend(_get(_getPrototypeOf(DiagramDialog.prototype), "_getDefaultOptions", this).call(this), {
                        title: "",
                        maxWidth: 500,
                        height: "auto",
                        toolbarItems: this._getToolbarItems()
                    })
                }
            }, {
                key: "_getToolbarItems",
                value: function() {
                    return [this._getOkToolbarItem(), this._getCancelToolbarItem()]
                }
            }, {
                key: "_getOkToolbarItem",
                value: function() {
                    return {
                        widget: "dxButton",
                        location: "after",
                        toolbar: "bottom",
                        options: {
                            text: _message2.default.format("dxDiagram-dialogButtonOK"),
                            onClick: function() {
                                this._command.execute(this._commandParameter);
                                this._hide()
                            }.bind(this)
                        }
                    }
                }
            }, {
                key: "_getCancelToolbarItem",
                value: function() {
                    return {
                        widget: "dxButton",
                        location: "after",
                        toolbar: "bottom",
                        options: {
                            text: _message2.default.format("dxDiagram-dialogButtonCancel"),
                            onClick: this._hide.bind(this)
                        }
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "title":
                        case "maxWidth":
                        case "height":
                        case "toolbarItems":
                            this._popup.option(args.name, args.value);
                            break;
                        case "command":
                            this._command = args.value;
                            break;
                        case "onGetContent":
                            this._createOnGetContentOption();
                            break;
                        case "onHidden":
                            this._createOnHiddenOption();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramDialog.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "_createOnGetContentOption",
                value: function() {
                    this._onGetContentAction = this._createActionByOption("onGetContent")
                }
            }, {
                key: "_createOnHiddenOption",
                value: function() {
                    this._onHiddenAction = this._createActionByOption("onHidden")
                }
            }, {
                key: "_hide",
                value: function() {
                    this._popup.hide();
                    this._isShown = false
                }
            }, {
                key: "_show",
                value: function() {
                    this._popup.content().empty().append(this._onGetContentAction());
                    this._popup.show();
                    this._isShown = true
                }
            }, {
                key: "isVisible",
                value: function() {
                    return this._isShown
                }
            }]);
            return DiagramDialog
        }(_ui2.default);
        module.exports = DiagramDialog
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.scroll_view.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _scroll_view = __webpack_require__( /*! ../scroll_view */ 107);
        var _scroll_view2 = _interopRequireDefault(_scroll_view);
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramScrollView = function(_Widget) {
            _inherits(DiagramScrollView, _Widget);
            var _super = _createSuper(DiagramScrollView);

            function DiagramScrollView() {
                _classCallCheck(this, DiagramScrollView);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramScrollView, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramScrollView.prototype), "_init", this).call(this);
                    var _getDiagram = (0, _diagram.getDiagram)(),
                        EventDispatcher = _getDiagram.EventDispatcher;
                    this.onScroll = new EventDispatcher;
                    this._createOnCreateDiagramAction()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var _this = this;
                    _get(_getPrototypeOf(DiagramScrollView.prototype), "_initMarkup", this).call(this);
                    var $scrollViewWrapper = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._scrollView = this._createComponent($scrollViewWrapper, _scroll_view2.default, {
                        direction: "both",
                        bounceEnabled: false,
                        onScroll: function(_ref) {
                            var scrollOffset = _ref.scrollOffset;
                            _this._raiseOnScroll(scrollOffset.left, scrollOffset.top)
                        }
                    });
                    this._onCreateDiagramAction({
                        $parent: (0, _renderer2.default)(this._scrollView.content()),
                        scrollView: this
                    })
                }
            }, {
                key: "setScroll",
                value: function(left, top) {
                    this._scrollView.scrollTo({
                        left: left,
                        top: top
                    })
                }
            }, {
                key: "offsetScroll",
                value: function(left, top) {
                    this._scrollView.scrollBy({
                        left: left,
                        top: top
                    })
                }
            }, {
                key: "getSize",
                value: function() {
                    var _getDiagram2 = (0, _diagram.getDiagram)(),
                        Size = _getDiagram2.Size;
                    var $element = this._scrollView.$element();
                    return new Size(Math.floor($element.width()), Math.floor($element.height()))
                }
            }, {
                key: "getScrollContainer",
                value: function() {
                    return this._scrollView.$element()[0]
                }
            }, {
                key: "getScrollBarWidth",
                value: function() {
                    return 0
                }
            }, {
                key: "detachEvents",
                value: function() {}
            }, {
                key: "_raiseOnScroll",
                value: function(left, top) {
                    var _getDiagram3 = (0, _diagram.getDiagram)(),
                        Point = _getDiagram3.Point;
                    this.onScroll.raise("notifyScrollChanged", function() {
                        return new Point(left, top)
                    })
                }
            }, {
                key: "_createOnCreateDiagramAction",
                value: function() {
                    this._onCreateDiagramAction = this._createActionByOption("onCreateDiagram")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onCreateDiagram":
                            this._createOnCreateDiagramAction();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramScrollView.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return DiagramScrollView
        }(_ui2.default);
        module.exports = DiagramScrollView
    },
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.toolbox_manager.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var DiagramToolboxManager = {
            getDefaultGroups: function() {
                return this._groups || (this._groups = {
                    general: {
                        category: "general",
                        title: _message2.default.format("dxDiagram-categoryGeneral")
                    },
                    flowchart: {
                        category: "flowchart",
                        title: _message2.default.format("dxDiagram-categoryFlowchart")
                    },
                    orgChart: {
                        category: "orgChart",
                        title: _message2.default.format("dxDiagram-categoryOrgChart")
                    },
                    containers: {
                        category: "containers",
                        title: _message2.default.format("dxDiagram-categoryContainers")
                    },
                    custom: {
                        category: "custom",
                        title: _message2.default.format("dxDiagram-categoryCustom")
                    }
                })
            },
            getGroups: function(groups) {
                var defaultGroups = this.getDefaultGroups();
                if (groups) {
                    return groups.map(function(g) {
                        if ("string" === typeof g) {
                            return {
                                category: g,
                                title: defaultGroups[g] && defaultGroups[g].title || g
                            }
                        }
                        return g
                    }).filter(function(g) {
                        return g
                    })
                }
                return [defaultGroups.general, defaultGroups.flowchart, defaultGroups.orgChart, defaultGroups.containers]
            }
        };
        module.exports = DiagramToolboxManager
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.toolbox.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 6);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _text_box = __webpack_require__( /*! ../text_box */ 88);
        var _text_box2 = _interopRequireDefault(_text_box);
        var _accordion = __webpack_require__( /*! ../accordion */ 342);
        var _accordion2 = _interopRequireDefault(_accordion);
        var _scroll_view = __webpack_require__( /*! ../scroll_view */ 107);
        var _scroll_view2 = _interopRequireDefault(_scroll_view);
        var _tooltip = __webpack_require__( /*! ../tooltip */ 168);
        var _tooltip2 = _interopRequireDefault(_tooltip);
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.floating_panel */ 415);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_TOOLBOX_MIN_HEIGHT = 130;
        var DIAGRAM_TOOLBOX_POPUP_CLASS = "dx-diagram-toolbox-popup";
        var DIAGRAM_TOOLBOX_PANEL_CLASS = "dx-diagram-toolbox-panel";
        var DIAGRAM_TOOLBOX_INPUT_CONTAINER_CLASS = "dx-diagram-toolbox-input-container";
        var DIAGRAM_TOOLBOX_INPUT_CLASS = "dx-diagram-toolbox-input";
        var DIAGRAM_TOOLTIP_DATATOGGLE = "shape-toolbox-tooltip";
        var DIAGRAM_SKIP_GESTURE_CLASS = "dx-skip-gesture-event";
        var DiagramToolbox = function(_DiagramFloatingPanel) {
            _inherits(DiagramToolbox, _DiagramFloatingPanel);
            var _super = _createSuper(DiagramToolbox);

            function DiagramToolbox() {
                _classCallCheck(this, DiagramToolbox);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramToolbox, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramToolbox.prototype), "_init", this).call(this);
                    this._toolboxes = [];
                    this._filterText = "";
                    this._createOnShapeCategoryRenderedAction();
                    this._createOnFilterChangedAction()
                }
            }, {
                key: "_getPopupClass",
                value: function() {
                    return DIAGRAM_TOOLBOX_POPUP_CLASS
                }
            }, {
                key: "_getPopupHeight",
                value: function() {
                    return this.isMobileView() ? "100%" : _get(_getPrototypeOf(DiagramToolbox.prototype), "_getPopupHeight", this).call(this)
                }
            }, {
                key: "_getPopupMaxHeight",
                value: function() {
                    return this.isMobileView() ? "100%" : _get(_getPrototypeOf(DiagramToolbox.prototype), "_getPopupMaxHeight", this).call(this)
                }
            }, {
                key: "_getPopupMinHeight",
                value: function() {
                    return DIAGRAM_TOOLBOX_MIN_HEIGHT
                }
            }, {
                key: "_getPopupPosition",
                value: function() {
                    var $parent = this.option("offsetParent");
                    var position = {
                        my: "left top",
                        at: "left top",
                        of: $parent
                    };
                    if (!this.isMobileView()) {
                        return (0, _extend.extend)(position, {
                            offset: this.option("offsetX") + " " + this.option("offsetY")
                        })
                    }
                    return position
                }
            }, {
                key: "_getPopupContainer",
                value: function() {
                    return this.isMobileView() ? _get(_getPrototypeOf(DiagramToolbox.prototype), "_getPopupContainer", this).call(this) : void 0
                }
            }, {
                key: "_getPopupAnimation",
                value: function() {
                    var $parent = this.option("offsetParent");
                    if (this.isMobileView()) {
                        return {
                            hide: this._getPopupSlideAnimationObject({
                                direction: "left",
                                from: {
                                    position: {
                                        my: "left top",
                                        at: "left top",
                                        of: $parent
                                    }
                                },
                                to: {
                                    position: {
                                        my: "right top",
                                        at: "left top",
                                        of: $parent
                                    }
                                }
                            }),
                            show: this._getPopupSlideAnimationObject({
                                direction: "right",
                                from: {
                                    position: {
                                        my: "right top",
                                        at: "left top",
                                        of: $parent
                                    }
                                },
                                to: {
                                    position: {
                                        my: "left top",
                                        at: "left top",
                                        of: $parent
                                    }
                                }
                            })
                        }
                    }
                    return _get(_getPrototypeOf(DiagramToolbox.prototype), "_getPopupAnimation", this).call(this)
                }
            }, {
                key: "_getPopupOptions",
                value: function() {
                    var options = _get(_getPrototypeOf(DiagramToolbox.prototype), "_getPopupOptions", this).call(this);
                    if (!this.isMobileView()) {
                        return (0, _extend.extend)(options, {
                            showTitle: true,
                            toolbarItems: [{
                                widget: "dxButton",
                                location: "center",
                                options: {
                                    activeStateEnabled: false,
                                    focusStateEnabled: false,
                                    hoverStateEnabled: false,
                                    icon: "diagram-toolbox-drag",
                                    stylingMode: "outlined",
                                    type: "normal"
                                }
                            }]
                        })
                    }
                    return options
                }
            }, {
                key: "_renderPopupContent",
                value: function($parent) {
                    var $inputContainer = (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOOLBOX_INPUT_CONTAINER_CLASS).appendTo($parent);
                    this._renderSearchInput($inputContainer);
                    var panelHeight = !(0, _window.hasWindow)() ? "100%" : "calc(100% - " + this._searchInput.$element().height() + "px)";
                    var $panel = (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOOLBOX_PANEL_CLASS).appendTo($parent).height(panelHeight);
                    this._renderScrollView($panel)
                }
            }, {
                key: "updateMaxHeight",
                value: function() {
                    if (this.isMobileView()) {
                        return
                    }
                    var maxHeight = 6;
                    if (this._popup) {
                        var $title = this._getPopupTitle();
                        maxHeight += $title.outerHeight()
                    }
                    if (this._accordion) {
                        maxHeight += this._accordion.$element().outerHeight()
                    }
                    if (this._searchInput) {
                        maxHeight += this._searchInput.$element().outerHeight()
                    }
                    this.option("maxHeight", maxHeight)
                }
            }, {
                key: "_renderSearchInput",
                value: function($parent) {
                    var _this = this;
                    var $input = (0, _renderer2.default)("<div>").addClass(DIAGRAM_TOOLBOX_INPUT_CLASS).appendTo($parent);
                    this._searchInput = this._createComponent($input, _text_box2.default, {
                        stylingMode: "outlined",
                        placeholder: _message2.default.format("dxDiagram-uiSearch"),
                        onValueChanged: function(data) {
                            _this._onInputChanged(data.value)
                        },
                        valueChangeEvent: "keyup",
                        buttons: [{
                            name: "search",
                            location: "after",
                            options: {
                                activeStateEnabled: false,
                                focusStateEnabled: false,
                                hoverStateEnabled: false,
                                icon: "search",
                                stylingMode: "outlined",
                                type: "normal",
                                onClick: function() {
                                    _this._searchInput.focus()
                                }
                            }
                        }]
                    })
                }
            }, {
                key: "_renderScrollView",
                value: function($parent) {
                    var $scrollViewWrapper = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._scrollView = this._createComponent($scrollViewWrapper, _scroll_view2.default);
                    var $accordion = (0, _renderer2.default)("<div>").appendTo(this._scrollView.content());
                    this._renderAccordion($accordion)
                }
            }, {
                key: "_getAccordionDataSource",
                value: function() {
                    var _this2 = this;
                    var result = [];
                    var toolboxGroups = this.option("toolboxGroups");
                    for (var i = 0; i < toolboxGroups.length; i++) {
                        var category = toolboxGroups[i].category;
                        var title = toolboxGroups[i].title;
                        var groupObj = {
                            category: category,
                            title: title || category,
                            expanded: toolboxGroups[i].expanded,
                            displayMode: toolboxGroups[i].displayMode,
                            shapes: toolboxGroups[i].shapes,
                            onTemplate: function(widget, $element, data) {
                                var $toolboxElement = (0, _renderer2.default)($element);
                                _this2._onShapeCategoryRenderedAction({
                                    category: data.category,
                                    displayMode: data.displayMode,
                                    dataToggle: DIAGRAM_TOOLTIP_DATATOGGLE,
                                    shapes: data.shapes,
                                    $element: $toolboxElement
                                });
                                _this2._toolboxes.push($toolboxElement);
                                if ("" !== _this2._filterText) {
                                    _this2._onFilterChangedAction({
                                        text: _this2._filterText,
                                        filteringToolboxes: _this2._toolboxes.length - 1
                                    })
                                }
                                _this2._createTooltips($toolboxElement.find('[data-toggle="' + DIAGRAM_TOOLTIP_DATATOGGLE + '"]'))
                            }
                        };
                        result.push(groupObj)
                    }
                    return result
                }
            }, {
                key: "_createTooltips",
                value: function(targets) {
                    var _this3 = this;
                    var _getDiagram = (0, _diagram.getDiagram)(),
                        Browser = _getDiagram.Browser;
                    if (Browser.TouchUI) {
                        return
                    }
                    var $container = this.$element();
                    targets.each(function(index, element) {
                        var $target = (0, _renderer2.default)(element);
                        var title = $target.attr("title");
                        if (title) {
                            var $tooltip = (0, _renderer2.default)("<div>").html(title).appendTo($container);
                            _this3._createComponent($tooltip, _tooltip2.default, {
                                target: $target.get(0),
                                showEvent: "mouseenter",
                                hideEvent: "mouseleave",
                                position: "top",
                                animation: {
                                    show: {
                                        type: "fade",
                                        from: 0,
                                        to: 1,
                                        delay: 500
                                    },
                                    hide: {
                                        type: "fade",
                                        from: 1,
                                        to: 0,
                                        delay: 100
                                    }
                                }
                            })
                        }
                    })
                }
            }, {
                key: "_renderAccordion",
                value: function($container) {
                    var _this4 = this;
                    var data = this._getAccordionDataSource();
                    this._accordion = this._createComponent($container, _accordion2.default, {
                        multiple: true,
                        animationDuration: 0,
                        activeStateEnabled: false,
                        focusStateEnabled: false,
                        hoverStateEnabled: false,
                        collapsible: true,
                        displayExpr: "title",
                        dataSource: data,
                        disabled: this.option("disabled"),
                        itemTemplate: function(data, index, $element) {
                            data.onTemplate(_this4, $element, data)
                        },
                        onSelectionChanged: function(e) {
                            _this4._updateScrollAnimateSubscription(e.component)
                        },
                        onContentReady: function(e) {
                            _this4._updateScrollAnimateSubscription(e.component)
                        }
                    });
                    for (var i = 0; i < data.length; i++) {
                        if (false === data[i].expanded) {
                            this._accordion.collapseItem(i)
                        } else {
                            if (true === data[i].expanded) {
                                this._accordion.expandItem(i)
                            }
                        }
                    }
                }
            }, {
                key: "_updateScrollAnimateSubscription",
                value: function(component) {
                    var _this5 = this;
                    component._deferredAnimate = new _deferred.Deferred;
                    component._deferredAnimate.done(function() {
                        _this5.updateMaxHeight();
                        _this5._scrollView.update();
                        _this5._updateScrollAnimateSubscription(component)
                    })
                }
            }, {
                key: "_raiseToolboxDragStart",
                value: function() {
                    this._scrollView.$element().addClass(DIAGRAM_SKIP_GESTURE_CLASS)
                }
            }, {
                key: "_raiseToolboxDragEnd",
                value: function() {
                    this._scrollView.$element().removeClass(DIAGRAM_SKIP_GESTURE_CLASS)
                }
            }, {
                key: "_onInputChanged",
                value: function(text) {
                    var _this6 = this;
                    this._filterText = text;
                    this._onFilterChangedAction({
                        text: this._filterText,
                        filteringToolboxes: this._toolboxes.map(function($element, index) {
                            return index
                        })
                    });
                    this._toolboxes.forEach(function($element) {
                        var $tooltipContainer = (0, _renderer2.default)($element);
                        _this6._createTooltips($tooltipContainer.find('[data-toggle="' + DIAGRAM_TOOLTIP_DATATOGGLE + '"]'))
                    });
                    this.updateMaxHeight();
                    this._scrollView.update()
                }
            }, {
                key: "_createOnShapeCategoryRenderedAction",
                value: function() {
                    this._onShapeCategoryRenderedAction = this._createActionByOption("onShapeCategoryRendered")
                }
            }, {
                key: "_createOnFilterChangedAction",
                value: function() {
                    this._onFilterChangedAction = this._createActionByOption("onFilterChanged")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onShapeCategoryRendered":
                            this._createOnShapeCategoryRenderedAction();
                            break;
                        case "onFilterChanged":
                            this._createOnFilterChangedAction();
                            break;
                        case "toolboxGroups":
                            this._accordion.option("dataSource", this._getAccordionDataSource());
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramToolbox.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return DiagramToolbox
        }(_uiDiagram2.default);
        module.exports = DiagramToolbox
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.properties_panel.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _scroll_view = __webpack_require__( /*! ../scroll_view */ 107);
        var _scroll_view2 = _interopRequireDefault(_scroll_view);
        var _tab_panel = __webpack_require__( /*! ../tab_panel */ 240);
        var _tab_panel2 = _interopRequireDefault(_tab_panel);
        var _uiDiagram = __webpack_require__( /*! ./ui.diagram.floating_panel */ 415);
        var _uiDiagram2 = _interopRequireDefault(_uiDiagram);
        var _diagram = __webpack_require__( /*! ./diagram.commands_manager */ 124);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DIAGRAM_PROPERTIES_POPUP_WIDTH = 420;
        var DIAGRAM_PROPERTIES_POPUP_HEIGHT = 340;
        var DIAGRAM_PROPERTIES_POPUP_CLASS = "dx-diagram-properties-popup";
        var DIAGRAM_PROPERTIES_POPUP_NOTABS_CLASS = "dx-diagram-properties-popup-notabs";
        var DIAGRAM_PROPERTIES_PANEL_CLASS = "dx-diagram-properties-panel";
        var DIAGRAM_PROPERTIES_PANEL_GROUP_TITLE_CLASS = "dx-diagram-properties-panel-group-title";
        var DIAGRAM_PROPERTIES_PANEL_GROUP_TOOLBAR_CLASS = "dx-diagram-properties-panel-group-toolbar";
        var DiagramPropertiesPanel = function(_DiagramFloatingPanel) {
            _inherits(DiagramPropertiesPanel, _DiagramFloatingPanel);
            var _super = _createSuper(DiagramPropertiesPanel);

            function DiagramPropertiesPanel() {
                _classCallCheck(this, DiagramPropertiesPanel);
                return _super.apply(this, arguments)
            }
            _createClass(DiagramPropertiesPanel, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_init", this).call(this);
                    this._commandTabs = _diagram2.default.getPropertyPanelCommandTabs(this.option("propertyTabs"));
                    this._createOnCreateToolbar();
                    this._createOnSelectedGroupChanged()
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    this._toolbars = [];
                    this._selectedToolbar = void 0;
                    _get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_initMarkup", this).call(this)
                }
            }, {
                key: "_getPopupClass",
                value: function() {
                    var className = DIAGRAM_PROPERTIES_POPUP_CLASS;
                    if (!this._hasTabPanel()) {
                        className += " " + DIAGRAM_PROPERTIES_POPUP_NOTABS_CLASS
                    }
                    return className
                }
            }, {
                key: "_getPopupWidth",
                value: function() {
                    return this.isMobileView() ? "100%" : DIAGRAM_PROPERTIES_POPUP_WIDTH
                }
            }, {
                key: "_getPopupHeight",
                value: function() {
                    return DIAGRAM_PROPERTIES_POPUP_HEIGHT
                }
            }, {
                key: "_getPopupPosition",
                value: function() {
                    var $parent = this.option("offsetParent");
                    if (this.isMobileView()) {
                        return {
                            my: "left bottom",
                            at: "left bottom",
                            of: $parent
                        }
                    }
                    return {
                        my: "right bottom",
                        at: "right bottom",
                        of: $parent,
                        offset: "-" + this.option("offsetX") + " -" + this.option("offsetY")
                    }
                }
            }, {
                key: "_getPopupContainer",
                value: function() {
                    return this.isMobileView() ? _get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_getPopupContainer", this).call(this) : void 0
                }
            }, {
                key: "_getPopupAnimation",
                value: function() {
                    var $parent = this.option("offsetParent");
                    if (this.isMobileView()) {
                        return {
                            hide: this._getPopupSlideAnimationObject({
                                direction: "bottom",
                                from: {
                                    position: {
                                        my: "left bottom",
                                        at: "left bottom",
                                        of: $parent
                                    }
                                },
                                to: {
                                    position: {
                                        my: "left top",
                                        at: "left bottom",
                                        of: $parent
                                    }
                                }
                            }),
                            show: this._getPopupSlideAnimationObject({
                                direction: "top",
                                from: {
                                    position: {
                                        my: "left top",
                                        at: "left bottom",
                                        of: $parent
                                    }
                                },
                                to: {
                                    position: {
                                        my: "left bottom",
                                        at: "left bottom",
                                        of: $parent
                                    }
                                }
                            })
                        }
                    }
                    return _get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_getPopupAnimation", this).call(this)
                }
            }, {
                key: "_getPopupOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_getPopupOptions", this).call(this), {
                        showTitle: this.isMobileView(),
                        showCloseButton: this.isMobileView()
                    })
                }
            }, {
                key: "_renderPopupContent",
                value: function($parent) {
                    if (!this._commandTabs.length) {
                        return
                    }
                    var $panel = (0, _renderer2.default)("<div>").addClass(DIAGRAM_PROPERTIES_PANEL_CLASS).appendTo($parent);
                    if (this._hasTabPanel()) {
                        this._renderTabPanel($panel)
                    } else {
                        this._renderTabContent($panel, this._commandTabs[0], 0, true)
                    }
                }
            }, {
                key: "_hasTabPanel",
                value: function() {
                    return this._commandTabs.length > 1
                }
            }, {
                key: "_renderTabPanel",
                value: function($parent) {
                    var _this = this;
                    var $tabPanel = (0, _renderer2.default)("<div>").appendTo($parent);
                    this._tabPanel = this._createComponent($tabPanel, _tab_panel2.default, {
                        focusStateEnabled: false,
                        dataSource: this._commandTabs,
                        itemTemplate: function(data, index, $element) {
                            _this._renderTabContent($element, data, index)
                        },
                        onSelectionChanged: function(e) {
                            _this._onSelectedGroupChangedAction();
                            _this._onPointerUpAction()
                        },
                        onContentReady: function(e) {
                            _this._popup.option("height", e.component.$element().height() + _this._getVerticalPaddingsAndBorders());
                            if (_this._firstScrollView) {
                                _this._scrollViewHeight = _this._firstScrollView.$element().outerHeight();
                                _this._firstScrollView.option("height", _this._scrollViewHeight)
                            }
                        }
                    })
                }
            }, {
                key: "_renderTabContent",
                value: function($parent, tab, index, isSingleTab) {
                    var $scrollViewWrapper = (0, _renderer2.default)("<div>").appendTo($parent);
                    var scrollView = this._createComponent($scrollViewWrapper, _scroll_view2.default, {
                        height: this._scrollViewHeight
                    });
                    this._renderTabInnerContent(scrollView.content(), tab, index);
                    if (isSingleTab) {
                        this._popup.option("height", scrollView.$element().height() + this._getVerticalPaddingsAndBorders())
                    } else {
                        this._firstScrollView = this._firstScrollView || scrollView
                    }
                }
            }, {
                key: "_renderTabInnerContent",
                value: function($parent, group, index) {
                    var _this2 = this;
                    if (group.groups) {
                        group.groups.forEach(function(sg, si) {
                            _this2._renderTabGroupContent($parent, index, sg.title, sg.commands)
                        })
                    } else {
                        if (group.commands) {
                            this._renderTabGroupContent($parent, index, void 0, group.commands)
                        }
                    }
                }
            }, {
                key: "_renderTabGroupContent",
                value: function($parent, index, title, commands) {
                    if (title) {
                        (0, _renderer2.default)("<div>").addClass(DIAGRAM_PROPERTIES_PANEL_GROUP_TITLE_CLASS).appendTo($parent).text(title)
                    }
                    var $toolbar = (0, _renderer2.default)("<div>").addClass(DIAGRAM_PROPERTIES_PANEL_GROUP_TOOLBAR_CLASS).appendTo($parent);
                    var args = {
                        $parent: $toolbar,
                        commands: commands
                    };
                    this._onCreateToolbarAction(args);
                    if (!this._toolbars[index]) {
                        this._toolbars[index] = []
                    }
                    this._toolbars[index].push(args.toolbar);
                    this._selectedToolbar = args.toolbar
                }
            }, {
                key: "getActiveToolbars",
                value: function() {
                    var index = this._tabPanel ? this._tabPanel.option("selectedIndex") : 0;
                    return this._toolbars[index]
                }
            }, {
                key: "_createOnCreateToolbar",
                value: function() {
                    this._onCreateToolbarAction = this._createActionByOption("onCreateToolbar")
                }
            }, {
                key: "_createOnSelectedGroupChanged",
                value: function() {
                    this._onSelectedGroupChangedAction = this._createActionByOption("onSelectedGroupChanged")
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "onCreateToolbar":
                            this._createOnCreateToolbar();
                            break;
                        case "onSelectedGroupChanged":
                            this._createOnSelectedGroupChanged();
                            break;
                        case "propertyTabs":
                            this._invalidate();
                            break;
                        default:
                            _get(_getPrototypeOf(DiagramPropertiesPanel.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return DiagramPropertiesPanel
        }(_uiDiagram2.default);
        module.exports = DiagramPropertiesPanel
    },
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.options_update.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _diagram = __webpack_require__( /*! ./diagram.bar */ 254);
        var _diagram2 = _interopRequireDefault(_diagram);
        var _diagram3 = __webpack_require__( /*! ./diagram.importer */ 90);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DiagramOptionsUpdateBar = function(_DiagramBar) {
            _inherits(DiagramOptionsUpdateBar, _DiagramBar);
            var _super = _createSuper(DiagramOptionsUpdateBar);

            function DiagramOptionsUpdateBar(owner) {
                var _this;
                _classCallCheck(this, DiagramOptionsUpdateBar);
                _this = _super.call(this, owner);
                var _getDiagram = (0, _diagram3.getDiagram)(),
                    DiagramCommand = _getDiagram.DiagramCommand;
                _this.commandOptions = {};
                _this.commandOptions[DiagramCommand.Fullscreen] = "fullScreen";
                _this.commandOptions[DiagramCommand.ZoomLevel] = function(value) {
                    if ("object" === _typeof(this._getOption("zoomLevel"))) {
                        this._setOption("zoomLevel.value", value)
                    } else {
                        this._setOption("zoomLevel", value)
                    }
                };
                _this.commandOptions[DiagramCommand.SwitchAutoZoom] = function(value) {
                    var _getDiagram2 = (0, _diagram3.getDiagram)(),
                        AutoZoomMode = _getDiagram2.AutoZoomMode;
                    switch (value) {
                        case AutoZoomMode.FitContent:
                            this._setOption("autoZoomMode", "fitContent");
                            break;
                        case AutoZoomMode.FitToWidth:
                            this._setOption("autoZoomMode", "fitWidth");
                            break;
                        case AutoZoomMode.Disabled:
                            this._setOption("autoZoomMode", "disabled")
                    }
                };
                _this.commandOptions[DiagramCommand.ToggleSimpleView] = "simpleView";
                _this.commandOptions[DiagramCommand.ShowGrid] = "showGrid";
                _this.commandOptions[DiagramCommand.SnapToGrid] = "snapToGrid";
                _this.commandOptions[DiagramCommand.GridSize] = function(value) {
                    if ("object" === _typeof(this._getOption("gridSize"))) {
                        this._setOption("gridSize.value", value)
                    } else {
                        this._setOption("gridSize", value)
                    }
                };
                _this.commandOptions[DiagramCommand.ViewUnits] = "viewUnits";
                _this.commandOptions[DiagramCommand.PageSize] = function(value) {
                    var pageSize = this._getOption("pageSize");
                    if (void 0 === pageSize || pageSize.width !== value.width || pageSize.height !== value.height) {
                        this._setOption("pageSize", value)
                    }
                };
                _this.commandOptions[DiagramCommand.PageLandscape] = function(value) {
                    this._setOption("pageOrientation", value ? "landscape" : "portrait")
                };
                _this.commandOptions[DiagramCommand.ViewUnits] = function(value) {
                    var _getDiagram3 = (0, _diagram3.getDiagram)(),
                        DiagramUnit = _getDiagram3.DiagramUnit;
                    switch (value) {
                        case DiagramUnit.In:
                            this._setOption("viewUnits", "in");
                            break;
                        case DiagramUnit.Cm:
                            this._setOption("viewUnits", "cm");
                            break;
                        case DiagramUnit.Px:
                            this._setOption("viewUnits", "px")
                    }
                };
                _this.commandOptions[DiagramCommand.PageColor] = "pageColor";
                _this._updateLock = 0;
                return _this
            }
            _createClass(DiagramOptionsUpdateBar, [{
                key: "getCommandKeys",
                value: function() {
                    return Object.keys(this.commandOptions).map(function(key) {
                        return parseInt(key)
                    })
                }
            }, {
                key: "setItemValue",
                value: function(key, value) {
                    if (this.isUpdateLocked()) {
                        return
                    }
                    this.beginUpdate();
                    try {
                        if ("function" === typeof this.commandOptions[key]) {
                            this.commandOptions[key].call(this, value)
                        } else {
                            this._setOption(this.commandOptions[key], value)
                        }
                    } finally {
                        this.endUpdate()
                    }
                }
            }, {
                key: "beginUpdate",
                value: function() {
                    this._updateLock++
                }
            }, {
                key: "endUpdate",
                value: function() {
                    this._updateLock--
                }
            }, {
                key: "isUpdateLocked",
                value: function() {
                    return this._updateLock > 0
                }
            }, {
                key: "_getOption",
                value: function(name) {
                    return this._owner.option(name)
                }
            }, {
                key: "_setOption",
                value: function(name, value) {
                    this._owner.option(name, value)
                }
            }]);
            return DiagramOptionsUpdateBar
        }(_diagram2.default);
        module.exports = DiagramOptionsUpdateBar
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/ui.diagram.dialog_manager.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _diagram = __webpack_require__( /*! ./diagram.importer */ 90);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var FileUploader = __webpack_require__( /*! ../file_uploader */ 237);
        var DiagramDialogManager = {
            getConfigurations: function() {
                var _getDiagram = (0, _diagram.getDiagram)(),
                    DiagramCommand = _getDiagram.DiagramCommand;
                return this.dialogList || (this.dialogList = [{
                    command: DiagramCommand.InsertShapeImage,
                    title: _message2.default.format("dxDiagram-dialogInsertShapeImageTitle"),
                    onGetContent: this.getChangeImageDialogContent
                }, {
                    command: DiagramCommand.EditShapeImage,
                    title: _message2.default.format("dxDiagram-dialogEditShapeImageTitle"),
                    onGetContent: this.getChangeImageDialogContent
                }])
            },
            getChangeImageDialogContent: function(args) {
                var $uploader = (0, _renderer2.default)("<div>");
                args.component._createComponent($uploader, FileUploader, {
                    selectButtonText: _message2.default.format("dxDiagram-dialogEditShapeImageSelectButton"),
                    accept: "image/*",
                    uploadMode: "useForm",
                    onValueChanged: function(e) {
                        var window = (0, _window.getWindow)();
                        var reader = new window.FileReader;
                        reader.onload = function(e) {
                            args.component._commandParameter = e.target.result
                        };
                        reader.readAsDataURL(e.value[0])
                    }
                });
                return $uploader
            },
            getDialogParameters: function(command) {
                var commandIndex = this.getConfigurations().map(function(c) {
                    return c.command
                }).indexOf(command);
                if (commandIndex >= 0) {
                    return this.getConfigurations()[commandIndex]
                } else {
                    return null
                }
            }
        };
        module.exports = DiagramDialogManager
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.nodes_option.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _diagram = __webpack_require__( /*! ./diagram.items_option */ 416);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var NodesOption = function(_ItemsOption) {
            _inherits(NodesOption, _ItemsOption);
            var _super = _createSuper(NodesOption);

            function NodesOption() {
                _classCallCheck(this, NodesOption);
                return _super.apply(this, arguments)
            }
            _createClass(NodesOption, [{
                key: "_getKeyExpr",
                value: function() {
                    return this._diagramWidget._createOptionGetter("nodes.keyExpr")
                }
            }]);
            return NodesOption
        }(_diagram2.default);
        module.exports = NodesOption
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/diagram/diagram.edges_option.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _diagram = __webpack_require__( /*! ./diagram.items_option */ 416);
        var _diagram2 = _interopRequireDefault(_diagram);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var EdgesOption = function(_ItemsOption) {
            _inherits(EdgesOption, _ItemsOption);
            var _super = _createSuper(EdgesOption);

            function EdgesOption() {
                _classCallCheck(this, EdgesOption);
                return _super.apply(this, arguments)
            }
            _createClass(EdgesOption, [{
                key: "_getKeyExpr",
                value: function() {
                    return this._diagramWidget._createOptionGetter("edges.keyExpr")
                }
            }]);
            return EdgesOption
        }(_diagram2.default);
        module.exports = EdgesOption
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/gantt.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./gantt/ui.gantt */ 794)
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 9);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 20);
        var _data2 = _interopRequireDefault(_data);
        var _uiGantt = __webpack_require__( /*! ./ui.gantt.view */ 795);
        var _uiGantt2 = __webpack_require__( /*! ./ui.gantt.bars */ 799);
        var _tree_list = __webpack_require__( /*! ../tree_list */ 393);
        var _tree_list2 = _interopRequireDefault(_tree_list);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _position = __webpack_require__( /*! ../../core/utils/position */ 21);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 7);
        var _uiGanttData = __webpack_require__( /*! ./ui.gantt.data.option */ 800);
        var _uiGanttData2 = _interopRequireDefault(_uiGanttData);
        var _splitter = __webpack_require__( /*! ../splitter */ 412);
        var _splitter2 = _interopRequireDefault(_splitter);
        var _uiGantt3 = __webpack_require__( /*! ./ui.gantt.dialogs */ 801);
        var _load_panel = __webpack_require__( /*! ../load_panel */ 167);
        var _load_panel2 = _interopRequireDefault(_load_panel);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var GANTT_CLASS = "dx-gantt";
        var GANTT_VIEW_CLASS = "dx-gantt-view";
        var GANTT_COLLAPSABLE_ROW = "dx-gantt-collapsable-row";
        var GANTT_TREE_LIST_WRAPPER = "dx-gantt-treelist-wrapper";
        var GANTT_TOOLBAR_WRAPPER = "dx-gantt-toolbar-wrapper";
        var GANTT_MAIN_WRAPPER = "dx-gantt-main-wrapper";
        var GANTT_TASKS = "tasks";
        var GANTT_DEPENDENCIES = "dependencies";
        var GANTT_RESOURCES = "resources";
        var GANTT_RESOURCE_ASSIGNMENTS = "resourceAssignments";
        var GANTT_DEFAULT_ROW_HEIGHT = 34;
        var Gantt = function(_Widget) {
            _inherits(Gantt, _Widget);
            var _super = _createSuper(Gantt);

            function Gantt() {
                _classCallCheck(this, Gantt);
                return _super.apply(this, arguments)
            }
            _createClass(Gantt, [{
                key: "_initMarkup",
                value: function() {
                    _get(_getPrototypeOf(Gantt.prototype), "_initMarkup", this).call(this);
                    this.$element().addClass(GANTT_CLASS);
                    this._$toolbarWrapper = (0, _renderer2.default)("<div>").addClass(GANTT_TOOLBAR_WRAPPER).appendTo(this.$element());
                    this._$toolbar = (0, _renderer2.default)("<div>").appendTo(this._$toolbarWrapper);
                    this._$mainWrapper = (0, _renderer2.default)("<div>").addClass(GANTT_MAIN_WRAPPER).appendTo(this.$element());
                    this._$treeListWrapper = (0, _renderer2.default)("<div>").addClass(GANTT_TREE_LIST_WRAPPER).appendTo(this._$mainWrapper);
                    this._$treeList = (0, _renderer2.default)("<div>").appendTo(this._$treeListWrapper);
                    this._$splitter = (0, _renderer2.default)("<div>").appendTo(this._$mainWrapper);
                    this._$ganttView = (0, _renderer2.default)("<div>").addClass(GANTT_VIEW_CLASS).appendTo(this._$mainWrapper);
                    this._$dialog = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._$loadPanel = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._$contextMenu = (0, _renderer2.default)("<div>").appendTo(this.$element());
                    this._refreshDataSource(GANTT_TASKS);
                    this._refreshDataSource(GANTT_DEPENDENCIES);
                    this._refreshDataSource(GANTT_RESOURCES);
                    this._refreshDataSource(GANTT_RESOURCE_ASSIGNMENTS)
                }
            }, {
                key: "_renderContent",
                value: function() {
                    this._renderBars();
                    this._renderTreeList();
                    this._renderSplitter()
                }
            }, {
                key: "_renderTreeList",
                value: function() {
                    var _this = this;
                    var _this$option = this.option(GANTT_TASKS),
                        keyExpr = _this$option.keyExpr,
                        parentIdExpr = _this$option.parentIdExpr;
                    this._treeList = this._createComponent(this._$treeList, _tree_list2.default, {
                        dataSource: this._tasksRaw,
                        keyExpr: keyExpr,
                        parentIdExpr: parentIdExpr,
                        columns: this.option("columns"),
                        columnResizingMode: "nextColumn",
                        height: this._$treeList.height() ? this._$treeList.height() : "100%",
                        width: this.option("taskListWidth"),
                        selection: {
                            mode: this._getSelectionMode(this.option("allowSelection"))
                        },
                        selectedRowKeys: this._getArrayFromOneElement(this.option("selectedRowKey")),
                        sorting: {
                            mode: "none"
                        },
                        scrolling: {
                            showScrollbar: "onHover",
                            mode: "virtual"
                        },
                        allowColumnResizing: true,
                        autoExpandAll: true,
                        showRowLines: this.option("showRowLines"),
                        onContentReady: function(e) {
                            _this._onTreeListContentReady(e)
                        },
                        onSelectionChanged: function(e) {
                            _this._onTreeListSelectionChanged(e)
                        },
                        onRowCollapsed: function(e) {
                            return _this._ganttView.changeTaskExpanded(e.key, false)
                        },
                        onRowExpanded: function(e) {
                            return _this._ganttView.changeTaskExpanded(e.key, true)
                        },
                        onRowPrepared: function(e) {
                            _this._onTreeListRowPrepared(e)
                        },
                        onContextMenuPreparing: function(e) {
                            _this._onTreeListContextMenuPreparing(e)
                        },
                        onRowDblClick: function() {
                            _this._onTreeListRowDblClick()
                        }
                    })
                }
            }, {
                key: "_renderSplitter",
                value: function() {
                    this._splitter = this._createComponent(this._$splitter, _splitter2.default, {
                        container: this.$element(),
                        leftElement: this._$treeListWrapper,
                        rightElement: this._$ganttView,
                        onApplyPanelSize: this._onApplyPanelSize.bind(this)
                    });
                    this._splitter.option("initialLeftPanelWidth", this.option("taskListWidth"))
                }
            }, {
                key: "_renderBars",
                value: function() {
                    this._bars = [];
                    this._toolbar = new _uiGantt2.GanttToolbar(this._$toolbar, this);
                    this._updateToolbarContent();
                    this._bars.push(this._toolbar);
                    this._contextMenuBar = new _uiGantt2.GanttContextMenuBar(this._$contextMenu, this);
                    this._bars.push(this._contextMenuBar)
                }
            }, {
                key: "_initGanttView",
                value: function() {
                    if (this._ganttView) {
                        return
                    }
                    this._ganttView = this._createComponent(this._$ganttView, _uiGantt.GanttView, {
                        width: "100%",
                        height: this._treeList._$element.get(0).offsetHeight,
                        rowHeight: this._getTreeListRowHeight(),
                        headerHeight: this._getTreeListHeaderHeight(),
                        tasks: this._tasks,
                        dependencies: this._dependencies,
                        resources: this._resources,
                        resourceAssignments: this._resourceAssignments,
                        allowSelection: this.option("allowSelection"),
                        selectedRowKey: this.option("selectedRowKey"),
                        showResources: this.option("showResources"),
                        taskTitlePosition: this.option("taskTitlePosition"),
                        showRowLines: this.option("showRowLines"),
                        scaleType: this.option("scaleType"),
                        editing: this.option("editing"),
                        validation: this.option("validation"),
                        stripLines: this.option("stripLines"),
                        bars: this._bars,
                        mainElement: this.$element(),
                        onSelectionChanged: this._onGanttViewSelectionChanged.bind(this),
                        onScroll: this._onGanttViewScroll.bind(this),
                        onDialogShowing: this._showDialog.bind(this),
                        onPopupMenuShowing: this._showPopupMenu.bind(this),
                        onExpandAll: this._expandAll.bind(this),
                        onCollapseAll: this._collapseAll.bind(this),
                        modelChangesListener: this._createModelChangesListener()
                    });
                    this._fireContentReadyAction()
                }
            }, {
                key: "_onApplyPanelSize",
                value: function(e) {
                    this._setInnerElementsWidth(e)
                }
            }, {
                key: "_onTreeListContentReady",
                value: function(e) {
                    if (e.component.getDataSource()) {
                        this._initGanttView();
                        this._initScrollSync(e.component)
                    }
                }
            }, {
                key: "_onTreeListRowPrepared",
                value: function(e) {
                    if ("data" === e.rowType && e.node.children.length > 0) {
                        (0, _renderer2.default)(e.rowElement).addClass(GANTT_COLLAPSABLE_ROW)
                    }
                }
            }, {
                key: "_onTreeListContextMenuPreparing",
                value: function(e) {
                    if (e.row && "data" === e.row.rowType) {
                        this._setTreeListOption("selectedRowKeys", [e.row.data.id]);
                        e.items = [];
                        this._showPopupMenu({
                            position: {
                                x: e.event.clientX,
                                y: e.event.clientY
                            }
                        })
                    }
                }
            }, {
                key: "_onTreeListRowDblClick",
                value: function() {
                    this._ganttView._ganttViewCore.commandManager.showTaskEditDialog.execute()
                }
            }, {
                key: "_onTreeListSelectionChanged",
                value: function(e) {
                    var selectedRowKey = e.currentSelectedRowKeys[0];
                    this._setGanttViewOption("selectedRowKey", selectedRowKey);
                    this.option("selectedRowKey", selectedRowKey);
                    this._raiseSelectionChangedAction(selectedRowKey)
                }
            }, {
                key: "_onGanttViewSelectionChanged",
                value: function(e) {
                    this._setTreeListOption("selectedRowKeys", this._getArrayFromOneElement(e.id))
                }
            }, {
                key: "_onGanttViewScroll",
                value: function(e) {
                    var treeListScrollable = this._treeList.getScrollable();
                    if (treeListScrollable) {
                        var diff = e.scrollTop - treeListScrollable.scrollTop();
                        if (0 !== diff) {
                            treeListScrollable.scrollBy({
                                left: 0,
                                top: diff
                            })
                        }
                    }
                }
            }, {
                key: "_onTreeListScroll",
                value: function(treeListScrollView) {
                    var ganttViewTaskAreaContainer = this._ganttView.getTaskAreaContainer();
                    if (ganttViewTaskAreaContainer.scrollTop !== treeListScrollView.component.scrollTop()) {
                        ganttViewTaskAreaContainer.scrollTop = treeListScrollView.component.scrollTop()
                    }
                }
            }, {
                key: "_expandAll",
                value: function() {
                    var _this2 = this;
                    this._treeList.forEachNode(function(node) {
                        if (node.children && node.children.length) {
                            _this2._treeList.expandRow(node.key);
                            _this2._ganttView.changeTaskExpanded(node.key, true)
                        }
                    })
                }
            }, {
                key: "_collapseAll",
                value: function() {
                    var _this3 = this;
                    this._treeList.forEachNode(function(node) {
                        if (node.children && node.children.length) {
                            _this3._treeList.collapseRow(node.key);
                            _this3._ganttView.changeTaskExpanded(node.key, false)
                        }
                    })
                }
            }, {
                key: "_initScrollSync",
                value: function(treeList) {
                    var _this4 = this;
                    var treeListScrollable = treeList.getScrollable();
                    if (treeListScrollable) {
                        treeListScrollable.off("scroll");
                        treeListScrollable.on("scroll", function(e) {
                            _this4._onTreeListScroll(e)
                        })
                    }
                }
            }, {
                key: "_getTreeListRowHeight",
                value: function() {
                    var $row = this._treeList._$element.find(".dx-data-row");
                    var height = $row.length ? (0, _position.getBoundingRect)($row.last().get(0)).height : GANTT_DEFAULT_ROW_HEIGHT;
                    return height ? height : GANTT_DEFAULT_ROW_HEIGHT
                }
            }, {
                key: "_getTreeListHeaderHeight",
                value: function() {
                    return (0, _position.getBoundingRect)(this._treeList._$element.find(".dx-treelist-headers").get(0)).height
                }
            }, {
                key: "_setInnerElementsWidth",
                value: function(widths) {
                    if (!(0, _window.hasWindow)()) {
                        return
                    }
                    if (!widths) {
                        widths = this._getPanelsWidthByOption()
                    }
                    var leftPanelWidth = widths.leftPanelWidth;
                    var rightPanelWidth = widths.rightPanelWidth;
                    this._$treeListWrapper.width(leftPanelWidth);
                    var isPercentage = _type2.default.isString(leftPanelWidth) && "%" === leftPanelWidth.slice(-1);
                    this._$treeList.width(isPercentage ? "100%" : leftPanelWidth);
                    this._$ganttView.width(rightPanelWidth);
                    this._setGanttViewOption("width", this._$ganttView.width())
                }
            }, {
                key: "_getPanelsWidthByOption",
                value: function() {
                    return {
                        leftPanelWidth: this.option("taskListWidth"),
                        rightPanelWidth: this._$element.width() - this.option("taskListWidth")
                    }
                }
            }, {
                key: "_setGanttViewOption",
                value: function(optionName, value) {
                    this._ganttView && this._ganttView.option(optionName, value)
                }
            }, {
                key: "_setTreeListOption",
                value: function(optionName, value) {
                    this._treeList && this._treeList.option(optionName, value)
                }
            }, {
                key: "_refreshDataSource",
                value: function(name) {
                    var _this5 = this;
                    var dataOption = this["_".concat(name, "Option")];
                    if (dataOption) {
                        dataOption._disposeDataSource();
                        delete this["_".concat(name, "Option")];
                        delete this["_".concat(name)]
                    }
                    if (this.option("".concat(name, ".dataSource"))) {
                        dataOption = new _uiGanttData2.default(name, this._getLoadPanel(), function(name, data) {
                            _this5._dataSourceChanged(name, data)
                        });
                        dataOption.option("dataSource", this._getSpecificDataSourceOption(name));
                        dataOption._refreshDataSource();
                        this["_".concat(name, "Option")] = dataOption
                    }
                }
            }, {
                key: "_getSpecificDataSourceOption",
                value: function(name) {
                    var dataSource = this.option("".concat(name, ".dataSource"));
                    if (Array.isArray(dataSource)) {
                        return {
                            store: {
                                type: "array",
                                data: dataSource,
                                key: this.option("".concat(name, ".keyExpr"))
                            }
                        }
                    }
                    return dataSource
                }
            }, {
                key: "_compileGettersByOption",
                value: function(optionName) {
                    var getters = {};
                    var optionValue = this.option(optionName);
                    for (var field in optionValue) {
                        var exprMatches = field.match(/(\w*)Expr/);
                        if (exprMatches) {
                            getters[exprMatches[1]] = _data2.default.compileGetter(optionValue[exprMatches[0]])
                        }
                    }
                    return getters
                }
            }, {
                key: "_compileSettersByOption",
                value: function(optionName) {
                    var setters = {};
                    var optionValue = this.option(optionName);
                    for (var field in optionValue) {
                        var exprMatches = field.match(/(\w*)Expr/);
                        if (exprMatches) {
                            setters[exprMatches[1]] = _data2.default.compileSetter(optionValue[exprMatches[0]])
                        }
                    }
                    return setters
                }
            }, {
                key: "_getStoreObject",
                value: function(optionName, modelObject) {
                    var setters = this._compileSettersByOption(optionName);
                    return Object.keys(setters).reduce(function(previous, key) {
                        if ("key" !== key) {
                            setters[key](previous, modelObject[key])
                        }
                        return previous
                    }, {})
                }
            }, {
                key: "_prepareSetterMapHandler",
                value: function(setters) {
                    return function(data) {
                        return Object.keys(setters).reduce(function(previous, key) {
                            var resultKey = "key" === key ? "id" : key;
                            setters[key](previous, data[resultKey]);
                            return previous
                        }, {})
                    }
                }
            }, {
                key: "_prepareMapHandler",
                value: function(getters) {
                    return function(data) {
                        return Object.keys(getters).reduce(function(previous, key) {
                            var resultKey = "key" === key ? "id" : key;
                            previous[resultKey] = getters[key](data);
                            return previous
                        }, {})
                    }
                }
            }, {
                key: "_dataSourceChanged",
                value: function(dataSourceName, data) {
                    var getters = this._compileGettersByOption(dataSourceName);
                    var mappedData = data.map(this._prepareMapHandler(getters));
                    this["_".concat(dataSourceName)] = mappedData;
                    this._setGanttViewOption(dataSourceName, mappedData);
                    if (dataSourceName === GANTT_TASKS) {
                        this._tasksRaw = data;
                        var expandedRowKeys = data.map(function(t) {
                            return t.parentId
                        }).filter(function(value, index, self) {
                            return value && self.indexOf(value) === index
                        });
                        this._setTreeListOption("expandedRowKeys", expandedRowKeys);
                        this._setTreeListOption("dataSource", data)
                    }
                }
            }, {
                key: "_createModelChangesListener",
                value: function() {
                    var _this6 = this;
                    return {
                        NotifyTaskCreated: function(task, callback, errorCallback) {
                            _this6._onRecordInserted(GANTT_TASKS, task, callback)
                        },
                        NotifyTaskRemoved: function(taskId, errorCallback) {
                            _this6._onRecordRemoved(GANTT_TASKS, taskId)
                        },
                        NotifyTaskTitleChanged: function(taskId, newValue, errorCallback) {
                            _this6._onRecordUpdated(GANTT_TASKS, taskId, "title", newValue)
                        },
                        NotifyTaskDescriptionChanged: function(taskId, newValue, errorCallback) {
                            _this6._onRecordUpdated(GANTT_TASKS, taskId, "description", newValue)
                        },
                        NotifyTaskStartChanged: function(taskId, newValue, errorCallback) {
                            _this6._onRecordUpdated(GANTT_TASKS, taskId, "start", newValue)
                        },
                        NotifyTaskEndChanged: function(taskId, newValue, errorCallback) {
                            _this6._onRecordUpdated(GANTT_TASKS, taskId, "end", newValue)
                        },
                        NotifyTaskProgressChanged: function(taskId, newValue, errorCallback) {
                            _this6._onRecordUpdated(GANTT_TASKS, taskId, "progress", newValue)
                        },
                        NotifyDependencyInserted: function(dependency, callback, errorCallback) {
                            _this6._onRecordInserted(GANTT_DEPENDENCIES, dependency, callback)
                        },
                        NotifyDependencyRemoved: function(dependencyId, errorCallback) {
                            _this6._onRecordRemoved(GANTT_DEPENDENCIES, dependencyId)
                        },
                        NotifyResourceCreated: function(resource, callback, errorCallback) {
                            _this6._onRecordInserted(GANTT_RESOURCES, resource, callback)
                        },
                        NotifyResourceRemoved: function(resource, errorCallback) {
                            _this6._onRecordRemoved(GANTT_RESOURCES, resource)
                        },
                        NotifyResourceAssigned: function(assignment, callback, errorCallback) {
                            _this6._onRecordInserted(GANTT_RESOURCE_ASSIGNMENTS, assignment, callback)
                        },
                        NotifyResourceUnassigned: function(assignmentId, errorCallback) {
                            _this6._onRecordRemoved(GANTT_RESOURCE_ASSIGNMENTS, assignmentId)
                        },
                        NotifyParentDataRecalculated: function(data) {
                            _this6._onParentTasksRecalculated(data)
                        }
                    }
                }
            }, {
                key: "_onRecordInserted",
                value: function(optionName, record, callback) {
                    var _this7 = this;
                    var dataOption = this["_".concat(optionName, "Option")];
                    if (dataOption) {
                        var data = this._getStoreObject(optionName, record);
                        dataOption.insert(data, function(response) {
                            var keyGetter = _data2.default.compileGetter(_this7.option("".concat(optionName, ".keyExpr")));
                            var insertedId = keyGetter(response);
                            callback(insertedId);
                            if (optionName === GANTT_TASKS) {
                                _this7._updateTreeListDataSource();
                                var parentId = record.parentId;
                                if (void 0 !== parentId) {
                                    var expandedRowKeys = _this7._treeList.option("expandedRowKeys");
                                    expandedRowKeys.push(parentId);
                                    _this7._treeList.option("expandedRowKeys", expandedRowKeys)
                                }
                                _this7._setTreeListOption("selectedRowKeys", _this7._getArrayFromOneElement(insertedId));
                                _this7._setTreeListOption("focusedRowKey", insertedId)
                            }
                        })
                    }
                }
            }, {
                key: "_onRecordRemoved",
                value: function(optionName, key) {
                    var _this8 = this;
                    var dataOption = this["_".concat(optionName, "Option")];
                    if (dataOption) {
                        dataOption.remove(key, function() {
                            if (optionName === GANTT_TASKS) {
                                _this8._updateTreeListDataSource()
                            }
                        })
                    }
                }
            }, {
                key: "_onRecordUpdated",
                value: function(optionName, key, fieldName, value) {
                    var _this9 = this;
                    var dataOption = this["_".concat(optionName, "Option")];
                    if (dataOption) {
                        var setter = _data2.default.compileSetter(this.option("".concat(optionName, ".").concat(fieldName, "Expr")));
                        var data = {};
                        setter(data, value);
                        dataOption.update(key, data, function() {
                            if (optionName === GANTT_TASKS) {
                                _this9._updateTreeListDataSource()
                            }
                        })
                    }
                }
            }, {
                key: "_onParentTasksRecalculated",
                value: function(data) {
                    var setters = this._compileSettersByOption(GANTT_TASKS);
                    var treeDataSource = this._appendCustomFields(data.map(this._prepareSetterMapHandler(setters)));
                    this._setTreeListOption("dataSource", treeDataSource)
                }
            }, {
                key: "_appendCustomFields",
                value: function(data) {
                    var modelData = this._tasksOption && this._tasksOption._getItems();
                    var keyGetter = _data2.default.compileGetter(this.option("".concat(GANTT_TASKS, ".keyExpr")));
                    return data.reduce(function(previous, item) {
                        var modelItem = modelData && modelData.filter(function(obj) {
                            return keyGetter(obj) === keyGetter(item)
                        })[0];
                        if (!modelItem) {
                            previous.push(item)
                        } else {
                            var updatedItem = {};
                            for (var field in modelItem) {
                                updatedItem[field] = Object.prototype.hasOwnProperty.call(item, field) ? item[field] : modelItem[field]
                            }
                            previous.push(updatedItem)
                        }
                        return previous
                    }, [])
                }
            }, {
                key: "_updateTreeListDataSource",
                value: function() {
                    if (!this._skipUpdateTreeListDataSource()) {
                        var storeArray = this._tasksOption._getStore()._array;
                        this._setTreeListOption("dataSource", storeArray ? storeArray : this.option("tasks.dataSource"))
                    }
                }
            }, {
                key: "_skipUpdateTreeListDataSource",
                value: function() {
                    return this.option("validation.autoUpdateParentTasks")
                }
            }, {
                key: "_getLoadPanel",
                value: function() {
                    if (!this._loadPanel) {
                        this._loadPanel = this._createComponent(this._$loadPanel, _load_panel2.default, {
                            position: {
                                of: this.$element()
                            }
                        })
                    }
                    return this._loadPanel
                }
            }, {
                key: "_createSelectionChangedAction",
                value: function() {
                    this._selectionChangedAction = this._createActionByOption("onSelectionChanged")
                }
            }, {
                key: "_raiseSelectionChangedAction",
                value: function(selectedRowKey) {
                    if (!this._selectionChangedAction) {
                        this._createSelectionChangedAction()
                    }
                    this._selectionChangedAction({
                        selectedRowKey: selectedRowKey
                    })
                }
            }, {
                key: "_getSelectionMode",
                value: function(allowSelection) {
                    return allowSelection ? "single" : "none"
                }
            }, {
                key: "_getArrayFromOneElement",
                value: function(element) {
                    return void 0 === element || null === element ? [] : [element]
                }
            }, {
                key: "_getToolbarItems",
                value: function() {
                    var items = this.option("toolbar.items");
                    return items ? items : []
                }
            }, {
                key: "_updateToolbarContent",
                value: function() {
                    var items = this._getToolbarItems();
                    if (items.length) {
                        this._$toolbarWrapper.show()
                    } else {
                        this._$toolbarWrapper.hide()
                    }
                    this._toolbar && this._toolbar.createItems(items);
                    this._updateBarItemsState()
                }
            }, {
                key: "_updateBarItemsState",
                value: function() {
                    this._ganttView && this._ganttView.updateBarItemsState()
                }
            }, {
                key: "_showDialog",
                value: function(e) {
                    if (!this._dialogInstance) {
                        this._dialogInstance = new _uiGantt3.GanttDialog(this, this._$dialog)
                    }
                    this._dialogInstance.show(e.name, e.parameters, e.callback, e.afterClosing, this.option("editing"))
                }
            }, {
                key: "_showPopupMenu",
                value: function(e) {
                    this._ganttView.getBarManager().updateContextMenu();
                    this._contextMenuBar.show(e.position)
                }
            }, {
                key: "_executeCoreCommand",
                value: function(id) {
                    this._ganttView.executeCoreCommand(id)
                }
            }, {
                key: "_clean",
                value: function() {
                    delete this._ganttView;
                    delete this._dialogInstance;
                    _get(_getPrototypeOf(Gantt.prototype), "_clean", this).call(this)
                }
            }, {
                key: "_getDefaultOptions",
                value: function() {
                    return (0, _extend.extend)(_get(_getPrototypeOf(Gantt.prototype), "_getDefaultOptions", this).call(this), {
                        tasks: {
                            dataSource: null,
                            keyExpr: "id",
                            parentIdExpr: "parentId",
                            startExpr: "start",
                            endExpr: "end",
                            progressExpr: "progress",
                            titleExpr: "title",
                            colorExpr: "color"
                        },
                        dependencies: {
                            dataSource: null,
                            keyExpr: "id",
                            predecessorIdExpr: "predecessorId",
                            successorIdExpr: "successorId",
                            typeExpr: "type"
                        },
                        resources: {
                            dataSource: null,
                            keyExpr: "id",
                            textExpr: "text",
                            colorExpr: "color"
                        },
                        resourceAssignments: {
                            dataSource: null,
                            keyExpr: "id",
                            taskIdExpr: "taskId",
                            resourceIdExpr: "resourceId"
                        },
                        columns: void 0,
                        taskListWidth: 300,
                        showResources: true,
                        taskTitlePosition: "inside",
                        selectedRowKey: void 0,
                        onSelectionChanged: null,
                        allowSelection: true,
                        showRowLines: true,
                        stripLines: void 0,
                        scaleType: "auto",
                        editing: {
                            enabled: false,
                            allowTaskAdding: true,
                            allowTaskDeleting: true,
                            allowTaskUpdating: true,
                            allowDependencyAdding: true,
                            allowDependencyDeleting: true,
                            allowResourceAdding: true,
                            allowResourceDeleting: true,
                            allowResourceUpdating: true
                        },
                        validation: {
                            validateDependencies: false,
                            autoUpdateParentTasks: false
                        },
                        toolbar: null
                    })
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "tasks":
                            this._refreshDataSource(GANTT_TASKS);
                            break;
                        case "dependencies":
                            this._refreshDataSource(GANTT_DEPENDENCIES);
                            break;
                        case "resources":
                            this._refreshDataSource(GANTT_RESOURCES);
                            break;
                        case "resourceAssignments":
                            this._refreshDataSource(GANTT_RESOURCE_ASSIGNMENTS);
                            break;
                        case "columns":
                            this._setTreeListOption("columns", this.option(args.name));
                            break;
                        case "taskListWidth":
                            this._setInnerElementsWidth();
                            break;
                        case "showResources":
                            this._setGanttViewOption("showResources", args.value);
                            break;
                        case "taskTitlePosition":
                            this._setGanttViewOption("taskTitlePosition", args.value);
                            break;
                        case "selectedRowKey":
                            this._setTreeListOption("selectedRowKeys", this._getArrayFromOneElement(args.value));
                            break;
                        case "onSelectionChanged":
                            this._createSelectionChangedAction();
                            break;
                        case "allowSelection":
                            this._setTreeListOption("selection.mode", this._getSelectionMode(args.value));
                            this._setGanttViewOption("allowSelection", args.value);
                            break;
                        case "showRowLines":
                            this._setTreeListOption("showRowLines", args.value);
                            this._setGanttViewOption("showRowLines", args.value);
                            break;
                        case "stripLines":
                            this._setGanttViewOption("stripLines", args.value);
                            break;
                        case "scaleType":
                            this._setGanttViewOption("scaleType", args.value);
                            break;
                        case "editing":
                            this._setGanttViewOption("editing", this.option(args.name));
                            break;
                        case "validation":
                            this._setGanttViewOption("validation", this.option(args.name));
                            break;
                        case "toolbar":
                            this._updateToolbarContent();
                            break;
                        default:
                            _get(_getPrototypeOf(Gantt.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }]);
            return Gantt
        }(_ui2.default);
        (0, _component_registrator2.default)("dxGantt", Gantt);
        module.exports = Gantt
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.view.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.GanttView = void 0;
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 17);
        var _ui2 = _interopRequireDefault(_ui);
        var _gantt_importer = __webpack_require__( /*! ./gantt_importer */ 796);
        var _uiGanttTaskArea = __webpack_require__( /*! ./ui.gantt.task.area.container */ 798);
        var _date = __webpack_require__( /*! ../../localization/date */ 35);
        var _date2 = _interopRequireDefault(_date);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _get(target, property, receiver) {
            if ("undefined" !== typeof Reflect && Reflect.get) {
                _get = Reflect.get
            } else {
                _get = function(target, property, receiver) {
                    var base = _superPropBase(target, property);
                    if (!base) {
                        return
                    }
                    var desc = Object.getOwnPropertyDescriptor(base, property);
                    if (desc.get) {
                        return desc.get.call(receiver)
                    }
                    return desc.value
                }
            }
            return _get(target, property, receiver || target)
        }

        function _superPropBase(object, property) {
            while (!Object.prototype.hasOwnProperty.call(object, property)) {
                object = _getPrototypeOf(object);
                if (null === object) {
                    break
                }
            }
            return object
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        exports.GanttView = function(_Widget) {
            _inherits(GanttView, _Widget);
            var _super = _createSuper(GanttView);

            function GanttView() {
                _classCallCheck(this, GanttView);
                return _super.apply(this, arguments)
            }
            _createClass(GanttView, [{
                key: "_init",
                value: function() {
                    _get(_getPrototypeOf(GanttView.prototype), "_init", this).call(this);
                    this._onSelectionChanged = this._createActionByOption("onSelectionChanged");
                    this._onScroll = this._createActionByOption("onScroll");
                    this._onDialogShowing = this._createActionByOption("onDialogShowing");
                    this._onPopupMenuShowing = this._createActionByOption("onPopupMenuShowing");
                    this._expandAll = this._createActionByOption("onExpandAll");
                    this._collapseAll = this._createActionByOption("onCollapseAll")
                }
            }, {
                key: "_initMarkup",
                value: function() {
                    var _getGanttViewCore = (0, _gantt_importer.getGanttViewCore)(),
                        GanttView = _getGanttViewCore.GanttView;
                    this._ganttViewCore = new GanttView(this.$element().get(0), this, {
                        showResources: this.option("showResources"),
                        taskTitlePosition: this._getTaskTitlePosition(this.option("taskTitlePosition")),
                        allowSelectTask: this.option("allowSelection"),
                        editing: this._parseEditingSettings(this.option("editing")),
                        validation: this.option("validation"),
                        stripLines: {
                            stripLines: this.option("stripLines")
                        },
                        areHorizontalBordersEnabled: this.option("showRowLines"),
                        areAlternateRowsEnabled: false,
                        viewType: this._getViewTypeByScaleType(this.option("scaleType")),
                        cultureInfo: this._getCultureInfo()
                    });
                    this._selectTask(this.option("selectedRowKey"));
                    this.updateBarItemsState()
                }
            }, {
                key: "getTaskAreaContainer",
                value: function() {
                    return this._ganttViewCore.taskAreaContainer
                }
            }, {
                key: "getBarManager",
                value: function() {
                    return this._ganttViewCore.barManager
                }
            }, {
                key: "executeCoreCommand",
                value: function(id) {
                    var command = this._ganttViewCore.commandManager.getCommand(id);
                    if (command) {
                        command.execute()
                    }
                }
            }, {
                key: "changeTaskExpanded",
                value: function(id, value) {
                    this._ganttViewCore.changeTaskExpanded(id, value)
                }
            }, {
                key: "updateView",
                value: function() {
                    this._ganttViewCore.updateView()
                }
            }, {
                key: "updateBarItemsState",
                value: function() {
                    this._ganttViewCore.barManager.updateItemsState([])
                }
            }, {
                key: "setWidth",
                value: function(value) {
                    this._ganttViewCore.setWidth(value)
                }
            }, {
                key: "_selectTask",
                value: function(id) {
                    this._ganttViewCore.selectTaskById(id)
                }
            }, {
                key: "_update",
                value: function() {
                    this._ganttViewCore.loadOptionsFromGanttOwner();
                    this._ganttViewCore.resetAndUpdate()
                }
            }, {
                key: "_getCultureInfo",
                value: function() {
                    return {
                        monthNames: _date2.default.getMonthNames("wide"),
                        dayNames: _date2.default.getDayNames("wide"),
                        abbrMonthNames: _date2.default.getMonthNames("abbreviated"),
                        abbrDayNames: _date2.default.getDayNames("abbreviated"),
                        quarterNames: _date2.default.getQuarterNames(),
                        amText: _date2.default.getPeriodNames()[0],
                        pmText: _date2.default.getPeriodNames()[1]
                    }
                }
            }, {
                key: "_getTaskTitlePosition",
                value: function(value) {
                    switch (value) {
                        case "outside":
                            return 1;
                        case "none":
                            return 2;
                        default:
                            return 0
                    }
                }
            }, {
                key: "_getViewTypeByScaleType",
                value: function(scaleType) {
                    switch (scaleType) {
                        case "minutes":
                            return 0;
                        case "hours":
                            return 1;
                        case "days":
                            return 3;
                        case "weeks":
                            return 4;
                        case "months":
                            return 5;
                        case "quarters":
                            return 6;
                        case "years":
                            return 7;
                        default:
                            return
                    }
                }
            }, {
                key: "_parseEditingSettings",
                value: function(value) {
                    return {
                        enabled: value.enabled,
                        allowDependencyDelete: value.allowDependencyDeleting,
                        allowDependencyInsert: value.allowDependencyAdding,
                        allowTaskDelete: value.allowTaskDeleting,
                        allowTaskInsert: value.allowTaskAdding,
                        allowTaskUpdate: value.allowTaskUpdating,
                        allowResourceDelete: value.allowResourceDeleting,
                        allowResourceInsert: value.allowResourceAdding,
                        allowResourceUpdate: value.allowResourceUpdating
                    }
                }
            }, {
                key: "_optionChanged",
                value: function(args) {
                    switch (args.name) {
                        case "width":
                            _get(_getPrototypeOf(GanttView.prototype), "_optionChanged", this).call(this, args);
                            this._ganttViewCore.setWidth(args.value);
                            break;
                        case "tasks":
                        case "dependencies":
                        case "resources":
                        case "resourceAssignments":
                            this._update();
                            break;
                        case "showResources":
                            this._ganttViewCore.setShowResources(args.value);
                            break;
                        case "taskTitlePosition":
                            this._ganttViewCore.setTaskTitlePosition(this._getTaskTitlePosition(args.value));
                            break;
                        case "allowSelection":
                            this._ganttViewCore.setAllowSelection(args.value);
                            break;
                        case "selectedRowKey":
                            this._selectTask(args.value);
                            break;
                        case "editing":
                            this._ganttViewCore.setEditingSettings(this._parseEditingSettings(args.value));
                            break;
                        case "validation":
                            this._ganttViewCore.setValidationSettings(args.value);
                            this._update();
                            break;
                        case "showRowLines":
                            this._ganttViewCore.setRowLinesVisible(args.value);
                            break;
                        case "scaleType":
                            this._ganttViewCore.setViewType(this._getViewTypeByScaleType(args.value));
                            break;
                        case "stripLines":
                            this._ganttViewCore.setStripLines({
                                stripLines: args.value
                            });
                            break;
                        default:
                            _get(_getPrototypeOf(GanttView.prototype), "_optionChanged", this).call(this, args)
                    }
                }
            }, {
                key: "getRowHeight",
                value: function() {
                    return this.option("rowHeight")
                }
            }, {
                key: "getHeaderHeight",
                value: function() {
                    return this.option("headerHeight")
                }
            }, {
                key: "getGanttTasksData",
                value: function() {
                    return this.option("tasks")
                }
            }, {
                key: "getGanttDependenciesData",
                value: function() {
                    return this.option("dependencies")
                }
            }, {
                key: "getGanttResourcesData",
                value: function() {
                    return this.option("resources")
                }
            }, {
                key: "getGanttResourceAssignmentsData",
                value: function() {
                    return this.option("resourceAssignments")
                }
            }, {
                key: "getGanttWorkTimeRules",
                value: function() {
                    return {}
                }
            }, {
                key: "getExternalTaskAreaContainer",
                value: function(element) {
                    if (!this._taskAreaContainer) {
                        this._taskAreaContainer = new _uiGanttTaskArea.TaskAreaContainer(element, this)
                    }
                    return this._taskAreaContainer
                }
            }, {
                key: "changeGanttTaskSelection",
                value: function(id, selected) {
                    this._onSelectionChanged({
                        id: id,
                        selected: selected
                    })
                }
            }, {
                key: "onGanttScroll",
                value: function(scrollTop) {
                    this._onScroll({
                        scrollTop: scrollTop
                    })
                }
            }, {
                key: "showDialog",
                value: function(name, parameters, callback, afterClosing) {
                    this._onDialogShowing({
                        name: name,
                        parameters: parameters,
                        callback: callback,
                        afterClosing: afterClosing
                    })
                }
            }, {
                key: "getModelChangesListener",
                value: function() {
                    return this.option("modelChangesListener")
                }
            }, {
                key: "showPopupMenu",
                value: function(position) {
                    this._onPopupMenuShowing({
                        position: position
                    })
                }
            }, {
                key: "getMainElement",
                value: function() {
                    return this.option("mainElement").get(0)
                }
            }, {
                key: "adjustControl",
                value: function() {}
            }, {
                key: "getRequireFirstLoadParentAutoCalc",
                value: function() {
                    return this.option("validation.autoUpdateParentTasks")
                }
            }, {
                key: "collapseAll",
                value: function() {
                    this._collapseAll()
                }
            }, {
                key: "expandAll",
                value: function() {
                    this._expandAll()
                }
            }, {
                key: "bars",
                get: function() {
                    return this.option("bars")
                }
            }]);
            return GanttView
        }(_ui2.default)
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/gantt_importer.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Errors = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var Gantt = __webpack_require__( /*! devexpress-gantt */ 797);

        function getGanttViewCore() {
            if (!Gantt) {
                throw Errors.Error("E1041", "devexpress-gantt")
            }
            return Gantt
        }
        module.exports.getGanttViewCore = getGanttViewCore
    },
    /*!******************************************!*\
      !*** external "window.DevExpress.Gantt" ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.DevExpress.Gantt
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.task.area.container.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.TaskAreaContainer = void 0;
        var _scroll_view = __webpack_require__( /*! ../scroll_view */ 107);
        var _scroll_view2 = _interopRequireDefault(_scroll_view);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.TaskAreaContainer = function() {
            function TaskAreaContainer(element, ganttViewWidget) {
                _classCallCheck(this, TaskAreaContainer);
                this._element = element;
                this._scrollView = ganttViewWidget._createComponent(this._element, _scroll_view2.default, {
                    scrollByContent: false,
                    scrollByThumb: true,
                    showScrollbar: "onHover",
                    direction: "both",
                    onScroll: function() {
                        ganttViewWidget.updateView()
                    }
                })
            }
            _createClass(TaskAreaContainer, [{
                key: "getWidth",
                value: function() {
                    return this._element.offsetWidth
                }
            }, {
                key: "getHeight",
                value: function() {
                    return this._element.offsetHeight
                }
            }, {
                key: "getElement",
                value: function() {
                    return this._element
                }
            }, {
                key: "scrollTop",
                get: function() {
                    return this._scrollView.scrollTop()
                },
                set: function(value) {
                    var diff = value - this._scrollView.scrollTop();
                    if (0 !== diff) {
                        this._scrollView.scrollBy({
                            left: 0,
                            top: diff
                        })
                    }
                }
            }, {
                key: "scrollLeft",
                get: function() {
                    return this._scrollView.scrollLeft()
                },
                set: function(value) {
                    var diff = value - this._scrollView.scrollLeft();
                    if (0 !== diff) {
                        this._scrollView.scrollBy({
                            left: diff,
                            top: 0
                        })
                    }
                }
            }, {
                key: "scrollWidth",
                get: function() {
                    return this._scrollView.scrollWidth()
                }
            }, {
                key: "scrollHeight",
                get: function() {
                    return this._scrollView.scrollHeight()
                }
            }, {
                key: "isExternal",
                get: function() {
                    return true
                }
            }]);
            return TaskAreaContainer
        }()
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.bars.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.GanttContextMenuBar = exports.GanttToolbar = void 0;
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _toolbar = __webpack_require__( /*! ../toolbar */ 145);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        var _context_menu = __webpack_require__( /*! ../context_menu */ 98);
        var _context_menu2 = _interopRequireDefault(_context_menu);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        var TOOLBAR_SEPARATOR_CLASS = "dx-gantt-toolbar-separator";
        var COMMANDS = {
            createTask: 0,
            createSubTask: 1,
            removeTask: 2,
            removeDependency: 3,
            taskInformation: 4,
            taskAddContextItem: 5,
            undo: 6,
            redo: 7,
            zoomIn: 8,
            zoomOut: 9,
            fullScreen: 10,
            collapseAll: 11,
            expandAll: 12
        };
        var Bar = function() {
            function Bar(element, owner) {
                _classCallCheck(this, Bar);
                this._element = element;
                this._owner = owner;
                this._createControl()
            }
            _createClass(Bar, [{
                key: "_getItemsCache",
                value: function() {
                    if (!this._cache) {
                        this._cache = {};
                        this._fillCache(this._items)
                    }
                    return this._cache
                }
            }, {
                key: "_fillCache",
                value: function(items) {
                    var _this = this;
                    items.forEach(function(item) {
                        var key = item.commandId;
                        if (void 0 !== key) {
                            if (!_this._cache[key]) {
                                _this._cache[key] = []
                            }
                            _this._cache[key].push(item)
                        }
                        if (item.items) {
                            _this._fillCache(item.items)
                        }
                    })
                }
            }, {
                key: "_getIcon",
                value: function(name) {
                    return "dx-gantt-i dx-gantt-i-" + name
                }
            }, {
                key: "getCommandKeys",
                value: function() {
                    var itemsCache = this._getItemsCache();
                    var result = [];
                    for (var itemKey in itemsCache) {
                        result.push(parseInt(itemKey))
                    }
                    return result
                }
            }, {
                key: "setItemEnabled",
                value: function(key, enabled) {
                    var itemsCache = this._getItemsCache();
                    itemsCache[key].forEach(function(item) {
                        item.disabled = !enabled
                    })
                }
            }, {
                key: "setItemVisible",
                value: function(key, visible) {
                    var itemsCache = this._getItemsCache();
                    itemsCache[key].forEach(function(item) {
                        item.visible = visible
                    })
                }
            }, {
                key: "setItemValue",
                value: function(_key, _value) {}
            }, {
                key: "setEnabled",
                value: function(enabled) {
                    this._menu.option("disabled", !enabled)
                }
            }, {
                key: "updateItemsList",
                value: function() {}
            }, {
                key: "isVisible",
                value: function() {
                    return true
                }
            }, {
                key: "isContextMenu",
                value: function() {
                    return false
                }
            }, {
                key: "completeUpdate",
                value: function() {}
            }]);
            return Bar
        }();
        exports.GanttToolbar = function(_Bar) {
            _inherits(GanttToolbar, _Bar);
            var _super = _createSuper(GanttToolbar);

            function GanttToolbar() {
                _classCallCheck(this, GanttToolbar);
                return _super.apply(this, arguments)
            }
            _createClass(GanttToolbar, [{
                key: "_createControl",
                value: function() {
                    var _this2 = this;
                    this._menu = this._owner._createComponent(this._element, _toolbar2.default, {
                        onItemClick: function(e) {
                            var commandId = e.itemData.commandId;
                            if (void 0 !== commandId) {
                                _this2._owner._executeCoreCommand(e.itemData.commandId)
                            }
                        }
                    })
                }
            }, {
                key: "createItems",
                value: function(items) {
                    var _this3 = this;
                    this._cache = null;
                    this._items = items.map(function(item) {
                        if ("string" === typeof item) {
                            return _this3._createItemByText(item)
                        } else {
                            if (item.name) {
                                return (0, _extend.extend)(_this3._createItemByText(item.name), item)
                            } else {
                                return (0, _extend.extend)(_this3._getDefaultItemOptions(), item)
                            }
                        }
                    });
                    this._menu.option("items", this._items)
                }
            }, {
                key: "_createItemByText",
                value: function(text) {
                    switch (text.toLowerCase()) {
                        case "separator":
                            return this._createSeparator();
                        case "undo":
                            return this._createDefaultItem(COMMANDS.undo, _message2.default.format("dxGantt-undo"), this._getIcon("undo"));
                        case "redo":
                            return this._createDefaultItem(COMMANDS.redo, _message2.default.format("dxGantt-redo"), this._getIcon("redo"));
                        case "expandall":
                            return this._createDefaultItem(COMMANDS.expandAll, _message2.default.format("dxGantt-expandAll"), this._getIcon("expand"));
                        case "collapseall":
                            return this._createDefaultItem(COMMANDS.collapseAll, _message2.default.format("dxGantt-collapseAll"), this._getIcon("collapse"));
                        case "addtask":
                            return this._createDefaultItem(COMMANDS.createTask, _message2.default.format("dxGantt-addNewTask"), this._getIcon("add"));
                        case "deletetask":
                            return this._createDefaultItem(COMMANDS.removeTask, _message2.default.format("dxGantt-deleteSelectedTask"), this._getIcon("delete"));
                        case "zoomin":
                            return this._createDefaultItem(COMMANDS.zoomIn, _message2.default.format("dxGantt-zoomIn"), this._getIcon("zoom-in"));
                        case "zoomout":
                            return this._createDefaultItem(COMMANDS.zoomOut, _message2.default.format("dxGantt-zoomOut"), this._getIcon("zoom-out"));
                        case "fullscreen":
                            return this._createDefaultItem(COMMANDS.fullScreen, _message2.default.format("dxGantt-fullScreen"), this._getIcon("full-screen"));
                        default:
                            return (0, _extend.extend)(this._getDefaultItemOptions(), {
                                options: {
                                    text: text
                                }
                            })
                    }
                }
            }, {
                key: "_createDefaultItem",
                value: function(commandId, hint, icon) {
                    return {
                        commandId: commandId,
                        disabled: true,
                        widget: "dxButton",
                        location: "before",
                        options: {
                            icon: icon,
                            stylingMode: "text",
                            hint: hint
                        }
                    }
                }
            }, {
                key: "_createSeparator",
                value: function() {
                    return {
                        location: "before",
                        template: function(_data, _index, element) {
                            (0, _renderer2.default)(element).addClass(TOOLBAR_SEPARATOR_CLASS)
                        }
                    }
                }
            }, {
                key: "_getDefaultItemOptions",
                value: function() {
                    return {
                        location: "before",
                        widget: "dxButton"
                    }
                }
            }, {
                key: "completeUpdate",
                value: function() {
                    this._menu.option("items", this._items)
                }
            }]);
            return GanttToolbar
        }(Bar);
        exports.GanttContextMenuBar = function(_Bar2) {
            _inherits(GanttContextMenuBar, _Bar2);
            var _super2 = _createSuper(GanttContextMenuBar);

            function GanttContextMenuBar() {
                _classCallCheck(this, GanttContextMenuBar);
                return _super2.apply(this, arguments)
            }
            _createClass(GanttContextMenuBar, [{
                key: "_createControl",
                value: function() {
                    var _this4 = this;
                    this._createItems();
                    this._menu = this._owner._createComponent(this._element, _context_menu2.default, {
                        showEvent: void 0,
                        items: this._items,
                        onItemClick: function(e) {
                            var commandId = e.itemData.commandId;
                            if (void 0 !== commandId) {
                                _this4._owner._executeCoreCommand(e.itemData.commandId)
                            }
                        }
                    })
                }
            }, {
                key: "_createItems",
                value: function() {
                    this._items = [{
                        text: _message2.default.format("dxGantt-dialogButtonAdd"),
                        commandId: COMMANDS.taskAddContextItem,
                        icon: this._getIcon("add"),
                        items: [{
                            text: _message2.default.format("dxGantt-contextMenuNewTask"),
                            commandId: COMMANDS.createTask,
                            icon: this._getIcon("add-task")
                        }, {
                            text: _message2.default.format("dxGantt-contextMenuNewSubtask"),
                            commandId: COMMANDS.createSubTask,
                            icon: this._getIcon("add-sub-task")
                        }]
                    }, {
                        text: _message2.default.format("dxGantt-dialogTaskDetailsTitle") + "...",
                        commandId: COMMANDS.taskInformation,
                        icon: this._getIcon("task-details")
                    }, {
                        text: _message2.default.format("dxGantt-contextMenuDeleteTask"),
                        commandId: COMMANDS.removeTask,
                        icon: this._getIcon("delete")
                    }, {
                        text: _message2.default.format("dxGantt-contextMenuDeleteDependency"),
                        commandId: COMMANDS.removeDependency,
                        icon: this._getIcon("delete-dependency")
                    }]
                }
            }, {
                key: "show",
                value: function(point) {
                    this._menu.option("items", this._items);
                    this._menu.option("position.offset", {
                        x: point.x,
                        y: point.y
                    });
                    this._menu.show()
                }
            }, {
                key: "isContextMenu",
                value: function() {
                    return true
                }
            }]);
            return GanttContextMenuBar
        }(Bar)
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.data.option.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _component = __webpack_require__( /*! ../../core/component */ 115);
        var _component2 = _interopRequireDefault(_component);
        var _data_helper = __webpack_require__( /*! ../../data_helper */ 82);
        var _data_helper2 = _interopRequireDefault(_data_helper);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }
        var DataOption = function(_Component) {
            _inherits(DataOption, _Component);
            var _super = _createSuper(DataOption);

            function DataOption(optionName, loadPanel, dataSourceChangedCallback) {
                var _this;
                _classCallCheck(this, DataOption);
                _this = _super.call(this);
                _this._optionName = optionName;
                _this._loadPanel = loadPanel;
                _this._dataSourceChangedCallback = dataSourceChangedCallback;
                return _this
            }
            _createClass(DataOption, [{
                key: "insert",
                value: function(data, callback, errorCallback) {
                    var _this2 = this;
                    this._showLoadPanel();
                    this._getStore().insert(data).done(function(response) {
                        if (callback) {
                            callback(response)
                        }
                        _this2._hideLoadPanel()
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                        _this2._hideLoadPanel()
                    })
                }
            }, {
                key: "update",
                value: function(key, data, callback, errorCallback) {
                    var _this3 = this;
                    this._showLoadPanel();
                    this._getStore().update(key, data).done(function(data, key) {
                        if (callback) {
                            callback(data, key)
                        }
                        _this3._hideLoadPanel()
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                        _this3._hideLoadPanel()
                    })
                }
            }, {
                key: "remove",
                value: function(key, callback, errorCallback) {
                    var _this4 = this;
                    this._showLoadPanel();
                    this._getStore().remove(key).done(function(key) {
                        if (callback) {
                            callback(key)
                        }
                        _this4._hideLoadPanel()
                    }).fail(function(error) {
                        if (errorCallback) {
                            errorCallback(error)
                        }
                        _this4._hideLoadPanel()
                    })
                }
            }, {
                key: "_dataSourceChangedHandler",
                value: function(newItems, e) {
                    this._dataSourceChangedCallback(this._optionName, newItems)
                }
            }, {
                key: "_dataSourceOptions",
                value: function() {
                    return {
                        paginate: false
                    }
                }
            }, {
                key: "_dataSourceLoadingChangedHandler",
                value: function(isLoading) {
                    if (isLoading && !this._dataSource.isLoaded()) {
                        this._showLoadPanel()
                    } else {
                        this._hideLoadPanel()
                    }
                }
            }, {
                key: "_showLoadPanel",
                value: function() {
                    this._loadPanel.show()
                }
            }, {
                key: "_hideLoadPanel",
                value: function() {
                    this._loadPanel.hide()
                }
            }, {
                key: "_getStore",
                value: function() {
                    return this._dataSource.store()
                }
            }, {
                key: "_getItems",
                value: function() {
                    return this._getStore()._array || this._dataSource.items()
                }
            }]);
            return DataOption
        }(_component2.default);
        DataOption.include(_data_helper2.default);
        module.exports = DataOption
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/gantt/ui.gantt.dialogs.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        exports.GanttDialog = void 0;
        var _popup = __webpack_require__( /*! ../popup */ 44);
        var _popup2 = _interopRequireDefault(_popup);
        var _form = __webpack_require__( /*! ../form */ 144);
        var _form2 = _interopRequireDefault(_form);
        __webpack_require__( /*! ../tag_box */ 244);
        var _message = __webpack_require__( /*! ../../localization/message */ 10);
        var _message2 = _interopRequireDefault(_message);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }

        function _typeof(obj) {
            "@babel/helpers - typeof";
            if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
                _typeof = function(obj) {
                    return typeof obj
                }
            } else {
                _typeof = function(obj) {
                    return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
                }
            }
            return _typeof(obj)
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function")
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                _setPrototypeOf(subClass, superClass)
            }
        }

        function _setPrototypeOf(o, p) {
            _setPrototypeOf = Object.setPrototypeOf || function(o, p) {
                o.__proto__ = p;
                return o
            };
            return _setPrototypeOf(o, p)
        }

        function _createSuper(Derived) {
            var hasNativeReflectConstruct = _isNativeReflectConstruct();
            return function() {
                var result, Super = _getPrototypeOf(Derived);
                if (hasNativeReflectConstruct) {
                    var NewTarget = _getPrototypeOf(this).constructor;
                    result = Reflect.construct(Super, arguments, NewTarget)
                } else {
                    result = Super.apply(this, arguments)
                }
                return _possibleConstructorReturn(this, result)
            }
        }

        function _possibleConstructorReturn(self, call) {
            if (call && ("object" === _typeof(call) || "function" === typeof call)) {
                return call
            }
            return _assertThisInitialized(self)
        }

        function _assertThisInitialized(self) {
            if (void 0 === self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return self
        }

        function _isNativeReflectConstruct() {
            if ("undefined" === typeof Reflect || !Reflect.construct) {
                return false
            }
            if (Reflect.construct.sham) {
                return false
            }
            if ("function" === typeof Proxy) {
                return true
            }
            try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true
            } catch (e) {
                return false
            }
        }

        function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(o) {
                return o.__proto__ || Object.getPrototypeOf(o)
            };
            return _getPrototypeOf(o)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }

        function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) {
                    descriptor.writable = true
                }
                Object.defineProperty(target, descriptor.key, descriptor)
            }
        }

        function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) {
                _defineProperties(Constructor.prototype, protoProps)
            }
            if (staticProps) {
                _defineProperties(Constructor, staticProps)
            }
            return Constructor
        }
        exports.GanttDialog = function() {
            function GanttDialog(owner, $element) {
                _classCallCheck(this, GanttDialog);
                this._popupInstance = owner._createComponent($element, _popup2.default);
                this.infoMap = {
                    TaskEdit: TaskEditDialogInfo,
                    Resources: ResourcesEditDialogInfo,
                    Confirmation: ConfirmDialogInfo,
                    ConstraintViolation: ConstraintViolationDialogInfo
                }
            }
            _createClass(GanttDialog, [{
                key: "_apply",
                value: function() {
                    var result = this._dialogInfo.getResult();
                    this._callback(result);
                    this.hide()
                }
            }, {
                key: "show",
                value: function(name, parameters, callback, afterClosing, editingOptions) {
                    this._callback = callback;
                    this._afterClosing = afterClosing;
                    if (!this.infoMap[name]) {
                        return
                    }
                    this._dialogInfo = new this.infoMap[name](parameters, this._apply.bind(this), this.hide.bind(this), editingOptions);
                    this._popupInstance.option({
                        showTitle: !!this._dialogInfo.getTitle(),
                        title: this._dialogInfo.getTitle(),
                        toolbarItems: this._dialogInfo.getToolbarItems(),
                        maxWidth: this._dialogInfo.getMaxWidth(),
                        height: this._dialogInfo.getHeight(),
                        contentTemplate: this._dialogInfo.getContentTemplate()
                    });
                    this._popupInstance.show()
                }
            }, {
                key: "hide",
                value: function() {
                    this._popupInstance.hide();
                    if (this._afterClosing) {
                        this._afterClosing()
                    }
                }
            }]);
            return GanttDialog
        }();
        var DialogInfoBase = function() {
            function DialogInfoBase(parameters, applyAction, hideAction, editingOptions) {
                _classCallCheck(this, DialogInfoBase);
                this._parameters = parameters;
                this._applyAction = applyAction;
                this._hideAction = hideAction;
                this._editingOptions = editingOptions
            }
            _createClass(DialogInfoBase, [{
                key: "_getFormItems",
                value: function() {
                    return {}
                }
            }, {
                key: "_updateParameters",
                value: function() {}
            }, {
                key: "_getOkToolbarItem",
                value: function() {
                    return this._getToolbarItem("OK", this._applyAction)
                }
            }, {
                key: "_getCancelToolbarItem",
                value: function() {
                    return this._getToolbarItem("Cancel", this._hideAction)
                }
            }, {
                key: "_getYesToolbarItem",
                value: function() {
                    return this._getToolbarItem("Yes", this._applyAction)
                }
            }, {
                key: "_getNoToolbarItem",
                value: function() {
                    return this._getToolbarItem("No", this._hideAction)
                }
            }, {
                key: "_getToolbarItem",
                value: function(localizationText, action) {
                    return {
                        widget: "dxButton",
                        toolbar: "bottom",
                        options: {
                            text: _message2.default.format(localizationText),
                            onClick: action
                        }
                    }
                }
            }, {
                key: "getTitle",
                value: function() {
                    return ""
                }
            }, {
                key: "getToolbarItems",
                value: function() {
                    return this._editingOptions.enabled ? [this._getOkToolbarItem(), this._getCancelToolbarItem()] : [this._getCancelToolbarItem()]
                }
            }, {
                key: "getMaxWidth",
                value: function() {
                    return 400
                }
            }, {
                key: "getHeight",
                value: function() {
                    return "auto"
                }
            }, {
                key: "getContentTemplate",
                value: function() {
                    var _this = this;
                    return function(content) {
                        _this._form = new _form2.default(content, {
                            formData: _this._parameters,
                            items: _this._getFormItems()
                        });
                        return content
                    }
                }
            }, {
                key: "getResult",
                value: function() {
                    var formData = this._form && this._form.option("formData");
                    this._updateParameters(formData);
                    return this._parameters
                }
            }]);
            return DialogInfoBase
        }();
        var TaskEditDialogInfo = function(_DialogInfoBase) {
            _inherits(TaskEditDialogInfo, _DialogInfoBase);
            var _super = _createSuper(TaskEditDialogInfo);

            function TaskEditDialogInfo() {
                _classCallCheck(this, TaskEditDialogInfo);
                return _super.apply(this, arguments)
            }
            _createClass(TaskEditDialogInfo, [{
                key: "getTitle",
                value: function() {
                    return _message2.default.format("dxGantt-dialogTaskDetailsTitle")
                }
            }, {
                key: "_getFormItems",
                value: function() {
                    var _this2 = this;
                    var readOnly = !this._editingOptions.enabled || !this._editingOptions.allowTaskUpdating;
                    var readOnlyRange = readOnly || !this._parameters.enableRangeEdit;
                    return [{
                        dataField: "title",
                        editorType: "dxTextBox",
                        label: {
                            text: _message2.default.format("dxGantt-dialogTitle")
                        },
                        editorOptions: {
                            readOnly: readOnly
                        }
                    }, {
                        dataField: "start",
                        editorType: "dxDateBox",
                        label: {
                            text: _message2.default.format("dxGantt-dialogStartTitle")
                        },
                        editorOptions: {
                            type: "datetime",
                            width: "100%",
                            readOnly: readOnlyRange
                        }
                    }, {
                        dataField: "end",
                        editorType: "dxDateBox",
                        label: {
                            text: _message2.default.format("dxGantt-dialogEndTitle")
                        },
                        editorOptions: {
                            type: "datetime",
                            width: "100%",
                            readOnly: readOnlyRange
                        }
                    }, {
                        dataField: "progress",
                        editorType: "dxNumberBox",
                        label: {
                            text: _message2.default.format("dxGantt-dialogProgressTitle")
                        },
                        editorOptions: {
                            value: this._parameters.progress / 100,
                            showSpinButtons: true,
                            min: 0,
                            max: 1,
                            format: "#0%",
                            step: .01,
                            readOnly: readOnlyRange
                        }
                    }, {
                        dataField: "assigned.items",
                        editorType: "dxTagBox",
                        label: {
                            text: _message2.default.format("dxGantt-dialogResourcesTitle")
                        },
                        editorOptions: {
                            readOnly: readOnly,
                            dataSource: this._parameters.resources.items,
                            displayExpr: "text",
                            buttons: [{
                                name: "editResources",
                                location: "after",
                                options: {
                                    text: "...",
                                    hint: _message2.default.format("dxGantt-dialogEditResourceListHint"),
                                    onClick: function() {
                                        _this2._parameters.showResourcesDialogCommand.execute()
                                    }
                                }
                            }]
                        }
                    }]
                }
            }, {
                key: "_updateParameters",
                value: function(formData) {
                    this._parameters.title = formData.title;
                    this._parameters.start = formData.start;
                    this._parameters.end = formData.end;
                    this._parameters.progress = 100 * formData.progress;
                    this._parameters.assigned = formData.assigned
                }
            }]);
            return TaskEditDialogInfo
        }(DialogInfoBase);
        var ResourcesEditDialogInfo = function(_DialogInfoBase2) {
            _inherits(ResourcesEditDialogInfo, _DialogInfoBase2);
            var _super2 = _createSuper(ResourcesEditDialogInfo);

            function ResourcesEditDialogInfo() {
                _classCallCheck(this, ResourcesEditDialogInfo);
                return _super2.apply(this, arguments)
            }
            _createClass(ResourcesEditDialogInfo, [{
                key: "getTitle",
                value: function() {
                    return _message2.default.format("dxGantt-dialogResourceManagerTitle")
                }
            }, {
                key: "_getFormItems",
                value: function() {
                    var _this3 = this;
                    return [{
                        label: {
                            visible: false
                        },
                        dataField: "resources.items",
                        editorType: "dxList",
                        editorOptions: {
                            allowItemDeleting: this._editingOptions.enabled && this._editingOptions.allowResourceDeleting,
                            itemDeleteMode: "static",
                            selectionMode: "none",
                            items: this._parameters.resources.items,
                            height: 250,
                            noDataText: _message2.default.format("dxGantt-dialogEditNoResources"),
                            onInitialized: function(e) {
                                _this3.list = e.component
                            },
                            onItemDeleted: function(e) {
                                _this3._parameters.resources.remove(e.itemData)
                            }
                        }
                    }, {
                        label: {
                            visible: false
                        },
                        editorType: "dxTextBox",
                        editorOptions: {
                            readOnly: !this._editingOptions.enabled || !this._editingOptions.allowResourceAdding,
                            onInitialized: function(e) {
                                _this3.textBox = e.component
                            },
                            onInput: function(e) {
                                var addButton = e.component.getButton("addResource");
                                var resourceName = e.component.option("text");
                                addButton.option("disabled", 0 === resourceName.length)
                            },
                            buttons: [{
                                name: "addResource",
                                location: "after",
                                options: {
                                    text: _message2.default.format("dxGantt-dialogButtonAdd"),
                                    disabled: true,
                                    onClick: function(e) {
                                        var newItem = _this3._parameters.resources.createItem();
                                        newItem.text = _this3.textBox.option("text");
                                        _this3._parameters.resources.add(newItem);
                                        _this3.list.option("items", _this3._parameters.resources.items);
                                        _this3.list.scrollToItem(newItem);
                                        _this3.textBox.reset();
                                        e.component.option("disabled", true)
                                    }
                                }
                            }]
                        }
                    }]
                }
            }]);
            return ResourcesEditDialogInfo
        }(DialogInfoBase);
        var ConfirmDialogInfo = function(_DialogInfoBase3) {
            _inherits(ConfirmDialogInfo, _DialogInfoBase3);
            var _super3 = _createSuper(ConfirmDialogInfo);

            function ConfirmDialogInfo() {
                _classCallCheck(this, ConfirmDialogInfo);
                return _super3.apply(this, arguments)
            }
            _createClass(ConfirmDialogInfo, [{
                key: "getContentTemplate",
                value: function() {
                    var _this4 = this;
                    return function(content) {
                        return _this4._getConfirmMessage()
                    }
                }
            }, {
                key: "_getConfirmMessage",
                value: function() {
                    switch (this._parameters.type) {
                        case 0:
                            return _message2.default.format("dxGantt-dialogTaskDeleteConfirmation");
                        case 1:
                            return _message2.default.format("dxGantt-dialogDependencyDeleteConfirmation");
                        case 2:
                            return _message2.default.format("dxGantt-dialogResourcesDeleteConfirmation", this._parameters.message);
                        default:
                            return ""
                    }
                }
            }, {
                key: "getToolbarItems",
                value: function() {
                    return [this._getYesToolbarItem(), this._getNoToolbarItem()]
                }
            }]);
            return ConfirmDialogInfo
        }(DialogInfoBase);
        var ConstraintViolationDialogInfo = function(_DialogInfoBase4) {
            _inherits(ConstraintViolationDialogInfo, _DialogInfoBase4);
            var _super4 = _createSuper(ConstraintViolationDialogInfo);

            function ConstraintViolationDialogInfo() {
                _classCallCheck(this, ConstraintViolationDialogInfo);
                return _super4.apply(this, arguments)
            }
            _createClass(ConstraintViolationDialogInfo, [{
                key: "_getFormItems",
                value: function() {
                    var items = [];
                    items.push({
                        text: _message2.default.format("dxGantt-dialogCancelOperationMessage"),
                        value: 0
                    });
                    items.push({
                        text: _message2.default.format("dxGantt-dialogDeleteDependencyMessage"),
                        value: 1
                    });
                    if (!this._parameters.validationError.critical) {
                        items.push({
                            text: _message2.default.format("dxGantt-dialogMoveTaskAndKeepDependencyMessage"),
                            value: 2
                        })
                    }
                    return [{
                        dataField: "option",
                        label: {
                            text: this._parameters.validationError.critical ? _message2.default.format("dxGantt-dialogConstraintCriticalViolationMessage") : _message2.default.format("dxGantt-dialogConstraintViolationMessage"),
                            location: "top"
                        },
                        editorType: "dxRadioGroup",
                        editorOptions: {
                            items: items,
                            valueExpr: "value",
                            value: 0
                        }
                    }]
                }
            }, {
                key: "getToolbarItems",
                value: function() {
                    return [this._getOkToolbarItem()]
                }
            }, {
                key: "_updateParameters",
                value: function(formData) {
                    this._parameters.option = formData.option
                }
            }]);
            return ConstraintViolationDialogInfo
        }(DialogInfoBase)
    }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    /*!********************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/widgets-base.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 219);
        __webpack_require__( /*! ./data */ 305);
        __webpack_require__( /*! ./file_management */ 902);
        var ui = DevExpress.ui = __webpack_require__( /*! ../../../bundles/modules/ui */ 521);
        ui.themes = __webpack_require__( /*! ../../../ui/themes */ 32);
        ui.setTemplateEngine = __webpack_require__( /*! ../../../core/templates/template_engine_registry */ 165).setTemplateEngine;
        ui.dialog = __webpack_require__( /*! ../../../ui/dialog */ 223);
        ui.notify = __webpack_require__( /*! ../../../ui/notify */ 307);
        ui.repaintFloatingActionButton = __webpack_require__( /*! ../../../ui/speed_dial_action/repaint_floating_action_button */ 523);
        ui.dxActionSheet = __webpack_require__( /*! ../../../ui/action_sheet */ 224);
        ui.dxAutocomplete = __webpack_require__( /*! ../../../ui/autocomplete */ 525);
        ui.dxBox = __webpack_require__( /*! ../../../ui/box */ 197);
        ui.dxButton = __webpack_require__( /*! ../../../ui/button */ 37);
        ui.dxDropDownButton = __webpack_require__( /*! ../../../ui/drop_down_button */ 320);
        ui.dxButtonGroup = __webpack_require__( /*! ../../../ui/button_group */ 233);
        ui.dxCalendar = __webpack_require__( /*! ../../../ui/calendar */ 234);
        ui.dxCheckBox = __webpack_require__( /*! ../../../ui/check_box */ 120);
        ui.dxColorBox = __webpack_require__( /*! ../../../ui/color_box */ 321);
        ui.dxDateBox = __webpack_require__( /*! ../../../ui/date_box */ 198);
        ui.dxDrawer = __webpack_require__( /*! ../../../ui/drawer */ 573);
        ui.dxDeferRendering = __webpack_require__( /*! ../../../ui/defer_rendering */ 577);
        ui.dxDropDownBox = __webpack_require__( /*! ../../../ui/drop_down_box */ 578);
        ui.dxDropDownMenu = __webpack_require__( /*! ../../../ui/drop_down_menu */ 201);
        ui.dxFileUploader = __webpack_require__( /*! ../../../ui/file_uploader */ 237);
        ui.dxForm = __webpack_require__( /*! ../../../ui/form */ 144);
        ui.dxGallery = __webpack_require__( /*! ../../../ui/gallery */ 585);
        ui.dxHtmlEditor = __webpack_require__( /*! ../../../ui/html_editor */ 586);
        ui.dxList = __webpack_require__( /*! ../../../ui/list */ 104);
        ui.dxLoadIndicator = __webpack_require__( /*! ../../../ui/load_indicator */ 72);
        ui.dxLoadPanel = __webpack_require__( /*! ../../../ui/load_panel */ 167);
        ui.dxLookup = __webpack_require__( /*! ../../../ui/lookup */ 610);
        ui.dxMap = __webpack_require__( /*! ../../../ui/map */ 611);
        ui.dxMultiView = __webpack_require__( /*! ../../../ui/multi_view */ 326);
        ui.dxNavBar = __webpack_require__( /*! ../../../ui/nav_bar */ 615);
        ui.dxNumberBox = __webpack_require__( /*! ../../../ui/number_box */ 121);
        ui.dxOverlay = __webpack_require__( /*! ../../../ui/overlay */ 58);
        ui.dxPopover = __webpack_require__( /*! ../../../ui/popover */ 119);
        ui.dxPopup = __webpack_require__( /*! ../../../ui/popup */ 44);
        ui.dxProgressBar = __webpack_require__( /*! ../../../ui/progress_bar */ 238);
        ui.dxRadioGroup = __webpack_require__( /*! ../../../ui/radio_group */ 336);
        ui.dxRangeSlider = __webpack_require__( /*! ../../../ui/range_slider */ 618);
        ui.dxResizable = __webpack_require__( /*! ../../../ui/resizable */ 181);
        ui.dxResponsiveBox = __webpack_require__( /*! ../../../ui/responsive_box */ 325);
        ui.dxScrollView = __webpack_require__( /*! ../../../ui/scroll_view */ 107);
        ui.dxSelectBox = __webpack_require__( /*! ../../../ui/select_box */ 97);
        ui.dxSlider = __webpack_require__( /*! ../../../ui/slider */ 337);
        ui.dxSpeedDialAction = __webpack_require__( /*! ../../../ui/speed_dial_action */ 620);
        ui.dxSwitch = __webpack_require__( /*! ../../../ui/switch */ 340);
        ui.dxTabPanel = __webpack_require__( /*! ../../../ui/tab_panel */ 240);
        ui.dxTabs = __webpack_require__( /*! ../../../ui/tabs */ 203);
        ui.dxTagBox = __webpack_require__( /*! ../../../ui/tag_box */ 244);
        ui.dxTextArea = __webpack_require__( /*! ../../../ui/text_area */ 341);
        ui.dxTextBox = __webpack_require__( /*! ../../../ui/text_box */ 88);
        ui.dxTileView = __webpack_require__( /*! ../../../ui/tile_view */ 622);
        ui.dxToast = __webpack_require__( /*! ../../../ui/toast */ 308);
        ui.dxToolbar = __webpack_require__( /*! ../../../ui/toolbar */ 145);
        ui.dxTooltip = __webpack_require__( /*! ../../../ui/tooltip */ 168);
        ui.dxTrackBar = __webpack_require__( /*! ../../../ui/track_bar */ 239);
        ui.dxDraggable = __webpack_require__( /*! ../../../ui/draggable */ 196);
        ui.dxSortable = __webpack_require__( /*! ../../../ui/sortable */ 230);
        DevExpress.validationEngine = __webpack_require__( /*! ../../../ui/validation_engine */ 92);
        ui.dxValidationSummary = __webpack_require__( /*! ../../../ui/validation_summary */ 241);
        ui.dxValidationGroup = __webpack_require__( /*! ../../../ui/validation_group */ 329);
        ui.dxValidator = __webpack_require__( /*! ../../../ui/validator */ 202);
        __webpack_require__( /*! ../../../ui/html_editor/converters/markdown */ 623);
        ui.CollectionWidget = __webpack_require__( /*! ../../../ui/collection/ui.collection_widget.edit */ 52);
        ui.dxDropDownEditor = __webpack_require__( /*! ../../../ui/drop_down_editor/ui.drop_down_editor */ 178);
        module.exports = ui
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/file_management.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _core = __webpack_require__( /*! ./core */ 219);
        var _core2 = _interopRequireDefault(_core);
        var _file_management = __webpack_require__( /*! ../../../bundles/modules/file_management */ 903);
        var _file_management2 = _interopRequireDefault(_file_management);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        _core2.default.fileManagement = _file_management2.default;
        module.exports = _file_management2.default
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/file_management.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _core = __webpack_require__( /*! ./core */ 155);
        var _core2 = _interopRequireDefault(_core);
        var _file_system_item = __webpack_require__( /*! ../../file_management/file_system_item */ 295);
        var _file_system_item2 = _interopRequireDefault(_file_system_item);
        var _object_provider = __webpack_require__( /*! ../../file_management/object_provider */ 447);
        var _object_provider2 = _interopRequireDefault(_object_provider);
        var _remote_provider = __webpack_require__( /*! ../../file_management/remote_provider */ 448);
        var _remote_provider2 = _interopRequireDefault(_remote_provider);
        var _custom_provider = __webpack_require__( /*! ../../file_management/custom_provider */ 449);
        var _custom_provider2 = _interopRequireDefault(_custom_provider);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        module.exports = _core2.default.fileManagement = _core2.default.fileManagement || {};
        _core2.default.fileManagement.FileSystemItem = _file_system_item2.default;
        _core2.default.fileManagement.ObjectFileSystemProvider = _object_provider2.default;
        _core2.default.fileManagement.RemoteFileSystemProvider = _remote_provider2.default;
        _core2.default.fileManagement.CustomFileSystemProvider = _custom_provider2.default
    }, ,
    /*!*******************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/widgets-web.js ***!
      \*******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var data = __webpack_require__( /*! ./data */ 305);
        var ui = __webpack_require__( /*! ./widgets-base */ 901);
        ui.dxAccordion = __webpack_require__( /*! ../../../ui/accordion */ 342);
        ui.dxContextMenu = __webpack_require__( /*! ../../../ui/context_menu */ 98);
        ui.dxDataGrid = __webpack_require__( /*! ../../../ui/data_grid */ 629);
        ui.dxTreeList = __webpack_require__( /*! ../../../ui/tree_list */ 393);
        ui.dxMenu = __webpack_require__( /*! ../../../ui/menu */ 373);
        ui.dxPivotGrid = __webpack_require__( /*! ../../../ui/pivot_grid */ 707);
        ui.dxPivotGridFieldChooser = __webpack_require__( /*! ../../../ui/pivot_grid_field_chooser */ 719);
        data.PivotGridDataSource = __webpack_require__( /*! ../../../ui/pivot_grid/data_source */ 247);
        data.XmlaStore = __webpack_require__( /*! ../../../ui/pivot_grid/xmla_store */ 720);
        ui.dxScheduler = __webpack_require__( /*! ../../../ui/scheduler */ 721);
        ui.dxTreeView = __webpack_require__( /*! ../../../ui/tree_view */ 146);
        ui.dxFilterBuilder = __webpack_require__( /*! ../../../ui/filter_builder */ 380);
        ui.dxFileManager = __webpack_require__( /*! ../../../ui/file_manager */ 755);
        ui.dxDiagram = __webpack_require__( /*! ../../../ui/diagram */ 775);
        ui.dxGantt = __webpack_require__( /*! ../../../ui/gantt */ 793)
    }, , , , , , , ,
    /*!******************************************************!*\
      !*** multi ./artifacts/transpiled/bundles/dx.web.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! c:\Projects\DevExtreme\20.1\BuildLabel\Temp\DevExtreme.v20.1\repo\GitHub\artifacts\transpiled\bundles\dx.web.js */ 914)
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/bundles/dx.web.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./modules/parts/widgets-web */ 905)
    }
]);
